Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whXst-000I34-30 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 19:24:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whXss-0094CG-1O for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 19:24:39 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whXss-0094Bh-00 for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 19:24:38 +0000 Received: from mail-yx1-xb136.google.com ([2607:f8b0:4864:20::b136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whXsp-00000000KbS-3ijz for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 19:24:38 +0000 Received: by mail-yx1-xb136.google.com with SMTP id 956f58d0204a3-6662551100bso220141d50.0 for ; Wed, 08 Jul 2026 12:24:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783538674; cv=none; d=google.com; s=arc-20260327; b=bSBfcaG/NQc0stZG1xyk0g0gG3MPHXvv6HHNHeh6Lk4ghlBo9KBEp6lPNI0OAP8VIk fNhx1HH1kAbc2r0MLtWZY7FanJzkzz3ZREbTJEeHizcMdMvmQa3c4iurdLRmodliVsRz iQLfWbjzCxskUnkJYYvoDl+ZZam2ZP1LVs2iYlygvi/OLHwUz9sowAZS6WN7fNNSL+0M 3ypqT3vbEyOXXJKatZ8joyvrc1tBFbxRHqxQiFjxVFeORWV+D5yACEOM4jbg0wH3o1h8 t4i9spAmKpZs7RoxNxwpOfkwBBW991NyxJGtICpvMYzEzB6c16KzbHazdgz6oHOyW4yN Ov8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=ccKJP+Z2Otm4bOCMkfXE3n8YSzPzMO1w1s9DcAP8b9g=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=m5AYqD/IBgZ8ZyXOfd2pWnMCS9jz4ZTUrwuVTpoyMR5Yauuzj2fZMkXF8xhCOGK4n4 QK0ojLhFeGD/+SUa/I472nXjYWUb0zAiZu2U4+7w5YCp9ilc++4VoQUgifAig3DORFin mMzevQL2Lv5wXffXpKVXSQwS272qwMxOwg3vGvuOd5pO/4hP9YsCjXZ6TyNbHlKe/HYq YsX8kauJCLrgVLN7jiwaZRar6mWqk0w8y5iziWJfnAvQaiWff/XeByIVm8OQqz9LrpVH HqdJBdHYK0o7zdwPPz68n7eW/H2V1O5yqd8sEnGJ5bat7D3wWiCw0kHZlnvhh/Cr8ZPc OSDQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783538674; x=1784143474; darn=lists.postgresql.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=ccKJP+Z2Otm4bOCMkfXE3n8YSzPzMO1w1s9DcAP8b9g=; b=BLR5K63UYl+PpyAAqSN/xhRi9VVVB8ApVYd+bjOMLFbGTS2yTF6WqTlZ1vXwCJdsMY sbk21W2CNaW0XyD3sBa8xfh39/ZMkblJLyOXAHq+eyxRpf+tXEnnWfXXAlrLgCQNqLo+ Mo7P1/aYgsaLzwbDxQypYkgwu5eHwEewBMZwJfr8xyJUbEsRpRRrbAtRaQ3kOm51mFgr azElHnrFNCk/EDeR1MoUmJh5Z5HAyfN1Hwed8HA4PkLmEQC50K1frgX2a47aOGqaF8oP ubCwNCV9E+0v/kyroWZwskbrEFu8he/0I8pwfuxt61bbY1MTCbbYYf0VpjAwozv0woEa hjzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783538674; x=1784143474; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ccKJP+Z2Otm4bOCMkfXE3n8YSzPzMO1w1s9DcAP8b9g=; b=ffRvxpOKKTl+9gOUCY32tEh2YD8UKrWbZOZU7WktjEpQHeB+ZC3gwKTzfFDu/y/TlK Iqegf+NNi4VIfLHgbqTgfg6j2Gqtqt8dNYbqhS5tk0S8ciYtFeSOpcWr/f3jCiAOu+ca uyhWYkelTWfWkeIMkdco5tBqq43yOeQJscWJrK9BxyIdNFw5qugf6MLNN+MZpvl/uMAi wOVlr3ms4bLd5P7QTM+QJsmD0ktY26p2W8bAzJMOXWo+YLwJzE/vOphsxnOy2P2SnnOF 8M9AoFbGArXfqsxfFGgElT1OAH0JEzTlvaz5oMvgJSd2IH9F6wd1xffTyrdc4zTH1m67 K2pA== X-Gm-Message-State: AOJu0Yy2UzA/PMesLP+UUTuU1PScvWSIIpJxs1ooe6liAhZ4272cS4RM hIdWAWsUjH3ySeuddFG5nQNkbGLBzxlb+3QrCXhR+FsSWec9m96hrRz7ox+O8sVpleHgue4eZkX FWCKjukong2Laa0avedzN89IEh3RTD6YDrLJuOPQ= X-Gm-Gg: AfdE7cmyxVWqx2ZtlPLnZdvU1/L6aW6i4OdAAUeqQO9/MmPGNTgz30HrKjYLMz1SfF8 eKLeOQaN022uS6x3Eo9BRQaPAODpeUMrm2pcHxvDrlwQHgA5oRcStCrtkz97gtyeBE6+Yfi5OqU SWv8Fqopqlym0OPFMHoIInohYNdzJ67JNFOP5t3R+KyThpus+8iMPDnawPzWv5w5IQ7FBIAaY8L TAfw1X9e+n9pA6ui2RWSpHgzhhCGvi7X1q/YaAENTrTf5LQl5f8Nkh+CJ+RSTFbAIdIYgQwYehd PBTx7vbVidnSdbtkE1lq58JT7QkRhb9mEvg= X-Received: by 2002:a05:690e:418b:b0:664:e66e:f955 with SMTP id 956f58d0204a3-6679effc656mr2688725d50.4.1783538674047; Wed, 08 Jul 2026 12:24:34 -0700 (PDT) MIME-Version: 1.0 From: Haibo Yan Date: Wed, 8 Jul 2026 12:24:22 -0700 X-Gm-Features: AVVi8Cc3_b2Of84KebQ_lD3Wz3_pvXmhfm2oOOsFZZL-6xBFrcM8Kf7KOw6S1Qo Message-ID: Subject: [PATCH] ecpg: use memcpy in a few length-based copies To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001c5b7d06561e75fd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001c5b7d06561e75fd Content-Type: text/plain; charset="UTF-8" Hi hackers, I noticed a few places in ecpg that use strncpy() even though the code already knows how many bytes to copy. For example, some paths copy N bytes into a temporary buffer and then add the terminating NUL explicitly. There is also one small substring copy in pgtypeslib/datetime.c. memcpy() seems a better fit for those cases. I did not try to replace all strncpy() calls in ecpg. Some of them still need the usual strncpy() behavior when the source string may be shorter than the destination. The patch also adds a small regression test for fixed-size char[] and VARCHAR output around the exact-fit/truncation boundary. Thanks, Haibo --0000000000001c5b7d06561e75fd Content-Type: application/octet-stream; name="0001-ecpg-use-memcpy-for-selected-length-based-buffer-cop.patch" Content-Disposition: attachment; filename="0001-ecpg-use-memcpy-for-selected-length-based-buffer-cop.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrcgqr730 RnJvbSA5YjVlNmFkNmY1ZWI2MjY5M2Y2NGRjOGVjZWU0ZTRkZWMxMTgwMTUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYWlibyBZYW4gPGhhaWJvLnlhbkBhcHBsZS5jb20+CkRhdGU6 IFdlZCwgOCBKdWwgMjAyNiAxMDowMzoxMyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGVjcGc6IHVz ZSBtZW1jcHkgZm9yIHNlbGVjdGVkIGxlbmd0aC1iYXNlZCBidWZmZXIgY29waWVzCgpTZXZlcmFs IEVDUEcgY29kZSBwYXRocyB1c2VkIHN0cm5jcHkoKSBldmVuIHRob3VnaCB0aGUgc3Vycm91bmRp bmcgY29kZQpkb2VzIG5vdCByZWx5IG9uIHN0cm5jcHkoKSdzIHplcm8tcGFkZGluZyBiZWhhdmlv ci4gIEluIHRoZSBjaGFuZ2VkIHNpdGVzLAp0aGUgY29weSBsZW5ndGggaXMgYWxyZWFkeSBib3Vu ZGVkIGV4cGxpY2l0bHksIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgZWl0aGVyCmEgdGVtcG9yYXJ5 IGJ1ZmZlciB0aGF0IGlzIGV4cGxpY2l0bHkgTlVMLXRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgYWZ0 ZXJ3YXJkcywKYSBjb3VudGVkIEVDUEcgaG9zdC12YXJpYWJsZSBidWZmZXIsIG9yIGFuIGludGVy bmFsIHN1YnN0cmluZy1jb3B5IHRhcmdldC4KClVzaW5nIHN0cm5jcHkoKSBpbiBzdWNoIGNhc2Vz IGlzIG1pc2xlYWRpbmcgYmVjYXVzZSBpdCBoYXMgZml4ZWQtd2lkdGggc3RyaW5nCnNlbWFudGlj czogaXQgc3RvcHMgYXQgdGhlIGZpcnN0IE5VTCBieXRlIGluIHRoZSBzb3VyY2UgYW5kIHBhZHMg dGhlCnJlbWFpbmluZyBkZXN0aW5hdGlvbiBieXRlcyB3aXRoIE5VTHMuICBGb3IgdGhlIGNoYW5n ZWQgY2FsbCBzaXRlcywgdGhhdApwYWRkaW5nIGlzIG5vdCBuZWVkZWQgYW5kIHRoZSBjb3BpZWQg cmFuZ2UgaXMgYWxyZWFkeSBrbm93biB0byBiZSBpbiBib3VuZHMuClVzZSBtZW1jcHkoKSB0byBt YWtlIHRoZSBsZW5ndGgtYmFzZWQgY29weSBleHBsaWNpdCB3aGlsZSBwcmVzZXJ2aW5nIHRoZQpl eGlzdGluZyBleHBsaWNpdCBOVUwgdGVybWluYXRpb24gYW5kIHRydW5jYXRpb24gYmVoYXZpb3Iu CgpTb21lIG90aGVyIHN0cm5jcHkoKSBjYWxscyBpbiBFQ1BHIGFyZSBpbnRlbnRpb25hbGx5IGxl ZnQgdW5jaGFuZ2VkIGJlY2F1c2UKdGhleSBtYXkgY29weSBmcm9tIHNob3J0ZXIgc291cmNlIHN0 cmluZ3MgaW50byBmaXhlZC1zaXplIGRlc3RpbmF0aW9ucywgd2hlcmUKYSBuYWl2ZSBtZW1jcHko KSB3b3VsZCByZWFkIHBhc3QgdGhlIHNvdXJjZSBOVUwgb3Igd291bGQgZmFpbCB0byBwcmVzZXJ2 ZQpwYWRkaW5nIGJlaGF2aW9yLgoKQSByZWdyZXNzaW9uIHRlc3QgKHNxbC9jaGFydHJ1bmMpIGlz IGFkZGVkIHRvIGxvY2sgZG93biB0aGUgZml4ZWQtc2l6ZSBjaGFyW10KYW5kIFZBUkNIQVIgb3V0 cHV0IGJlaGF2aW9yIGF0IHRoZSBidWZmZXIgYm91bmRhcnkgKHNob3J0ZXIgdGhhbiBidWZmZXIs CmV4YWN0IGZpdCwgYW5kIHRydW5jYXRpb24pLCBpbmNsdWRpbmcgdGhlIHRydW5jYXRpb24gaW5k aWNhdG9yIGFuZApzcWxjYS5zcWx3YXJuIGhhbmRsaW5nLgoKVGhpcyBpcyBhIGNsZWFudXAgaW50 ZW5kZWQgdG8gY2xhcmlmeSB0aGUgYnVmZmVyLWNvcHkgc2VtYW50aWNzOyBpdCBzaG91bGQKbm90 IGNoYW5nZSB1c2VyLXZpc2libGUgRUNQRyBiZWhhdmlvci4KLS0tCiBzcmMvaW50ZXJmYWNlcy9l Y3BnL2VjcGdsaWIvZGF0YS5jICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbnRlcmZhY2VzL2Vj cGcvZWNwZ2xpYi9leGVjdXRlLmMgICAgICAgICB8ICAgNiArLQogc3JjL2ludGVyZmFjZXMvZWNw Zy9wZ3R5cGVzbGliL2RhdGV0aW1lLmMgICAgIHwgICA0ICstCiBzcmMvaW50ZXJmYWNlcy9lY3Bn L3Rlc3QvZWNwZ19zY2hlZHVsZSAgICAgICAgfCAgIDEgKwogLi4uL2VjcGcvdGVzdC9leHBlY3Rl ZC9zcWwtY2hhcnRydW5jLmMgICAgICAgIHwgMjIwICsrKysrKysrKysrKysrKysrKwogLi4uL2Vj cGcvdGVzdC9leHBlY3RlZC9zcWwtY2hhcnRydW5jLnN0ZGVyciAgIHwgICAwCiAuLi4vZWNwZy90 ZXN0L2V4cGVjdGVkL3NxbC1jaGFydHJ1bmMuc3Rkb3V0ICAgfCAgIDMgKwogc3JjL2ludGVyZmFj ZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKIHNyYy9pbnRlcmZhY2Vz L2VjcGcvdGVzdC9zcWwvY2hhcnRydW5jLnBnYyAgICB8ICA1MyArKysrKwogc3JjL2ludGVyZmFj ZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKIDEwIGZpbGVzIGNoYW5n ZWQsIDI4NyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtY2hhcnRydW5jLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNoYXJ0 cnVuYy5zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qv ZXhwZWN0ZWQvc3FsLWNoYXJ0cnVuYy5zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50 ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL2NoYXJ0cnVuYy5wZ2MKCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9lY3BnL2VjcGdsaWIvZGF0YS5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3BnbGli L2RhdGEuYwppbmRleCBkNWQ0MGY3YjY1NC4uYjcyNjM3MzVjYTkgMTAwNjQ0Ci0tLSBhL3NyYy9p bnRlcmZhY2VzL2VjcGcvZWNwZ2xpYi9kYXRhLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9l Y3BnbGliL2RhdGEuYwpAQCAtNjExLDcgKzYxMSw3IEBAIGVjcGdfZ2V0X2RhdGEoY29uc3QgUEdy ZXN1bHQgKnJlc3VsdHMsIGludCBhY3RfdHVwbGUsIGludCBhY3RfZmllbGQsIGludCBsaW5lbm8s CiAJCQkJCQkJfQogCQkJCQkJCWVsc2UKIAkJCQkJCQl7Ci0JCQkJCQkJCXN0cm5jcHkoc3RyLCBw dmFsLCBzaXplICsgMSk7CisJCQkJCQkJCW1lbWNweShzdHIsIHB2YWwsIHNpemUgKyAxKTsKIAkJ CQkJCQl9CiAJCQkJCQkJLyogZG8gdGhlIHJ0cmltKCkgKi8KIAkJCQkJCQlpZiAodHlwZSA9PSBF Q1BHdF9zdHJpbmcpCkBAIC02MzYsNyArNjM2LDcgQEAgZWNwZ19nZXRfZGF0YShjb25zdCBQR3Jl c3VsdCAqcmVzdWx0cywgaW50IGFjdF90dXBsZSwgaW50IGFjdF9maWVsZCwgaW50IGxpbmVubywK IAkJCQkJCQlpZiAodmFyY2hhcnNpemUgPT0gMCkKIAkJCQkJCQkJY2hhcnNpemUgPSBzaXplICsg MTsKIAotCQkJCQkJCXN0cm5jcHkoc3RyLCBwdmFsLCBjaGFyc2l6ZSk7CisJCQkJCQkJbWVtY3B5 KHN0ciwgcHZhbCwgY2hhcnNpemUpOwogCiAJCQkJCQkJLyogY29tcGF0aWJpbGl0eSBtb2RlLCBu dWxsIHRlcm1pbmF0ZSBjaGFyIGFycmF5ICovCiAJCQkJCQkJaWYgKE9SQUNMRV9NT0RFKGNvbXBh dCkgJiYgKGNoYXJzaXplIC0gMSkgPCBzaXplKQpAQCAtNjgzLDcgKzY4Myw3IEBAIGVjcGdfZ2V0 X2RhdGEoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMsIGludCBhY3RfdHVwbGUsIGludCBhY3RfZmll bGQsIGludCBsaW5lbm8sCiAKIAkJCQkJCXZhcmlhYmxlLT5sZW4gPSBzaXplOwogCQkJCQkJaWYg KHZhcmNoYXJzaXplID09IDApCi0JCQkJCQkJc3RybmNweSh2YXJpYWJsZS0+YXJyLCBwdmFsLCB2 YXJpYWJsZS0+bGVuKTsKKwkJCQkJCQltZW1jcHkodmFyaWFibGUtPmFyciwgcHZhbCwgdmFyaWFi bGUtPmxlbik7CiAJCQkJCQllbHNlCiAJCQkJCQl7CiAJCQkJCQkJc3RybmNweSh2YXJpYWJsZS0+ YXJyLCBwdmFsLCB2YXJjaGFyc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3Bn L2VjcGdsaWIvZXhlY3V0ZS5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3BnbGliL2V4ZWN1dGUu YwppbmRleCAwMjM4MGRhZmQ5ZC4uOWMwNWE0NjViOGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZh Y2VzL2VjcGcvZWNwZ2xpYi9leGVjdXRlLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3Bn bGliL2V4ZWN1dGUuYwpAQCAtNzkzLDcgKzc5Myw3IEBAIGVjcGdfc3RvcmVfaW5wdXQoY29uc3Qg aW50IGxpbmVubywgY29uc3QgYm9vbCBmb3JjZV9pbmRpY2F0b3IsIGNvbnN0IHN0cnVjdCB2YXJp CiAJCQkJCWlmICghKG5ld2NvcHkgPSBlY3BnX2FsbG9jKHNsZW4gKyAxLCBsaW5lbm8pKSkKIAkJ CQkJCXJldHVybiBmYWxzZTsKIAotCQkJCQlzdHJuY3B5KG5ld2NvcHksIChjaGFyICopIHZhci0+ dmFsdWUsIHNsZW4pOworCQkJCQltZW1jcHkobmV3Y29weSwgKGNoYXIgKikgdmFyLT52YWx1ZSwg c2xlbik7CiAJCQkJCW5ld2NvcHlbc2xlbl0gPSAnXDAnOwogCiAJCQkJCW1hbGxvY2VkdmFsID0g cXVvdGVfcG9zdGdyZXMobmV3Y29weSwgcXVvdGUsIGxpbmVubyk7CkBAIC04MTQsNyArODE0LDcg QEAgZWNwZ19zdG9yZV9pbnB1dChjb25zdCBpbnQgbGluZW5vLCBjb25zdCBib29sIGZvcmNlX2lu ZGljYXRvciwgY29uc3Qgc3RydWN0IHZhcmkKIAkJCQkJaWYgKCEobWFsbG9jZWR2YWwgPSBlY3Bn X2FsbG9jKHNsZW4gKyAxLCBsaW5lbm8pKSkKIAkJCQkJCXJldHVybiBmYWxzZTsKIAotCQkJCQlz dHJuY3B5KG1hbGxvY2VkdmFsLCAoY2hhciAqKSB2YXItPnZhbHVlLCBzbGVuKTsKKwkJCQkJbWVt Y3B5KG1hbGxvY2VkdmFsLCAoY2hhciAqKSB2YXItPnZhbHVlLCBzbGVuKTsKIAkJCQkJbWFsbG9j ZWR2YWxbc2xlbl0gPSAnXDAnOwogCiAJCQkJCSp0b2JlaW5zZXJ0ZWRfcCA9IG1hbGxvY2VkdmFs OwpAQCAtODQyLDcgKzg0Miw3IEBAIGVjcGdfc3RvcmVfaW5wdXQoY29uc3QgaW50IGxpbmVubywg Y29uc3QgYm9vbCBmb3JjZV9pbmRpY2F0b3IsIGNvbnN0IHN0cnVjdCB2YXJpCiAJCQkJCWlmICgh KG5ld2NvcHkgPSBlY3BnX2FsbG9jKHZhcmlhYmxlLT5sZW4gKyAxLCBsaW5lbm8pKSkKIAkJCQkJ CXJldHVybiBmYWxzZTsKIAotCQkJCQlzdHJuY3B5KG5ld2NvcHksIHZhcmlhYmxlLT5hcnIsIHZh cmlhYmxlLT5sZW4pOworCQkJCQltZW1jcHkobmV3Y29weSwgdmFyaWFibGUtPmFyciwgdmFyaWFi bGUtPmxlbik7CiAJCQkJCW5ld2NvcHlbdmFyaWFibGUtPmxlbl0gPSAnXDAnOwogCiAJCQkJCW1h bGxvY2VkdmFsID0gcXVvdGVfcG9zdGdyZXMobmV3Y29weSwgcXVvdGUsIGxpbmVubyk7CmRpZmYg LS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3BndHlwZXNsaWIvZGF0ZXRpbWUuYyBiL3NyYy9p bnRlcmZhY2VzL2VjcGcvcGd0eXBlc2xpYi9kYXRldGltZS5jCmluZGV4IGY0MzM0M2I0NTk0Li44 MjM1NmFkYzUzOCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wZ3R5cGVzbGliL2Rh dGV0aW1lLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wZ3R5cGVzbGliL2RhdGV0aW1lLmMK QEAgLTQ4OSw4ICs0ODksOCBAQCBQR1RZUEVTZGF0ZV9kZWZtdF9hc2MoZGF0ZSAqIGQsIGNvbnN0 IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqc3RyKQogCQkJaWYgKGkgPT0gMikKIAkJCQlzdGFydF9w b3MgKz0gZnJhZ19sZW5ndGhbMV07CiAKLQkJCXN0cm5jcHkoc3RyX2NvcHkgKyB0YXJnZXRfcG9z LCBzdHIgKyBzdGFydF9wb3MsCi0JCQkJCWZyYWdfbGVuZ3RoW2ldKTsKKwkJCW1lbWNweShzdHJf Y29weSArIHRhcmdldF9wb3MsIHN0ciArIHN0YXJ0X3BvcywKKwkJCQkgICBmcmFnX2xlbmd0aFtp XSk7CiAJCQl0YXJnZXRfcG9zICs9IGZyYWdfbGVuZ3RoW2ldOwogCQkJaWYgKGkgIT0gMikKIAkJ CXsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlIGIv c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2VjcGdfc2NoZWR1bGUKaW5kZXggZDFmNWQ5NDUyYjcu LjFiYjJlOWYxZjNjIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19z Y2hlZHVsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZQpAQCAt MzUsNiArMzUsNyBAQCB0ZXN0OiBwcmVwcm9jL3doZW5ldmVyX2RvX2NvbnRpbnVlCiB0ZXN0OiBz cWwvYXJyYXkKIHRlc3Q6IHNxbC9iaW5hcnkKIHRlc3Q6IHNxbC9ieXRlYQordGVzdDogc3FsL2No YXJ0cnVuYwogdGVzdDogc3FsL2NvZGUxMDAKIHRlc3Q6IHNxbC9jb3B5c3Rkb3V0CiB0ZXN0OiBz cWwvY3JlYXRldGFibGVhcwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4 cGVjdGVkL3NxbC1jaGFydHJ1bmMuYyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3Rl ZC9zcWwtY2hhcnRydW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjEwMmE1MDJhMmZlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0 L2V4cGVjdGVkL3NxbC1jaGFydHJ1bmMuYwpAQCAtMCwwICsxLDIyMCBAQAorLyogUHJvY2Vzc2Vk IGJ5IGVjcGcgKHJlZ3Jlc3Npb24gbW9kZSkgKi8KKy8qIFRoZXNlIGluY2x1ZGUgZmlsZXMgYXJl IGFkZGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IgKi8KKyNpbmNsdWRlIDxlY3BnbGliLmg+CisjaW5j bHVkZSA8ZWNwZ2Vycm5vLmg+CisjaW5jbHVkZSA8c3FsY2EuaD4KKy8qIEVuZCBvZiBhdXRvbWF0 aWMgaW5jbHVkZSBzZWN0aW9uICovCisjZGVmaW5lIEVDUEdkZWJ1ZyhYLFkpIEVDUEdkZWJ1Zygo WCkrMTAwLChZKSkKKworI2xpbmUgMSAiY2hhcnRydW5jLnBnYyIKKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKyNsaW5lIDEg InNxbGNhLmgiCisjaWZuZGVmIFBPU1RHUkVTX1NRTENBX0gKKyNkZWZpbmUgUE9TVEdSRVNfU1FM Q0FfSAorCisjaWZuZGVmIFBHRExMSU1QT1JUCisjaWYgIGRlZmluZWQoV0lOMzIpIHx8IGRlZmlu ZWQoX19DWUdXSU5fXykKKyNkZWZpbmUgUEdETExJTVBPUlQgX19kZWNsc3BlYyAoZGxsaW1wb3J0 KQorI2Vsc2UKKyNkZWZpbmUgUEdETExJTVBPUlQKKyNlbmRpZgkJCQkJCQkvKiBfX0NZR1dJTl9f ICovCisjZW5kaWYJCQkJCQkJLyogUEdETExJTVBPUlQgKi8KKworI2RlZmluZSBTUUxFUlJNQ19M RU4JMTUwCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKK3N0 cnVjdCBzcWxjYV90Cit7CisJY2hhcgkJc3FsY2FpZFs4XTsKKwlsb25nCQlzcWxhYmM7CisJbG9u ZwkJc3FsY29kZTsKKwlzdHJ1Y3QKKwl7CisJCWludAkJCXNxbGVycm1sOworCQljaGFyCQlzcWxl cnJtY1tTUUxFUlJNQ19MRU5dOworCX0JCQlzcWxlcnJtOworCWNoYXIJCXNxbGVycnBbOF07CisJ bG9uZwkJc3FsZXJyZFs2XTsKKwkvKiBFbGVtZW50IDA6IGVtcHR5CQkJCQkJKi8KKwkvKiAxOiBP SUQgb2YgcHJvY2Vzc2VkIHR1cGxlIGlmIGFwcGxpY2FibGUJCQkqLworCS8qIDI6IG51bWJlciBv ZiByb3dzIHByb2Nlc3NlZAkJCQkqLworCS8qIGFmdGVyIGFuIElOU0VSVCwgVVBEQVRFIG9yCQkJ CSovCisJLyogREVMRVRFIHN0YXRlbWVudAkJCQkJKi8KKwkvKiAzOiBlbXB0eQkJCQkJCSovCisJ LyogNDogZW1wdHkJCQkJCQkqLworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwljaGFyCQlzcWx3YXJu WzhdOworCS8qIEVsZW1lbnQgMDogc2V0IHRvICdXJyBpZiBhdCBsZWFzdCBvbmUgb3RoZXIgaXMg J1cnCSovCisJLyogMTogaWYgJ1cnIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgc3RyaW5nCQkqLwor CS8qIHZhbHVlIHdhcyB0cnVuY2F0ZWQgd2hlbiBpdCB3YXMJCQkqLworCS8qIHN0b3JlZCBpbnRv IGEgaG9zdCB2YXJpYWJsZS4gICAgICAgICAgICAgKi8KKworCS8qCisJICogMjogaWYgJ1cnIGEg KGhvcGVmdWxseSkgbm9uLWZhdGFsIG5vdGljZSBvY2N1cnJlZAorCSAqLwkvKiAzOiBlbXB0eSAq LworCS8qIDQ6IGVtcHR5CQkJCQkJKi8KKwkvKiA1OiBlbXB0eQkJCQkJCSovCisJLyogNjogZW1w dHkJCQkJCQkqLworCS8qIDc6IGVtcHR5CQkJCQkJKi8KKworCWNoYXIJCXNxbHN0YXRlWzVdOwor fTsKKworc3RydWN0IHNxbGNhX3QgKkVDUEdnZXRfc3FsY2Eodm9pZCk7CisKKyNpZm5kZWYgUE9T VEdSRVNfRUNQR19JTlRFUk5BTAorI2RlZmluZSBzcWxjYSAoKkVDUEdnZXRfc3FsY2EoKSkKKyNl bmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKworI2xpbmUg NSAiY2hhcnRydW5jLnBnYyIKKworCisjbGluZSAxICJyZWdyZXNzaW9uLmgiCisKKworCisKKwor CisjbGluZSA2ICJjaGFydHJ1bmMucGdjIgorCisKKy8qCisgKiBUZXN0IGZpeGVkLXNpemUgY2hh cltdIGFuZCBWQVJDSEFSIG91dHB1dCBhcm91bmQgdGhlIGJ1ZmZlciBib3VuZGFyeSBpbgorICog cmVndWxhciBtb2RlLiAgY2hhcltdIGlzIHByaW50ZWQgd2l0aCBhIHByZWNpc2lvbiBiZWNhdXNl IGV4YWN0LWZpdCBhbmQKKyAqIHRydW5jYXRlZCB2YWx1ZXMgYXJlIG5vdCBOVUwtdGVybWluYXRl ZC4KKyAqLworaW50IG1haW4odm9pZCkKK3sKKwkvKiBleGVjIHNxbCBiZWdpbiBkZWNsYXJlIHNl Y3Rpb24gKi8KKwkJCQkKKwkJCQkKKwkJCQkKKwkJCQkKKwkKKyNsaW5lIDE2ICJjaGFydHJ1bmMu cGdjIgorIGNoYXIgYzEgWyA0IF0gOworIAorI2xpbmUgMTcgImNoYXJ0cnVuYy5wZ2MiCisgIHN0 cnVjdCB2YXJjaGFyXzEgIHsgaW50IGxlbjsgY2hhciBhcnJbIDQgXTsgfSAgdjEgOworIAorI2xp bmUgMTggImNoYXJ0cnVuYy5wZ2MiCisgc2hvcnQgYzFfaW5kIDsKKyAKKyNsaW5lIDE5ICJjaGFy dHJ1bmMucGdjIgorIHNob3J0IHYxX2luZCA7CisvKiBleGVjIHNxbCBlbmQgZGVjbGFyZSBzZWN0 aW9uICovCisjbGluZSAyMCAiY2hhcnRydW5jLnBnYyIKKworCisJeyBFQ1BHY29ubmVjdChfX0xJ TkVfXywgMCwgImVjcGcxX3JlZ3Jlc3Npb24iICwgTlVMTCwgTlVMTCAsIE5VTEwsIDApOyB9Cisj bGluZSAyMiAiY2hhcnRydW5jLnBnYyIKKworCS8qIGV4ZWMgc3FsIHdoZW5ldmVyIHNxbGVycm9y ICBzdG9wIDsgKi8KKyNsaW5lIDIzICJjaGFydHJ1bmMucGdjIgorCisKKwl7IEVDUEdkbyhfX0xJ TkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImNyZWF0ZSB0YWJsZSBlY3BnX2No YXJ0cnVuYyAoIGlkIGludCAsIHZhbCB2YXJjaGFyICggMTAgKSApIiwgRUNQR3RfRU9JVCwgRUNQ R3RfRU9SVCk7CisjbGluZSAyNSAiY2hhcnRydW5jLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUg PCAwKSBleGl0ICgxKTt9CisjbGluZSAyNSAiY2hhcnRydW5jLnBnYyIKKworCXsgRUNQR2RvKF9f TElORV9fLCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiaW5zZXJ0IGludG8gZWNwZ19j aGFydHJ1bmMgdmFsdWVzICggMSAsICdhYmMnICkiLCBFQ1BHdF9FT0lULCBFQ1BHdF9FT1JUKTsK KyNsaW5lIDI2ICJjaGFydHJ1bmMucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIGV4aXQg KDEpO30KKyNsaW5lIDI2ICJjaGFydHJ1bmMucGdjIgorCisJeyBFQ1BHZG8oX19MSU5FX18sIDAs IDEsIE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJpbnNlcnQgaW50byBlY3BnX2NoYXJ0cnVuYyB2 YWx1ZXMgKCAyICwgJ2FiY2QnICkiLCBFQ1BHdF9FT0lULCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDI3 ICJjaGFydHJ1bmMucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIGV4aXQgKDEpO30KKyNs aW5lIDI3ICJjaGFydHJ1bmMucGdjIgorCisJeyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEws IDAsIEVDUEdzdF9ub3JtYWwsICJpbnNlcnQgaW50byBlY3BnX2NoYXJ0cnVuYyB2YWx1ZXMgKCAz ICwgJ2FiY2RlJyApIiwgRUNQR3RfRU9JVCwgRUNQR3RfRU9SVCk7CisjbGluZSAyOCAiY2hhcnRy dW5jLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBleGl0ICgxKTt9CisjbGluZSAyOCAi Y2hhcnRydW5jLnBnYyIKKworCisJLyogZGVjbGFyZSBjdXIgY3Vyc29yIGZvciBzZWxlY3QgdmFs ICwgdmFsIGZyb20gZWNwZ19jaGFydHJ1bmMgb3JkZXIgYnkgaWQgKi8KKyNsaW5lIDMwICJjaGFy dHJ1bmMucGdjIgorCisJeyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdzdF9u b3JtYWwsICJkZWNsYXJlIGN1ciBjdXJzb3IgZm9yIHNlbGVjdCB2YWwgLCB2YWwgZnJvbSBlY3Bn X2NoYXJ0cnVuYyBvcmRlciBieSBpZCIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUg MzEgImNoYXJ0cnVuYy5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgZXhpdCAoMSk7fQor I2xpbmUgMzEgImNoYXJ0cnVuYy5wZ2MiCisKKworCS8qIGV4ZWMgc3FsIHdoZW5ldmVyIG5vdCBm b3VuZCAgYnJlYWsgOyAqLworI2xpbmUgMzMgImNoYXJ0cnVuYy5wZ2MiCisKKwlmb3IgKDs7KQor CXsKKwkJbWVtc2V0KGMxLCAwLCBzaXplb2YoYzEpKTsKKwkJbWVtc2V0KHYxLmFyciwgMCwgc2l6 ZW9mKHYxLmFycikpOworCQl2MS5sZW4gPSAwOworCQljMV9pbmQgPSB2MV9pbmQgPSAwOworCQl7 IEVDUEdkbyhfX0xJTkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImZldGNoIGN1 ciIsIEVDUEd0X0VPSVQsIAorCUVDUEd0X2NoYXIsKGMxKSwobG9uZyk0LChsb25nKTEsKDQpKnNp emVvZihjaGFyKSwgCisJRUNQR3Rfc2hvcnQsJihjMV9pbmQpLChsb25nKTEsKGxvbmcpMSxzaXpl b2Yoc2hvcnQpLCAKKwlFQ1BHdF92YXJjaGFyLCYodjEpLChsb25nKTQsKGxvbmcpMSxzaXplb2Yo c3RydWN0IHZhcmNoYXJfMSksIAorCUVDUEd0X3Nob3J0LCYodjFfaW5kKSwobG9uZykxLChsb25n KTEsc2l6ZW9mKHNob3J0KSwgRUNQR3RfRU9SVCk7CisjbGluZSA0MCAiY2hhcnRydW5jLnBnYyIK KworaWYgKHNxbGNhLnNxbGNvZGUgPT0gRUNQR19OT1RfRk9VTkQpIGJyZWFrOworI2xpbmUgNDAg ImNoYXJ0cnVuYy5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgZXhpdCAoMSk7fQorI2xp bmUgNDAgImNoYXJ0cnVuYy5wZ2MiCisKKwkJcHJpbnRmKCJjMT1cIiUuNHNcIiBjMV9pbmQ9JWQg d2Fybj0lYyB8IHYxLmxlbj0lZCB2MS5hcnI9XCIlLipzXCIgdjFfaW5kPSVkXG4iLAorCQkJICAg YzEsIGMxX2luZCwgKHNxbGNhLnNxbHdhcm5bMV0gPT0gJ1cnKSA/ICdXJyA6ICctJywKKwkJCSAg IHYxLmxlbiwgdjEubGVuLCB2MS5hcnIsIHYxX2luZCk7CisJfQorCisJeyBFQ1BHZG8oX19MSU5F X18sIDAsIDEsIE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJjbG9zZSBjdXIiLCBFQ1BHdF9FT0lU LCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDQ2ICJjaGFydHJ1bmMucGdjIgorCitpZiAoc3FsY2Euc3Fs Y29kZSA8IDApIGV4aXQgKDEpO30KKyNsaW5lIDQ2ICJjaGFydHJ1bmMucGdjIgorCisJeyBFQ1BH ZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdzdF9ub3JtYWwsICJkcm9wIHRhYmxlIGVj cGdfY2hhcnRydW5jIiwgRUNQR3RfRU9JVCwgRUNQR3RfRU9SVCk7CisjbGluZSA0NyAiY2hhcnRy dW5jLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBleGl0ICgxKTt9CisjbGluZSA0NyAi Y2hhcnRydW5jLnBnYyIKKworCXsgRUNQR3RyYW5zKF9fTElORV9fLCBOVUxMLCAiY29tbWl0IHdv cmsiKTsKKyNsaW5lIDQ4ICJjaGFydHJ1bmMucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDAp IGV4aXQgKDEpO30KKyNsaW5lIDQ4ICJjaGFydHJ1bmMucGdjIgorCisKKwl7IEVDUEdkaXNjb25u ZWN0KF9fTElORV9fLCAiQUxMIik7CisjbGluZSA1MCAiY2hhcnRydW5jLnBnYyIKKworaWYgKHNx bGNhLnNxbGNvZGUgPCAwKSBleGl0ICgxKTt9CisjbGluZSA1MCAiY2hhcnRydW5jLnBnYyIKKwor CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhw ZWN0ZWQvc3FsLWNoYXJ0cnVuYy5zdGRlcnIgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhw ZWN0ZWQvc3FsLWNoYXJ0cnVuYy5zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmU2OWRlMjliYjJkCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rl c3QvZXhwZWN0ZWQvc3FsLWNoYXJ0cnVuYy5zdGRvdXQgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rl c3QvZXhwZWN0ZWQvc3FsLWNoYXJ0cnVuYy5zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjM3YWU4NTlhMmNkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVy ZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1jaGFydHJ1bmMuc3Rkb3V0CkBAIC0wLDAgKzEs MyBAQAorYzE9ImFiYyIgYzFfaW5kPTAgd2Fybj0tIHwgdjEubGVuPTMgdjEuYXJyPSJhYmMiIHYx X2luZD0wCitjMT0iYWJjZCIgYzFfaW5kPTAgd2Fybj0tIHwgdjEubGVuPTQgdjEuYXJyPSJhYmNk IiB2MV9pbmQ9MAorYzE9ImFiY2QiIGMxX2luZD01IHdhcm49VyB8IHYxLmxlbj00IHYxLmFycj0i YWJjZCIgdjFfaW5kPTUKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwv TWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCmluZGV4IDUy OTY4NDhjZGE5Li5iNmRhZWM3ZTAzMyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90 ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2Vm aWxlCkBAIC01LDYgKzUsNyBAQCBpbmNsdWRlICQodG9wX3NyY2RpcikvJChzdWJkaXIpLy4uL01h a2VmaWxlLnJlZ3Jlc3MKIAogVEVTVFMgPSBhcnJheSBhcnJheS5jIFwKIAliaW5hcnkgYmluYXJ5 LmMgXAorCWNoYXJ0cnVuYyBjaGFydHJ1bmMuYyBcCiAJY29kZTEwMCBjb2RlMTAwLmMgXAogICAg ICAgICBjb3B5c3Rkb3V0IGNvcHlzdGRvdXQuYyBcCiAJY3JlYXRldGFibGVhcyBjcmVhdGV0YWJs ZWFzLmMgXApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9jaGFydHJ1 bmMucGdjIGIvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9jaGFydHJ1bmMucGdjCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OGRlNGNhN2NhZgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvY2hhcnRydW5jLnBnYwpAQCAt MCwwICsxLDUzIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKworZXhlYyBzcWwgaW5jbHVkZSBzcWxjYTsKK2V4ZWMgc3FsIGlu Y2x1ZGUgLi4vcmVncmVzc2lvbjsKKworLyoKKyAqIFRlc3QgZml4ZWQtc2l6ZSBjaGFyW10gYW5k IFZBUkNIQVIgb3V0cHV0IGFyb3VuZCB0aGUgYnVmZmVyIGJvdW5kYXJ5IGluCisgKiByZWd1bGFy IG1vZGUuICBjaGFyW10gaXMgcHJpbnRlZCB3aXRoIGEgcHJlY2lzaW9uIGJlY2F1c2UgZXhhY3Qt Zml0IGFuZAorICogdHJ1bmNhdGVkIHZhbHVlcyBhcmUgbm90IE5VTC10ZXJtaW5hdGVkLgorICov CitpbnQgbWFpbih2b2lkKQoreworCWV4ZWMgc3FsIGJlZ2luIGRlY2xhcmUgc2VjdGlvbjsKKwkJ Y2hhcgkJYzFbNF07CisJCVZBUkNIQVIJCXYxWzRdOworCQlzaG9ydAkJYzFfaW5kOworCQlzaG9y dAkJdjFfaW5kOworCWV4ZWMgc3FsIGVuZCBkZWNsYXJlIHNlY3Rpb247CisKKwlleGVjIHNxbCBj b25uZWN0IHRvIFJFR1JFU1NEQjE7CisJZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJyb3Igc3RvcDsK KworCWV4ZWMgc3FsIGNyZWF0ZSB0YWJsZSBlY3BnX2NoYXJ0cnVuYyAoaWQgaW50LCB2YWwgdmFy Y2hhcigxMCkpOworCWV4ZWMgc3FsIGluc2VydCBpbnRvIGVjcGdfY2hhcnRydW5jIHZhbHVlcyAo MSwgJ2FiYycpOworCWV4ZWMgc3FsIGluc2VydCBpbnRvIGVjcGdfY2hhcnRydW5jIHZhbHVlcyAo MiwgJ2FiY2QnKTsKKwlleGVjIHNxbCBpbnNlcnQgaW50byBlY3BnX2NoYXJ0cnVuYyB2YWx1ZXMg KDMsICdhYmNkZScpOworCisJZXhlYyBzcWwgZGVjbGFyZSBjdXIgY3Vyc29yIGZvciBzZWxlY3Qg dmFsLCB2YWwgZnJvbSBlY3BnX2NoYXJ0cnVuYyBvcmRlciBieSBpZDsKKwlleGVjIHNxbCBvcGVu IGN1cjsKKworCWV4ZWMgc3FsIHdoZW5ldmVyIG5vdCBmb3VuZCBkbyBicmVhazsKKwlmb3IgKDs7 KQorCXsKKwkJbWVtc2V0KGMxLCAwLCBzaXplb2YoYzEpKTsKKwkJbWVtc2V0KHYxLmFyciwgMCwg c2l6ZW9mKHYxLmFycikpOworCQl2MS5sZW4gPSAwOworCQljMV9pbmQgPSB2MV9pbmQgPSAwOwor CQlleGVjIHNxbCBmZXRjaCBjdXIgaW50byA6YzEgOmMxX2luZCwgOnYxIDp2MV9pbmQ7CisJCXBy aW50ZigiYzE9XCIlLjRzXCIgYzFfaW5kPSVkIHdhcm49JWMgfCB2MS5sZW49JWQgdjEuYXJyPVwi JS4qc1wiIHYxX2luZD0lZFxuIiwKKwkJCSAgIGMxLCBjMV9pbmQsIChzcWxjYS5zcWx3YXJuWzFd ID09ICdXJykgPyAnVycgOiAnLScsCisJCQkgICB2MS5sZW4sIHYxLmxlbiwgdjEuYXJyLCB2MV9p bmQpOworCX0KKworCWV4ZWMgc3FsIGNsb3NlIGN1cjsKKwlleGVjIHNxbCBkcm9wIHRhYmxlIGVj cGdfY2hhcnRydW5jOworCWV4ZWMgc3FsIGNvbW1pdCB3b3JrOworCisJZXhlYyBzcWwgZGlzY29u bmVjdCBhbGw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2Vj cGcvdGVzdC9zcWwvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL21l c29uLmJ1aWxkCmluZGV4IDAwZDdkZWJlODBmLi5hZGI3ZjQ4ZWQ2OCAxMDA2NDQKLS0tIGEvc3Jj L2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3Qvc3FsL21lc29uLmJ1aWxkCkBAIC00LDYgKzQsNyBAQCBwZ2NfZmlsZXMgPSBb CiAgICdhcnJheScsCiAgICdiaW5hcnknLAogICAnYnl0ZWEnLAorICAnY2hhcnRydW5jJywKICAg J2NvZGUxMDAnLAogICAnY29weXN0ZG91dCcsCiAgICdjcmVhdGV0YWJsZWFzJywKLS0gCjIuNTQu MAoK --0000000000001c5b7d06561e75fd--