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 1vzRoC-0010uk-0o for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 04:01:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzRoA-00DUoV-1R for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 04:01:30 +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 1vzRoA-00DUoN-07 for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 04:01:30 +0000 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzRo7-00000001jZh-1NL8 for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 04:01:29 +0000 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-40974bf7781so4545454fac.0 for ; Sun, 08 Mar 2026 21:01:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773028886; cv=none; d=google.com; s=arc-20240605; b=MVBig0vwk3Rg1wflEt5/FLPoZi4DkpGFwXJ/e84elS/qCkXigPKzyw/pBfDmbUfJT1 m0fcSYTzP9WJpISA71FC7BhWJSpkkVVfSyB4h5wi5i8gjirD9xnmRXmsn8H36CvemFhi mGGzDNTgj0Npvj7bgPRckzoidV/u5BVpTUWKtVD8OkVSxchvyA95XNMOCTYD+yCZ9Wuz OSijAOZz60hyrPtvx6j8/9iwFNbXH8+0iRwVcBTXmXtDsWt4Etvmi6h5nTel/t/HbNxd YMO/8yXYRPrUsK9FYpygoSU/LazlLndmE79bDdb8ucAl2ENM5ZpRF2RRJaWu1VAZ2l8Q kXKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=XvFn/pvBoams5FRQkUV5GqYzx3pMSXsoLEaOXmHwQxs=; fh=v6nJgfHp7g344M9taESI/6Oe1cZmsCWtnl1iZP6WaLU=; b=S2cnoX66GdpChILu8QeEVqzL/26YWdZcNjlAgHtVM3i7yEZn3Mgx32SuTY3wxwAu1p VcQpufN34tFqgkbG940wgnVCBi93IKQR2lAk77EGr/bDHkz5aIl8YQLKcQ7xi6TPp4nh AcgMki/TCIHp0MtHpUFF0N0lFEP9QzbXju35U/8o9IND+gQ0CQ+0RvbpBXEmcYgAYRBC JgRWn6UEnGJdqoBCU3LYoKCiMVOPu4Cxb0aNASeJylrHfRRnRFpatUCpRqpmSI93sKHu 2/S3xHo7nVfqJCMs8Mknh6+5XG/eTkav5dt4/qEHd5bXvLE6pvCXmyglqLQxBrQCaSvI Vhsg==; 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=20230601; t=1773028886; x=1773633686; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=XvFn/pvBoams5FRQkUV5GqYzx3pMSXsoLEaOXmHwQxs=; b=RqB6NhQ2tq+yRiiEz3sYRbyy1hc25/cSsFb2uexBlCvJTh4Urh/qFC5Z08070JARaH 1h6e5n0kQNG6A2+4KULeX5hRuO2t9Trm7EPesjfUgU2O07QA0MRDEjcs6kYwwJLUzEv4 lw6ouanejMG07jsmzyGlSdvjPSKcTqExWIOPWJ7JKacIALHgI7kJugGmcuck6DlU4haA 0l3w95xGXoH/w98j4qvuKtMHmcfnk2rVhNzcObt+fdoGndCtnnAPEFcltki7Eq6Qv8cF lwHxrg9XOR7qKXhTF+TZO3/5G3EQUznzmbOfPrLMP92PwlVFd9DdxkVJod1w7k4Gzwhy oT+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773028886; x=1773633686; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=XvFn/pvBoams5FRQkUV5GqYzx3pMSXsoLEaOXmHwQxs=; b=sOCGSbPnnK1oNR98rogt4XTsdV12Yqo3lnh04GsfOhGn2dgvgEknIzT8Rx0EqkyMuS z5rPdo4wox1U83SQTyfNYIqZ6AQhRxOWbW1bedWX6xnZfPXAAku6ygNO/Wzpuo3i9FcV Hao+/j+AIR/n8C2ECFoAEopbpzQJrhEaTzubs7NfZ9xFTuZ7z5uPfmgv7ACy8iosfT4c eeebJBwwHgVPuLVOWJTdIjLxwOPAPhHM27f6norPEQcnJHp+q7BNngGb6H/JNCpZvoNQ ix4m+66aK5UO1+a0uzsAOyW85RPhxnRmxvu7VSTp71DGpbsMElmq7XRdK3P81w2jpvgb F5lw== X-Gm-Message-State: AOJu0YymzWn3bkavXuBWf+Qrh6rGqoXJmz6beVDuu/hykns7Gfm0C/20 E5VpkuaTDzR23DjUZDS8ReXWI2fXbDIdR4jmWzAIHxD2HJT5rrxWZhQTYgMC8U1+YueksIlz2Ov IWPdvOdfF/Xe02ToHyuWtoKSh4pJ9s3E= X-Gm-Gg: ATEYQzzOuv27sy3Z6mtXSmkLYqIOKL9Rdanpbyrad1SBiX0jVrFoLhOEajhqKK/zg1G e4VNiWlBbAsvrQIyGSfwudKfXagE7tftpHWPUUEUDDYV5wiSvnSOjPErso4MfwMGXQLxZTHovI4 PgYA0VgBCCS2upCB2SDHBLALj29+0dHuKgD+J2b/kypKpPvEyKsiLsGaqt1ztM2xHENZKDxVSkl WaZ+lmFXveBSRtEikjp3Gq4sb3Fjr/GUjMkF138aguAVNRCg9Qz/ZujBqdRKsDXbwMdTr6N0ua6 +BY3TgKb7typZqChHPib X-Received: by 2002:a05:6870:a249:b0:40e:a9c5:5c32 with SMTP id 586e51a60fabf-416c3b71bd6mr7657976fac.8.1773028885716; Sun, 08 Mar 2026 21:01:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Mon, 9 Mar 2026 13:01:14 +0900 X-Gm-Features: AaiRm50TZDOE8RHDm6GIkHcGgk53LXRYEzOiNGL1XK4PmiC1j8CMx84h2bpU8_s Message-ID: Subject: Re: Convert NOT IN sublinks to anti-joins when safe To: Japin Li Cc: Pg Hackers Content-Type: multipart/mixed; boundary="000000000000e90295064c8f7413" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e90295064c8f7413 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 8, 2026 at 5:16=E2=80=AFPM Richard Guo = wrote: > Attached is an updated version of the patch that replaces foreach with > foreach_ptr or foreach_node accordingly. Nothing else has changed. > > I plan to do one more round of self-review on this. Unless there are > any further thoughts or concerns, I'm hoping to commit this in a week > or two. Please let me know if anyone spots anything else I might have > missed. I just finished a final self-review and noticed a subtle issue in query_outputs_are_not_nullable(). When preparing a target expression for the non-nullability check, the previous code flattened join aliases Vars before grouping Vars. However, because the parser processes FROM/JOIN clauses before the GROUP BY clause, a grouping Var can actually wrap a join alias Var, not the reverse. So we should flatten grouping Vars first. Attached is an updated patch that fixes that issue. I plan to commit this in a week or two, barring any objections. - Richard --000000000000e90295064c8f7413 Content-Type: application/octet-stream; name="v6-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Disposition: attachment; filename="v6-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mminlysg0 RnJvbSBhMTNhMmNjYzVhYzYyZjIxZjBkMzI0Y2I3NGEzN2VkNjQxOGYwZmZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxMjoyOTo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjZd IENvbnZlcnQgTk9UIElOIHN1YmxpbmtzIHRvIGFudGktam9pbnMgd2hlbiBzYWZlCgpUaGUgcGxh bm5lciBoYXMgaGlzdG9yaWNhbGx5IGJlZW4gdW5hYmxlIHRvIGNvbnZlcnQgInggTk9UIElOIChT RUxFQ1QKeSAuLi4pIiBzdWJsaW5rcyBpbnRvIGFudGktam9pbnMuICBUaGlzIGlzIGJlY2F1c2Ug c3RhbmRhcmQgU1FMCnNlbWFudGljcyBmb3IgTk9UIElOIHJlcXVpcmUgdGhhdCBpZiB0aGUgY29t cGFyaXNvbiAieCA9IHkiIHJldHVybnMKTlVMTCwgdGhlICJOT1QgSU4iIGV4cHJlc3Npb24gZXZh bHVhdGVzIHRvIE5VTEwgKGVmZmVjdGl2ZWx5IGZhbHNlKSwKY2F1c2luZyB0aGUgcm93IHRvIGJl IGRpc2NhcmRlZC4gIEluIGNvbnRyYXN0LCBhbiBhbnRpLWpvaW4gcHJlc2VydmVzCnRoZSByb3cg aWYgbm8gbWF0Y2ggaXMgZm91bmQuICBEdWUgdG8gdGhpcyBzZW1hbnRpYyBtaXNtYXRjaCByZWdh cmRpbmcKTlVMTCBoYW5kbGluZywgdGhlIGNvbnZlcnNpb24gd2FzIHByZXZpb3VzbHkgY29uc2lk ZXJlZCB1bnNhZmUuCgpIb3dldmVyLCBpZiB3ZSBjYW4gcHJvdmUgdGhhdCBuZWl0aGVyIHNpZGUg b2YgdGhlIGNvbXBhcmlzb24gY2FuIHlpZWxkCk5VTEwgdmFsdWVzLCBhbmQgZnVydGhlciB0aGF0 IHRoZSBvcGVyYXRvciBpdHNlbGYgY2Fubm90IHJldHVybiBOVUxMCmZvciBub24tbnVsbCBpbnB1 dHMsIHRoZSBiZWhhdmlvciBvZiBOT1QgSU4gYW5kIGFudGktam9pbiBiZWNvbWVzCmlkZW50aWNh bC4gIEVuYWJsaW5nIHRoaXMgY29udmVyc2lvbiBhbGxvd3MgdGhlIHBsYW5uZXIgdG8gdHJlYXQg dGhlCnN1YmxpbmsgYXMgYSBmaXJzdC1jbGFzcyByZWxhdGlvbiByYXRoZXIgdGhhbiBhbiBvcGFx dWUgU3ViUGxhbgpmaWx0ZXIuICBUaGlzIHVubG9ja3MgZ2xvYmFsIGpvaW4gb3JkZXJpbmcgb3B0 aW1pemF0aW9uIGFuZCBwZXJtaXRzCnRoZSBzZWxlY3Rpb24gb2YgdGhlIG1vc3QgZWZmaWNpZW50 IGpvaW4gYWxnb3JpdGhtIGJhc2VkIG9uIGNvc3QsCm9mdGVuIHlpZWxkaW5nIHNpZ25pZmljYW50 IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgbGFyZ2UKZGF0YXNldHMuCgpUaGlzIHBhdGNo IHZlcmlmaWVzIHRoYXQgbmVpdGhlciBzaWRlIG9mIHRoZSBjb21wYXJpc29uIGNhbiBiZSBOVUxM CmFuZCB0aGF0IHRoZSBvcGVyYXRvciBpcyBzYWZlIHJlZ2FyZGluZyBOVUxMIHJlc3VsdHMgYmVm b3JlIHBlcmZvcm1pbmcKdGhlIGNvbnZlcnNpb24uCgpUbyB2ZXJpZnkgb3BlcmF0b3Igc2FmZXR5 LCB3ZSByZXF1aXJlIHRoYXQgdGhlIG9wZXJhdG9yIGJlIGEgbWVtYmVyIG9mCmEgQi10cmVlIG9y IEhhc2ggb3BlcmF0b3IgZmFtaWx5LiAgVGhpcyBzZXJ2ZXMgYXMgYSBwcm94eSBmb3Igc3RhbmRh cmQKYm9vbGVhbiBiZWhhdmlvciwgZW5zdXJpbmcgdGhlIG9wZXJhdG9yIGRvZXMgbm90IHJldHVy biBOVUxMIG9uIHZhbGlkCm5vbi1udWxsIGlucHV0cywgYXMgZG9pbmcgc28gd291bGQgYnJlYWsg aW5kZXggaW50ZWdyaXR5LgoKRm9yIG9wZXJhbmQgbm9uLW51bGxhYmlsaXR5LCB0aGlzIHBhdGNo IG1ha2VzIHVzZSBvZiBzZXZlcmFsIGV4aXN0aW5nCm1lY2hhbmlzbXMuICBJdCBsZXZlcmFnZXMg dGhlIG91dGVyLWpvaW4tYXdhcmUtVmFyIGluZnJhc3RydWN0dXJlIHRvCnZlcmlmeSB0aGF0IGEg VmFyIGRvZXMgbm90IGNvbWUgZnJvbSB0aGUgbnVsbGFibGUgc2lkZSBvZiBhbiBvdXRlcgpqb2lu LCBhbmQgY29uc3VsdHMgdGhlIE5PVC1OVUxMLWF0dG51bXMgaGFzaCB0YWJsZSB0byBlZmZpY2ll bnRseQp2ZXJpZnkgc2NoZW1hLWxldmVsIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQWRkaXRpb25h bGx5LCBpdCBlbXBsb3lzCmZpbmRfbm9ubnVsbGFibGVfdmFycyB0byBpZGVudGlmeSBWYXJzIGZv cmNlZCBub24tbnVsbGFibGUgYnkgcXVhbApjbGF1c2VzLCBhbmQgZXhwcl9pc19ub25udWxsYWJs ZSB0byBkZWR1Y2Ugbm9uLW51bGxhYmlsaXR5IGZvciBvdGhlcgpleHByZXNzaW9uIHR5cGVzLgoK VGhlIGxvZ2ljIGZvciB2ZXJpZnlpbmcgdGhlIG5vbi1udWxsYWJpbGl0eSBvZiB0aGUgc3VicXVl cnkgb3V0cHV0cwp3YXMgYWRhcHRlZCBmcm9tIHByaW9yIHdvcmsgYnkgRGF2aWQgUm93bGV5IGFu ZCBUb20gTGFuZS4KCkF1dGhvcjogUmljaGFyZCBHdW8gPGd1b2ZlbmdsaW51eEBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiB3ZW5odWkgcWl1IDxxaXV3ZW5odWlmeEBnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBaaGFuZyBNaW5nbGkgPHptbHBvc3RncmVzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEph cGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBTWJXczQ5NWVGPS1mU2E1Q3dKUzZCLUJhRWkzQVJwMFVOYjRMdDNFa2dVR1pKd2tBUUBt YWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5j ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyAgICB8 IDE1OSArKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMg fCAgNzIgKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgfCAz ODMgKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyAgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jICAg ICAgIHwgIDY4ICsrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmggICAgICAgICAg IHwgICAxICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgIHwgIDEz ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmggICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCAgICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgICB8IDQzOSArKysrKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgICB8IDE4NSAr KysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAx ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDEyNjQgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCA5N2VhOTVhNGViOC4u OWFhZjFjNGU1Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRz cGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0z NDQ3LDcgKzM0NDcsNyBAQCByZXN0cmljdGlvbl9pc19hbHdheXNfdHJ1ZShQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKG51bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVybiBmYWxzZTsKIAotCQly ZXR1cm4gZXhwcl9pc19ub25udWxsYWJsZShyb290LCBudWxsdGVzdC0+YXJnLCB0cnVlKTsKKwkJ cmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3QtPmFyZywgTk9UTlVMTF9T T1VSQ0VfUkVMT1BUKTsKIAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBjaGVjayBpdHMgc3ViLWNs YXVzZXMgKi8KQEAgLTM1MTIsNyArMzUxMiw3IEBAIHJlc3RyaWN0aW9uX2lzX2Fsd2F5c19mYWxz ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKG51bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVy biBmYWxzZTsKIAotCQlyZXR1cm4gZXhwcl9pc19ub25udWxsYWJsZShyb290LCBudWxsdGVzdC0+ YXJnLCB0cnVlKTsKKwkJcmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3Qt PmFyZywgTk9UTlVMTF9TT1VSQ0VfUkVMT1BUKTsKIAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBj aGVjayBpdHMgc3ViLWNsYXVzZXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3N1YnNlbGVjdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0 LmMKaW5kZXggZDdmM2NlZGYzZDUuLjBkMzE4NjFkYTdmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zdWJzZWxlY3QuYwpAQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluX291 dGVyX3NlbGZyZWYoTm9kZSAqbm9kZSk7CiBzdGF0aWMgYm9vbCBjb250YWluX291dGVyX3NlbGZy ZWZfd2Fsa2VyKE5vZGUgKm5vZGUsIEluZGV4ICpkZXB0aCk7CiBzdGF0aWMgdm9pZCBpbmxpbmVf Y3RlKFBsYW5uZXJJbmZvICpyb290LCBDb21tb25UYWJsZUV4cHIgKmN0ZSk7CiBzdGF0aWMgYm9v bCBpbmxpbmVfY3RlX3dhbGtlcihOb2RlICpub2RlLCBpbmxpbmVfY3RlX3dhbGtlcl9jb250ZXh0 ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHN1YmxpbmtfdGVzdGV4cHJfaXNfbm90X251bGxhYmxl KFBsYW5uZXJJbmZvICpyb290LCBTdWJMaW5rICpzdWJsaW5rKTsKIHN0YXRpYyBib29sIHNpbXBs aWZ5X0VYSVNUU19xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKnF1ZXJ5KTsKIHN0YXRp YyBRdWVyeSAqY29udmVydF9FWElTVFNfdG9fQU5ZKFBsYW5uZXJJbmZvICpyb290LCBRdWVyeSAq c3Vic2VsZWN0LAogCQkJCQkJCQkJTm9kZSAqKnRlc3RleHByLCBMaXN0ICoqcGFyYW1JZHMpOwpA QCAtMTMwNiwxMSArMTMwNywxNCBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKnRlc3RleHByLCBRdWVyeSAqdmFsdWVzKQogICogSWYgc28sIGZvcm0gYSBK b2luRXhwciBhbmQgcmV0dXJuIGl0LiAgUmV0dXJuIE5VTEwgaWYgdGhlIFN1YkxpbmsgY2Fubm90 CiAgKiBiZSBjb252ZXJ0ZWQgdG8gYSBqb2luLgogICoKLSAqIFRoZSBvbmx5IG5vbi1vYnZpb3Vz IGlucHV0IHBhcmFtZXRlciBpcyBhdmFpbGFibGVfcmVsczogdGhpcyBpcyB0aGUgc2V0Ci0gKiBv ZiBxdWVyeSByZWxzIHRoYXQgY2FuIHNhZmVseSBiZSByZWZlcmVuY2VkIGluIHRoZSBzdWJsaW5r IGV4cHJlc3Npb24uCi0gKiAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNoYW5naW5n IHRoZSBzZW1hbnRpY3Mgd2hlbiBhIHN1YmxpbmsKLSAqIGlzIHByZXNlbnQgaW4gYW4gb3V0ZXIg am9pbidzIE9OIHF1YWwuKSAgVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmCi0gKiB0aGUgY29u dmVydGVkIHF1YWwgd291bGQgcmVmZXJlbmNlIGFueSBidXQgdGhlc2UgcGFyZW50LXF1ZXJ5IHJl bGlkcy4KKyAqIElmIHVuZGVyX25vdCBpcyB0cnVlLCB0aGUgY2FsbGVyIGFjdHVhbGx5IGZvdW5k IE5PVCAoQU5ZIFN1YkxpbmspLCBzbworICogdGhhdCB3aGF0IHdlIG11c3QgdHJ5IHRvIGJ1aWxk IGlzIGFuIEFOVEkgbm90IFNFTUkgam9pbi4KKyAqCisgKiBhdmFpbGFibGVfcmVscyBpcyB0aGUg c2V0IG9mIHF1ZXJ5IHJlbHMgdGhhdCBjYW4gc2FmZWx5IGJlIHJlZmVyZW5jZWQKKyAqIGluIHRo ZSBzdWJsaW5rIGV4cHJlc3Npb24uICAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNo YW5naW5nCisgKiB0aGUgc2VtYW50aWNzIHdoZW4gYSBzdWJsaW5rIGlzIHByZXNlbnQgaW4gYW4g b3V0ZXIgam9pbidzIE9OIHF1YWwuKQorICogVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmIHRo ZSBjb252ZXJ0ZWQgcXVhbCB3b3VsZCByZWZlcmVuY2UgYW55IGJ1dAorICogdGhlc2UgcGFyZW50 LXF1ZXJ5IHJlbGlkcy4KICAqCiAgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuZWQgSm9pbkV4cHIg aGFzIGxhcmcgPSBOVUxMIGFuZCByYXJnID0gdGhlIGpvaW50cmVlCiAgKiBpdGVtIHJlcHJlc2Vu dGluZyB0aGUgcHVsbGVkLXVwIHN1YnF1ZXJ5LiAgVGhlIGNhbGxlciBtdXN0IHNldCBsYXJnIHRv CkBAIC0xMzMzLDcgKzEzMzcsNyBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKnRlc3RleHByLCBRdWVyeSAqdmFsdWVzKQogICovCiBKb2luRXhwciAqCiBj b252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1 YmxpbmssCi0JCQkJCQkJUmVsaWRzIGF2YWlsYWJsZV9yZWxzKQorCQkJCQkJCWJvb2wgdW5kZXJf bm90LCBSZWxpZHMgYXZhaWxhYmxlX3JlbHMpCiB7CiAJSm9pbkV4cHIgICAqcmVzdWx0OwogCVF1 ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOwpAQCAtMTM1MSw2ICsxMzU1LDE5IEBAIGNvbnZl cnRfQU5ZX3N1YmxpbmtfdG9fam9pbihQbGFubmVySW5mbyAqcm9vdCwgU3ViTGluayAqc3VibGlu aywKIAogCUFzc2VydChzdWJsaW5rLT5zdWJMaW5rVHlwZSA9PSBBTllfU1VCTElOSyk7CiAKKwkv KgorCSAqIFBlciBTUUwgc3BlYywgTk9UIElOIGlzIG5vdCBvcmRpbmFyaWx5IGVxdWl2YWxlbnQg dG8gYW4gYW50aS1qb2luLCBzbworCSAqIHRoYXQgYnkgZGVmYXVsdCB3ZSBoYXZlIHRvIGZhaWwg d2hlbiB1bmRlcl9ub3QuICBIb3dldmVyLCBpZiB3ZSBjYW4KKwkgKiBwcm92ZSB0aGF0IG5laXRo ZXIgdGhlIG91dGVyIHF1ZXJ5J3MgZXhwcmVzc2lvbnMgbm9yIHRoZSBzdWItc2VsZWN0J3MKKwkg KiBvdXRwdXQgY29sdW1ucyBjYW4gYmUgTlVMTCwgYW5kIGZ1cnRoZXIgdGhhdCB0aGUgb3BlcmF0 b3IgaXRzZWxmIGNhbm5vdAorCSAqIHJldHVybiBOVUxMIGZvciBub24tbnVsbCBpbnB1dHMsIHRo ZW4gdGhlIGxvZ2ljIGlzIGlkZW50aWNhbCBhbmQgaXQncworCSAqIHNhZmUgdG8gY29udmVydCBO T1QgSU4gdG8gYW4gYW50aS1qb2luLgorCSAqLworCWlmICh1bmRlcl9ub3QgJiYKKwkJKCFzdWJs aW5rX3Rlc3RleHByX2lzX25vdF9udWxsYWJsZShyb290LCBzdWJsaW5rKSB8fAorCQkgIXF1ZXJ5 X291dHB1dHNfYXJlX25vdF9udWxsYWJsZShzdWJzZWxlY3QpKSkKKwkJcmV0dXJuIE5VTEw7CisK IAkvKgogCSAqIElmIHRoZSBzdWItc2VsZWN0IGNvbnRhaW5zIGFueSBWYXJzIG9mIHRoZSBwYXJl bnQgcXVlcnksIHdlIHRyZWF0IGl0IGFzCiAJICogTEFURVJBTC4gIChWYXJzIGZyb20gaGlnaGVy IGxldmVscyBkb24ndCBtYXR0ZXIgaGVyZS4pCkBAIC0xNDI4LDcgKzE0NDUsNyBAQCBjb252ZXJ0 X0FOWV9zdWJsaW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1Ymxpbmss CiAJICogQW5kIGZpbmFsbHksIGJ1aWxkIHRoZSBKb2luRXhwciBub2RlLgogCSAqLwogCXJlc3Vs dCA9IG1ha2VOb2RlKEpvaW5FeHByKTsKLQlyZXN1bHQtPmpvaW50eXBlID0gSk9JTl9TRU1JOwor CXJlc3VsdC0+am9pbnR5cGUgPSB1bmRlcl9ub3QgPyBKT0lOX0FOVEkgOiBKT0lOX1NFTUk7CiAJ cmVzdWx0LT5pc05hdHVyYWwgPSBmYWxzZTsKIAlyZXN1bHQtPmxhcmcgPSBOVUxMOwkJLyogY2Fs bGVyIG11c3QgZmlsbCB0aGlzIGluICovCiAJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikgcnRyOwpA QCAtMTQ0MSwxMiArMTQ1OCwxMzQgQEAgY29udmVydF9BTllfc3VibGlua190b19qb2luKFBsYW5u ZXJJbmZvICpyb290LCBTdWJMaW5rICpzdWJsaW5rLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8q CisgKiBzdWJsaW5rX3Rlc3RleHByX2lzX25vdF9udWxsYWJsZTogdmVyaWZ5IHRoYXQgdGVzdGV4 cHIgb2YgYW4gQU5ZX1NVQkxJTksKKyAqIGd1YXJhbnRlZXMgYSBub24tbnVsbCByZXN1bHQsIGFz c3VtaW5nIHRoZSBpbm5lciBzaWRlIGlzIGFsc28gbm9uLW51bGwuCisgKgorICogVG8gZW5zdXJl IHRoZSBleHByZXNzaW9uIG5ldmVyIHJldHVybnMgTlVMTCwgd2UgcmVxdWlyZSBib3RoIHRoYXQg dGhlIG91dGVyCisgKiBleHByZXNzaW9ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxhYmxlIGFuZCB0 aGF0IHRoZSBvcGVyYXRvciBpdHNlbGYgaXMgc2FmZS4KKyAqIFdlIHZhbGlkYXRlIG9wZXJhdG9y IHNhZmV0eSBieSBjaGVja2luZyBmb3IgbWVtYmVyc2hpcCBpbiBhIHN0YW5kYXJkIGluZGV4Cisg KiBvcGVyYXRvciBmYW1pbHkgKEItdHJlZSBvciBIYXNoKTsgdGhpcyBhY3RzIGFzIGEgcHJveHkg Zm9yIHN0YW5kYXJkIGJvb2xlYW4KKyAqIGJlaGF2aW9yLCBlbnN1cmluZyB0aGUgb3BlcmF0b3Ig ZG9lcyBub3QgcHJvZHVjZSBOVUxMIHJlc3VsdHMgZnJvbSBub24tbnVsbAorICogaW5wdXRzLgor ICoKKyAqIFdlIGhhbmRsZSB0aGUgdGhyZWUgc3RhbmRhcmQgcGFyc2VyIHJlcHJlc2VudGF0aW9u cyBmb3IgQU5ZIHN1YmxpbmtzOiBhCisgKiBzaW5nbGUgT3BFeHByIGZvciBzaW5nbGUtY29sdW1u IGNvbXBhcmlzb25zLCBhIEJvb2xFeHByIGNvbnRhaW5pbmcgYSBsaXN0IG9mCisgKiBPcEV4cHJz IGZvciBtdWx0aS1jb2x1bW4gZXF1YWxpdHkgb3IgaW5lcXVhbGl0eSBjaGVja3MgKHdoZXJlIGVx dWFsaXR5CisgKiBiZWNvbWVzIGFuIEFORCBhbmQgaW5lcXVhbGl0eSBiZWNvbWVzIGFuIE9SKSwg YW5kIGEgUm93Q29tcGFyZUV4cHIgZm9yCisgKiBtdWx0aS1jb2x1bW4gb3JkZXJpbmcgY2hlY2tz LiAgSW4gYWxsIGNhc2VzLCB3ZSB2YWxpZGF0ZSB0aGUgb3BlcmF0b3JzIGFuZAorICogdGhlIG91 dGVyIGV4cHJlc3Npb25zLgorICoKKyAqIEl0IGlzIGFjY2VwdGFibGUgZm9yIHRoaXMgY2hlY2sg bm90IHRvIGJlIGV4aGF1c3RpdmUuICBXZSBjYW4gZXJyIG9uIHRoZQorICogc2lkZSBvZiBjb25z ZXJ2YXRpc206IGlmIHdlJ3JlIG5vdCBzdXJlLCBpdCdzIG9rYXkgdG8gcmV0dXJuIEZBTFNFLgor ICovCitzdGF0aWMgYm9vbAorc3VibGlua190ZXN0ZXhwcl9pc19ub3RfbnVsbGFibGUoUGxhbm5l ckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmspCit7CisJTm9kZQkgICAqdGVzdGV4cHIgPSBz dWJsaW5rLT50ZXN0ZXhwcjsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKKworCS8qIFB1 bnQgaWYgc3VibGluayBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCAqLworCWlmIChzdWJs aW5rLT5zdWJMaW5rVHlwZSAhPSBBTllfU1VCTElOSyB8fCB0ZXN0ZXhwciA9PSBOVUxMKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKHRlc3RleHByLCBPcEV4cHIpKQorCXsKKwkJLyogc2lu Z2xlLWNvbHVtbiBjb21wYXJpc29uICovCisJCU9wRXhwcgkgICAqb3BleHByID0gKE9wRXhwciAq KSB0ZXN0ZXhwcjsKKworCQkvKiBzdGFuZGFyZCBBTlkgc3RydWN0dXJlIHNob3VsZCBiZSBvcChv dXRlcl92YXIsIHBhcmFtKSAqLworCQlpZiAobGlzdF9sZW5ndGgob3BleHByLT5hcmdzKSAhPSAy KQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFdlIHJlbHkgb24gbWVtYmVyc2hpcCBp biBhIEItdHJlZSBvciBIYXNoIG9wZXJhdG9yIGZhbWlseSBhcyBhCisJCSAqIGd1YXJhbnRlZSB0 aGF0IHRoZSBvcGVyYXRvciBhY3RzIGFzIGEgcHJvcGVyIGJvb2xlYW4gY29tcGFyaXNvbiBhbmQK KwkJICogZG9lcyBub3QgeWllbGQgTlVMTCBmb3IgdmFsaWQgbm9uLW51bGwgaW5wdXRzLgorCQkg Ki8KKwkJaWYgKCFvcF9pc19zYWZlX2luZGV4X21lbWJlcihvcGV4cHItPm9wbm8pKQorCQkJcmV0 dXJuIGZhbHNlOworCisJCW91dGVyX2V4cHJzID0gbGFwcGVuZChvdXRlcl9leHBycywgbGluaXRp YWwob3BleHByLT5hcmdzKSk7CisJfQorCWVsc2UgaWYgKGlzX2FuZGNsYXVzZSh0ZXN0ZXhwcikg fHwgaXNfb3JjbGF1c2UodGVzdGV4cHIpKQorCXsKKwkJLyogbXVsdGktY29sdW1uIGVxdWFsaXR5 IG9yIGluZXF1YWxpdHkgY2hlY2tzICovCisJCUJvb2xFeHByICAgKmJleHByID0gKEJvb2xFeHBy ICopIHRlc3RleHByOworCisJCWZvcmVhY2hfcHRyKE9wRXhwciwgb3BleHByLCBiZXhwci0+YXJn cykKKwkJeworCQkJaWYgKCFJc0Eob3BleHByLCBPcEV4cHIpKQorCQkJCXJldHVybiBmYWxzZTsK KworCQkJLyogc3RhbmRhcmQgQU5ZIHN0cnVjdHVyZSBzaG91bGQgYmUgb3Aob3V0ZXJfdmFyLCBw YXJhbSkgKi8KKwkJCWlmIChsaXN0X2xlbmd0aChvcGV4cHItPmFyZ3MpICE9IDIpCisJCQkJcmV0 dXJuIGZhbHNlOworCisJCQkvKiB2ZXJpZnkgb3BlcmF0b3Igc2FmZXR5OyBzZWUgY29tbWVudCBh Ym92ZSAqLworCQkJaWYgKCFvcF9pc19zYWZlX2luZGV4X21lbWJlcihvcGV4cHItPm9wbm8pKQor CQkJCXJldHVybiBmYWxzZTsKKworCQkJb3V0ZXJfZXhwcnMgPSBsYXBwZW5kKG91dGVyX2V4cHJz LCBsaW5pdGlhbChvcGV4cHItPmFyZ3MpKTsKKwkJfQorCX0KKwllbHNlIGlmIChJc0EodGVzdGV4 cHIsIFJvd0NvbXBhcmVFeHByKSkKKwl7CisJCS8qIG11bHRpLWNvbHVtbiBvcmRlcmluZyBjaGVj a3MgKi8KKwkJUm93Q29tcGFyZUV4cHIgKnJjZXhwciA9IChSb3dDb21wYXJlRXhwciAqKSB0ZXN0 ZXhwcjsKKworCQlmb3JlYWNoX29pZChvcG5vLCByY2V4cHItPm9wbm9zKQorCQl7CisJCQkvKiB2 ZXJpZnkgb3BlcmF0b3Igc2FmZXR5OyBzZWUgY29tbWVudCBhYm92ZSAqLworCQkJaWYgKCFvcF9p c19zYWZlX2luZGV4X21lbWJlcihvcG5vKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlv dXRlcl9leHBycyA9IGxpc3RfY29uY2F0KG91dGVyX2V4cHJzLCByY2V4cHItPmxhcmdzKTsKKwl9 CisJZWxzZQorCXsKKwkJLyogUHVudCBpZiBvdGhlciBub2RlIHR5cGVzICovCisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoZSBxdWVyeSBoYXNuJ3QgeWV0IGJlZW4gdGhy b3VnaCBleHByZXNzaW9uIHByZXByb2Nlc3NpbmcsIHdlCisJICogbXVzdCBhcHBseSBmbGF0dGVu X2pvaW5fYWxpYXNfdmFycyB0byB0aGUgb3V0ZXIgZXhwcmVzc2lvbnMgdG8gYXZvaWQKKwkgKiBi ZWluZyBmb29sZWQgYnkgam9pbiBhbGlhc2VzLgorCSAqCisJICogV2UgZG8gbm90IG5lZWQgdG8g YXBwbHkgZmxhdHRlbl9ncm91cF9leHBycyB0aG91Z2gsIHNpbmNlIGdyb3VwaW5nIFZhcnMKKwkg KiBjYW5ub3QgYXBwZWFyIGluIGpvaW50cmVlIHF1YWxzLgorCSAqLworCW91dGVyX2V4cHJzID0g KExpc3QgKikKKwkJZmxhdHRlbl9qb2luX2FsaWFzX3ZhcnMocm9vdCwgcm9vdC0+cGFyc2UsIChO b2RlICopIG91dGVyX2V4cHJzKTsKKworCS8qIENoZWNrIHRoYXQgZXZlcnkgb3V0ZXIgZXhwcmVz c2lvbiBpcyBub24tbnVsbGFibGUgKi8KKwlmb3JlYWNoX3B0cihFeHByLCBleHByLCBvdXRlcl9l eHBycykKKwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgcmVsYXRpb24t bGV2ZWwgbm90LW51bGwgY29uc3RyYWludHMgZm9yCisJCSAqIHRoZSBvdXRlciBxdWVyeSwgc28g d2UgY2FuIGNvbnN1bHQgdGhlIGdsb2JhbCBoYXNoIHRhYmxlIGZvcgorCQkgKiBudWxsYWJpbGl0 eSBpbmZvcm1hdGlvbi4KKwkJICovCisJCWlmICghZXhwcl9pc19ub25udWxsYWJsZShyb290LCBl eHByLCBOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8q CisJCSAqIE5vdGU6IEl0IGlzIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcHJvdmUgbm9uLW51bGxhYmls aXR5IGJ5IGV4YW1pbmluZworCQkgKiB0aGUgcXVhbCBjbGF1c2VzIGF2YWlsYWJsZSBhdCBvciBi ZWxvdyB0aGUgam9pbnRyZWUgbm9kZSB3aGVyZSB0aGlzCisJCSAqIE5PVCBJTiBjbGF1c2UgaXMg ZXZhbHVhdGVkLCBidXQgZm9yIHRoZSBtb21lbnQgaXQgZG9lc24ndCBzZWVtCisJCSAqIHdvcnRo IHRoZSBleHRyYSBjb21wbGljYXRpb24uCisJCSAqLworCX0KKworCXJldHVybiB0cnVlOworfQor CiAvKgogICogY29udmVydF9FWElTVFNfc3VibGlua190b19qb2luOiB0cnkgdG8gY29udmVydCBh biBFWElTVFMgU3ViTGluayB0byBhIGpvaW4KICAqCi0gKiBUaGUgQVBJIG9mIHRoaXMgZnVuY3Rp b24gaXMgaWRlbnRpY2FsIHRvIGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbidzLAotICogZXhj ZXB0IHRoYXQgd2UgYWxzbyBzdXBwb3J0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYWxsZXIgaGFzIGZv dW5kIE5PVCBFWElTVFMsCi0gKiBzbyB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgaW5wdXQgcGFyYW1l dGVyICJ1bmRlcl9ub3QiLgorICogVGhlIEFQSSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNh bCB0byBjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4ncy4KICAqLwogSm9pbkV4cHIgKgogY29u dmVydF9FWElTVFNfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpyb290LCBTdWJMaW5rICpz dWJsaW5rLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50 cmVlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwppbmRleCBj OTBmNGIzMjczMy4uYjJiZWIwYTBkNjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wcmVwL3ByZXBqb2ludHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXBqb2ludHJlZS5jCkBAIC04NTIsMTQgKzg1MiwxNSBAQCBwdWxsX3VwX3N1YmxpbmtzX3F1YWxf cmVjdXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCWlmICgoc2FvcCA9IGNv bnZlcnRfVkFMVUVTX3RvX0FOWShyb290LAogCQkJCQkJCQkJCQkgIHN1YmxpbmstPnRlc3RleHBy LAogCQkJCQkJCQkJCQkgIChRdWVyeSAqKSBzdWJsaW5rLT5zdWJzZWxlY3QpKSAhPSBOVUxMKQot CisJCQl7CiAJCQkJLyoKIAkJCQkgKiBUaGUgVkFMVUVTIHNlcXVlbmNlIHdhcyBzaW1wbGlmaWVk LiAgTm90aGluZyBtb3JlIHRvIGRvCiAJCQkJICogaGVyZS4KIAkJCQkgKi8KIAkJCQlyZXR1cm4g KE5vZGUgKikgc2FvcDsKKwkJCX0KIAotCQkJaWYgKChqID0gY29udmVydF9BTllfc3VibGlua190 b19qb2luKHJvb3QsIHN1YmxpbmssCisJCQlpZiAoKGogPSBjb252ZXJ0X0FOWV9zdWJsaW5rX3Rv X2pvaW4ocm9vdCwgc3VibGluaywgZmFsc2UsCiAJCQkJCQkJCQkJCQkgYXZhaWxhYmxlX3JlbHMx KSkgIT0gTlVMTCkKIAkJCXsKIAkJCQkvKiBZZXM7IGluc2VydCB0aGUgbmV3IGpvaW4gbm9kZSBp bnRvIHRoZSBqb2luIHRyZWUgKi8KQEAgLTg4NSw3ICs4ODYsNyBAQCBwdWxsX3VwX3N1Ymxpbmtz X3F1YWxfcmVjdXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCQlyZXR1cm4g TlVMTDsKIAkJCX0KIAkJCWlmIChhdmFpbGFibGVfcmVsczIgIT0gTlVMTCAmJgotCQkJCShqID0g Y29udmVydF9BTllfc3VibGlua190b19qb2luKHJvb3QsIHN1YmxpbmssCisJCQkJKGogPSBjb252 ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4ocm9vdCwgc3VibGluaywgZmFsc2UsCiAJCQkJCQkJCQkJ CQkgYXZhaWxhYmxlX3JlbHMyKSkgIT0gTlVMTCkKIAkJCXsKIAkJCQkvKiBZZXM7IGluc2VydCB0 aGUgbmV3IGpvaW4gbm9kZSBpbnRvIHRoZSBqb2luIHRyZWUgKi8KQEAgLTk3MCwxNCArOTcxLDY4 IEBAIHB1bGxfdXBfc3VibGlua3NfcXVhbF9yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBOb2Rl ICpub2RlLAogCX0KIAlpZiAoaXNfbm90Y2xhdXNlKG5vZGUpKQogCXsKLQkJLyogSWYgdGhlIGlt bWVkaWF0ZSBhcmd1bWVudCBvZiBOT1QgaXMgRVhJU1RTLCB0cnkgdG8gY29udmVydCAqLworCQkv KiBJZiB0aGUgaW1tZWRpYXRlIGFyZ3VtZW50IG9mIE5PVCBpcyBBTlkgb3IgRVhJU1RTLCB0cnkg dG8gY29udmVydCAqLwogCQlTdWJMaW5rICAgICpzdWJsaW5rID0gKFN1YkxpbmsgKikgZ2V0X25v dGNsYXVzZWFyZygoRXhwciAqKSBub2RlKTsKIAkJSm9pbkV4cHIgICAqajsKIAkJUmVsaWRzCQlj aGlsZF9yZWxzOwogCiAJCWlmIChzdWJsaW5rICYmIElzQShzdWJsaW5rLCBTdWJMaW5rKSkKIAkJ ewotCQkJaWYgKHN1YmxpbmstPnN1YkxpbmtUeXBlID09IEVYSVNUU19TVUJMSU5LKQorCQkJaWYg KHN1YmxpbmstPnN1YkxpbmtUeXBlID09IEFOWV9TVUJMSU5LKQorCQkJeworCQkJCWlmICgoaiA9 IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihyb290LCBzdWJsaW5rLCB0cnVlLAorCQkJCQkJ CQkJCQkJCSBhdmFpbGFibGVfcmVsczEpKSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJLyogWWVzOyBp bnNlcnQgdGhlIG5ldyBqb2luIG5vZGUgaW50byB0aGUgam9pbiB0cmVlICovCisJCQkJCWotPmxh cmcgPSAqanRsaW5rMTsKKwkJCQkJKmp0bGluazEgPSAoTm9kZSAqKSBqOworCQkJCQkvKiBSZWN1 cnNpdmVseSBwcm9jZXNzIHB1bGxlZC11cCBqb2ludHJlZSBub2RlcyAqLworCQkJCQlqLT5yYXJn ID0gcHVsbF91cF9zdWJsaW5rc19qb2ludHJlZV9yZWN1cnNlKHJvb3QsCisJCQkJCQkJCQkJCQkJ CQkJai0+cmFyZywKKwkJCQkJCQkJCQkJCQkJCQkmY2hpbGRfcmVscyk7CisKKwkJCQkJLyoKKwkJ CQkJICogTm93IHJlY3Vyc2l2ZWx5IHByb2Nlc3MgdGhlIHB1bGxlZC11cCBxdWFscy4gIEJlY2F1 c2UKKwkJCQkJICogd2UgYXJlIHVuZGVybmVhdGggYSBOT1QsIHdlIGNhbid0IHB1bGwgdXAgc3Vi bGlua3MgdGhhdAorCQkJCQkgKiByZWZlcmVuY2UgdGhlIGxlZnQtaGFuZCBzdHVmZiwgYnV0IGl0 J3Mgc3RpbGwgb2theSB0bworCQkJCQkgKiBwdWxsIHVwIHN1YmxpbmtzIHJlZmVyZW5jaW5nIGot PnJhcmcuCisJCQkJCSAqLworCQkJCQlqLT5xdWFscyA9IHB1bGxfdXBfc3VibGlua3NfcXVhbF9y ZWN1cnNlKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkgai0+cXVhbHMsCisJCQkJCQkJCQkJCQkJCQkg JmotPnJhcmcsCisJCQkJCQkJCQkJCQkJCQkgY2hpbGRfcmVscywKKwkJCQkJCQkJCQkJCQkJCSBO VUxMLCBOVUxMKTsKKwkJCQkJLyogUmV0dXJuIE5VTEwgcmVwcmVzZW50aW5nIGNvbnN0YW50IFRS VUUgKi8KKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCWlmIChhdmFpbGFibGVfcmVsczIg IT0gTlVMTCAmJgorCQkJCQkoaiA9IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihyb290LCBz dWJsaW5rLCB0cnVlLAorCQkJCQkJCQkJCQkJCSBhdmFpbGFibGVfcmVsczIpKSAhPSBOVUxMKQor CQkJCXsKKwkJCQkJLyogWWVzOyBpbnNlcnQgdGhlIG5ldyBqb2luIG5vZGUgaW50byB0aGUgam9p biB0cmVlICovCisJCQkJCWotPmxhcmcgPSAqanRsaW5rMjsKKwkJCQkJKmp0bGluazIgPSAoTm9k ZSAqKSBqOworCQkJCQkvKiBSZWN1cnNpdmVseSBwcm9jZXNzIHB1bGxlZC11cCBqb2ludHJlZSBu b2RlcyAqLworCQkJCQlqLT5yYXJnID0gcHVsbF91cF9zdWJsaW5rc19qb2ludHJlZV9yZWN1cnNl KHJvb3QsCisJCQkJCQkJCQkJCQkJCQkJai0+cmFyZywKKwkJCQkJCQkJCQkJCQkJCQkmY2hpbGRf cmVscyk7CisKKwkJCQkJLyoKKwkJCQkJICogTm93IHJlY3Vyc2l2ZWx5IHByb2Nlc3MgdGhlIHB1 bGxlZC11cCBxdWFscy4gIEJlY2F1c2UKKwkJCQkJICogd2UgYXJlIHVuZGVybmVhdGggYSBOT1Qs IHdlIGNhbid0IHB1bGwgdXAgc3VibGlua3MgdGhhdAorCQkJCQkgKiByZWZlcmVuY2UgdGhlIGxl ZnQtaGFuZCBzdHVmZiwgYnV0IGl0J3Mgc3RpbGwgb2theSB0bworCQkJCQkgKiBwdWxsIHVwIHN1 YmxpbmtzIHJlZmVyZW5jaW5nIGotPnJhcmcuCisJCQkJCSAqLworCQkJCQlqLT5xdWFscyA9IHB1 bGxfdXBfc3VibGlua3NfcXVhbF9yZWN1cnNlKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkgai0+cXVh bHMsCisJCQkJCQkJCQkJCQkJCQkgJmotPnJhcmcsCisJCQkJCQkJCQkJCQkJCQkgY2hpbGRfcmVs cywKKwkJCQkJCQkJCQkJCQkJCSBOVUxMLCBOVUxMKTsKKwkJCQkJLyogUmV0dXJuIE5VTEwgcmVw cmVzZW50aW5nIGNvbnN0YW50IFRSVUUgKi8KKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJ fQorCQkJZWxzZSBpZiAoc3VibGluay0+c3ViTGlua1R5cGUgPT0gRVhJU1RTX1NVQkxJTkspCiAJ CQl7CiAJCQkJaWYgKChqID0gY29udmVydF9FWElTVFNfc3VibGlua190b19qb2luKHJvb3QsIHN1 YmxpbmssIHRydWUsCiAJCQkJCQkJCQkJCQkJCWF2YWlsYWJsZV9yZWxzMSkpICE9IE5VTEwpCkBA IC0zNzA2LDYgKzM3NjEsMTMgQEAgaGFzX25vdG51bGxfZm9yY2VkX3ZhcihQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqZm9yY2VkX251bGxfdmFycywKIAogCQlydGUgPSBydF9mZXRjaCh2YXJubywg cm9vdC0+cGFyc2UtPnJ0YWJsZSk7CiAKKwkJLyogV2UgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9y ZGluYXJ5IHJlbGF0aW9ucyAqLworCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikK KwkJeworCQkJYm1zX2ZyZWUoZm9yY2VkbnVsbGF0dG51bXMpOworCQkJY29udGludWU7CisJCX0K KwogCQkvKgogCQkgKiBXZSBtdXN0IHNraXAgaW5oZXJpdGFuY2UgcGFyZW50IHRhYmxlcywgYXMg c29tZSBjaGlsZCB0YWJsZXMgbWF5CiAJCSAqIGhhdmUgYSBOT1QgTlVMTCBjb25zdHJhaW50IGZv ciBhIGNvbHVtbiB3aGlsZSBvdGhlcnMgbWF5IG5vdC4gIFRoaXMKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2NsYXVzZXMuYwppbmRleCBhNDFkODE3MzRjZi4uODE3MmUxOTI1NGEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgImFj Y2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3Vh Z2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19wcm9jLmgiCkBAIC0xMTIsNiArMTEzLDcgQEAgc3RhdGljIGJvb2wgY29udGFpbl9jb250 ZXh0X2RlcGVuZGVudF9ub2RlX3dhbGtlcihOb2RlICpub2RlLCBpbnQgKmZsYWdzKTsKIHN0YXRp YyBib29sIGNvbnRhaW5fbGVha2VkX3ZhcnNfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRl eHQpOwogc3RhdGljIFJlbGlkcyBmaW5kX25vbm51bGxhYmxlX3JlbHNfd2Fsa2VyKE5vZGUgKm5v ZGUsIGJvb2wgdG9wX2xldmVsKTsKIHN0YXRpYyBMaXN0ICpmaW5kX25vbm51bGxhYmxlX3ZhcnNf d2Fsa2VyKE5vZGUgKm5vZGUsIGJvb2wgdG9wX2xldmVsKTsKK3N0YXRpYyB2b2lkIGZpbmRfc3Vi cXVlcnlfc2FmZV9xdWFscyhOb2RlICpqdG5vZGUsIExpc3QgKipzYWZlX3F1YWxzKTsKIHN0YXRp YyBib29sIGlzX3N0cmljdF9zYW9wKFNjYWxhckFycmF5T3BFeHByICpleHByLCBib29sIGZhbHNl T0spOwogc3RhdGljIGJvb2wgY29udmVydF9zYW9wX3RvX2hhc2hlZF9zYW9wX3dhbGtlcihOb2Rl ICpub2RlLCB2b2lkICpjb250ZXh0KTsKIHN0YXRpYyBOb2RlICpldmFsX2NvbnN0X2V4cHJlc3Np b25zX211dGF0b3IoTm9kZSAqbm9kZSwKQEAgLTE0MzMsNiArMTQzNSwxMCBAQCBjb250YWluX2xl YWtlZF92YXJzX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkJCQkJCQkgIGNv bnRleHQpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkgIE51bGxhYmlsaXR5IGFu YWx5c2lzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIC8qCiAgKiBmaW5kX25vbm51bGxhYmxl X3JlbHMKICAqCQlEZXRlcm1pbmUgd2hpY2ggYmFzZSByZWxzIGFyZSBmb3JjZWQgbm9ubnVsbGFi bGUgYnkgZ2l2ZW4gY2xhdXNlLgpAQCAtMTcwMSw3ICsxNzA3LDcgQEAgZmluZF9ub25udWxsYWJs ZV9yZWxzX3dhbGtlcihOb2RlICpub2RlLCBib29sIHRvcF9sZXZlbCkKICAqIGJ1dCBoZXJlIHdl IGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBpcyBhIEJvb2xlYW4gZXhwcmVzc2lvbiwgYW5kIHdpc2gg dG8KICAqIHNlZSBpZiBOVUxMIGlucHV0cyB3aWxsIHByb3ZhYmx5IGNhdXNlIGEgRkFMU0Utb3It TlVMTCByZXN1bHQuICBXZSBleHBlY3QKICAqIHRoZSBleHByZXNzaW9uIHRvIGhhdmUgYmVlbiBB TkQvT1IgZmxhdHRlbmVkIGFuZCBjb252ZXJ0ZWQgdG8gaW1wbGljaXQtQU5ECi0gKiBmb3JtYXQu CisgKiBmb3JtYXQgKGJ1dCB0aGUgcmVzdWx0cyBhcmUgc3RpbGwgZ29vZCBpZiBpdCB3YXNuJ3Qg QU5EL09SIGZsYXR0ZW5lZCkuCiAgKgogICogQXR0bm9zIG9mIHRoZSBpZGVudGlmaWVkIFZhcnMg YXJlIHJldHVybmVkIGluIGEgbXVsdGliaXRtYXBzZXQgKGEgTGlzdCBvZgogICogQml0bWFwc2V0 cykuICBMaXN0IGluZGV4ZXMgY29ycmVzcG9uZCB0byByZWxpZHMgKHZhcm5vcyksIHdoaWxlIHRo ZSBwZXItcmVsCkBAIC0yMDIxLDYgKzIwMjcsMjI5IEBAIGZpbmRfZm9yY2VkX251bGxfdmFyKE5v ZGUgKm5vZGUpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBxdWVyeV9vdXRwdXRzX2FyZV9u b3RfbnVsbGFibGUKKyAqCQlSZXR1cm5zIFRSVUUgaWYgdGhlIG91dHB1dCB2YWx1ZXMgb2YgdGhl IFF1ZXJ5IGFyZSBjZXJ0YWlubHkgbm90IE5VTEwuCisgKgkJQWxsIG91dHB1dCBjb2x1bW5zIG11 c3QgcmV0dXJuIG5vbi1OVUxMIHRvIGFuc3dlciBUUlVFLgorICoKKyAqIFRoZSByZWFzb24gdGhp cyB0YWtlcyBhIFF1ZXJ5LCBhbmQgbm90IGp1c3QgYW4gaW5kaXZpZHVhbCB0bGlzdCBleHByZXNz aW9uLAorICogaXMgc28gdGhhdCB3ZSBjYW4gbWFrZSB1c2Ugb2YgdGhlIHF1ZXJ5J3MgV0hFUkUv T04gY2xhdXNlcyB0byBwcm92ZSBpdCBkb2VzCisgKiBub3QgcmV0dXJuIG51bGxzLgorICoKKyAq IEluIGN1cnJlbnQgdXNhZ2UsIHRoZSBwYXNzZWQgc3ViLVF1ZXJ5IGhhc24ndCB5ZXQgYmVlbiB0 aHJvdWdoIGFueSBwbGFubmVyCisgKiBwcm9jZXNzaW5nLiAgVGhpcyBtZWFucyB0aGF0IGFwcGx5 aW5nIGZpbmRfbm9ubnVsbGFibGVfdmFycygpIHRvIGl0cyBXSEVSRQorICogY2xhdXNlcyBpc24n dCByZWFsbHkgaWRlYWw6IGZvciBsYWNrIG9mIGNvbnN0LXNpbXBsaWZpY2F0aW9uLCB3ZSBtaWdo dCBiZQorICogdW5hYmxlIHRvIHByb3ZlIG5vdC1udWxsbmVzcyBpbiBzb21lIGNhc2VzIHdoZXJl IHdlIGNvdWxkIGhhdmUgcHJvdmVkIGl0CisgKiBhZnRlcndhcmRzLiAgSG93ZXZlciwgd2Ugc2hv dWxkIG5vdCBnZXQgYW55IGZhbHNlIHBvc2l0aXZlIHJlc3VsdHMuCisgKgorICogTGlrZSB0aGUg b3RoZXIgZm9ybXMgb2YgbnVsbGFiaWxpdHkgYW5hbHlzaXMgYWJvdmUsIHdlIGNhbiBlcnIgb24g dGhlCisgKiBzaWRlIG9mIGNvbnNlcnZhdGlzbTogaWYgd2UncmUgbm90IHN1cmUsIGl0J3Mgb2th eSB0byByZXR1cm4gRkFMU0UuCisgKi8KK2Jvb2wKK3F1ZXJ5X291dHB1dHNfYXJlX25vdF9udWxs YWJsZShRdWVyeSAqcXVlcnkpCit7CisJUGxhbm5lckluZm8gc3Vicm9vdDsKKwlMaXN0CSAgICpz YWZlX3F1YWxzID0gTklMOworCUxpc3QJICAgKm5vbm51bGxhYmxlX3ZhcnMgPSBOSUw7CisJYm9v bAkJY29tcHV0ZWRfbm9ubnVsbGFibGVfdmFycyA9IGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGUg cXVlcnkgY29udGFpbnMgc2V0IG9wZXJhdGlvbnMsIHB1bnQuICBUaGUgc2V0IG9wcyB0aGVtc2Vs dmVzCisJICogY291bGRuJ3QgaW50cm9kdWNlIG51bGxzIHRoYXQgd2VyZW4ndCBpbiB0aGVpciBp bnB1dHMsIGJ1dCB0aGUgdGxpc3QKKwkgKiBwcmVzZW50IGluIHRoZSB0b3AtbGV2ZWwgcXVlcnkg aXMganVzdCBkdW1teSBhbmQgd29uJ3QgZ2l2ZSB1cyB1c2VmdWwKKwkgKiBpbmZvLiAgV2UgY291 bGQgZ2V0IGFuIGFuc3dlciBieSByZWN1cnNpbmcgdG8gZXhhbWluZSBlYWNoIGxlYWYgcXVlcnks CisJICogYnV0IGZvciB0aGUgbW9tZW50IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgZXh0cmEg Y29tcGxpY2F0aW9uLgorCSAqLworCWlmIChxdWVyeS0+c2V0T3BlcmF0aW9ucykKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGUgcXVlcnkgY29udGFpbnMgZ3JvdXBpbmcgc2V0cywg cHVudC4gIEdyb3VwaW5nIHNldHMgY2FuIGludHJvZHVjZQorCSAqIE5VTEwgdmFsdWVzLCBhbmQg d2UgY3VycmVudGx5IGxhY2sgdGhlIFBsYW5uZXJJbmZvIG5lZWRlZCB0byBmbGF0dGVuCisJICog Z3JvdXBpbmcgVmFycyBpbiB0aGUgcXVlcnkncyBvdXRwdXRzLgorCSAqLworCWlmIChxdWVyeS0+ Z3JvdXBpbmdTZXRzKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFdlIG5lZWQgYSBQbGFu bmVySW5mbyB0byBwYXNzIHRvIGV4cHJfaXNfbm9ubnVsbGFibGUuICBGb3J0dW5hdGVseSwgd2UK KwkgKiBjYW4gY29ucyB1cCBhbiBlbnRpcmVseSBkdW1teSBvbmUsIGJlY2F1c2Ugb25seSB0aGUg InBhcnNlIiBsaW5rIGluIHRoZQorCSAqIHN0cnVjdCBpcyB1c2VkIGJ5IGV4cHJfaXNfbm9ubnVs bGFibGUuCisJICovCisJTWVtU2V0KCZzdWJyb290LCAwLCBzaXplb2Yoc3Vicm9vdCkpOworCXN1 YnJvb3QucGFyc2UgPSBxdWVyeTsKKworCS8qCisJICogRXhhbWluZSBlYWNoIHRhcmdldGxpc3Qg ZW50cnkgdG8gcHJvdmUgdGhhdCBpdCBjYW4ndCBwcm9kdWNlIE5VTEwuCisJICovCisJZm9yZWFj aF9ub2RlKFRhcmdldEVudHJ5LCB0bGUsIHF1ZXJ5LT50YXJnZXRMaXN0KQorCXsKKwkJRXhwcgkg ICAqZXhwciA9IHRsZS0+ZXhwcjsKKworCQkvKiBSZXNqdW5rIGNvbHVtbnMgY2FuIGJlIGlnbm9y ZWQ6IHRoZXkgZG9uJ3QgcHJvZHVjZSBvdXRwdXQgdmFsdWVzICovCisJCWlmICh0bGUtPnJlc2p1 bmspCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBMb29rIHRocm91Z2ggYmluYXJ5IHJlbGFi ZWxpbmdzLCBzaW5jZSB3ZSBrbm93IHRob3NlIGRvbid0CisJCSAqIGludHJvZHVjZSBudWxscy4K KwkJICovCisJCXdoaWxlIChleHByICYmIElzQShleHByLCBSZWxhYmVsVHlwZSkpCisJCQlleHBy ID0gKChSZWxhYmVsVHlwZSAqKSBleHByKS0+YXJnOworCisJCWlmIChleHByID09IE5VTEwpCQkv KiBwYXJhbm9pYSAqLworCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBz dWJxdWVyeSBoYXNuJ3QgeWV0IGJlZW4gdGhyb3VnaCBleHByZXNzaW9uCisJCSAqIHByZXByb2Nl c3NpbmcsIHdlIG11c3QgZXhwbGljaXRseSBmbGF0dGVuIGdyb3VwaW5nIFZhcnMgYW5kIGpvaW4K KwkJICogYWxpYXNlcyBpbiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbi4gIE5vdGUgdGhhdCBmbGF0dGVu X2dyb3VwX2V4cHJzCisJCSAqIG11c3QgYmUgYXBwbGllZCBiZWZvcmUgZmxhdHRlbl9qb2luX2Fs aWFzX3ZhcnMsIGFzIGdyb3VwaW5nIFZhcnMKKwkJICogY2FuIHdyYXAgam9pbiBhbGlhc2VzLgor CQkgKgorCQkgKiBXZSBtdXN0IGFsc28gYXBwbHkgZmxhdHRlbl9qb2luX2FsaWFzX3ZhcnMgdG8g dGhlIHF1YWxzIGV4dHJhY3RlZAorCQkgKiBieSBmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMuICBX ZSBkbyBub3QgbmVlZCB0byBhcHBseQorCQkgKiBmbGF0dGVuX2dyb3VwX2V4cHJzIHRvIHRoZXNl IHF1YWxzLCB0aG91Z2gsIGJlY2F1c2UgZ3JvdXBpbmcgVmFycworCQkgKiBjYW5ub3QgYXBwZWFy IGluIGpvaW50cmVlIHF1YWxzLgorCQkgKi8KKworCQkvKgorCQkgKiBXZSBoYXZlIHZlcmlmaWVk IHRoYXQgdGhlIHF1ZXJ5IGRvZXMgbm90IGNvbnRhaW4gZ3JvdXBpbmcgc2V0cywgc28KKwkJICog aXQncyBzYWZlIHRvIHVzZSBOVUxMIGFzIHRoZSByb290IGhlcmUuCisJCSAqLworCQlleHByID0g KEV4cHIgKikgZmxhdHRlbl9ncm91cF9leHBycyhOVUxMLCBxdWVyeSwgKE5vZGUgKikgZXhwcik7 CisKKwkJLyoKKwkJICogV2Ugd29uJ3QgYmUgZGVhbGluZyB3aXRoIGFyYml0cmFyeSBleHByZXNz aW9ucywgc28gaXQncyBzYWZlIHRvIHVzZQorCQkgKiBOVUxMIGFzIHRoZSByb290LCBzbyBsb25n IGFzIGFkanVzdF9zdGFuZGFyZF9qb2luX2FsaWFzX2V4cHJlc3Npb24KKwkJICogY2FuIGhhbmRs ZSBldmVyeXRoaW5nIHRoZSBwYXJzZXIgd291bGQgbWFrZSBhcyBhIGpvaW4gYWxpYXMKKwkJICog ZXhwcmVzc2lvbi4KKwkJICovCisJCWV4cHIgPSAoRXhwciAqKSBmbGF0dGVuX2pvaW5fYWxpYXNf dmFycyhOVUxMLCBxdWVyeSwgKE5vZGUgKikgZXhwcik7CisKKwkJLyoKKwkJICogQ2hlY2sgdG8g c2VlIGlmIHRoZSBleHByIGNhbm5vdCBiZSBOVUxMLiAgU2luY2Ugd2UncmUgb24gYSByYXcKKwkJ ICogcGFyc2UgdHJlZSwgd2UgbmVlZCB0byBsb29rIHVwIHRoZSBub3QtbnVsbCBjb25zdHJhaW50 cyBmcm9tIHRoZQorCQkgKiBzeXN0ZW0gY2F0YWxvZ3MuCisJCSAqLworCQlpZiAoZXhwcl9pc19u b25udWxsYWJsZSgmc3Vicm9vdCwgZXhwciwgTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEUpKQorCQkJ Y29udGludWU7CisKKwkJaWYgKElzQShleHByLCBWYXIpKQorCQl7CisJCQlWYXIJCSAgICp2YXIg PSAoVmFyICopIGV4cHI7CisKKwkJCS8qCisJCQkgKiBGb3IgYSBwbGFpbiBWYXIsIGV2ZW4gaWYg dGhhdCBkaWRuJ3Qgd29yaywgd2UgY2FuIGNvbmNsdWRlIHRoYXQKKwkJCSAqIHRoZSBWYXIgaXMg bm90IG51bGxhYmxlIGlmIGZpbmRfbm9ubnVsbGFibGVfdmFycyBjYW4gZmluZCBhCisJCQkgKiAi dmFyIElTIE5PVCBOVUxMIiBvciBzaW1pbGFybHkgc3RyaWN0IGNvbmRpdGlvbiBhbW9uZyB0aGUg cXVhbHMKKwkJCSAqIG9uIG5vbi1vdXRlcmpvaW5lZC1yZWxzLiAgQ29tcHV0ZSB0aGUgbGlzdCBv ZiBWYXJzIGhhdmluZyBzdWNoCisJCQkgKiBxdWFscyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeS4KKwkJ CSAqLworCQkJaWYgKCFjb21wdXRlZF9ub25udWxsYWJsZV92YXJzKQorCQkJeworCQkJCWZpbmRf c3VicXVlcnlfc2FmZV9xdWFscygoTm9kZSAqKSBxdWVyeS0+am9pbnRyZWUsICZzYWZlX3F1YWxz KTsKKwkJCQlzYWZlX3F1YWxzID0gKExpc3QgKikKKwkJCQkJZmxhdHRlbl9qb2luX2FsaWFzX3Zh cnMoTlVMTCwgcXVlcnksIChOb2RlICopIHNhZmVfcXVhbHMpOworCQkJCW5vbm51bGxhYmxlX3Zh cnMgPSBmaW5kX25vbm51bGxhYmxlX3ZhcnMoKE5vZGUgKikgc2FmZV9xdWFscyk7CisJCQkJY29t cHV0ZWRfbm9ubnVsbGFibGVfdmFycyA9IHRydWU7CisJCQl9CisKKwkJCWlmICghbWJtc19pc19t ZW1iZXIodmFyLT52YXJubywKKwkJCQkJCQkJdmFyLT52YXJhdHRubyAtIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJCW5vbm51bGxhYmxlX3ZhcnMpKQorCQkJCXJl dHVybiBmYWxzZTsJLyogd2UgZmFpbGVkIHRvIHByb3ZlIHRoZSBWYXIgbm9uLW51bGwgKi8KKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qIFB1bnQgb3RoZXJ3aXNlICovCisJCQlyZXR1cm4gZmFsc2U7 CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIGZpbmRfc3VicXVlcnlfc2Fm ZV9xdWFscworICoJCVRyYXZlcnNlIGpvaW50cmVlIHRvIGxvY2F0ZSBxdWFscyBvbiBub24tb3V0 ZXJqb2luZWQtcmVscy4KKyAqCisgKiBXZSBsb2NhdGUgYWxsIFdIRVJFIGFuZCBKT0lOL09OIHF1 YWxzIHRoYXQgY29uc3RyYWluIHRoZSByZWxzIHRoYXQgYXJlIG5vdAorICogYmVsb3cgdGhlIG51 bGxhYmxlIHNpZGUgb2YgYW55IG91dGVyIGpvaW4sIGFuZCBhZGQgdGhlbSB0byB0aGUgKnNhZmVf cXVhbHMKKyAqIGxpc3QgKGZvcm1pbmcgYSBsaXN0IHdpdGggaW1wbGljaXQtQU5EIHNlbWFudGlj cykuICBUaGVzZSBxdWFscyBjYW4gYmUgdXNlZAorICogdG8gcHJvdmUgbm9uLW51bGxhYmlsaXR5 IG9mIHRoZSBzdWJxdWVyeSdzIG91dHB1dHMuCisgKgorICogVG9wLWxldmVsIGNhbGxlciBtdXN0 IGluaXRpYWxpemUgKnNhZmVfcXVhbHMgdG8gTklMLgorICovCitzdGF0aWMgdm9pZAorZmluZF9z dWJxdWVyeV9zYWZlX3F1YWxzKE5vZGUgKmp0bm9kZSwgTGlzdCAqKnNhZmVfcXVhbHMpCit7CisJ aWYgKGp0bm9kZSA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKElzQShqdG5vZGUsIFJhbmdlVGJs UmVmKSkKKwl7CisJCS8qIExlYWYgbm9kZTogbm90aGluZyB0byBkbyAqLworCQlyZXR1cm47CisJ fQorCWVsc2UgaWYgKElzQShqdG5vZGUsIEZyb21FeHByKSkKKwl7CisJCUZyb21FeHByICAgKmYg PSAoRnJvbUV4cHIgKikganRub2RlOworCisJCS8qIEFsbCBlbGVtZW50cyBvZiB0aGUgRlJPTSBs aXN0IGFyZSBhbGxvd2FibGUgKi8KKwkJZm9yZWFjaF9wdHIoTm9kZSwgY2hpbGRfbm9kZSwgZi0+ ZnJvbWxpc3QpCisJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoY2hpbGRfbm9kZSwgc2FmZV9x dWFscyk7CisJCS8qIC4uLiBhbmQgaXRzIFdIRVJFIHF1YWxzIGFyZSB0b28gKi8KKwkJaWYgKGYt PnF1YWxzKQorCQkJKnNhZmVfcXVhbHMgPSBsYXBwZW5kKCpzYWZlX3F1YWxzLCBmLT5xdWFscyk7 CisJfQorCWVsc2UgaWYgKElzQShqdG5vZGUsIEpvaW5FeHByKSkKKwl7CisJCUpvaW5FeHByICAg KmogPSAoSm9pbkV4cHIgKikganRub2RlOworCisJCXN3aXRjaCAoai0+am9pbnR5cGUpCisJCXsK KwkJCWNhc2UgSk9JTl9JTk5FUjoKKwkJCQkvKiB2aXNpdCBib3RoIGNoaWxkcmVuICovCisJCQkJ ZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKGotPmxhcmcsIHNhZmVfcXVhbHMpOworCQkJCWZpbmRf c3VicXVlcnlfc2FmZV9xdWFscyhqLT5yYXJnLCBzYWZlX3F1YWxzKTsKKwkJCQkvKiBhbmQgZ3Jh YiB0aGUgT04gcXVhbHMgdG9vICovCisJCQkJaWYgKGotPnF1YWxzKQorCQkJCQkqc2FmZV9xdWFs cyA9IGxhcHBlbmQoKnNhZmVfcXVhbHMsIGotPnF1YWxzKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBKT0lOX0xFRlQ6CisJCQljYXNlIEpPSU5fU0VNSToKKwkJCWNhc2UgSk9JTl9BTlRJOgorCisJ CQkJLyoKKwkJCQkgKiBPbmx5IHRoZSBsZWZ0IGlucHV0IGlzIHBvc3NpYmx5IG5vbi1udWxsYWJs ZTsgZnVydGhlcm1vcmUsCisJCQkJICogdGhlIHF1YWxzIG9mIHRoaXMgam9pbiBkb24ndCBjb25z dHJhaW4gdGhlIGxlZnQgaW5wdXQuCisJCQkJICogTm90ZTogd2UgcHJvYmFibHkgY2FuJ3Qgc2Vl IFNFTUkgb3IgQU5USSBqb2lucyBhdCB0aGlzCisJCQkJICogcG9pbnQsIGJ1dCBpZiB3ZSBkbywg d2UgY2FuIHRyZWF0IHRoZW0gbGlrZSBMRUZUIGpvaW5zLgorCQkJCSAqLworCQkJCWZpbmRfc3Vi cXVlcnlfc2FmZV9xdWFscyhqLT5sYXJnLCBzYWZlX3F1YWxzKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBKT0lOX1JJR0hUOgorCQkJCS8qIFJldmVyc2Ugb2YgdGhlIGFib3ZlIGNhc2UgKi8KKwkJ CQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoai0+cmFyZywgc2FmZV9xdWFscyk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgSk9JTl9GVUxMOgorCQkJCS8qIE5laXRoZXIgc2lkZSBpcyBub24tbnVs bGFibGUsIHNvIHN0b3AgZGVzY2VuZGluZyAqLworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0Ogor CQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgam9pbiB0eXBlOiAlZCIsCisJCQkJCSAoaW50 KSBqLT5qb2ludHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQorCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcoanRub2Rl KSk7Cit9CisKIC8qCiAgKiBDYW4gd2UgdHJlYXQgYSBTY2FsYXJBcnJheU9wRXhwciBhcyBzdHJp Y3Q/CiAgKgpAQCAtMjczOSw3ICsyOTY4LDggQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRh dG9yKE5vZGUgKm5vZGUsCiAKIAkJCQkJCWlmICghaGFzX251bGxhYmxlX25vbmNvbnN0ICYmCiAJ CQkJCQkJIWV4cHJfaXNfbm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwKLQkJCQkJCQkJCQkJCSAo RXhwciAqKSBsZmlyc3QoYXJnKSwgZmFsc2UpKQorCQkJCQkJCQkJCQkJIChFeHByICopIGxmaXJz dChhcmcpLAorCQkJCQkJCQkJCQkJIE5PVE5VTExfU09VUkNFX0hBU0hUQUJMRSkpCiAJCQkJCQkJ aGFzX251bGxhYmxlX25vbmNvbnN0ID0gdHJ1ZTsKIAkJCQkJfQogCQkJCX0KQEAgLTM0MTgsNyAr MzY0OCw4IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJ CQkJbmV3YXJncyA9IGxhcHBlbmQobmV3YXJncywgZSk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQot CQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBlLCBm YWxzZSkpCisJCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKGNvbnRleHQtPnJvb3QsIChFeHBy ICopIGUsCisJCQkJCQkJCQkJCU5PVE5VTExfU09VUkNFX0hBU0hUQUJMRSkpCiAJCQkJCXsKIAkJ CQkJCWlmIChuZXdhcmdzID09IE5JTCkKIAkJCQkJCQlyZXR1cm4gZTsJLyogZmlyc3QgZXhwciAq LwpAQCAtMzYxMiw3ICszODQzLDcgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRhdG9yKE5v ZGUgKm5vZGUsCiAJCQkJCQkgKi8KIAkJCQkJCWlmIChyZWxlbSAmJgogCQkJCQkJCWV4cHJfaXNf bm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgcmVsZW0sCi0JCQkJCQkJCQkJCQlm YWxzZSkpCisJCQkJCQkJCQkJCQlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUpKQogCQkJCQkJewog CQkJCQkJCWlmIChudGVzdC0+bnVsbHRlc3R0eXBlID09IElTX05VTEwpCiAJCQkJCQkJCXJldHVy biBtYWtlQm9vbENvbnN0KGZhbHNlLCBmYWxzZSk7CkBAIC0zNjY0LDcgKzM4OTUsOCBAQCBldmFs X2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIG1ha2VC b29sQ29uc3QocmVzdWx0LCBmYWxzZSk7CiAJCQkJfQogCQkJCWlmICghbnRlc3QtPmFyZ2lzcm93 ICYmIGFyZyAmJgotCQkJCQlleHByX2lzX25vbm51bGxhYmxlKGNvbnRleHQtPnJvb3QsIChFeHBy ICopIGFyZywgZmFsc2UpKQorCQkJCQlleHByX2lzX25vbm51bGxhYmxlKGNvbnRleHQtPnJvb3Qs IChFeHByICopIGFyZywKKwkJCQkJCQkJCQlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUpKQogCQkJ CXsKIAkJCQkJYm9vbAkJcmVzdWx0OwogCkBAIC0zNzQ5LDcgKzM5ODEsOSBAQCBldmFsX2NvbnN0 X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAogCQkJCQlyZXR1cm4gbWFrZUJvb2xD b25zdChyZXN1bHQsIGZhbHNlKTsKIAkJCQl9Ci0JCQkJaWYgKGFyZyAmJiBleHByX2lzX25vbm51 bGxhYmxlKGNvbnRleHQtPnJvb3QsIChFeHByICopIGFyZywgZmFsc2UpKQorCQkJCWlmIChhcmcg JiYKKwkJCQkJZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBhcmcs CisJCQkJCQkJCQkJTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFKSkKIAkJCQl7CiAJCQkJCS8qCiAJ CQkJCSAqIElmIGFyZyBpcyBwcm92ZW4gbm9uLW51bGxhYmxlLCBzaW1wbGlmeSB0byBib29sZWFu CkBAIC00Mzg0LDE0ICs0NjE4LDExIEBAIHNpbXBsaWZ5X2FnZ3JlZihBZ2dyZWYgKmFnZ3JlZiwg ZXZhbF9jb25zdF9leHByZXNzaW9uc19jb250ZXh0ICpjb250ZXh0KQogICogSWYgdGhlIFZhciBp cyBkZWZpbmVkIE5PVCBOVUxMIGFuZCBtZWFud2hpbGUgaXMgbm90IG51bGxlZCBieSBhbnkgb3V0 ZXIKICAqIGpvaW5zIG9yIGdyb3VwaW5nIHNldHMsIHRoZW4gd2UgY2FuIGtub3cgdGhhdCBpdCBj YW5ub3QgYmUgTlVMTC4KICAqCi0gKiB1c2VfcmVsX2luZm8gaW5kaWNhdGVzIHdoZXRoZXIgdGhl IGNvcnJlc3BvbmRpbmcgUmVsT3B0SW5mbyBpcyBhdmFpbGFibGUgZm9yCi0gKiB1c2UuCisgKiAi c291cmNlIiBzcGVjaWZpZXMgd2hlcmUgd2Ugc2hvdWxkIGxvb2sgZm9yIE5PVCBOVUxMIHByb29m cy4KICAqLwogYm9vbAotdmFyX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIg KnZhciwgYm9vbCB1c2VfcmVsX2luZm8pCit2YXJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8g KnJvb3QsIFZhciAqdmFyLCBOb3ROdWxsU291cmNlIHNvdXJjZSkKIHsKLQlCaXRtYXBzZXQgICpu b3RudWxsYXR0bnVtcyA9IE5VTEw7Ci0KIAlBc3NlcnQoSXNBKHZhciwgVmFyKSk7CiAKIAkvKiBz a2lwIHVwcGVyLWxldmVsIFZhcnMgKi8KQEAgLTQ0MDYsMzUgKzQ2MzcsODkgQEAgdmFyX2lzX25v bm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgYm9vbCB1c2VfcmVsX2luZm8p CiAJaWYgKHZhci0+dmFyYXR0bm8gPCAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCS8qCi0JICogQ2hl Y2sgaWYgdGhlIFZhciBpcyBkZWZpbmVkIGFzIE5PVCBOVUxMLiAgV2UgcmV0cmlldmUgdGhlIGNv bHVtbiBOT1QKLQkgKiBOVUxMIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24gZnJvbSB0aGUgY29ycmVz cG9uZGluZyBSZWxPcHRJbmZvIGlmIGl0IGlzCi0JICogYXZhaWxhYmxlOyBvdGhlcndpc2UsIHdl IHNlYXJjaCB0aGUgaGFzaCB0YWJsZSBmb3IgdGhpcyBpbmZvcm1hdGlvbi4KLQkgKi8KLQlpZiAo dXNlX3JlbF9pbmZvKQotCXsKLQkJUmVsT3B0SW5mbyAqcmVsID0gZmluZF9iYXNlX3JlbChyb290 LCB2YXItPnZhcm5vKTsKKwkvKiB3ZSBkb24ndCB0cnVzdCB3aG9sZS1yb3cgVmFycyAqLworCWlm ICh2YXItPnZhcmF0dG5vID09IDApCisJCXJldHVybiBmYWxzZTsKIAotCQlub3RudWxsYXR0bnVt cyA9IHJlbC0+bm90bnVsbGF0dG51bXM7Ci0JfQotCWVsc2UKKwkvKiBDaGVjayBpZiB0aGUgVmFy IGlzIGRlZmluZWQgYXMgTk9UIE5VTEwuICovCisJc3dpdGNoIChzb3VyY2UpCiAJewotCQlSYW5n ZVRibEVudHJ5ICpydGUgPSBwbGFubmVyX3J0X2ZldGNoKHZhci0+dmFybm8sIHJvb3QpOworCQlj YXNlIE5PVE5VTExfU09VUkNFX1JFTE9QVDoKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIHJldHJp ZXZlIHRoZSBjb2x1bW4gTk9UIE5VTEwgY29uc3RyYWludCBpbmZvcm1hdGlvbiBmcm9tCisJCQkJ ICogdGhlIGNvcnJlc3BvbmRpbmcgUmVsT3B0SW5mby4KKwkJCQkgKi8KKwkJCQlSZWxPcHRJbmZv ICpyZWw7CisJCQkJQml0bWFwc2V0ICAqbm90bnVsbGF0dG51bXM7CiAKLQkJLyoKLQkJICogV2Ug bXVzdCBza2lwIGluaGVyaXRhbmNlIHBhcmVudCB0YWJsZXMsIGFzIHNvbWUgY2hpbGQgdGFibGVz IG1heQotCQkgKiBoYXZlIGEgTk9UIE5VTEwgY29uc3RyYWludCBmb3IgYSBjb2x1bW4gd2hpbGUg b3RoZXJzIG1heSBub3QuICBUaGlzCi0JCSAqIGNhbm5vdCBoYXBwZW4gd2l0aCBwYXJ0aXRpb25l ZCB0YWJsZXMsIHRob3VnaC4KLQkJICovCi0JCWlmIChydGUtPmluaCAmJiBydGUtPnJlbGtpbmQg IT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWwg PSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCQkJCW5vdG51bGxhdHRudW1zID0g cmVsLT5ub3RudWxsYXR0bnVtczsKIAotCQlub3RudWxsYXR0bnVtcyA9IGZpbmRfcmVsYXRpb25f bm90bnVsbGF0dHMocm9vdCwgcnRlLT5yZWxpZCk7Ci0JfQorCQkJCXJldHVybiBibXNfaXNfbWVt YmVyKHZhci0+dmFyYXR0bm8sIG5vdG51bGxhdHRudW1zKTsKKwkJCX0KKwkJY2FzZSBOT1ROVUxM X1NPVVJDRV9IQVNIVEFCTEU6CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSByZXRyaWV2ZSB0aGUg Y29sdW1uIE5PVCBOVUxMIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24gZnJvbQorCQkJCSAqIHRoZSBo YXNoIHRhYmxlLgorCQkJCSAqLworCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJCQlCaXRtYXBz ZXQgICpub3RudWxsYXR0bnVtczsKIAotCWlmICh2YXItPnZhcmF0dG5vID4gMCAmJgotCQlibXNf aXNfbWVtYmVyKHZhci0+dmFyYXR0bm8sIG5vdG51bGxhdHRudW1zKSkKLQkJcmV0dXJuIHRydWU7 CisJCQkJcnRlID0gcGxhbm5lcl9ydF9mZXRjaCh2YXItPnZhcm5vLCByb290KTsKKworCQkJCS8q IFdlIGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvcmRpbmFyeSByZWxhdGlvbnMgKi8KKwkJCQlpZiAo cnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJ LyoKKwkJCQkgKiBXZSBtdXN0IHNraXAgaW5oZXJpdGFuY2UgcGFyZW50IHRhYmxlcywgYXMgc29t ZSBjaGlsZAorCQkJCSAqIHRhYmxlcyBtYXkgaGF2ZSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgZm9y IGEgY29sdW1uIHdoaWxlCisJCQkJICogb3RoZXJzIG1heSBub3QuICBUaGlzIGNhbm5vdCBoYXBw ZW4gd2l0aCBwYXJ0aXRpb25lZAorCQkJCSAqIHRhYmxlcywgdGhvdWdoLgorCQkJCSAqLworCQkJ CWlmIChydGUtPmluaCAmJiBydGUtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJM RSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJbm90bnVsbGF0dG51bXMgPSBmaW5kX3JlbGF0 aW9uX25vdG51bGxhdHRzKHJvb3QsIHJ0ZS0+cmVsaWQpOworCisJCQkJcmV0dXJuIGJtc19pc19t ZW1iZXIodmFyLT52YXJhdHRubywgbm90bnVsbGF0dG51bXMpOworCQkJfQorCQljYXNlIE5PVE5V TExfU09VUkNFX1NZU0NBQ0hFOgorCQkJeworCQkJCS8qCisJCQkJICogV2UgbG9vayB1cCB0aGUg ImF0dG5vdG51bGwiIGZpZWxkIGluIHRoZSBhdHRyaWJ1dGUKKwkJCQkgKiByZWxhdGlvbi4KKwkJ CQkgKi8KKwkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJCQlydGUgPSBwbGFubmVyX3J0X2Zl dGNoKHZhci0+dmFybm8sIHJvb3QpOworCisJCQkJLyogV2UgY2FuIG9ubHkgcmVhc29uIGFib3V0 IG9yZGluYXJ5IHJlbGF0aW9ucyAqLworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFU SU9OKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQkvKgorCQkJCSAqIFdlIG11c3Qgc2tpcCBp bmhlcml0YW5jZSBwYXJlbnQgdGFibGVzLCBhcyBzb21lIGNoaWxkCisJCQkJICogdGFibGVzIG1h eSBoYXZlIGEgTk9UIE5VTEwgY29uc3RyYWludCBmb3IgYSBjb2x1bW4gd2hpbGUKKwkJCQkgKiBv dGhlcnMgbWF5IG5vdC4gIFRoaXMgY2Fubm90IGhhcHBlbiB3aXRoIHBhcnRpdGlvbmVkCisJCQkJ ICogdGFibGVzLCB0aG91Z2guCisJCQkJICoKKwkJCQkgKiBOb3RlIHRoYXQgd2UgbmVlZCB0byBj aGVjayBpZiB0aGUgcmVsYXRpb24gYWN0dWFsbHkgaGFzIGFueQorCQkJCSAqIGNoaWxkcmVuLCBh cyB3ZSBtaWdodCBub3QgaGF2ZSBkb25lIHRoYXQgeWV0LgorCQkJCSAqLworCQkJCWlmIChydGUt PmluaCAmJiBoYXNfc3ViY2xhc3MocnRlLT5yZWxpZCkgJiYKKwkJCQkJcnRlLT5yZWxraW5kICE9 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJl dHVybiBnZXRfYXR0bm90bnVsbChydGUtPnJlbGlkLCB2YXItPnZhcmF0dG5vKTsKKwkJCX0KKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgTm90TnVsbFNvdXJjZTogJWQi LAorCQkJCSAoaW50KSBzb3VyY2UpOworCQkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGZhbHNlOwog fQpAQCAtNDQ0NCwxNiArNDcyOSwyMiBAQCB2YXJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8g KnJvb3QsIFZhciAqdmFyLCBib29sIHVzZV9yZWxfaW5mbykKICAqCiAgKiBSZXR1cm5zIHRydWUg aWZmIHRoZSBnaXZlbiAnZXhwcicgY2Fubm90IHByb2R1Y2UgU1FMIE5VTExzLgogICoKLSAqIElm ICd1c2VfcmVsX2luZm8nIGlzIHRydWUsIG51bGxhYmlsaXR5IG9mIFZhcnMgaXMgY2hlY2tlZCB2 aWEgdGhlCi0gKiBjb3JyZXNwb25kaW5nIFJlbE9wdEluZm8gZm9yIHRoZSBnaXZlbiBWYXIuICBT b21lIGNhbGxlcnMgcmVxdWlyZQotICogbnVsbGFiaWxpdHkgaW5mb3JtYXRpb24gYmVmb3JlIFJl bE9wdEluZm9zIGFyZSBnZW5lcmF0ZWQuICBUaGVzZSBzaG91bGQKLSAqIHBhc3MgJ3VzZV9yZWxf aW5mbycgYXMgZmFsc2UuCisgKiBzb3VyY2U6IHNwZWNpZmllcyB3aGVyZSB3ZSBzaG91bGQgbG9v ayBmb3IgTk9UIE5VTEwgcHJvb2ZzIGZvciBWYXJzLgorICoJLSBOT1ROVUxMX1NPVVJDRV9SRUxP UFQ6IFVzZWQgd2hlbiBSZWxPcHRJbmZvcyBoYXZlIGJlZW4gZ2VuZXJhdGVkLiAgV2UKKyAqCXJl dHJpZXZlIG51bGxhYmlsaXR5IGluZm9ybWF0aW9uIGRpcmVjdGx5IGZyb20gdGhlIFJlbE9wdElu Zm8gY29ycmVzcG9uZGluZworICoJdG8gdGhlIFZhci4KKyAqCS0gTk9UTlVMTF9TT1VSQ0VfSEFT SFRBQkxFOiBVc2VkIHdoZW4gUmVsT3B0SW5mb3MgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlLAorICoJ YnV0IHdlIGhhdmUgYWxyZWFkeSBjb2xsZWN0ZWQgcmVsYXRpb24tbGV2ZWwgbm90LW51bGwgY29u c3RyYWludHMgaW50byB0aGUKKyAqCWdsb2JhbCBoYXNoIHRhYmxlLgorICoJLSBOT1ROVUxMX1NP VVJDRV9TWVNDQUNIRTogVXNlZCBmb3IgcmF3IHBhcnNlIHRyZWVzIHdoZXJlIG5laXRoZXIKKyAq CVJlbE9wdEluZm9zIG5vciB0aGUgaGFzaCB0YWJsZSBhcmUgYXZhaWxhYmxlLiAgSW4gdGhpcyBj YXNlLCB3ZSBoYXZlIHRvCisgKglsb29rIHVwIHRoZSAnYXR0bm90bnVsbCcgZmllbGQgZGlyZWN0 bHkgaW4gdGhlIHN5c3RlbSBjYXRhbG9ncy4KICAqCiAgKiBGb3Igbm93LCB3ZSBzdXBwb3J0IG9u bHkgYSBsaW1pdGVkIHNldCBvZiBleHByZXNzaW9uIHR5cGVzLiAgU3VwcG9ydCBmb3IKICAqIGFk ZGl0aW9uYWwgbm9kZSB0eXBlcyBjYW4gYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KICAqLwogYm9v bAotZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9v bCB1c2VfcmVsX2luZm8pCitleHByX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBF eHByICpleHByLCBOb3ROdWxsU291cmNlIHNvdXJjZSkKIHsKIAkvKiBzaW5jZSB0aGlzIGZ1bmN0 aW9uIHJlY3Vyc2VzLCBpdCBjb3VsZCBiZSBkcml2ZW4gdG8gc3RhY2sgb3ZlcmZsb3cgKi8KIAlj aGVja19zdGFja19kZXB0aCgpOwpAQCAtNDQ2Myw3ICs0NzU0LDcgQEAgZXhwcl9pc19ub25udWxs YWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9vbCB1c2VfcmVsX2luZm8pCiAJ CWNhc2UgVF9WYXI6CiAJCQl7CiAJCQkJaWYgKHJvb3QpCi0JCQkJCXJldHVybiB2YXJfaXNfbm9u bnVsbGFibGUocm9vdCwgKFZhciAqKSBleHByLCB1c2VfcmVsX2luZm8pOworCQkJCQlyZXR1cm4g dmFyX2lzX25vbm51bGxhYmxlKHJvb3QsIChWYXIgKikgZXhwciwgc291cmNlKTsKIAkJCX0KIAkJ CWJyZWFrOwogCQljYXNlIFRfQ29uc3Q6CkBAIC00NDgwLDcgKzQ3NzEsNyBAQCBleHByX2lzX25v bm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByLCBib29sIHVzZV9yZWxfaW5m bykKIAogCQkJCWZvcmVhY2hfcHRyKEV4cHIsIGFyZywgY29hbGVzY2VleHByLT5hcmdzKQogCQkJ CXsKLQkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgYXJnLCB1c2VfcmVsX2luZm8p KQorCQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShyb290LCBhcmcsIHNvdXJjZSkpCiAJCQkJ CQlyZXR1cm4gdHJ1ZTsKIAkJCQl9CiAJCQl9CkBAIC00NDk1LDcgKzQ3ODYsNyBAQCBleHByX2lz X25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByLCBib29sIHVzZV9yZWxf aW5mbykKIAogCQkJCWZvcmVhY2hfcHRyKEV4cHIsIGFyZywgbWlubWF4ZXhwci0+YXJncykKIAkJ CQl7Ci0JCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGFyZywgdXNlX3JlbF9pbmZv KSkKKwkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgYXJnLCBzb3VyY2UpKQogCQkJ CQkJcmV0dXJuIHRydWU7CiAJCQkJfQogCQkJfQpAQCAtNDUxMSwxMyArNDgwMiwxMyBAQCBleHBy X2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByLCBib29sIHVzZV9y ZWxfaW5mbykKIAogCQkJCS8qIFRoZSBkZWZhdWx0IHJlc3VsdCBtdXN0IGJlIHByZXNlbnQgYW5k IG5vbi1udWxsYWJsZSAqLwogCQkJCWlmIChjYXNlZXhwci0+ZGVmcmVzdWx0ID09IE5VTEwgfHwK LQkJCQkJIWV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgY2FzZWV4cHItPmRlZnJlc3VsdCwgdXNl X3JlbF9pbmZvKSkKKwkJCQkJIWV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgY2FzZWV4cHItPmRl ZnJlc3VsdCwgc291cmNlKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyogQWxsIGJyYW5j aCByZXN1bHRzIG11c3QgYmUgbm9uLW51bGxhYmxlICovCiAJCQkJZm9yZWFjaF9wdHIoQ2FzZVdo ZW4sIGNhc2V3aGVuLCBjYXNlZXhwci0+YXJncykKIAkJCQl7Ci0JCQkJCWlmICghZXhwcl9pc19u b25udWxsYWJsZShyb290LCBjYXNld2hlbi0+cmVzdWx0LCB1c2VfcmVsX2luZm8pKQorCQkJCQlp ZiAoIWV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgY2FzZXdoZW4tPnJlc3VsdCwgc291cmNlKSkK IAkJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAKQEAgLTQ1NjUsNyArNDg1Niw3IEBAIGV4cHJf aXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIsIGJvb2wgdXNlX3Jl bF9pbmZvKQogCQkJCSAqIG5vbi1udWxsYWJsZS4KIAkJCQkgKi8KIAkJCQlyZXR1cm4gZXhwcl9p c19ub25udWxsYWJsZShyb290LCAoKFJlbGFiZWxUeXBlICopIGV4cHIpLT5hcmcsCi0JCQkJCQkJ CQkJICAgdXNlX3JlbF9pbmZvKTsKKwkJCQkJCQkJCQkgICBzb3VyY2UpOwogCQkJfQogCQlkZWZh dWx0OgogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwppbmRleCAzN2QzNDY4NWI5My4uNmM4ZmI3 YjcyNzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwpAQCAtODM0LDcgKzgzNCw3IEBAIGludDhpbmNfc3Vw cG9ydChQR19GVU5DVElPTl9BUkdTKQogCQkJCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOwogCiAJ CQkvKiBJZiB0aGUgYXJnIGlzbid0IE5VTExhYmxlLCBkbyB0aGUgY29udmVyc2lvbiAqLwotCQkJ aWYgKGV4cHJfaXNfbm9ubnVsbGFibGUocmVxLT5yb290LCBhcmcsIGZhbHNlKSkKKwkJCWlmIChl eHByX2lzX25vbm51bGxhYmxlKHJlcS0+cm9vdCwgYXJnLCBOT1ROVUxMX1NPVVJDRV9IQVNIVEFC TEUpKQogCQkJewogCQkJCUFnZ3JlZgkgICAqbmV3YWdnOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xz eXNjYWNoZS5jCmluZGV4IDE5MTNiMDA5ZDQwLi5mMTA5NDg0ODNiOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvbHN5c2NhY2hlLmMKQEAgLTg1OCw2ICs4NTgsNDcgQEAgY29tcGFyaXNvbl9vcHNfYXJl X2NvbXBhdGlibGUoT2lkIG9wbm8xLCBPaWQgb3BubzIpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAor LyoKKyAqIG9wX2lzX3NhZmVfaW5kZXhfbWVtYmVyCisgKgkJQ2hlY2sgaWYgdGhlIG9wZXJhdG9y IGlzIGEgbWVtYmVyIG9mIGEgQi10cmVlIG9yIEhhc2ggb3BlcmF0b3IgZmFtaWx5LgorICoKKyAq IFdlIHVzZSB0aGlzIGNoZWNrIGFzIGEgcHJveHkgZm9yICJudWxsLXNhZmV0eSI6IGlmIGFuIG9w ZXJhdG9yIGlzIHRydXN0ZWQgYnkKKyAqIHRoZSBidHJlZSBvciBoYXNoIG9wZmFtaWx5LCBpdCBp bXBsaWVzIHRoYXQgdGhlIG9wZXJhdG9yIGFkaGVyZXMgdG8gc3RhbmRhcmQKKyAqIGJvb2xlYW4g YmVoYXZpb3IsIGFuZCB3b3VsZCBub3QgcmV0dXJuIE5VTEwgd2hlbiBnaXZlbiB2YWxpZCBub24t bnVsbAorICogaW5wdXRzLCBhcyBkb2luZyBzbyB3b3VsZCBicmVhayBpbmRleCBpbnRlZ3JpdHku CisgKi8KK2Jvb2wKK29wX2lzX3NhZmVfaW5kZXhfbWVtYmVyKE9pZCBvcG5vKQoreworCWJvb2wJ CXJlc3VsdCA9IGZhbHNlOworCUNhdENMaXN0ICAgKmNhdGxpc3Q7CisJaW50CQkJaTsKKworCS8q CisJICogU2VhcmNoIHBnX2Ftb3AgdG8gc2VlIGlmIHRoZSB0YXJnZXQgb3BlcmF0b3IgaXMgcmVn aXN0ZXJlZCBmb3IgYW55CisJICogYnRyZWUgb3IgaGFzaCBvcGZhbWlseS4KKwkgKi8KKwljYXRs aXN0ID0gU2VhcmNoU3lzQ2FjaGVMaXN0MShBTU9QT1BJRCwgT2JqZWN0SWRHZXREYXR1bShvcG5v KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2F0bGlzdC0+bl9tZW1iZXJzOyBpKyspCisJeworCQlI ZWFwVHVwbGUJdHVwbGUgPSAmY2F0bGlzdC0+bWVtYmVyc1tpXS0+dHVwbGU7CisJCUZvcm1fcGdf YW1vcCBhZm9ybSA9IChGb3JtX3BnX2Ftb3ApIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJLyogQ2hl Y2sgaWYgdGhlIEFNIGlzIEItdHJlZSBvciBIYXNoICovCisJCWlmIChhZm9ybS0+YW1vcG1ldGhv ZCA9PSBCVFJFRV9BTV9PSUQgfHwKKwkJCWFmb3JtLT5hbW9wbWV0aG9kID09IEhBU0hfQU1fT0lE KQorCQl7CisJCQlyZXN1bHQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGVMaXN0KGNhdGxpc3QpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogCiAvKgkJCQkt LS0tLS0tLS0tIEFNUFJPQyBDQUNIRVMgLS0tLS0tLS0tLQkJCQkJCSAqLwogCkBAIC0xMDcxLDYg KzExMTIsMzMgQEAgZ2V0X2F0dG9wdGlvbnMoT2lkIHJlbGlkLCBpbnQxNiBhdHRudW0pCiAJcmV0 dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIGdldF9hdHRub3RudWxsCisgKgorICoJCUdpdmVuIHRo ZSByZWxhdGlvbiBpZCBhbmQgdGhlIGF0dHJpYnV0ZSBudW1iZXIsCisgKgkJcmV0dXJuIHRoZSAi YXR0bm90bnVsbCIgZmllbGQgZnJvbSB0aGUgYXR0cmlidXRlIHJlbGF0aW9uLgorICovCitib29s CitnZXRfYXR0bm90bnVsbChPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKQoreworCUhlYXBU dXBsZQl0cDsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCXRwID0gU2VhcmNoU3lzQ2FjaGUy KEFUVE5VTSwKKwkJCQkJCSBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCSBJbnQxNkdl dERhdHVtKGF0dG51bSkpOworCisJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHApKQorCXsKKwkJRm9y bV9wZ19hdHRyaWJ1dGUgYXR0X3R1cCA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKHRw KTsKKworCQlyZXN1bHQgPSBhdHRfdHVwLT5hdHRub3RudWxsOworCQlSZWxlYXNlU3lzQ2FjaGUo dHApOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qCQkJCS0tLS0tLS0tLS0gUEdfQ0FT VCBDQUNIRSAtLS0tLS0tLS0tCQkJCQkgKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9jbGF1c2VzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oCmlu ZGV4IGE2NDAzNGU4YTZkLi44NTNhMjhjMDAwNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2NsYXVzZXMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oCkBA IC00Miw2ICs0Miw3IEBAIGV4dGVybiBSZWxpZHMgZmluZF9ub25udWxsYWJsZV9yZWxzKE5vZGUg KmNsYXVzZSk7CiBleHRlcm4gTGlzdCAqZmluZF9ub25udWxsYWJsZV92YXJzKE5vZGUgKmNsYXVz ZSk7CiBleHRlcm4gTGlzdCAqZmluZF9mb3JjZWRfbnVsbF92YXJzKE5vZGUgKm5vZGUpOwogZXh0 ZXJuIFZhciAqZmluZF9mb3JjZWRfbnVsbF92YXIoTm9kZSAqbm9kZSk7CitleHRlcm4gYm9vbCBx dWVyeV9vdXRwdXRzX2FyZV9ub3RfbnVsbGFibGUoUXVlcnkgKnF1ZXJ5KTsKIAogZXh0ZXJuIGJv b2wgaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShOb2RlICpjbGF1c2UpOwogZXh0ZXJuIGJvb2wg aXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZV9yZWxpZHMoTm9kZSAqY2xhdXNlLCBSZWxpZHMgcmVs aWRzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAppbmRleCBiNTYyY2EzODBhOC4uZThiNDA5 YWZiN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTEzMCw2ICsxMzAsMTQgQEAg ZXh0ZXJuIEV4cHIgKmNhbm9uaWNhbGl6ZV9xdWFsKEV4cHIgKnF1YWwsIGJvb2wgaXNfY2hlY2sp OwogCiAvKiBpbiB1dGlsL2NsYXVzZXMuYzogKi8KIAorLyogRW51bSB0byBzcGVjaWZ5IHdoZXJl IHZhcl9pc19ub25udWxsYWJsZSBzaG91bGQgbG9vayBmb3IgTk9UIE5VTEwgcHJvb2ZzICovCit0 eXBlZGVmIGVudW0KK3sKKwlOT1ROVUxMX1NPVVJDRV9SRUxPUFQsCQkvKiBVc2UgUmVsT3B0SW5m byAqLworCU5PVE5VTExfU09VUkNFX0hBU0hUQUJMRSwJLyogVXNlIEdsb2JhbCBIYXNoIFRhYmxl ICovCisJTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEUsCS8qIFVzZSBTeXN0ZW0gQ2F0YWxvZyAqLwor fSBOb3ROdWxsU291cmNlOworCiBleHRlcm4gYm9vbCBjb250YWluX211dGFibGVfZnVuY3Rpb25z KE5vZGUgKmNsYXVzZSk7CiBleHRlcm4gYm9vbCBjb250YWluX211dGFibGVfZnVuY3Rpb25zX2Fm dGVyX3BsYW5uaW5nKEV4cHIgKmV4cHIpOwogZXh0ZXJuIGJvb2wgY29udGFpbl92b2xhdGlsZV9m dW5jdGlvbnMoTm9kZSAqY2xhdXNlKTsKQEAgLTE0NSwxMCArMTUzLDExIEBAIGV4dGVybiBOb2Rl ICplc3RpbWF0ZV9leHByZXNzaW9uX3ZhbHVlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2Rl KTsKIGV4dGVybiBFeHByICpldmFsdWF0ZV9leHByKEV4cHIgKmV4cHIsIE9pZCByZXN1bHRfdHlw ZSwgaW50MzIgcmVzdWx0X3R5cG1vZCwKIAkJCQkJCSAgIE9pZCByZXN1bHRfY29sbGF0aW9uKTsK IAotZXh0ZXJuIGJvb2wgdmFyX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIg KnZhciwgYm9vbCB1c2VfcmVsX2luZm8pOworZXh0ZXJuIGJvb2wgdmFyX2lzX25vbm51bGxhYmxl KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwKKwkJCQkJCQkgICBOb3ROdWxsU291cmNlIHNv dXJjZSk7CiAKIGV4dGVybiBib29sIGV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJv b3QsIEV4cHIgKmV4cHIsCi0JCQkJCQkJCWJvb2wgdXNlX3JlbF9pbmZvKTsKKwkJCQkJCQkJTm90 TnVsbFNvdXJjZSBzb3VyY2UpOwogCiBleHRlcm4gTGlzdCAqZXhwYW5kX2Z1bmN0aW9uX2FyZ3Vt ZW50cyhMaXN0ICphcmdzLCBib29sIGluY2x1ZGVfb3V0X2FyZ3VtZW50cywKIAkJCQkJCQkJCSAg IE9pZCByZXN1bHRfdHlwZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9zdWJz ZWxlY3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9zdWJzZWxlY3QuaAppbmRleCA4YTU1MDNl Yjk3My4uNGVjY2NmNDZiZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9zdWJz ZWxlY3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmgKQEAgLTIyLDYg KzIyLDcgQEAgZXh0ZXJuIFNjYWxhckFycmF5T3BFeHByICpjb252ZXJ0X1ZBTFVFU190b19BTlko UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQlRdWVyeSAqdmFsdWVzKTsKIGV4dGVybiBK b2luRXhwciAqY29udmVydF9BTllfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJCQkgU3ViTGluayAqc3VibGluaywKKwkJCQkJCQkJCQkJIGJvb2wgdW5kZXJfbm90 LAogCQkJCQkJCQkJCQkgUmVsaWRzIGF2YWlsYWJsZV9yZWxzKTsKIGV4dGVybiBKb2luRXhwciAq Y29udmVydF9FWElTVFNfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkJCQkJU3ViTGluayAqc3VibGluaywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2xz eXNjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKaW5kZXggNTY1NWFjYTRj MTQuLmI5YWQ4NGVjZDQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaApAQCAtODksNiArODksNyBAQCBl eHRlcm4gYm9vbCBnZXRfb3BfaGFzaF9mdW5jdGlvbnMoT2lkIG9wbm8sCiBleHRlcm4gTGlzdCAq Z2V0X29wX2luZGV4X2ludGVycHJldGF0aW9uKE9pZCBvcG5vKTsKIGV4dGVybiBib29sIGVxdWFs aXR5X29wc19hcmVfY29tcGF0aWJsZShPaWQgb3BubzEsIE9pZCBvcG5vMik7CiBleHRlcm4gYm9v bCBjb21wYXJpc29uX29wc19hcmVfY29tcGF0aWJsZShPaWQgb3BubzEsIE9pZCBvcG5vMik7Citl eHRlcm4gYm9vbCBvcF9pc19zYWZlX2luZGV4X21lbWJlcihPaWQgb3Bubyk7CiBleHRlcm4gT2lk CWdldF9vcGZhbWlseV9wcm9jKE9pZCBvcGZhbWlseSwgT2lkIGxlZnR0eXBlLCBPaWQgcmlnaHR0 eXBlLAogCQkJCQkJCSAgaW50MTYgcHJvY251bSk7CiBleHRlcm4gY2hhciAqZ2V0X2F0dG5hbWUo T2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSwgYm9vbCBtaXNzaW5nX29rKTsKQEAgLTk4LDYg Kzk5LDcgQEAgZXh0ZXJuIE9pZAlnZXRfYXR0dHlwZShPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0 bnVtKTsKIGV4dGVybiB2b2lkIGdldF9hdHR0eXBldHlwbW9kY29sbChPaWQgcmVsaWQsIEF0dHJO dW1iZXIgYXR0bnVtLAogCQkJCQkJCQkgIE9pZCAqdHlwaWQsIGludDMyICp0eXBtb2QsIE9pZCAq Y29sbGlkKTsKIGV4dGVybiBEYXR1bSBnZXRfYXR0b3B0aW9ucyhPaWQgcmVsaWQsIGludDE2IGF0 dG51bSk7CitleHRlcm4gYm9vbCBnZXRfYXR0bm90bnVsbChPaWQgcmVsaWQsIEF0dHJOdW1iZXIg YXR0bnVtKTsKIGV4dGVybiBPaWQJZ2V0X2Nhc3Rfb2lkKE9pZCBzb3VyY2V0eXBlaWQsIE9pZCB0 YXJnZXR0eXBlaWQsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4gY2hhciAqZ2V0X2NvbGxhdGlv bl9uYW1lKE9pZCBjb2xsb2lkKTsKIGV4dGVybiBib29sIGdldF9jb2xsYXRpb25faXNkZXRlcm1p bmlzdGljKE9pZCBjb2xsb2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3Vic2VsZWN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91 dAppbmRleCAyMTM1ZDgyODg0ZC4uMjAwMjM2YTBhNjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N1YnNlbGVjdC5vdXQKQEAgLTMzMjMsMyArMzMyMyw0NDIgQEAgU0VMRUNUIHRlbiBGUk9N IG9uZWsgdCBXSEVSRSAxLjA6OmludGVnZXIgSU4gKChWQUxVRVMgKDEpLCAoMykpKTsKICBTZXEg U2NhbiBvbiBvbmVrIHQKICgxIHJvdykKIAorLS0KKy0tIENoZWNrIE5PVCBJTiBwZXJmb3JtcyBh biBBTlRJIEpPSU4gd2hlbiBib3RoIHRoZSBvdXRlciBxdWVyeSdzIGV4cHJlc3Npb25zCistLSBh bmQgdGhlIHN1Yi1zZWxlY3QncyBvdXRwdXQgY29sdW1ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxh YmxlLCBhbmQgdGhlCistLSBvcGVyYXRvciBpdHNlbGYgY2Fubm90IHJldHVybiBOVUxMIGZvciBu b24tbnVsbCBpbnB1dHMuCistLQorQkVHSU47CitDUkVBVEUgVEVNUCBUQUJMRSBub3RfbnVsbF90 YWIgKGlkIGludCBOT1QgTlVMTCwgdmFsIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVEVNUCBUQUJM RSBudWxsX3RhYiAoaWQgaW50LCB2YWwgaW50KTsKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBh cmUgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBu b3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFi KTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEhhc2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSBub3RfbnVs bF90YWJfMS5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNo CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCiso NSByb3dzKQorCistLSBObyBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAo U0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBudWxsX3Rh YgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wx KSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIK Kyg0IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogaW5uZXIgc2lkZSBpcyBudWxsYWJsZQorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5P VCBJTiAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vdF9u dWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8x KS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3Rh YgorKDQgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5V TEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlk IE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIgV0hFUkUgaWQgSVMgTk9UIE5VTEwpOwor ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisg ICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSBudWxsX3RhYi5pZCkKKyAgIC0+ICBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gbnVsbF90YWIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGlkIElTIE5PVCBOVUxMKQorKDYg cm93cykKKworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIG51bGxhYmxlICh3ZSBkb24n dCBjaGVjayBvdXRlciBxdWVyeSBxdWFscyBmb3Igbm93KQorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgaWQgSVMgTk9UIE5VTEwKKyAgQU5EIGlkIE5P VCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbnVsbF90YWIKKyAg IEZpbHRlcjogKChpZCBJUyBOT1QgTlVMTCkgQU5EIChOT1QgKEFOWSAoaWQgPSAoaGFzaGVkIFN1 YlBsYW4gYW55XzEpLmNvbDEpKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2Nh biBvbiBub3RfbnVsbF90YWIKKyg0IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBp cyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwKKy0tIGFu ZCBpcyBub3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0MS5p ZAorICAgIEZST00gbm90X251bGxfdGFiIHQxCisgICAgTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0 MiBPTiB0MS5pZCA9IHQyLmlkCispOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9u dWxsX3RhYi5pZCA9IHQxLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBNZXJnZSBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MgorKDEyIHJvd3MpCisKKy0tIE5vIEFOVEkg Sk9JTjogaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMIGJ1dCBpcyBudWxsZWQgYnkgb3V0 ZXIgam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIK K1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQyLmlkCisgICAgRlJPTSBub3RfbnVsbF90 YWIgdDEKKyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyk7 CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAo aWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAg ICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0 Mi5pZCkKKyAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQx LmlkCisgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAg ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKygxMSByb3dzKQor CistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lk ZSBpcyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAg ICBTRUxFQ1QgdDIuaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBu b3RfbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICAgIFdIRVJFIHQyLmlkIElTIE5PVCBO VUxMCispOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9udWxsX3RhYi5pZCA9IHQy LmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBNZXJnZSBKb2luCisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0 Mi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0 IEtleTogdDEuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIgdDEKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogdDIuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3Rf bnVsbF90YWIgdDIKKygxMiByb3dzKQorCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVm aW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1 YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3Rh YgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9NIG51bGxfdGFi IHQxCisgICAgTEVGVCBKT0lOIG51bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyAgICBXSEVS RSB0MS5pZCBJUyBOT1QgTlVMTAorKTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90X251 bGxfdGFiLmlkID0gdDEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAt PiAgSGFzaAorICAgICAgICAgLT4gIE1lcmdlIExlZnQgSm9pbgorICAgICAgICAgICAgICAgTWVy Z2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gbnVsbF90YWIgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKGlkIElTIE5PVCBOVUxMKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIG51bGxfdGFiIHQyCisoMTMgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRl IGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCist LSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3Rf bnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAgRlJPTSBu dWxsX3RhYiB0MQorICAgIElOTkVSIEpPSU4gbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAor ICAgIExFRlQgSk9JTiBudWxsX3RhYiB0MyBPTiBUUlVFCispOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFudGkgSm9pbgorICAgTWVyZ2UgQ29u ZDogKG5vdF9udWxsX3RhYi5pZCA9IHQxLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQg S2V5OiBub3RfbnVsbF90YWIuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90 YWIKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBNZXJnZSBKb2lu CisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0Mi5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MQorICAgICAgICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiIHQyCisgICAgICAgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0Mwor KDE2IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxM IGFuZCBpcyBub3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4sCistLSBpbm5lciBzaWRlIGlzIGRlZmlu ZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxf dGFiIHQxCitMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKK1dIRVJF IHQxLmlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBMZWZ0IEpvaW4K KyAgIE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0MS5pZAorICAgICAgICAgLT4gIEhhc2ggQW50aSBKb2luCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MS5pZCA9IG5vdF9udWxsX3RhYi5pZCkKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g bm90X251bGxfdGFiIHQyCisoMTIgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRl IGlzIG51bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9 IHQyLmlkCitXSEVSRSB0Mi5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTWVyZ2UgTGVmdCBKb2luCisgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0 Mi5pZCkKKyAgIEZpbHRlcjogKE5PVCAoQU5ZICh0Mi5pZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlf MSkuY29sMSkpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5pZAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAgLT4gIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0 MgorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCiso MTEgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBzdWJsaW5rIGlzIGluIGFuIG91dGVyIGpvaW4n cyBPTiBxdWFsIGFuZCByZWZlcmVuY2VzIHRoZQorLS0gbm9uLW51bGxhYmxlIHNpZGUKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4g bm90X251bGxfdGFiIHQyCitPTiB0MS5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxs X3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAg Sm9pbiBGaWx0ZXI6IChOT1QgKEFOWSAodDEuaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNv bDEpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MgorICAgU3ViUGxh biBhbnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoNyByb3dzKQorCist LSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBhbmQgaXMgbm90IG51 bGxlZCBieSBvdXRlciBqb2luLAorLS0gaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBK T0lOIG5vdF9udWxsX3RhYiB0MgorT04gdDIuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3Rf bnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxs X3RhYiB0MQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSGFzaCBBbnRpIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLmlkID0gbm90X251bGxfdGFiLmlkKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MgorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIKKyg4IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBhcmUgZGVmaW5lZCBO T1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIK K1dIRVJFIChpZCwgdmFsKSBOT1QgSU4gKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQW50aSBKb2luCisgICBN ZXJnZSBDb25kOiAoKG5vdF9udWxsX3RhYi5pZCA9IG5vdF9udWxsX3RhYl8xLmlkKSBBTkQgKG5v dF9udWxsX3RhYi52YWwgPSBub3RfbnVsbF90YWJfMS52YWwpKQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBub3RfbnVsbF90YWIuaWQsIG5vdF9udWxsX3RhYi52YWwKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0 IEtleTogbm90X251bGxfdGFiXzEuaWQsIG5vdF9udWxsX3RhYl8xLnZhbAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVsbF90YWJfMQorKDggcm93cykKKworLS0g QU5USSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgTk9UIChpZCwgdmFsKSA+ IEFOWSAoU0VMRUNUIGlkLCB2YWwgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBBbnRpIEpvaW4KKyAgIEpvaW4gRmls dGVyOiAoUk9XKG5vdF9udWxsX3RhYi5pZCwgbm90X251bGxfdGFiLnZhbCkgPiBST1cobm90X251 bGxfdGFiXzEuaWQsIG5vdF9udWxsX3RhYl8xLnZhbCkpCisgICAtPiAgU2VxIFNjYW4gb24gbm90 X251bGxfdGFiCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBu b3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg1IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjog b25lIGNvbHVtbiBvZiB0aGUgb3V0ZXIgc2lkZSBpcyBudWxsYWJsZQorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEsIG51bGxfdGFiIHQyCitXSEVSRSAo dDEuaWQsIHQyLmlkKSBOT1QgSU4gKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKE5PVCAoQU5ZICgodDEuaWQgPSAoaGFzaGVkIFN1 YlBsYW4gYW55XzEpLmNvbDEpIEFORCAodDIuaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNv bDIpKSkpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MgorICAgU3ViUGxhbiBh bnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoNyByb3dzKQorCistLSBO byBBTlRJIEpPSU46IG9uZSBjb2x1bW4gb2YgdGhlIGlubmVyIHNpZGUgaXMgbnVsbGFibGUKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSAoaWQs IHZhbCkgTk9UIElOIChTRUxFQ1QgdDEuaWQsIHQyLmlkIEZST00gbm90X251bGxfdGFiIHQxLCBu dWxsX3RhYiB0Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIEZpbHRlcjog KE5PVCAoQU5ZICgoaWQgPSAoU3ViUGxhbiBhbnlfMSkuY29sMSkgQU5EICh2YWwgPSAoU3ViUGxh biBhbnlfMSkuY29sMikpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gbm90X251bGxfdGFiIHQxCisgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDIKKyg4IHJv d3MpCisKKy0tIEFOVEkgSk9JTjogQ09BTEVTQ0UobnVsbGFibGUsIGNvbnN0YW50KSBpcyBub24t bnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dI RVJFIENPQUxFU0NFKGlkLCAtMSkgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhh c2ggQ29uZDogKENPQUxFU0NFKG51bGxfdGFiLmlkLCAnLTEnOjppbnRlZ2VyKSA9IG5vdF9udWxs X3RhYi5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyg1IHJvd3MpCisKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNF TEVDVCBDT0FMRVNDRShpZCwgLTEpIEZST00gbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9udWxsX3Rh Yi5pZCA9IENPQUxFU0NFKG51bGxfdGFiLmlkLCAnLTEnOjppbnRlZ2VyKSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gbnVsbF90YWIKKyg1IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogR1JPVVAgQlkgKHdpdGhvdXQg R3JvdXBpbmcgU2V0cykgcHJlc2VydmVzIHRoZSBub24tbnVsbGFiaWxpdHkgb2YKKy0tIHRoZSBj b2x1bW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitX SEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYiBHUk9VUCBCWSBpZCk7 CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90X251bGxfdGFiLmlk ID0gbm90X251bGxfdGFiXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdy b3VwIEtleTogbm90X251bGxfdGFiXzEuaWQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg3IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9J TjogR1JPVVAgQlkgb24gYSBudWxsYWJsZSBjb2x1bW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9N IG51bGxfdGFiIEdST1VQIEJZIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIK KyAgIEZpbHRlcjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkp KQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICBH cm91cCBLZXk6IG51bGxfdGFiLmlkCisgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3Rh YgorKDYgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBHcm91cGluZyBTZXRzIGNhbiBpbnRyb2R1 Y2UgTlVMTHMKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFi CitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCBpZAorICAgIEZST00gbm90X251bGxfdGFi CisgICAgR1JPVVAgQlkgR1JPVVBJTkcgU0VUUyAoKGlkKSwgKHZhbCkpCispOworICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhhc2hl ZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBIYXNo QWdncmVnYXRlCisgICAgICAgICAgIEhhc2ggS2V5OiBub3RfbnVsbF90YWJfMS5pZAorICAgICAg ICAgICBIYXNoIEtleTogbm90X251bGxfdGFiXzEudmFsCisgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg3IHJvd3MpCisKKy0tIGNyZWF0ZSBh IGN1c3RvbSAidW5zYWZlIiBlcXVhbGl0eSBvcGVyYXRvcgorQ1JFQVRFIEZVTkNUSU9OIGludDRl cV91bnNhZmUoaW50NCwgaW50NCkKKyAgICBSRVRVUk5TIGJvb2wKKyAgICBBUyAnaW50NGVxJwor ICAgIExBTkdVQUdFIGludGVybmFsIElNTVVUQUJMRTsKK0NSRUFURSBPUEVSQVRPUiA/PSAoCisg ICAgUFJPQ0VEVVJFID0gaW50NGVxX3Vuc2FmZSwKKyAgICBMRUZUQVJHID0gaW50NCwKKyAgICBS SUdIVEFSRyA9IGludDQKKyk7CistLSBObyBBTlRJIEpPSU46IHRoZSBvcGVyYXRvciBpcyBub3Qg c2FmZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dI RVJFIE5PVCBpZCA/PSBBTlkgKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAoaWQgPz0gKFN1YlBsYW4g YW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg1 IHJvd3MpCisKK1JPTExCQUNLOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vi c2VsZWN0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKaW5kZXggY2Fk YzMyOTM2ODcuLjRjZDAxNmY0YWMzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dWJzZWxlY3Quc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKQEAg LTE0NDgsMyArMTQ0OCwxODggQEAgU0VMRUNUICogRlJPTSBvbmVrIHQxLCBsYXRlcmFsIChTRUxF Q1QgKiBGUk9NIG9uZWsgdDIgV0hFUkUgdDIudGVuIElOICh2YWx1ZXMgKHQKIC0tIFZ0QSBjYXVz ZXMgdGhlIHdob2xlIGV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGFzIGEgY29uc3RhbnQKIEVY UExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0ZW4gRlJPTSBvbmVrIHQgV0hFUkUgMS4wOjppbnRl Z2VyIElOICgoVkFMVUVTICgxKSwgKDMpKSk7CisKKy0tCistLSBDaGVjayBOT1QgSU4gcGVyZm9y bXMgYW4gQU5USSBKT0lOIHdoZW4gYm90aCB0aGUgb3V0ZXIgcXVlcnkncyBleHByZXNzaW9ucwor LS0gYW5kIHRoZSBzdWItc2VsZWN0J3Mgb3V0cHV0IGNvbHVtbnMgYXJlIHByb3ZhYmx5IG5vbi1u dWxsYWJsZSwgYW5kIHRoZQorLS0gb3BlcmF0b3IgaXRzZWxmIGNhbm5vdCByZXR1cm4gTlVMTCBm b3Igbm9uLW51bGwgaW5wdXRzLgorLS0KKworQkVHSU47CisKK0NSRUFURSBURU1QIFRBQkxFIG5v dF9udWxsX3RhYiAoaWQgaW50IE5PVCBOVUxMLCB2YWwgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBU RU1QIFRBQkxFIG51bGxfdGFiIChpZCBpbnQsIHZhbCBpbnQpOworCistLSBBTlRJIEpPSU46IGJv dGggc2lkZXMgYXJlIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5v dF9udWxsX3RhYik7CisKKy0tIE5vIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxsYWJsZQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgaWQgTk9U IElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJIEpPSU46IGlu bmVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g bm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiKTsK KworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNp ZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VM RUNUIGlkIEZST00gbnVsbF90YWIgV0hFUkUgaWQgSVMgTk9UIE5VTEwpOworCistLSBObyBBTlRJ IEpPSU46IG91dGVyIHNpZGUgaXMgbnVsbGFibGUgKHdlIGRvbid0IGNoZWNrIG91dGVyIHF1ZXJ5 IHF1YWxzIGZvciBub3cpCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxf dGFiCitXSEVSRSBpZCBJUyBOT1QgTlVMTAorICBBTkQgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJP TSBub3RfbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBO T1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCistLSBhbmQgaXMgbm90IG51 bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5v dF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9N IG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIgT04gdDEuaWQg PSB0Mi5pZAorKTsKKworLS0gTm8gQU5USSBKT0lOOiBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9U IE5VTEwgYnV0IGlzIG51bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1Qg dDIuaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBub3RfbnVsbF90 YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorKTsKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlz IGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBi eSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVs bF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQyLmlkCisgICAgRlJPTSBub3Rf bnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIu aWQKKyAgICBXSEVSRSB0Mi5pZCBJUyBOT1QgTlVMTAorKTsKKworLS0gQU5USSBKT0lOOiBvdXRl ciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxh YmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAg RlJPTSBudWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBudWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQy LmlkCisgICAgV0hFUkUgdDEuaWQgSVMgTk9UIE5VTEwKKyk7CisKKy0tIEFOVEkgSk9JTjogb3V0 ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxs YWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0MS5pZAorICAg IEZST00gbnVsbF90YWIgdDEKKyAgICBJTk5FUiBKT0lOIG51bGxfdGFiIHQyIE9OIHQxLmlkID0g dDIuaWQKKyAgICBMRUZUIEpPSU4gbnVsbF90YWIgdDMgT04gVFJVRQorKTsKKworLS0gQU5USSBK T0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwgYW5kIGlzIG5vdCBudWxsZWQgYnkg b3V0ZXIgam9pbiwKKy0tIGlubmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3Rf bnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorV0hFUkUgdDEuaWQgTk9UIElOIChTRUxFQ1Qg aWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMg bnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g bm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIu aWQKK1dIRVJFIHQyLmlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKwor LS0gTm8gQU5USSBKT0lOOiBzdWJsaW5rIGlzIGluIGFuIG91dGVyIGpvaW4ncyBPTiBxdWFsIGFu ZCByZWZlcmVuY2VzIHRoZQorLS0gbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4gbm90X251bGxfdGFi IHQyCitPTiB0MS5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKKy0t IEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMIGFuZCBpcyBub3QgbnVs bGVkIGJ5IG91dGVyIGpvaW4sCistLSBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxCitMRUZUIEpP SU4gbm90X251bGxfdGFiIHQyCitPTiB0Mi5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9u dWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVM TAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJF IChpZCwgdmFsKSBOT1QgSU4gKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsKKwor LS0gQU5USSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgTk9UIChpZCwgdmFs KSA+IEFOWSAoU0VMRUNUIGlkLCB2YWwgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJ IEpPSU46IG9uZSBjb2x1bW4gb2YgdGhlIG91dGVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxLCBudWxsX3RhYiB0Mgor V0hFUkUgKHQxLmlkLCB0Mi5pZCkgTk9UIElOIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxs X3RhYik7CisKKy0tIE5vIEFOVEkgSk9JTjogb25lIGNvbHVtbiBvZiB0aGUgaW5uZXIgc2lkZSBp cyBudWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90 YWIKK1dIRVJFIChpZCwgdmFsKSBOT1QgSU4gKFNFTEVDVCB0MS5pZCwgdDIuaWQgRlJPTSBub3Rf bnVsbF90YWIgdDEsIG51bGxfdGFiIHQyKTsKKworLS0gQU5USSBKT0lOOiBDT0FMRVNDRShudWxs YWJsZSwgY29uc3RhbnQpIGlzIG5vbi1udWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgQ09BTEVTQ0UoaWQsIC0xKSBOT1QgSU4gKFNFTEVD VCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBDT0FMRVNDRShpZCwg LTEpIEZST00gbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IEdST1VQIEJZICh3aXRob3V0IEdy b3VwaW5nIFNldHMpIHByZXNlcnZlcyB0aGUgbm9uLW51bGxhYmlsaXR5IG9mCistLSB0aGUgY29s dW1uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hF UkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIgR1JPVVAgQlkgaWQpOwor CistLSBObyBBTlRJIEpPSU46IEdST1VQIEJZIG9uIGEgbnVsbGFibGUgY29sdW1uCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElO IChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYiBHUk9VUCBCWSBpZCk7CisKKy0tIE5vIEFOVEkgSk9J TjogR3JvdXBpbmcgU2V0cyBjYW4gaW50cm9kdWNlIE5VTExzCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxF Q1QgaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYgorICAgIEdST1VQIEJZIEdST1VQSU5HIFNFVFMg KChpZCksICh2YWwpKQorKTsKKworLS0gY3JlYXRlIGEgY3VzdG9tICJ1bnNhZmUiIGVxdWFsaXR5 IG9wZXJhdG9yCitDUkVBVEUgRlVOQ1RJT04gaW50NGVxX3Vuc2FmZShpbnQ0LCBpbnQ0KQorICAg IFJFVFVSTlMgYm9vbAorICAgIEFTICdpbnQ0ZXEnCisgICAgTEFOR1VBR0UgaW50ZXJuYWwgSU1N VVRBQkxFOworCitDUkVBVEUgT1BFUkFUT1IgPz0gKAorICAgIFBST0NFRFVSRSA9IGludDRlcV91 bnNhZmUsCisgICAgTEVGVEFSRyA9IGludDQsCisgICAgUklHSFRBUkcgPSBpbnQ0CispOworCist LSBObyBBTlRJIEpPSU46IHRoZSBvcGVyYXRvciBpcyBub3Qgc2FmZQorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIE5PVCBpZCA/PSBBTlkgKFNF TEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKK1JPTExCQUNLOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCAzMjUwNTY0ZDRmZi4uODA4MGRjMTZhZmEgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0xNzg4LDYgKzE3ODgsNyBAQCBOb2RlCiBOb2RlVGFnCiBOb25FbXB0eVJh bmdlCiBOb25lQ29tcHJlc3NvclN0YXRlCitOb3ROdWxsU291cmNlCiBOb3RpZmljYXRpb24KIE5v dGlmaWNhdGlvbkxpc3QKIE5vdGlmeVN0bXQKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000e90295064c8f7413--