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.94.2) (envelope-from ) id 1qR9d2-000j7W-6W for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Aug 2023 11:02:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qR9d0-004iYW-GI for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Aug 2023 11:02:54 +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.94.2) (envelope-from ) id 1qR9d0-004iYO-4w for pgsql-hackers@lists.postgresql.org; Wed, 02 Aug 2023 11:02:54 +0000 Received: from mail-yb1-xb2c.google.com ([2607:f8b0:4864:20::b2c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qR9cy-00088C-10 for pgsql-hackers@postgresql.org; Wed, 02 Aug 2023 11:02:53 +0000 Received: by mail-yb1-xb2c.google.com with SMTP id 3f1490d57ef6-c5f98fc4237so5510615276.2 for ; Wed, 02 Aug 2023 04:02:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690974170; x=1691578970; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3eslY2KgJhpf0DrWldO/GzJa7DjSu/0gu21ANmp0vpA=; b=P+4bVM+QwrF/SwneCiMkfDTaH1V3ySAKh/+Qf78YUaBZ1HudnxDDQFsgh+oxUuh4Qq zdtCMqwXROd1LVlCdSw4MysxXhEfyQXopi0wC06pTcjM9kHUxdjRF3ZiX/vM3dIUCr8v v7t00ny3AIDCTk4gYESdIE4HRmRERG4d10oFPMJpP66b2SlDD0+YrlW8Ii7dyvt6e6b3 eZPnOWMn+Z5rvyXO91OULfE0GgOjwRBNmiDyit7DHrubP5uktjogGQzLXt65W7cmnOiZ xjsXBg6st4KQILqEC34sU0AGHON4rdSZUgXfhW6r99M01J5r0nlRQytbbqOHEXK+IsNN uXjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690974170; x=1691578970; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3eslY2KgJhpf0DrWldO/GzJa7DjSu/0gu21ANmp0vpA=; b=BycTH3ETjI5JO9ACh3F8Gv/KQPyDHp4G+X1L+34GEQZCWA7Ikd2e0lFnYoUCfLtIBh HiZ/J2Pp+9I5z5bvayh4Hji98o8lWk51A+0FJv/JvmHqigOsb3K6PhMVzo97iqRStZSh WAaNV5l3pn4XVLtb1n+66pMM6WllIiz6ySBFDEdzWa+EYU+/WRgXsB5gTKYjBzJ5CX/P 9pTfV6ZMfeT/kcPy6xm3NtZ9YQ4AhcGaUCPFiaLi0d7k6HNC7NyAOLxfFbcpo8SNubVr DE59JgHmAKXDN8yEYYHqc8+pTRhg5Q4WH+tWBCfqiGoeYnECarcW6L/oFB7pbjMXKkMW wFSA== X-Gm-Message-State: AOJu0YzoX79dpJFqKQdLYi9EZcwIcIBw+eKCFN/gNQ5kIRalLj13dE8f bnBGSSQh8GiLU9anUPBjc8BhG/5lRsg9FqooLVB/cxhCdDc= X-Google-Smtp-Source: AGHT+IFpajrIons4KrXcLqgEl3RVoxQQ3CAfTklZYjPYTOcVeKn4UbaisqNSonK21gIEeDAsvxChEfKbqukxhR4Pcnw= X-Received: by 2002:a25:5012:0:b0:d3c:13a2:1f1f with SMTP id e18-20020a255012000000b00d3c13a21f1fmr1313702ybb.63.1690974169938; Wed, 02 Aug 2023 04:02:49 -0700 (PDT) MIME-Version: 1.0 References: <3070526.1690896014@sss.pgh.pa.us> In-Reply-To: <3070526.1690896014@sss.pgh.pa.us> From: Richard Guo Date: Wed, 2 Aug 2023 19:02:38 +0800 Message-ID: Subject: Re: Oversight in reparameterize_path_by_child leading to executor crash To: Tom Lane Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000b954750601ee9a1c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b954750601ee9a1c Content-Type: multipart/alternative; boundary="000000000000b954730601ee9a1a" --000000000000b954730601ee9a1a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Aug 1, 2023 at 9:20=E2=80=AFPM Tom Lane wrote: > Richard Guo writes: > > So what I'm thinking is that maybe we can add a new type of path, named > > SampleScanPath, to have the TableSampleClause per path. Then we can > > safely reparameterize the TableSampleClause as needed for each > > SampleScanPath. That's what the attached patch does. > > Alternatively, could we postpone the reparameterization until > createplan.c? Having to build reparameterized expressions we might > not use seems expensive, and it would also contribute to the memory > bloat being complained of in nearby threads. I did think about this option but figured out that it seems beyond the scope of just fixing SampleScan. But if we want to optimize the reparameterization mechanism besides fixing this crash, I think this option is much better. I drafted a patch as attached. Thanks Richard --000000000000b954730601ee9a1a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Tue, Aug 1, 2023 at 9:20=E2=80=AFPM To= m Lane <tgl@sss.pgh.pa.us> w= rote:
Richard Gu= o <guofengli= nux@gmail.com> writes:
> So what I'm thinking is that maybe we can add a new type of path, = named
> SampleScanPath, to have the TableSampleClause per path.=C2=A0 Then we = can
> safely reparameterize the TableSampleClause as needed for each
> SampleScanPath.=C2=A0 That's what the attached patch does.

Alternatively, could we postpone the reparameterization until
createplan.c?=C2=A0 Having to build reparameterized expressions we might not use seems expensive, and it would also contribute to the memory
bloat being complained of in nearby threads.

I did think about this option but figured out that it seems beyond thescope of just fixing SampleScan.=C2=A0 But if we want to optimize the
r= eparameterization mechanism besides fixing this crash, I think this
opti= on is much better.=C2=A0 I drafted a patch as attached.

Thanks
Ri= chard
--000000000000b954730601ee9a1a-- --000000000000b954750601ee9a1c Content-Type: application/octet-stream; name="v2-0001-Postpone-reparameterization-of-paths-until-when-creating-plans.patch" Content-Disposition: attachment; filename="v2-0001-Postpone-reparameterization-of-paths-until-when-creating-plans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lktmcls50 RnJvbSAxZTE5NWM0MDUwMTQxNDAwOTBiMmJlNDk3MzhhMDE3ZWFiYjU5ZGU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAyIEF1ZyAyMDIzIDE2OjA5OjU1ICswODAwClN1YmplY3Q6IFtQQVRDSCB2Ml0g UG9zdHBvbmUgcmVwYXJhbWV0ZXJpemF0aW9uIG9mIHBhdGhzIHVudGlsIHdoZW4gY3JlYXRpbmcK IHBsYW5zCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICAgICAg IHwgNTIgKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jICAgICAgfCAxNyArKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyAgICAgICAgfCA3NyArKysrKysrKysrKysrKysrKystLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmggICAgICAgICAgICAgICAgfCAxMyArKysrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aG5vZGUuaCAgICAgICAgICAgICB8ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGFydGl0aW9uX2pvaW4ub3V0IHwgNjAgKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9wYXJ0aXRpb25fam9pbi5zcWwgICAgICB8IDEyICsrKwogNyBmaWxlcyBjaGFuZ2VkLCAx ODUgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5wYXRoLmMKaW5kZXggNGI1ODkzNmZhNC4uYjVlMjA4Yzc2MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBAIC0zMCwxOSArMzAsNiBAQAogLyogSG9vayBmb3IgcGx1 Z2lucyB0byBnZXQgY29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9p bl9wYXRobGlzdF9ob29rX3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7CiAKLS8q Ci0gKiBQYXRocyBwYXJhbWV0ZXJpemVkIGJ5IHRoZSBwYXJlbnQgY2FuIGJlIGNvbnNpZGVyZWQg dG8gYmUgcGFyYW1ldGVyaXplZCBieQotICogYW55IG9mIGl0cyBjaGlsZC4KLSAqLwotI2RlZmlu ZSBQQVRIX1BBUkFNX0JZX1BBUkVOVChwYXRoLCByZWwpCVwKLQkoKHBhdGgpLT5wYXJhbV9pbmZv ICYmIGJtc19vdmVybGFwKFBBVEhfUkVRX09VVEVSKHBhdGgpLAlcCi0JCQkJCQkJCQkgICAocmVs KS0+dG9wX3BhcmVudF9yZWxpZHMpKQotI2RlZmluZSBQQVRIX1BBUkFNX0JZX1JFTF9TRUxGKHBh dGgsIHJlbCkgIFwKLQkoKHBhdGgpLT5wYXJhbV9pbmZvICYmIGJtc19vdmVybGFwKFBBVEhfUkVR X09VVEVSKHBhdGgpLCAocmVsKS0+cmVsaWRzKSkKLQotI2RlZmluZSBQQVRIX1BBUkFNX0JZX1JF TChwYXRoLCByZWwpCVwKLQkoUEFUSF9QQVJBTV9CWV9SRUxfU0VMRihwYXRoLCByZWwpIHx8IFBB VEhfUEFSQU1fQllfUEFSRU5UKHBhdGgsIHJlbCkpCi0KIHN0YXRpYyB2b2lkIHRyeV9wYXJ0aWFs X21lcmdlam9pbl9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJICAgUmVsT3B0SW5m byAqam9pbnJlbCwKIAkJCQkJCQkJCSAgIFBhdGggKm91dGVyX3BhdGgsCkBAIC03NzgsMjMgKzc2 NSwxNSBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAl7CiAJCS8qCiAJ CSAqIElmIHRoZSBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQsIGl0IGlzIHBhcmFtZXRlcml6 ZWQgYnkgdGhlCi0JCSAqIHRvcG1vc3QgcGFyZW50IG9mIHRoZSBvdXRlciByZWwsIG5vdCB0aGUg b3V0ZXIgcmVsIGl0c2VsZi4gIEZpeAotCQkgKiB0aGF0LgorCQkgKiB0b3Btb3N0IHBhcmVudCBv ZiB0aGUgb3V0ZXIgcmVsLCBub3QgdGhlIG91dGVyIHJlbCBpdHNlbGYuICBXZSB3aWxsCisJCSAq IGZpeCB0aGF0IGluIGNyZWF0ZXBsYW4uYy4gIEZvciBub3cgd2UgbmVlZCB0byBjaGVjayB3aGV0 aGVyIHdlIGNhbgorCQkgKiB0cmFuc2xhdGUgdGhlIGlubmVyIHBhdGgsIGFuZCBpZiBub3QgYXZv aWQgY3JlYXRpbmcgbmVzdGxvb3AgcGF0aC4KIAkJICovCi0JCWlmIChQQVRIX1BBUkFNX0JZX1BB UkVOVChpbm5lcl9wYXRoLCBvdXRlcl9wYXRoLT5wYXJlbnQpKQorCQlpZiAoUEFUSF9QQVJBTV9C WV9QQVJFTlQoaW5uZXJfcGF0aCwgb3V0ZXJfcGF0aC0+cGFyZW50KSAmJgorCQkJIXBhdGhfaXNf cmVwYXJhbWV0ZXJpemFibGVfYnlfY2hpbGQoaW5uZXJfcGF0aCkpCiAJCXsKLQkJCWlubmVyX3Bh dGggPSByZXBhcmFtZXRlcml6ZV9wYXRoX2J5X2NoaWxkKHJvb3QsIGlubmVyX3BhdGgsCi0JCQkJ CQkJCQkJCQkJICBvdXRlcl9wYXRoLT5wYXJlbnQpOwotCi0JCQkvKgotCQkJICogSWYgd2UgY291 bGQgbm90IHRyYW5zbGF0ZSB0aGUgcGF0aCwgd2UgY2FuJ3QgY3JlYXRlIG5lc3QgbG9vcAotCQkJ ICogcGF0aC4KLQkJCSAqLwotCQkJaWYgKCFpbm5lcl9wYXRoKQotCQkJewotCQkJCWJtc19mcmVl KHJlcXVpcmVkX291dGVyKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCQlibXNfZnJlZShyZXF1aXJl ZF9vdXRlcik7CisJCQlyZXR1cm47CiAJCX0KIAogCQlhZGRfcGF0aChqb2lucmVsLCAoUGF0aCAq KQpAQCAtODY5LDIwICs4NDgsMTEgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBJZiB0aGUgaW5uZXIgcGF0aCBpcyBw YXJhbWV0ZXJpemVkLCBpdCBpcyBwYXJhbWV0ZXJpemVkIGJ5IHRoZSB0b3Btb3N0Ci0JICogcGFy ZW50IG9mIHRoZSBvdXRlciByZWwsIG5vdCB0aGUgb3V0ZXIgcmVsIGl0c2VsZi4gIEZpeCB0aGF0 LgorCSAqIFNlZSB0aGUgY29tbWVudHMgaW4gdHJ5X25lc3Rsb29wX3BhdGguCiAJICovCi0JaWYg KFBBVEhfUEFSQU1fQllfUEFSRU5UKGlubmVyX3BhdGgsIG91dGVyX3BhdGgtPnBhcmVudCkpCi0J ewotCQlpbm5lcl9wYXRoID0gcmVwYXJhbWV0ZXJpemVfcGF0aF9ieV9jaGlsZChyb290LCBpbm5l cl9wYXRoLAotCQkJCQkJCQkJCQkJICBvdXRlcl9wYXRoLT5wYXJlbnQpOwotCi0JCS8qCi0JCSAq IElmIHdlIGNvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIHBhdGgsIHdlIGNhbid0IGNyZWF0ZSBuZXN0 IGxvb3AgcGF0aC4KLQkJICovCi0JCWlmICghaW5uZXJfcGF0aCkKLQkJCXJldHVybjsKLQl9CisJ aWYgKFBBVEhfUEFSQU1fQllfUEFSRU5UKGlubmVyX3BhdGgsIG91dGVyX3BhdGgtPnBhcmVudCkg JiYKKwkJIXBhdGhfaXNfcmVwYXJhbWV0ZXJpemFibGVfYnlfY2hpbGQoaW5uZXJfcGF0aCkpCisJ CXJldHVybjsKIAogCS8qIE1pZ2h0IGJlIGdvb2QgZW5vdWdoIHRvIGJlIHdvcnRoIHRyeWluZywg c28gbGV0J3MgdHJ5IGl0LiAqLwogCWFkZF9wYXJ0aWFsX3BhdGgoam9pbnJlbCwgKFBhdGggKikK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCBhZjQ4MTA5MDU4Li40 Y2IzN2Q0MTg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0y OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhcmFtYXNzaWduLmgiCisj aW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhz LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3BsYW5jYXQuaCIKQEAgLTQzMjcsNiArNDMyOCwyMiBAQCBjcmVhdGVfbmVzdGxvb3BfcGxh bihQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0CSAgICpuZXN0UGFyYW1zOwogCVJlbGlkcwkJc2F2 ZU91dGVyUmVscyA9IHJvb3QtPmN1ck91dGVyUmVsczsKIAorCS8qCisJICogSWYgdGhlIGlubmVy IHBhdGggaXMgcGFyYW1ldGVyaXplZCwgaXQgaXMgcGFyYW1ldGVyaXplZCBieSB0aGUKKwkgKiB0 b3Btb3N0IHBhcmVudCBvZiB0aGUgb3V0ZXIgcmVsLCBub3QgdGhlIG91dGVyIHJlbCBpdHNlbGYu ICBGaXgKKwkgKiB0aGF0LgorCSAqLworCWlmIChQQVRIX1BBUkFNX0JZX1BBUkVOVChiZXN0X3Bh dGgtPmpwYXRoLmlubmVyam9pbnBhdGgsCisJCQkJCQkJIGJlc3RfcGF0aC0+anBhdGgub3V0ZXJq b2lucGF0aC0+cGFyZW50KSkKKwl7CisJCWJlc3RfcGF0aC0+anBhdGguaW5uZXJqb2lucGF0aCA9 CisJCQlyZXBhcmFtZXRlcml6ZV9wYXRoX2J5X2NoaWxkKHJvb3QsCisJCQkJCQkJCQkJIGJlc3Rf cGF0aC0+anBhdGguaW5uZXJqb2lucGF0aCwKKwkJCQkJCQkJCQkgYmVzdF9wYXRoLT5qcGF0aC5v dXRlcmpvaW5wYXRoLT5wYXJlbnQpOworCisJCUFzc2VydChiZXN0X3BhdGgtPmpwYXRoLmlubmVy am9pbnBhdGggIT0gTlVMTCk7CisJfQorCiAJLyogTmVzdExvb3AgY2FuIHByb2plY3QsIHNvIG5v IG5lZWQgdG8gYmUgcGlja3kgYWJvdXQgY2hpbGQgdGxpc3RzICovCiAJb3V0ZXJfcGxhbiA9IGNy ZWF0ZV9wbGFuX3JlY3Vyc2Uocm9vdCwgYmVzdF9wYXRoLT5qcGF0aC5vdXRlcmpvaW5wYXRoLCAw KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggZjEyM2ZjYjQxZS4u MTk3N2VmMTQwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0yNDMw LDYgKzI0MzAsMTYgQEAgY3JlYXRlX25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiB7 CiAJTmVzdFBhdGggICAqcGF0aG5vZGUgPSBtYWtlTm9kZShOZXN0UGF0aCk7CiAJUmVsaWRzCQlp bm5lcl9yZXFfb3V0ZXIgPSBQQVRIX1JFUV9PVVRFUihpbm5lcl9wYXRoKTsKKwlSZWxpZHMJCW91 dGVycmVsaWRzOworCisJLyoKKwkgKiBQYXRocyBhcmUgcGFyYW1ldGVyaXplZCBieSB0b3AtbGV2 ZWwgcGFyZW50cywgc28gcnVuIHBhcmFtZXRlcml6YXRpb24KKwkgKiB0ZXN0cyBvbiB0aGUgcGFy ZW50IHJlbGlkcy4KKwkgKi8KKwlpZiAob3V0ZXJfcGF0aC0+cGFyZW50LT50b3BfcGFyZW50X3Jl bGlkcykKKwkJb3V0ZXJyZWxpZHMgPSBvdXRlcl9wYXRoLT5wYXJlbnQtPnRvcF9wYXJlbnRfcmVs aWRzOworCWVsc2UKKwkJb3V0ZXJyZWxpZHMgPSBvdXRlcl9wYXRoLT5wYXJlbnQtPnJlbGlkczsK IAogCS8qCiAJICogSWYgdGhlIGlubmVyIHBhdGggaXMgcGFyYW1ldGVyaXplZCBieSB0aGUgb3V0 ZXIsIHdlIG11c3QgZHJvcCBhbnkKQEAgLTI0MzksNyArMjQ0OSw3IEBAIGNyZWF0ZV9uZXN0bG9v cF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIGVzdGltYXRlcyBmb3IgdGhpcyBwYXRoLiAg V2UgZGV0ZWN0IHN1Y2ggY2xhdXNlcyBieSBjaGVja2luZyBmb3Igc2VyaWFsCiAJICogbnVtYmVy IG1hdGNoIHRvIGNsYXVzZXMgYWxyZWFkeSBlbmZvcmNlZCBpbiB0aGUgaW5uZXIgcGF0aC4KIAkg Ki8KLQlpZiAoYm1zX292ZXJsYXAoaW5uZXJfcmVxX291dGVyLCBvdXRlcl9wYXRoLT5wYXJlbnQt PnJlbGlkcykpCisJaWYgKGJtc19vdmVybGFwKGlubmVyX3JlcV9vdXRlciwgb3V0ZXJyZWxpZHMp KQogCXsKIAkJQml0bWFwc2V0ICAqZW5mb3JjZWRfc2VyaWFscyA9IGdldF9wYXJhbV9wYXRoX2Ns YXVzZV9zZXJpYWxzKGlubmVyX3BhdGgpOwogCQlMaXN0CSAgICpqY2xhdXNlcyA9IE5JTDsKQEAg LTQwMTksNiArNDAyOSw0MyBAQCByZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290 LCBQYXRoICpwYXRoLAogCXJldHVybiBOVUxMOwogfQogCisvKgorICogcGF0aF9pc19yZXBhcmFt ZXRlcml6YWJsZV9ieV9jaGlsZAorICogCQlHaXZlbiBhIHBhdGggcGFyYW1ldGVyaXplZCBieSB0 aGUgcGFyZW50IG9mIGEgY2hpbGQgcmVsYXRpb24sIGNoZWNrIHRvCisgKiAJCXNlZSBpZiBpdCBj YW4gYmUgdHJhbnNsYXRlZCB0byBiZSBwYXJhbWV0ZXJpemVkIGJ5IGNoaWxkIHJlbGF0aW9uLgor ICoKKyAqIEN1cnJlbnRseSwgb25seSBhIGZldyBwYXRoIHR5cGVzIGFyZSBzdXBwb3J0ZWQgaGVy ZSwgdGhvdWdoIG1vcmUgY291bGQgYmUKKyAqIGFkZGVkIGF0IG5lZWQuCisgKi8KK2Jvb2wKK3Bh dGhfaXNfcmVwYXJhbWV0ZXJpemFibGVfYnlfY2hpbGQoUGF0aCAqcGF0aCkKK3sKKwlzd2l0Y2gg KG5vZGVUYWcocGF0aCkpCisJeworCQljYXNlIFRfUGF0aDoKKwkJY2FzZSBUX0luZGV4UGF0aDoK KwkJY2FzZSBUX0JpdG1hcEhlYXBQYXRoOgorCQljYXNlIFRfQml0bWFwQW5kUGF0aDoKKwkJY2Fz ZSBUX0JpdG1hcE9yUGF0aDoKKwkJY2FzZSBUX0ZvcmVpZ25QYXRoOgorCQljYXNlIFRfQ3VzdG9t UGF0aDoKKwkJY2FzZSBUX05lc3RQYXRoOgorCQljYXNlIFRfTWVyZ2VQYXRoOgorCQljYXNlIFRf SGFzaFBhdGg6CisJCWNhc2UgVF9BcHBlbmRQYXRoOgorCQljYXNlIFRfTWF0ZXJpYWxQYXRoOgor CQljYXNlIFRfTWVtb2l6ZVBhdGg6CisJCWNhc2UgVF9HYXRoZXJQYXRoOgorCQkJcmV0dXJuIHRy dWU7CisJCWRlZmF1bHQ6CisKKwkJCS8qIFdlIGRvbid0IGtub3cgaG93IHRvIHJlcGFyYW1ldGVy aXplIHRoaXMgcGF0aC4gKi8KKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKIC8qCiAgKiByZXBhcmFtZXRlcml6ZV9wYXRoX2J5X2NoaWxkCiAgKiAJCUdpdmVuIGEg cGF0aCBwYXJhbWV0ZXJpemVkIGJ5IHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIGNoaWxkIHJlbGF0 aW9uLApAQCAtNDA0NywxMSArNDA5NCwxMyBAQCByZXBhcmFtZXRlcml6ZV9wYXRoX2J5X2NoaWxk KFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAogCSggKG5ld25vZGUpID0gbWFrZU5vZGUo bm9kZXR5cGUpLCBcCiAJICBtZW1jcHkoKG5ld25vZGUpLCAobm9kZSksIHNpemVvZihub2RldHlw ZSkpICkKIAotI2RlZmluZSBBREpVU1RfQ0hJTERfQVRUUlMobm9kZSkgXAorI2RlZmluZSBBREpV U1RfQ0hJTERfRVhQUlMobm9kZSwgZmllbGR0eXBlKSBcCiAJKChub2RlKSA9IFwKLQkgKExpc3Qg KikgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsKHJvb3QsIChOb2RlICopIChub2Rl KSwgXAotCQkJCQkJCQkJCQkJY2hpbGRfcmVsLCBcCi0JCQkJCQkJCQkJCQljaGlsZF9yZWwtPnRv cF9wYXJlbnQpKQorCSAoZmllbGR0eXBlKSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2 ZWwocm9vdCwgKE5vZGUgKikgKG5vZGUpLCBcCisJCQkJCQkJCQkJCQkgICBjaGlsZF9yZWwsIFwK KwkJCQkJCQkJCQkJCSAgIGNoaWxkX3JlbC0+dG9wX3BhcmVudCkpCisKKyNkZWZpbmUgQURKVVNU X0NISUxEX0FUVFJTKG5vZGUpIEFESlVTVF9DSElMRF9FWFBSUyhub2RlLCBMaXN0ICopCiAKICNk ZWZpbmUgUkVQQVJBTUVURVJJWkVfQ0hJTERfUEFUSChwYXRoKSBcCiBkbyB7IFwKQEAgLTQwOTks NyArNDE0OCwyMyBAQCBkbyB7IFwKIAlzd2l0Y2ggKG5vZGVUYWcocGF0aCkpCiAJewogCQljYXNl IFRfUGF0aDoKLQkJCUZMQVRfQ09QWV9QQVRIKG5ld19wYXRoLCBwYXRoLCBQYXRoKTsKKwkJCXsK KwkJCQlGTEFUX0NPUFlfUEFUSChuZXdfcGF0aCwgcGF0aCwgUGF0aCk7CisKKwkJCQlpZiAocGF0 aC0+cGF0aHR5cGUgPT0gVF9TYW1wbGVTY2FuKQorCQkJCXsKKwkJCQkJSW5kZXgJCXNjYW5fcmVs aWQgPSBwYXRoLT5wYXJlbnQtPnJlbGlkOworCQkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJ CQkJLyogaXQgc2hvdWxkIGJlIGEgYmFzZSByZWwgd2l0aCBhIHRhYmxlc2FtcGxlIGNsYXVzZS4u LiAqLworCQkJCQlBc3NlcnQoc2Nhbl9yZWxpZCA+IDApOworCQkJCQlydGUgPSBwbGFubmVyX3J0 X2ZldGNoKHNjYW5fcmVsaWQsIHJvb3QpOworCQkJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJU RV9SRUxBVElPTik7CisJCQkJCUFzc2VydChydGUtPnRhYmxlc2FtcGxlICE9IE5VTEwpOworCisJ CQkJCUFESlVTVF9DSElMRF9FWFBSUyhydGUtPnRhYmxlc2FtcGxlLCBUYWJsZVNhbXBsZUNsYXVz ZSAqKTsKKwkJCQl9CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIFRfSW5kZXhQYXRoOgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaAppbmRleCBjMTdiNTNmN2FkLi5jNmM2YzllYmE4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaApAQCAtMTYzNyw2ICsxNjM3LDE5IEBAIHR5cGVkZWYgc3RydWN0IFBhdGgKICNkZWZp bmUgUEFUSF9SRVFfT1VURVIocGF0aCkgIFwKIAkoKHBhdGgpLT5wYXJhbV9pbmZvID8gKHBhdGgp LT5wYXJhbV9pbmZvLT5wcGlfcmVxX291dGVyIDogKFJlbGlkcykgTlVMTCkKIAorLyoKKyAqIFBh dGhzIHBhcmFtZXRlcml6ZWQgYnkgdGhlIHBhcmVudCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSBw YXJhbWV0ZXJpemVkIGJ5CisgKiBhbnkgb2YgaXRzIGNoaWxkLgorICovCisjZGVmaW5lIFBBVEhf UEFSQU1fQllfUEFSRU5UKHBhdGgsIHJlbCkJXAorCSgocGF0aCktPnBhcmFtX2luZm8gJiYgYm1z X292ZXJsYXAoUEFUSF9SRVFfT1VURVIocGF0aCksCVwKKwkJCQkJCQkJCSAgIChyZWwpLT50b3Bf cGFyZW50X3JlbGlkcykpCisjZGVmaW5lIFBBVEhfUEFSQU1fQllfUkVMX1NFTEYocGF0aCwgcmVs KSAgXAorCSgocGF0aCktPnBhcmFtX2luZm8gJiYgYm1zX292ZXJsYXAoUEFUSF9SRVFfT1VURVIo cGF0aCksIChyZWwpLT5yZWxpZHMpKQorCisjZGVmaW5lIFBBVEhfUEFSQU1fQllfUkVMKHBhdGgs IHJlbCkJXAorCShQQVRIX1BBUkFNX0JZX1JFTF9TRUxGKHBhdGgsIHJlbCkgfHwgUEFUSF9QQVJB TV9CWV9QQVJFTlQocGF0aCwgcmVsKSkKKwogLyotLS0tLS0tLS0tCiAgKiBJbmRleFBhdGggcmVw cmVzZW50cyBhbiBpbmRleCBzY2FuIG92ZXIgYSBzaW5nbGUgaW5kZXguCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAppbmRleCAwMDFlNzViNWI3Li44NWY1NTYyMDMzIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtMjk1LDYgKzI5NSw3IEBAIGV4dGVybiBQYXRoICpyZXBhcmFtZXRl cml6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpwYXRoLAogCQkJCQkJCQkgZG91Ymxl IGxvb3BfY291bnQpOwogZXh0ZXJuIFBhdGggKnJlcGFyYW1ldGVyaXplX3BhdGhfYnlfY2hpbGQo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQkJCQkJICBSZWxPcHRJbmZvICpj aGlsZF9yZWwpOworZXh0ZXJuIGJvb2wgcGF0aF9pc19yZXBhcmFtZXRlcml6YWJsZV9ieV9jaGls ZChQYXRoICpwYXRoKTsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIHJlbG5vZGUuYwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAppbmRleCA2NTYwZmUyNDE2 Li5hMTFmNzM4NDExIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9q b2luLm91dApAQCAtNTA1LDYgKzUwNSwzMSBAQCBTRUxFQ1QgdDEuYSwgc3MudDJhLCBzcy50MmMg RlJPTSBwcnQxIHQxIExFRlQgSk9JTiBMQVRFUkFMCiAgNTUwIHwgICAgIHwgCiAoMTIgcm93cykK IAorLS0gbGF0ZXJhbCByZWZlcmVuY2UgaW4gc2FtcGxlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gcHJ0MSB0MSBKT0lOIExBVEVSQUwKKwkJCSAgKFNFTEVDVCAqIEZS T00gcHJ0MSB0MiBUQUJMRVNBTVBMRSBTWVNURU0gKHQxLmEpIFJFUEVBVEFCTEUodDEuYikpIHMK KwkJCSAgT04gdDEuYSA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQg TG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDFfcDEgdDFfMQorICAgICAgICAgLT4g IFNhbXBsZSBTY2FuIG9uIHBydDFfcDEgdDJfMQorICAgICAgICAgICAgICAgU2FtcGxpbmc6IHN5 c3RlbSAodDFfMS5hKSBSRVBFQVRBQkxFICh0MV8xLmIpCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICh0MV8xLmEgPSBhKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHJ0MV9wMiB0MV8yCisgICAgICAgICAtPiAgU2FtcGxlIFNjYW4gb24gcHJ0MV9wMiB0Ml8y CisgICAgICAgICAgICAgICBTYW1wbGluZzogc3lzdGVtICh0MV8yLmEpIFJFUEVBVEFCTEUgKHQx XzIuYikKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHQxXzIuYSA9IGEpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX3AzIHQxXzMKKyAgICAgICAgIC0+ ICBTYW1wbGUgU2NhbiBvbiBwcnQxX3AzIHQyXzMKKyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBz eXN0ZW0gKHQxXzMuYSkgUkVQRUFUQUJMRSAodDFfMy5iKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodDFfMy5hID0gYSkKKygxNiByb3dzKQorCiAtLSBidWcgd2l0aCBpbmFkZXF1YXRlIHNvcnQg a2V5IHJlcHJlc2VudGF0aW9uCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2VfYWdncmVnYXRlIFRP IHRydWU7CiBTRVQgZW5hYmxlX2hhc2hqb2luIFRPIGZhbHNlOwpAQCAtMTk0NCw2ICsxOTY5LDQx IEBAIFNFTEVDVCAqIEZST00gcHJ0MV9sIHQxIExFRlQgSk9JTiBMQVRFUkFMCiAgNTUwIHwgMCB8 IDAwMDIgfCAgICAgfCAgICAgIHwgICAgIHwgICAgIHwgICAgICAKICgxMiByb3dzKQogCistLSBw YXJ0aXRpb253aXNlIGpvaW4gd2l0aCBsYXRlcmFsIHJlZmVyZW5jZSBpbiBzYW1wbGUgc2Nhbgor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwcnQxX2wgdDEgSk9JTiBMQVRFUkFM CisJCQkgIChTRUxFQ1QgKiBGUk9NIHBydDFfbCB0MiBUQUJMRVNBTVBMRSBTWVNURU0gKHQxLmEp IFJFUEVBVEFCTEUodDEuYikpIHMgT04KKwkJCSAgdDEuYSA9IHMuYSBBTkQgdDEuYiA9IHMuYiBB TkQgdDEuYyA9IHMuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDFfbF9wMSB0MV8xCisgICAgICAgICAtPiAgU2FtcGxl IFNjYW4gb24gcHJ0MV9sX3AxIHQyXzEKKyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBzeXN0ZW0g KHQxXzEuYSkgUkVQRUFUQUJMRSAodDFfMS5iKQorICAgICAgICAgICAgICAgRmlsdGVyOiAoKHQx XzEuYSA9IGEpIEFORCAodDFfMS5iID0gYikgQU5EICgodDFfMS5jKTo6dGV4dCA9IChjKTo6dGV4 dCkpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2xf cDJfcDEgdDFfMgorICAgICAgICAgLT4gIFNhbXBsZSBTY2FuIG9uIHBydDFfbF9wMl9wMSB0Ml8y CisgICAgICAgICAgICAgICBTYW1wbGluZzogc3lzdGVtICh0MV8yLmEpIFJFUEVBVEFCTEUgKHQx XzIuYikKKyAgICAgICAgICAgICAgIEZpbHRlcjogKCh0MV8yLmEgPSBhKSBBTkQgKHQxXzIuYiA9 IGIpIEFORCAoKHQxXzIuYyk6OnRleHQgPSAoYyk6OnRleHQpKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9sX3AyX3AyIHQxXzMKKyAgICAgICAgIC0+ ICBTYW1wbGUgU2NhbiBvbiBwcnQxX2xfcDJfcDIgdDJfMworICAgICAgICAgICAgICAgU2FtcGxp bmc6IHN5c3RlbSAodDFfMy5hKSBSRVBFQVRBQkxFICh0MV8zLmIpCisgICAgICAgICAgICAgICBG aWx0ZXI6ICgodDFfMy5hID0gYSkgQU5EICh0MV8zLmIgPSBiKSBBTkQgKCh0MV8zLmMpOjp0ZXh0 ID0gKGMpOjp0ZXh0KSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBydDFfbF9wM19wMSB0MV80CisgICAgICAgICAtPiAgU2FtcGxlIFNjYW4gb24gcHJ0MV9s X3AzX3AxIHQyXzQKKyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBzeXN0ZW0gKHQxXzQuYSkgUkVQ RUFUQUJMRSAodDFfNC5iKQorICAgICAgICAgICAgICAgRmlsdGVyOiAoKHQxXzQuYSA9IGEpIEFO RCAodDFfNC5iID0gYikgQU5EICgodDFfNC5jKTo6dGV4dCA9IChjKTo6dGV4dCkpCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQxX2xfcDNfcDIgdDFfNQor ICAgICAgICAgLT4gIFNhbXBsZSBTY2FuIG9uIHBydDFfbF9wM19wMiB0Ml81CisgICAgICAgICAg ICAgICBTYW1wbGluZzogc3lzdGVtICh0MV81LmEpIFJFUEVBVEFCTEUgKHQxXzUuYikKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKCh0MV81LmEgPSBhKSBBTkQgKHQxXzUuYiA9IGIpIEFORCAoKHQx XzUuYyk6OnRleHQgPSAoYyk6OnRleHQpKQorKDI2IHJvd3MpCisKIC0tIGpvaW4gd2l0aCBvbmUg c2lkZSBlbXB0eQogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIs IHQyLmMgRlJPTSAoU0VMRUNUICogRlJPTSBwcnQxX2wgV0hFUkUgYSA9IDEgQU5EIGEgPSAyKSB0 MSBSSUdIVCBKT0lOIHBydDJfbCB0MiBPTiB0MS5hID0gdDIuYiBBTkQgdDEuYiA9IHQyLmEgQU5E IHQxLmMgPSB0Mi5jOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9u X2pvaW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX2pvaW4uc3FsCmluZGV4 IDQ4ZGFmM2FlZTMuLmUyZGFhYjAzZmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BhcnRpdGlvbl9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25f am9pbi5zcWwKQEAgLTEwMCw2ICsxMDAsMTIgQEAgU0VMRUNUIHQxLmEsIHNzLnQyYSwgc3MudDJj IEZST00gcHJ0MSB0MSBMRUZUIEpPSU4gTEFURVJBTAogCQkJICAoU0VMRUNUIHQyLmEgQVMgdDJh LCB0My5hIEFTIHQzYSwgdDIuYiB0MmIsIHQyLmMgdDJjLCBsZWFzdCh0MS5hLHQyLmEsdDMuYSkg RlJPTSBwcnQxIHQyIEpPSU4gcHJ0MiB0MyBPTiAodDIuYSA9IHQzLmIpKSBzcwogCQkJICBPTiB0 MS5jID0gc3MudDJjIFdIRVJFICh0MS5iICsgY29hbGVzY2Uoc3MudDJiLCAwKSkgPSAwIE9SREVS IEJZIHQxLmE7CiAKKy0tIGxhdGVyYWwgcmVmZXJlbmNlIGluIHNhbXBsZSBzY2FuCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHBydDEgdDEgSk9JTiBMQVRFUkFMCisJCQkgIChT RUxFQ1QgKiBGUk9NIHBydDEgdDIgVEFCTEVTQU1QTEUgU1lTVEVNICh0MS5hKSBSRVBFQVRBQkxF KHQxLmIpKSBzCisJCQkgIE9OIHQxLmEgPSBzLmE7CisKIC0tIGJ1ZyB3aXRoIGluYWRlcXVhdGUg c29ydCBrZXkgcmVwcmVzZW50YXRpb24KIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdh dGUgVE8gdHJ1ZTsKIFNFVCBlbmFibGVfaGFzaGpvaW4gVE8gZmFsc2U7CkBAIC0zODcsNiArMzkz LDEyIEBAIFNFTEVDVCAqIEZST00gcHJ0MV9sIHQxIExFRlQgSk9JTiBMQVRFUkFMCiAJCQkgIChT RUxFQ1QgdDIuYSBBUyB0MmEsIHQyLmMgQVMgdDJjLCB0Mi5iIEFTIHQyYiwgdDMuYiBBUyB0M2Is IGxlYXN0KHQxLmEsdDIuYSx0My5iKSBGUk9NIHBydDFfbCB0MiBKT0lOIHBydDJfbCB0MyBPTiAo dDIuYSA9IHQzLmIgQU5EIHQyLmMgPSB0My5jKSkgc3MKIAkJCSAgT04gdDEuYSA9IHNzLnQyYSBB TkQgdDEuYyA9IHNzLnQyYyBXSEVSRSB0MS5iID0gMCBPUkRFUiBCWSB0MS5hOwogCistLSBwYXJ0 aXRpb253aXNlIGpvaW4gd2l0aCBsYXRlcmFsIHJlZmVyZW5jZSBpbiBzYW1wbGUgc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwcnQxX2wgdDEgSk9JTiBMQVRFUkFMCisJ CQkgIChTRUxFQ1QgKiBGUk9NIHBydDFfbCB0MiBUQUJMRVNBTVBMRSBTWVNURU0gKHQxLmEpIFJF UEVBVEFCTEUodDEuYikpIHMgT04KKwkJCSAgdDEuYSA9IHMuYSBBTkQgdDEuYiA9IHMuYiBBTkQg dDEuYyA9IHMuYzsKKwogLS0gam9pbiB3aXRoIG9uZSBzaWRlIGVtcHR5CiBFWFBMQUlOIChDT1NU UyBPRkYpCiBTRUxFQ1QgdDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIChTRUxFQ1QgKiBGUk9N IHBydDFfbCBXSEVSRSBhID0gMSBBTkQgYSA9IDIpIHQxIFJJR0hUIEpPSU4gcHJ0Ml9sIHQyIE9O IHQxLmEgPSB0Mi5iIEFORCB0MS5iID0gdDIuYSBBTkQgdDEuYyA9IHQyLmM7Ci0tIAoyLjMxLjAK Cg== --000000000000b954750601ee9a1c--