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 1vz9K7-000k8k-0g for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Mar 2026 08:17:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vz9K5-00AMqj-24 for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Mar 2026 08:17:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vz9K4-00AMqb-37 for pgsql-hackers@lists.postgresql.org; Sun, 08 Mar 2026 08:17:13 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vz9K3-000000016t5-0dQ8 for pgsql-hackers@lists.postgresql.org; Sun, 08 Mar 2026 08:17:12 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-4043b27ddeaso4161316fac.1 for ; Sun, 08 Mar 2026 00:17:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772957830; cv=none; d=google.com; s=arc-20240605; b=ejMKzRpm6FxlpLzbLt/GEhA163rPxR/FY3ybQnwKABy/PpIym1v362Rw02AB1vy+Q2 a4oa1hQKx/bTO3EQ964RBZZXBPLsL9rvMvBRR90ftw1GtEs8Cy4b3saFbqHLOvp2JlU2 PIXMN5Y0UoUIjhdcm8utdWXYPgXCiRg0vYDT+QKAUFnihuouxRpKE4t0if2qHUGF7VEL aXRy4zMPQeJ9+x0rHnpQ+qDHG0CDqlRL3UInk+c5rte40iKhorKz2ofUAdz2hgurWzsM zt0RFzd1niij12Uz/gbw9PpNyd16pRyqcrhPooXimwbOEmQU+HyTjXK0GgpiVQAYpgVe ziFw== 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=l2j0rCY66wuDKbaqBCcp7Le70uwRGJrS675e0v1rad0=; fh=v6nJgfHp7g344M9taESI/6Oe1cZmsCWtnl1iZP6WaLU=; b=VyaW7J4UT6ITbNvMxF+LSMkvx9LGG5+PJV9/BBUpmkYz81u4sQsRoaguNTifEek+C1 mnBAh8U6Ky326aPU7PoWb02dOm/ZjJjvm6Mv6BHg9xMBjHtsSvrq+3eNuvyd+h7ZFFRl 0e5/CMB08vyiaHWIsEwZKNqjHr+RrrSeLc/HHgbFzixFy8M26/lNVInevbtgP8VBvGbz v4rG6bIO9LTPwM+99Z2qbouTfshE3/azg5ULYxg34WzKnOC1aa2RGlrFNJomxlAIJtMg S5X1hphOT4w93qkmkutQ6TViLLxBl0CN7tjcsuFZ5PBzj+EttrVRbo6RSuFx9nJG+AQf dsmA==; 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=1772957830; x=1773562630; 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=l2j0rCY66wuDKbaqBCcp7Le70uwRGJrS675e0v1rad0=; b=iGAQvZM35wEF2HVLcvZfr59O6vsQ4Eelf+Nr0Cd/cqbIOF4MWxIBIj+sJL87lbt5LQ hx9cIkezdTSusbWBHDZJ8OCj1xjEFktilm7d+ah/MQSAo3Kv/vVyzVuv0dk8Ne95cjnL uWuHZnUmZtQ9GgfxJh9vSb+WMAwRjwBvP4yslaLZLkzkBBxngTCUQM+/AhUcrg9YThSS t4ZGINQ1N1hyUYD6PploIzuQDTNTy+47fUqTDZguR+se/WudCIUz+uSdLA43BCW99KlO zo2rPpZIVYKvjPPcgc90bQTs3W5n+wWuelbTrVh0uqyyd3iWVRDOu13uGkBTcQi5zoEa zlSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772957830; x=1773562630; 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=l2j0rCY66wuDKbaqBCcp7Le70uwRGJrS675e0v1rad0=; b=HgkSQv8F15S4I2Y7av5WilGIGGMn7c2/WEV1HS9mjOHpHd43/Dx+VxBE1V4FePzPg+ gHGCUJxBYUVZM5DDRL48Zv9xp5LkMx3GKzVnS+vyqUxKzfk64zoRBVX68Gm9vdXI59qi Dn+twzuOkT81kgOD99wDkr0Hu7T9iYD4Mrorj7jpI6wx2uT5mpJmyXZTXgbByGRYOz/U 8VVUng/lSR0jgtHlW0MAONbfXMMd78eoRtsjOCSNZYofxlEyl/4l+OOARnzH3WgbmwZQ SV0LhmncZ9J0gIH+RZuj37Ev9qayKXwrm+iDVeg+ZHUMimpO/+QB33kOxXEGuK8x62fq l0uw== X-Gm-Message-State: AOJu0YwvfetGlbGsnvbs6kqIFk+5CNX/nS4vbB9rLs3LuvbJgKFCghb7 YQVCNdCJ8wPMwz3RD/+Wm8NIDX9lYo2VXBRhAwgYCFoXNLVkBSDG1/qhvyujAC1pvTqtSotVDRL lbvv3CzJsJkq31okqVVbgbY6uFpqP9sMmSV/a X-Gm-Gg: ATEYQzynaNWnGw2V6jvKrFP9C2/55ypGo43t5akFehK7jqUNfJD43REFMw0MZcRSU38 w/eMnOxv+EqfP7780IAo/3+EMMEsbreoSPZYMDk+nXeTT7TIAvHDgj1TeGd8lqEeDoNQTwruTxo Ot+43Eq4TcMyW8cTnb/xgYs4hjqPAvSJ/On6dmtYhwMfL1maCJratP0qjg58q4Bu1eOZtk+kw0s Vf+diF6yl4XYXq6ttJgbFJnks78qEhzW4CrkmpQAzU40IfM3/elS/EHfTA9LR2Rnn3nreY9AkBU 40t9TeGHXg== X-Received: by 2002:a05:6870:44cf:b0:40e:e8eb:b74b with SMTP id 586e51a60fabf-416e44a44b6mr4439249fac.35.1772957830327; Sun, 08 Mar 2026 00:17:10 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Sun, 8 Mar 2026 17:16:58 +0900 X-Gm-Features: AaiRm52AIYZerBiZDM1dwcxFknomMwcRCsvjRpd2ZNxHj2aEzE76jHzxh119NpU Message-ID: Subject: Re: Convert NOT IN sublinks to anti-joins when safe To: Japin Li Cc: Pg Hackers Content-Type: multipart/mixed; boundary="000000000000adc72c064c7ee92e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000adc72c064c7ee92e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 5, 2026 at 10:57=E2=80=AFAM Japin Li wrot= e: > Just a quick note: I think `foreach_ptr` is more appropriate here than `f= oreach`. Agreed. For homogeneous lists, it is better to use foreach_node so we get the additional type-safety assertions in dev builds. For heterogeneous lists, we should use foreach_ptr. 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. - Richard --000000000000adc72c064c7ee92e Content-Type: application/octet-stream; name="v5-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Disposition: attachment; filename="v5-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmhhaxid0 RnJvbSA4MDgzMDQzYWQ1OWI1ZjM1NTQwZWY5OTdmZDBmNjhmZGFmYzNiY2M2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxMjoyOTo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjVd 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 ODEgKysrKysrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyAgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jICAg ICAgIHwgIDY4ICsrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmggICAgICAgICAg IHwgICAxICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgIHwgIDEz ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmggICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCAgICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgICB8IDQzOSArKysrKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgICB8IDE4NSAr KysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAx ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDEyNjIgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0p 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 dGlsL2NsYXVzZXMuYwppbmRleCBhNDFkODE3MzRjZi4uOTg1MmJhNTc2MmIgMTAwNjQ0Ci0tLSBh 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 ZSBwZXItcmVsCkBAIC0yMDIxLDYgKzIwMjcsMjI3IEBAIGZpbmRfZm9yY2VkX251bGxfdmFyKE5v 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 c3NpbmcsIHdlIG11c3QgYXBwbHkgZmxhdHRlbl9qb2luX2FsaWFzX3ZhcnMgdG8gdGhlIGdpdmVu CisJCSAqIGV4cHJlc3Npb24sIGFuZCB0byB0aGUgcXVhbHMgZm91bmQgYnkgZmluZF9zdWJxdWVy eV9zYWZlX3F1YWxzLCB0bworCQkgKiBhdm9pZCBiZWluZyBmb29sZWQgYnkgam9pbiBhbGlhc2Vz LgorCQkgKgorCQkgKiBXZSB3b24ndCBiZSBkZWFsaW5nIHdpdGggYXJiaXRyYXJ5IGV4cHJlc3Np b25zLCBzbyBpdCdzIHNhZmUgdG8gdXNlCisJCSAqIE5VTEwgYXMgdGhlIHJvb3QsIHNvIGxvbmcg YXMgYWRqdXN0X3N0YW5kYXJkX2pvaW5fYWxpYXNfZXhwcmVzc2lvbgorCQkgKiBjYW4gaGFuZGxl IGV2ZXJ5dGhpbmcgdGhlIHBhcnNlciB3b3VsZCBtYWtlIGFzIGEgam9pbiBhbGlhcworCQkgKiBl eHByZXNzaW9uLgorCQkgKi8KKwkJZXhwciA9IChFeHByICopIGZsYXR0ZW5fam9pbl9hbGlhc192 YXJzKE5VTEwsIHF1ZXJ5LCAoTm9kZSAqKSBleHByKTsKKworCQkvKgorCQkgKiBTaW1pbGFybHks IHdlIG11c3QgYXBwbHkgZmxhdHRlbl9ncm91cF9leHBycyB0byB0aGUgZ2l2ZW4KKwkJICogZXhw cmVzc2lvbiB0byBhdm9pZCBiZWluZyBmb29sZWQgYnkgZ3JvdXBpbmcgVmFycy4gIFdlIGRvIG5v dCBuZWVkCisJCSAqIHRvIGFwcGx5IGZsYXR0ZW5fZ3JvdXBfZXhwcnMgdG8gdGhlIHF1YWxzIGZv dW5kIGJ5CisJCSAqIGZpbmRfc3VicXVlcnlfc2FmZV9xdWFscyB0aG91Z2gsIGFzIGdyb3VwaW5n IFZhcnMgY2Fubm90IGFwcGVhciBpbgorCQkgKiBqb2ludHJlZSBxdWFscy4KKwkJICoKKwkJICog V2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBkb2VzIG5vdCBjb250YWluIGdyb3VwaW5n IHNldHMsIHNvCisJCSAqIGl0J3Mgc2FmZSB0byB1c2UgTlVMTCBhcyB0aGUgcm9vdCBoZXJlLgor CQkgKi8KKwkJZXhwciA9IChFeHByICopIGZsYXR0ZW5fZ3JvdXBfZXhwcnMoTlVMTCwgcXVlcnks IChOb2RlICopIGV4cHIpOworCisJCS8qCisJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZXhwciBj YW5ub3QgYmUgTlVMTC4gIFNpbmNlIHdlJ3JlIG9uIGEgcmF3CisJCSAqIHBhcnNlIHRyZWUsIHdl IG5lZWQgdG8gbG9vayB1cCB0aGUgbm90LW51bGwgY29uc3RyYWludHMgZnJvbSB0aGUKKwkJICog c3lzdGVtIGNhdGFsb2dzLgorCQkgKi8KKwkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUoJnN1YnJv b3QsIGV4cHIsIE5PVE5VTExfU09VUkNFX1NZU0NBQ0hFKSkKKwkJCWNvbnRpbnVlOworCisJCWlm IChJc0EoZXhwciwgVmFyKSkKKwkJeworCQkJVmFyCQkgICAqdmFyID0gKFZhciAqKSBleHByOwor CisJCQkvKgorCQkJICogRm9yIGEgcGxhaW4gVmFyLCBldmVuIGlmIHRoYXQgZGlkbid0IHdvcmss IHdlIGNhbiBjb25jbHVkZSB0aGF0CisJCQkgKiB0aGUgVmFyIGlzIG5vdCBudWxsYWJsZSBpZiBm aW5kX25vbm51bGxhYmxlX3ZhcnMgY2FuIGZpbmQgYQorCQkJICogInZhciBJUyBOT1QgTlVMTCIg b3Igc2ltaWxhcmx5IHN0cmljdCBjb25kaXRpb24gYW1vbmcgdGhlIHF1YWxzCisJCQkgKiBvbiBu b24tb3V0ZXJqb2luZWQtcmVscy4gIENvbXB1dGUgdGhlIGxpc3Qgb2YgVmFycyBoYXZpbmcgc3Vj aAorCQkJICogcXVhbHMgaWYgd2UgZGlkbid0IGFscmVhZHkuCisJCQkgKi8KKwkJCWlmICghY29t cHV0ZWRfbm9ubnVsbGFibGVfdmFycykKKwkJCXsKKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVh bHMoKE5vZGUgKikgcXVlcnktPmpvaW50cmVlLCAmc2FmZV9xdWFscyk7CisJCQkJc2FmZV9xdWFs cyA9IChMaXN0ICopCisJCQkJCWZsYXR0ZW5fam9pbl9hbGlhc192YXJzKE5VTEwsIHF1ZXJ5LCAo Tm9kZSAqKSBzYWZlX3F1YWxzKTsKKwkJCQlub25udWxsYWJsZV92YXJzID0gZmluZF9ub25udWxs YWJsZV92YXJzKChOb2RlICopIHNhZmVfcXVhbHMpOworCQkJCWNvbXB1dGVkX25vbm51bGxhYmxl X3ZhcnMgPSB0cnVlOworCQkJfQorCisJCQlpZiAoIW1ibXNfaXNfbWVtYmVyKHZhci0+dmFybm8s CisJCQkJCQkJCXZhci0+dmFyYXR0bm8gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVt YmVyLAorCQkJCQkJCQlub25udWxsYWJsZV92YXJzKSkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIHdl IGZhaWxlZCB0byBwcm92ZSB0aGUgVmFyIG5vbi1udWxsICovCisJCX0KKwkJZWxzZQorCQl7CisJ CQkvKiBQdW50IG90aGVyd2lzZSAqLworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMKKyAqCQlUcmF2 ZXJzZSBqb2ludHJlZSB0byBsb2NhdGUgcXVhbHMgb24gbm9uLW91dGVyam9pbmVkLXJlbHMuCisg KgorICogV2UgbG9jYXRlIGFsbCBXSEVSRSBhbmQgSk9JTi9PTiBxdWFscyB0aGF0IGNvbnN0cmFp biB0aGUgcmVscyB0aGF0IGFyZSBub3QKKyAqIGJlbG93IHRoZSBudWxsYWJsZSBzaWRlIG9mIGFu eSBvdXRlciBqb2luLCBhbmQgYWRkIHRoZW0gdG8gdGhlICpzYWZlX3F1YWxzCisgKiBsaXN0IChm b3JtaW5nIGEgbGlzdCB3aXRoIGltcGxpY2l0LUFORCBzZW1hbnRpY3MpLiAgVGhlc2UgcXVhbHMg Y2FuIGJlIHVzZWQKKyAqIHRvIHByb3ZlIG5vbi1udWxsYWJpbGl0eSBvZiB0aGUgc3VicXVlcnkn cyBvdXRwdXRzLgorICoKKyAqIFRvcC1sZXZlbCBjYWxsZXIgbXVzdCBpbml0aWFsaXplICpzYWZl X3F1YWxzIHRvIE5JTC4KKyAqLworc3RhdGljIHZvaWQKK2ZpbmRfc3VicXVlcnlfc2FmZV9xdWFs cyhOb2RlICpqdG5vZGUsIExpc3QgKipzYWZlX3F1YWxzKQoreworCWlmIChqdG5vZGUgPT0gTlVM TCkKKwkJcmV0dXJuOworCWlmIChJc0EoanRub2RlLCBSYW5nZVRibFJlZikpCisJeworCQkvKiBM ZWFmIG5vZGU6IG5vdGhpbmcgdG8gZG8gKi8KKwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChJc0Eo anRub2RlLCBGcm9tRXhwcikpCisJeworCQlGcm9tRXhwciAgICpmID0gKEZyb21FeHByICopIGp0 bm9kZTsKKworCQkvKiBBbGwgZWxlbWVudHMgb2YgdGhlIEZST00gbGlzdCBhcmUgYWxsb3dhYmxl ICovCisJCWZvcmVhY2hfcHRyKE5vZGUsIGNoaWxkX25vZGUsIGYtPmZyb21saXN0KQorCQkJZmlu ZF9zdWJxdWVyeV9zYWZlX3F1YWxzKGNoaWxkX25vZGUsIHNhZmVfcXVhbHMpOworCQkvKiAuLi4g YW5kIGl0cyBXSEVSRSBxdWFscyBhcmUgdG9vICovCisJCWlmIChmLT5xdWFscykKKwkJCSpzYWZl X3F1YWxzID0gbGFwcGVuZCgqc2FmZV9xdWFscywgZi0+cXVhbHMpOworCX0KKwllbHNlIGlmIChJ c0EoanRub2RlLCBKb2luRXhwcikpCisJeworCQlKb2luRXhwciAgICpqID0gKEpvaW5FeHByICop IGp0bm9kZTsKKworCQlzd2l0Y2ggKGotPmpvaW50eXBlKQorCQl7CisJCQljYXNlIEpPSU5fSU5O RVI6CisJCQkJLyogdmlzaXQgYm90aCBjaGlsZHJlbiAqLworCQkJCWZpbmRfc3VicXVlcnlfc2Fm ZV9xdWFscyhqLT5sYXJnLCBzYWZlX3F1YWxzKTsKKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVh bHMoai0+cmFyZywgc2FmZV9xdWFscyk7CisJCQkJLyogYW5kIGdyYWIgdGhlIE9OIHF1YWxzIHRv byAqLworCQkJCWlmIChqLT5xdWFscykKKwkJCQkJKnNhZmVfcXVhbHMgPSBsYXBwZW5kKCpzYWZl X3F1YWxzLCBqLT5xdWFscyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSk9JTl9MRUZUOgorCQkJ Y2FzZSBKT0lOX1NFTUk6CisJCQljYXNlIEpPSU5fQU5USToKKworCQkJCS8qCisJCQkJICogT25s eSB0aGUgbGVmdCBpbnB1dCBpcyBwb3NzaWJseSBub24tbnVsbGFibGU7IGZ1cnRoZXJtb3JlLAor CQkJCSAqIHRoZSBxdWFscyBvZiB0aGlzIGpvaW4gZG9uJ3QgY29uc3RyYWluIHRoZSBsZWZ0IGlu cHV0LgorCQkJCSAqIE5vdGU6IHdlIHByb2JhYmx5IGNhbid0IHNlZSBTRU1JIG9yIEFOVEkgam9p bnMgYXQgdGhpcworCQkJCSAqIHBvaW50LCBidXQgaWYgd2UgZG8sIHdlIGNhbiB0cmVhdCB0aGVt IGxpa2UgTEVGVCBqb2lucy4KKwkJCQkgKi8KKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMo ai0+bGFyZywgc2FmZV9xdWFscyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSk9JTl9SSUdIVDoK KwkJCQkvKiBSZXZlcnNlIG9mIHRoZSBhYm92ZSBjYXNlICovCisJCQkJZmluZF9zdWJxdWVyeV9z YWZlX3F1YWxzKGotPnJhcmcsIHNhZmVfcXVhbHMpOworCQkJCWJyZWFrOworCisJCQljYXNlIEpP SU5fRlVMTDoKKwkJCQkvKiBOZWl0aGVyIHNpZGUgaXMgbm9uLW51bGxhYmxlLCBzbyBzdG9wIGRl c2NlbmRpbmcgKi8KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIGpvaW4gdHlwZTogJWQiLAorCQkJCQkgKGludCkgai0+am9pbnR5cGUpOwor CQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBu b2RlIHR5cGU6ICVkIiwKKwkJCSAoaW50KSBub2RlVGFnKGp0bm9kZSkpOworfQorCiAvKgogICog Q2FuIHdlIHRyZWF0IGEgU2NhbGFyQXJyYXlPcEV4cHIgYXMgc3RyaWN0PwogICoKQEAgLTI3Mzks NyArMjk2Niw4IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAog CiAJCQkJCQlpZiAoIWhhc19udWxsYWJsZV9ub25jb25zdCAmJgogCQkJCQkJCSFleHByX2lzX25v bm51bGxhYmxlKGNvbnRleHQtPnJvb3QsCi0JCQkJCQkJCQkJCQkgKEV4cHIgKikgbGZpcnN0KGFy ZyksIGZhbHNlKSkKKwkJCQkJCQkJCQkJCSAoRXhwciAqKSBsZmlyc3QoYXJnKSwKKwkJCQkJCQkJ CQkJCSBOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUpKQogCQkJCQkJCWhhc19udWxsYWJsZV9ub25j b25zdCA9IHRydWU7CiAJCQkJCX0KIAkJCQl9CkBAIC0zNDE4LDcgKzM2NDYsOCBAQCBldmFsX2Nv bnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCW5ld2FyZ3MgPSBsYXBw ZW5kKG5ld2FyZ3MsIGUpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KLQkJCQkJaWYgKGV4cHJfaXNf bm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgZSwgZmFsc2UpKQorCQkJCQlpZiAo ZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBlLAorCQkJCQkJCQkJ CQlOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEUpKQogCQkJCQl7CiAJCQkJCQlpZiAobmV3YXJncyA9 PSBOSUwpCiAJCQkJCQkJcmV0dXJuIGU7CS8qIGZpcnN0IGV4cHIgKi8KQEAgLTM2MTIsNyArMzg0 MSw3IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJCQkJ ICovCiAJCQkJCQlpZiAocmVsZW0gJiYKIAkJCQkJCQlleHByX2lzX25vbm51bGxhYmxlKGNvbnRl eHQtPnJvb3QsIChFeHByICopIHJlbGVtLAotCQkJCQkJCQkJCQkJZmFsc2UpKQorCQkJCQkJCQkJ CQkJTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFKSkKIAkJCQkJCXsKIAkJCQkJCQlpZiAobnRlc3Qt Pm51bGx0ZXN0dHlwZSA9PSBJU19OVUxMKQogCQkJCQkJCQlyZXR1cm4gbWFrZUJvb2xDb25zdChm YWxzZSwgZmFsc2UpOwpAQCAtMzY2NCw3ICszODkzLDggQEAgZXZhbF9jb25zdF9leHByZXNzaW9u c19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiBtYWtlQm9vbENvbnN0KHJlc3VsdCwg ZmFsc2UpOwogCQkJCX0KIAkJCQlpZiAoIW50ZXN0LT5hcmdpc3JvdyAmJiBhcmcgJiYKLQkJCQkJ ZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBhcmcsIGZhbHNlKSkK KwkJCQkJZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAqKSBhcmcsCisJ CQkJCQkJCQkJTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFKSkKIAkJCQl7CiAJCQkJCWJvb2wJCXJl c3VsdDsKIApAQCAtMzc0OSw3ICszOTc5LDkgQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19tdXRh dG9yKE5vZGUgKm5vZGUsCiAKIAkJCQkJcmV0dXJuIG1ha2VCb29sQ29uc3QocmVzdWx0LCBmYWxz ZSk7CiAJCQkJfQotCQkJCWlmIChhcmcgJiYgZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5y b290LCAoRXhwciAqKSBhcmcsIGZhbHNlKSkKKwkJCQlpZiAoYXJnICYmCisJCQkJCWV4cHJfaXNf bm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgYXJnLAorCQkJCQkJCQkJCU5PVE5V TExfU09VUkNFX0hBU0hUQUJMRSkpCiAJCQkJewogCQkJCQkvKgogCQkJCQkgKiBJZiBhcmcgaXMg cHJvdmVuIG5vbi1udWxsYWJsZSwgc2ltcGxpZnkgdG8gYm9vbGVhbgpAQCAtNDM4NCwxNCArNDYx NiwxMSBAQCBzaW1wbGlmeV9hZ2dyZWYoQWdncmVmICphZ2dyZWYsIGV2YWxfY29uc3RfZXhwcmVz c2lvbnNfY29udGV4dCAqY29udGV4dCkKICAqIElmIHRoZSBWYXIgaXMgZGVmaW5lZCBOT1QgTlVM TCBhbmQgbWVhbndoaWxlIGlzIG5vdCBudWxsZWQgYnkgYW55IG91dGVyCiAgKiBqb2lucyBvciBn cm91cGluZyBzZXRzLCB0aGVuIHdlIGNhbiBrbm93IHRoYXQgaXQgY2Fubm90IGJlIE5VTEwuCiAg KgotICogdXNlX3JlbF9pbmZvIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIFJl bE9wdEluZm8gaXMgYXZhaWxhYmxlIGZvcgotICogdXNlLgorICogInNvdXJjZSIgc3BlY2lmaWVz IHdoZXJlIHdlIHNob3VsZCBsb29rIGZvciBOT1QgTlVMTCBwcm9vZnMuCiAgKi8KIGJvb2wKLXZh cl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3Jl bF9pbmZvKQordmFyX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwg Tm90TnVsbFNvdXJjZSBzb3VyY2UpCiB7Ci0JQml0bWFwc2V0ICAqbm90bnVsbGF0dG51bXMgPSBO VUxMOwotCiAJQXNzZXJ0KElzQSh2YXIsIFZhcikpOwogCiAJLyogc2tpcCB1cHBlci1sZXZlbCBW YXJzICovCkBAIC00NDA2LDM1ICs0NjM1LDg5IEBAIHZhcl9pc19ub25udWxsYWJsZShQbGFubmVy SW5mbyAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3JlbF9pbmZvKQogCWlmICh2YXItPnZhcmF0 dG5vIDwgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQkvKgotCSAqIENoZWNrIGlmIHRoZSBWYXIgaXMg ZGVmaW5lZCBhcyBOT1QgTlVMTC4gIFdlIHJldHJpZXZlIHRoZSBjb2x1bW4gTk9UCi0JICogTlVM TCBjb25zdHJhaW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgUmVsT3B0SW5m byBpZiBpdCBpcwotCSAqIGF2YWlsYWJsZTsgb3RoZXJ3aXNlLCB3ZSBzZWFyY2ggdGhlIGhhc2gg dGFibGUgZm9yIHRoaXMgaW5mb3JtYXRpb24uCi0JICovCi0JaWYgKHVzZV9yZWxfaW5mbykKLQl7 Ci0JCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgdmFyLT52YXJubyk7CisJ Lyogd2UgZG9uJ3QgdHJ1c3Qgd2hvbGUtcm93IFZhcnMgKi8KKwlpZiAodmFyLT52YXJhdHRubyA9 PSAwKQorCQlyZXR1cm4gZmFsc2U7CiAKLQkJbm90bnVsbGF0dG51bXMgPSByZWwtPm5vdG51bGxh dHRudW1zOwotCX0KLQllbHNlCisJLyogQ2hlY2sgaWYgdGhlIFZhciBpcyBkZWZpbmVkIGFzIE5P VCBOVUxMLiAqLworCXN3aXRjaCAoc291cmNlKQogCXsKLQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0g cGxhbm5lcl9ydF9mZXRjaCh2YXItPnZhcm5vLCByb290KTsKKwkJY2FzZSBOT1ROVUxMX1NPVVJD RV9SRUxPUFQ6CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSByZXRyaWV2ZSB0aGUgY29sdW1uIE5P VCBOVUxMIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24gZnJvbQorCQkJCSAqIHRoZSBjb3JyZXNwb25k aW5nIFJlbE9wdEluZm8uCisJCQkJICovCisJCQkJUmVsT3B0SW5mbyAqcmVsOworCQkJCUJpdG1h cHNldCAgKm5vdG51bGxhdHRudW1zOwogCi0JCS8qCi0JCSAqIFdlIG11c3Qgc2tpcCBpbmhlcml0 YW5jZSBwYXJlbnQgdGFibGVzLCBhcyBzb21lIGNoaWxkIHRhYmxlcyBtYXkKLQkJICogaGF2ZSBh IE5PVCBOVUxMIGNvbnN0cmFpbnQgZm9yIGEgY29sdW1uIHdoaWxlIG90aGVycyBtYXkgbm90LiAg VGhpcwotCQkgKiBjYW5ub3QgaGFwcGVuIHdpdGggcGFydGl0aW9uZWQgdGFibGVzLCB0aG91Z2gu Ci0JCSAqLwotCQlpZiAocnRlLT5pbmggJiYgcnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEUpCi0JCQlyZXR1cm4gZmFsc2U7CisJCQkJcmVsID0gZmluZF9iYXNlX3JlbChy b290LCB2YXItPnZhcm5vKTsKKwkJCQlub3RudWxsYXR0bnVtcyA9IHJlbC0+bm90bnVsbGF0dG51 bXM7CiAKLQkJbm90bnVsbGF0dG51bXMgPSBmaW5kX3JlbGF0aW9uX25vdG51bGxhdHRzKHJvb3Qs IHJ0ZS0+cmVsaWQpOwotCX0KKwkJCQlyZXR1cm4gYm1zX2lzX21lbWJlcih2YXItPnZhcmF0dG5v LCBub3RudWxsYXR0bnVtcyk7CisJCQl9CisJCWNhc2UgTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxF OgorCQkJeworCQkJCS8qCisJCQkJICogV2UgcmV0cmlldmUgdGhlIGNvbHVtbiBOT1QgTlVMTCBj b25zdHJhaW50IGluZm9ybWF0aW9uIGZyb20KKwkJCQkgKiB0aGUgaGFzaCB0YWJsZS4KKwkJCQkg Ki8KKwkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisJCQkJQml0bWFwc2V0ICAqbm90bnVsbGF0dG51 bXM7CiAKLQlpZiAodmFyLT52YXJhdHRubyA+IDAgJiYKLQkJYm1zX2lzX21lbWJlcih2YXItPnZh cmF0dG5vLCBub3RudWxsYXR0bnVtcykpCi0JCXJldHVybiB0cnVlOworCQkJCXJ0ZSA9IHBsYW5u ZXJfcnRfZmV0Y2godmFyLT52YXJubywgcm9vdCk7CisKKwkJCQkvKiBXZSBjYW4gb25seSByZWFz b24gYWJvdXQgb3JkaW5hcnkgcmVsYXRpb25zICovCisJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCS8qCisJCQkJICogV2UgbXVz dCBza2lwIGluaGVyaXRhbmNlIHBhcmVudCB0YWJsZXMsIGFzIHNvbWUgY2hpbGQKKwkJCQkgKiB0 YWJsZXMgbWF5IGhhdmUgYSBOT1QgTlVMTCBjb25zdHJhaW50IGZvciBhIGNvbHVtbiB3aGlsZQor CQkJCSAqIG90aGVycyBtYXkgbm90LiAgVGhpcyBjYW5ub3QgaGFwcGVuIHdpdGggcGFydGl0aW9u ZWQKKwkJCQkgKiB0YWJsZXMsIHRob3VnaC4KKwkJCQkgKi8KKwkJCQlpZiAocnRlLT5pbmggJiYg cnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCXJldHVybiBm YWxzZTsKKworCQkJCW5vdG51bGxhdHRudW1zID0gZmluZF9yZWxhdGlvbl9ub3RudWxsYXR0cyhy b290LCBydGUtPnJlbGlkKTsKKworCQkJCXJldHVybiBibXNfaXNfbWVtYmVyKHZhci0+dmFyYXR0 bm8sIG5vdG51bGxhdHRudW1zKTsKKwkJCX0KKwkJY2FzZSBOT1ROVUxMX1NPVVJDRV9TWVNDQUNI RToKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGxvb2sgdXAgdGhlICJhdHRub3RudWxsIiBmaWVs ZCBpbiB0aGUgYXR0cmlidXRlCisJCQkJICogcmVsYXRpb24uCisJCQkJICovCisJCQkJUmFuZ2VU YmxFbnRyeSAqcnRlOworCisJCQkJcnRlID0gcGxhbm5lcl9ydF9mZXRjaCh2YXItPnZhcm5vLCBy b290KTsKKworCQkJCS8qIFdlIGNhbiBvbmx5IHJlYXNvbiBhYm91dCBvcmRpbmFyeSByZWxhdGlv bnMgKi8KKwkJCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJcmV0dXJu IGZhbHNlOworCisJCQkJLyoKKwkJCQkgKiBXZSBtdXN0IHNraXAgaW5oZXJpdGFuY2UgcGFyZW50 IHRhYmxlcywgYXMgc29tZSBjaGlsZAorCQkJCSAqIHRhYmxlcyBtYXkgaGF2ZSBhIE5PVCBOVUxM IGNvbnN0cmFpbnQgZm9yIGEgY29sdW1uIHdoaWxlCisJCQkJICogb3RoZXJzIG1heSBub3QuICBU aGlzIGNhbm5vdCBoYXBwZW4gd2l0aCBwYXJ0aXRpb25lZAorCQkJCSAqIHRhYmxlcywgdGhvdWdo LgorCQkJCSAqCisJCQkJICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlbGF0 aW9uIGFjdHVhbGx5IGhhcyBhbnkKKwkJCQkgKiBjaGlsZHJlbiwgYXMgd2UgbWlnaHQgbm90IGhh dmUgZG9uZSB0aGF0IHlldC4KKwkJCQkgKi8KKwkJCQlpZiAocnRlLT5pbmggJiYgaGFzX3N1YmNs YXNzKHJ0ZS0+cmVsaWQpICYmCisJCQkJCXJ0ZS0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElP TkVEX1RBQkxFKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQlyZXR1cm4gZ2V0X2F0dG5vdG51 bGwocnRlLT5yZWxpZCwgdmFyLT52YXJhdHRubyk7CisJCQl9CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAidW5yZWNvZ25pemVkIE5vdE51bGxTb3VyY2U6ICVkIiwKKwkJCQkgKGludCkgc291 cmNlKTsKKwkJCWJyZWFrOworCX0KIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTQ0NDQsMTYgKzQ3 MjcsMjIgQEAgdmFyX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwg Ym9vbCB1c2VfcmVsX2luZm8pCiAgKgogICogUmV0dXJucyB0cnVlIGlmZiB0aGUgZ2l2ZW4gJ2V4 cHInIGNhbm5vdCBwcm9kdWNlIFNRTCBOVUxMcy4KICAqCi0gKiBJZiAndXNlX3JlbF9pbmZvJyBp cyB0cnVlLCBudWxsYWJpbGl0eSBvZiBWYXJzIGlzIGNoZWNrZWQgdmlhIHRoZQotICogY29ycmVz cG9uZGluZyBSZWxPcHRJbmZvIGZvciB0aGUgZ2l2ZW4gVmFyLiAgU29tZSBjYWxsZXJzIHJlcXVp cmUKLSAqIG51bGxhYmlsaXR5IGluZm9ybWF0aW9uIGJlZm9yZSBSZWxPcHRJbmZvcyBhcmUgZ2Vu ZXJhdGVkLiAgVGhlc2Ugc2hvdWxkCi0gKiBwYXNzICd1c2VfcmVsX2luZm8nIGFzIGZhbHNlLgor ICogc291cmNlOiBzcGVjaWZpZXMgd2hlcmUgd2Ugc2hvdWxkIGxvb2sgZm9yIE5PVCBOVUxMIHBy b29mcyBmb3IgVmFycy4KKyAqCS0gTk9UTlVMTF9TT1VSQ0VfUkVMT1BUOiBVc2VkIHdoZW4gUmVs T3B0SW5mb3MgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gIFdlCisgKglyZXRyaWV2ZSBudWxsYWJpbGl0 eSBpbmZvcm1hdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBSZWxPcHRJbmZvIGNvcnJlc3BvbmRpbmcK KyAqCXRvIHRoZSBWYXIuCisgKgktIE5PVE5VTExfU09VUkNFX0hBU0hUQUJMRTogVXNlZCB3aGVu IFJlbE9wdEluZm9zIGFyZSBub3QgeWV0IGF2YWlsYWJsZSwKKyAqCWJ1dCB3ZSBoYXZlIGFscmVh ZHkgY29sbGVjdGVkIHJlbGF0aW9uLWxldmVsIG5vdC1udWxsIGNvbnN0cmFpbnRzIGludG8gdGhl CisgKglnbG9iYWwgaGFzaCB0YWJsZS4KKyAqCS0gTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEU6IFVz ZWQgZm9yIHJhdyBwYXJzZSB0cmVlcyB3aGVyZSBuZWl0aGVyCisgKglSZWxPcHRJbmZvcyBub3Ig dGhlIGhhc2ggdGFibGUgYXJlIGF2YWlsYWJsZS4gIEluIHRoaXMgY2FzZSwgd2UgaGF2ZSB0bwor ICoJbG9vayB1cCB0aGUgJ2F0dG5vdG51bGwnIGZpZWxkIGRpcmVjdGx5IGluIHRoZSBzeXN0ZW0g Y2F0YWxvZ3MuCiAgKgogICogRm9yIG5vdywgd2Ugc3VwcG9ydCBvbmx5IGEgbGltaXRlZCBzZXQg b2YgZXhwcmVzc2lvbiB0eXBlcy4gIFN1cHBvcnQgZm9yCiAgKiBhZGRpdGlvbmFsIG5vZGUgdHlw ZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCiAgKi8KIGJvb2wKLWV4cHJfaXNfbm9ubnVs bGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQor ZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgTm90TnVs bFNvdXJjZSBzb3VyY2UpCiB7CiAJLyogc2luY2UgdGhpcyBmdW5jdGlvbiByZWN1cnNlcywgaXQg Y291bGQgYmUgZHJpdmVuIHRvIHN0YWNrIG92ZXJmbG93ICovCiAJY2hlY2tfc3RhY2tfZGVwdGgo KTsKQEAgLTQ0NjMsNyArNDc1Miw3IEBAIGV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8g KnJvb3QsIEV4cHIgKmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQogCQljYXNlIFRfVmFyOgogCQkJ ewogCQkJCWlmIChyb290KQotCQkJCQlyZXR1cm4gdmFyX2lzX25vbm51bGxhYmxlKHJvb3QsIChW YXIgKikgZXhwciwgdXNlX3JlbF9pbmZvKTsKKwkJCQkJcmV0dXJuIHZhcl9pc19ub25udWxsYWJs ZShyb290LCAoVmFyICopIGV4cHIsIHNvdXJjZSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBU X0NvbnN0OgpAQCAtNDQ4MCw3ICs0NzY5LDcgQEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVy SW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9vbCB1c2VfcmVsX2luZm8pCiAKIAkJCQlmb3JlYWNo X3B0cihFeHByLCBhcmcsIGNvYWxlc2NlZXhwci0+YXJncykKIAkJCQl7Ci0JCQkJCWlmIChleHBy X2lzX25vbm51bGxhYmxlKHJvb3QsIGFyZywgdXNlX3JlbF9pbmZvKSkKKwkJCQkJaWYgKGV4cHJf aXNfbm9ubnVsbGFibGUocm9vdCwgYXJnLCBzb3VyY2UpKQogCQkJCQkJcmV0dXJuIHRydWU7CiAJ CQkJfQogCQkJfQpAQCAtNDQ5NSw3ICs0Nzg0LDcgQEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFu bmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9vbCB1c2VfcmVsX2luZm8pCiAKIAkJCQlmb3Jl YWNoX3B0cihFeHByLCBhcmcsIG1pbm1heGV4cHItPmFyZ3MpCiAJCQkJewotCQkJCQlpZiAoZXhw cl9pc19ub25udWxsYWJsZShyb290LCBhcmcsIHVzZV9yZWxfaW5mbykpCisJCQkJCWlmIChleHBy X2lzX25vbm51bGxhYmxlKHJvb3QsIGFyZywgc291cmNlKSkKIAkJCQkJCXJldHVybiB0cnVlOwog CQkJCX0KIAkJCX0KQEAgLTQ1MTEsMTMgKzQ4MDAsMTMgQEAgZXhwcl9pc19ub25udWxsYWJsZShQ bGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgYm9vbCB1c2VfcmVsX2luZm8pCiAKIAkJCQkv KiBUaGUgZGVmYXVsdCByZXN1bHQgbXVzdCBiZSBwcmVzZW50IGFuZCBub24tbnVsbGFibGUgKi8K IAkJCQlpZiAoY2FzZWV4cHItPmRlZnJlc3VsdCA9PSBOVUxMIHx8Ci0JCQkJCSFleHByX2lzX25v bm51bGxhYmxlKHJvb3QsIGNhc2VleHByLT5kZWZyZXN1bHQsIHVzZV9yZWxfaW5mbykpCisJCQkJ CSFleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGNhc2VleHByLT5kZWZyZXN1bHQsIHNvdXJjZSkp CiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qIEFsbCBicmFuY2ggcmVzdWx0cyBtdXN0IGJl IG5vbi1udWxsYWJsZSAqLwogCQkJCWZvcmVhY2hfcHRyKENhc2VXaGVuLCBjYXNld2hlbiwgY2Fz ZWV4cHItPmFyZ3MpCiAJCQkJewotCQkJCQlpZiAoIWV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwg Y2FzZXdoZW4tPnJlc3VsdCwgdXNlX3JlbF9pbmZvKSkKKwkJCQkJaWYgKCFleHByX2lzX25vbm51 bGxhYmxlKHJvb3QsIGNhc2V3aGVuLT5yZXN1bHQsIHNvdXJjZSkpCiAJCQkJCQlyZXR1cm4gZmFs c2U7CiAJCQkJfQogCkBAIC00NTY1LDcgKzQ4NTQsNyBAQCBleHByX2lzX25vbm51bGxhYmxlKFBs YW5uZXJJbmZvICpyb290LCBFeHByICpleHByLCBib29sIHVzZV9yZWxfaW5mbykKIAkJCQkgKiBu b24tbnVsbGFibGUuCiAJCQkJICovCiAJCQkJcmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9v dCwgKChSZWxhYmVsVHlwZSAqKSBleHByKS0+YXJnLAotCQkJCQkJCQkJCSAgIHVzZV9yZWxfaW5m byk7CisJCQkJCQkJCQkJICAgc291cmNlKTsKIAkJCX0KIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9pbnQ4LmMKaW5kZXggMzdkMzQ2ODViOTMuLjZjOGZiN2I3Mjc1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9pbnQ4LmMKQEAgLTgzNCw3ICs4MzQsNyBAQCBpbnQ4aW5jX3N1cHBvcnQoUEdfRlVOQ1RJT05f QVJHUykKIAkJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKIAogCQkJLyogSWYgdGhlIGFyZyBp c24ndCBOVUxMYWJsZSwgZG8gdGhlIGNvbnZlcnNpb24gKi8KLQkJCWlmIChleHByX2lzX25vbm51 bGxhYmxlKHJlcS0+cm9vdCwgYXJnLCBmYWxzZSkpCisJCQlpZiAoZXhwcl9pc19ub25udWxsYWJs ZShyZXEtPnJvb3QsIGFyZywgTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFKSkKIAkJCXsKIAkJCQlB Z2dyZWYJICAgKm5ld2FnZzsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv bHN5c2NhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwppbmRleCAx OTEzYjAwOWQ0MC4uZjEwOTQ4NDgzYjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL2xzeXNjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5j CkBAIC04NTgsNiArODU4LDQ3IEBAIGNvbXBhcmlzb25fb3BzX2FyZV9jb21wYXRpYmxlKE9pZCBv cG5vMSwgT2lkIG9wbm8yKQogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBvcF9pc19zYWZl X2luZGV4X21lbWJlcgorICoJCUNoZWNrIGlmIHRoZSBvcGVyYXRvciBpcyBhIG1lbWJlciBvZiBh IEItdHJlZSBvciBIYXNoIG9wZXJhdG9yIGZhbWlseS4KKyAqCisgKiBXZSB1c2UgdGhpcyBjaGVj ayBhcyBhIHByb3h5IGZvciAibnVsbC1zYWZldHkiOiBpZiBhbiBvcGVyYXRvciBpcyB0cnVzdGVk IGJ5CisgKiB0aGUgYnRyZWUgb3IgaGFzaCBvcGZhbWlseSwgaXQgaW1wbGllcyB0aGF0IHRoZSBv cGVyYXRvciBhZGhlcmVzIHRvIHN0YW5kYXJkCisgKiBib29sZWFuIGJlaGF2aW9yLCBhbmQgd291 bGQgbm90IHJldHVybiBOVUxMIHdoZW4gZ2l2ZW4gdmFsaWQgbm9uLW51bGwKKyAqIGlucHV0cywg YXMgZG9pbmcgc28gd291bGQgYnJlYWsgaW5kZXggaW50ZWdyaXR5LgorICovCitib29sCitvcF9p c19zYWZlX2luZGV4X21lbWJlcihPaWQgb3BubykKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsK KwlDYXRDTGlzdCAgICpjYXRsaXN0OworCWludAkJCWk7CisKKwkvKgorCSAqIFNlYXJjaCBwZ19h bW9wIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IG9wZXJhdG9yIGlzIHJlZ2lzdGVyZWQgZm9yIGFueQor CSAqIGJ0cmVlIG9yIGhhc2ggb3BmYW1pbHkuCisJICovCisJY2F0bGlzdCA9IFNlYXJjaFN5c0Nh Y2hlTGlzdDEoQU1PUE9QSUQsIE9iamVjdElkR2V0RGF0dW0ob3BubykpOworCisJZm9yIChpID0g MDsgaSA8IGNhdGxpc3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVhcFR1cGxlCXR1cGxlID0g JmNhdGxpc3QtPm1lbWJlcnNbaV0tPnR1cGxlOworCQlGb3JtX3BnX2Ftb3AgYWZvcm0gPSAoRm9y bV9wZ19hbW9wKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIENoZWNrIGlmIHRoZSBBTSBpcyBC LXRyZWUgb3IgSGFzaCAqLworCQlpZiAoYWZvcm0tPmFtb3BtZXRob2QgPT0gQlRSRUVfQU1fT0lE IHx8CisJCQlhZm9ybS0+YW1vcG1ldGhvZCA9PSBIQVNIX0FNX09JRCkKKwkJeworCQkJcmVzdWx0 ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJUmVsZWFzZVN5c0NhY2hlTGlzdChjYXRs aXN0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIAogLyoJCQkJLS0tLS0tLS0tLSBBTVBST0Mg Q0FDSEVTIC0tLS0tLS0tLS0JCQkJCQkgKi8KIApAQCAtMTA3MSw2ICsxMTEyLDMzIEBAIGdldF9h dHRvcHRpb25zKE9pZCByZWxpZCwgaW50MTYgYXR0bnVtKQogCXJldHVybiByZXN1bHQ7CiB9CiAK Ky8qCisgKiBnZXRfYXR0bm90bnVsbAorICoKKyAqCQlHaXZlbiB0aGUgcmVsYXRpb24gaWQgYW5k IHRoZSBhdHRyaWJ1dGUgbnVtYmVyLAorICoJCXJldHVybiB0aGUgImF0dG5vdG51bGwiIGZpZWxk IGZyb20gdGhlIGF0dHJpYnV0ZSByZWxhdGlvbi4KKyAqLworYm9vbAorZ2V0X2F0dG5vdG51bGwo T2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSkKK3sKKwlIZWFwVHVwbGUJdHA7CisJYm9vbAkJ cmVzdWx0ID0gZmFsc2U7CisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMihBVFROVU0sCisJCQkJCQkg T2JqZWN0SWRHZXREYXR1bShyZWxpZCksCisJCQkJCQkgSW50MTZHZXREYXR1bShhdHRudW0pKTsK KworCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0 dF90dXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVCh0cCk7CisKKwkJcmVzdWx0ID0g YXR0X3R1cC0+YXR0bm90bnVsbDsKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl9CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCiAvKgkJCQktLS0tLS0tLS0tIFBHX0NBU1QgQ0FDSEUgLS0tLS0tLS0t LQkJCQkJICovCiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNl cy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMuaAppbmRleCBhNjQwMzRlOGE2ZC4u ODUzYTI4YzAwMDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmgK KysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMuaApAQCAtNDIsNiArNDIsNyBAQCBl eHRlcm4gUmVsaWRzIGZpbmRfbm9ubnVsbGFibGVfcmVscyhOb2RlICpjbGF1c2UpOwogZXh0ZXJu IExpc3QgKmZpbmRfbm9ubnVsbGFibGVfdmFycyhOb2RlICpjbGF1c2UpOwogZXh0ZXJuIExpc3Qg KmZpbmRfZm9yY2VkX251bGxfdmFycyhOb2RlICpub2RlKTsKIGV4dGVybiBWYXIgKmZpbmRfZm9y Y2VkX251bGxfdmFyKE5vZGUgKm5vZGUpOworZXh0ZXJuIGJvb2wgcXVlcnlfb3V0cHV0c19hcmVf bm90X251bGxhYmxlKFF1ZXJ5ICpxdWVyeSk7CiAKIGV4dGVybiBib29sIGlzX3BzZXVkb19jb25z dGFudF9jbGF1c2UoTm9kZSAqY2xhdXNlKTsKIGV4dGVybiBib29sIGlzX3BzZXVkb19jb25zdGFu dF9jbGF1c2VfcmVsaWRzKE5vZGUgKmNsYXVzZSwgUmVsaWRzIHJlbGlkcyk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvb3B0aW1pemVyLmgKaW5kZXggYjU2MmNhMzgwYTguLmU4YjQwOWFmYjdmIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL29wdGltaXplci5oCkBAIC0xMzAsNiArMTMwLDE0IEBAIGV4dGVybiBFeHByICpjYW5v bmljYWxpemVfcXVhbChFeHByICpxdWFsLCBib29sIGlzX2NoZWNrKTsKIAogLyogaW4gdXRpbC9j bGF1c2VzLmM6ICovCiAKKy8qIEVudW0gdG8gc3BlY2lmeSB3aGVyZSB2YXJfaXNfbm9ubnVsbGFi bGUgc2hvdWxkIGxvb2sgZm9yIE5PVCBOVUxMIHByb29mcyAqLwordHlwZWRlZiBlbnVtCit7CisJ Tk9UTlVMTF9TT1VSQ0VfUkVMT1BULAkJLyogVXNlIFJlbE9wdEluZm8gKi8KKwlOT1ROVUxMX1NP VVJDRV9IQVNIVEFCTEUsCS8qIFVzZSBHbG9iYWwgSGFzaCBUYWJsZSAqLworCU5PVE5VTExfU09V UkNFX1NZU0NBQ0hFLAkvKiBVc2UgU3lzdGVtIENhdGFsb2cgKi8KK30gTm90TnVsbFNvdXJjZTsK KwogZXh0ZXJuIGJvb2wgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9ucyhOb2RlICpjbGF1c2UpOwog ZXh0ZXJuIGJvb2wgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9uc19hZnRlcl9wbGFubmluZyhFeHBy ICpleHByKTsKIGV4dGVybiBib29sIGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKE5vZGUgKmNs YXVzZSk7CkBAIC0xNDUsMTAgKzE1MywxMSBAQCBleHRlcm4gTm9kZSAqZXN0aW1hdGVfZXhwcmVz c2lvbl92YWx1ZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSk7CiBleHRlcm4gRXhwciAq ZXZhbHVhdGVfZXhwcihFeHByICpleHByLCBPaWQgcmVzdWx0X3R5cGUsIGludDMyIHJlc3VsdF90 eXBtb2QsCiAJCQkJCQkgICBPaWQgcmVzdWx0X2NvbGxhdGlvbik7CiAKLWV4dGVybiBib29sIHZh cl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3Jl bF9pbmZvKTsKK2V4dGVybiBib29sIHZhcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9v dCwgVmFyICp2YXIsCisJCQkJCQkJICAgTm90TnVsbFNvdXJjZSBzb3VyY2UpOwogCiBleHRlcm4g Ym9vbCBleHByX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByLAot CQkJCQkJCQlib29sIHVzZV9yZWxfaW5mbyk7CisJCQkJCQkJCU5vdE51bGxTb3VyY2Ugc291cmNl KTsKIAogZXh0ZXJuIExpc3QgKmV4cGFuZF9mdW5jdGlvbl9hcmd1bWVudHMoTGlzdCAqYXJncywg Ym9vbCBpbmNsdWRlX291dF9hcmd1bWVudHMsCiAJCQkJCQkJCQkgICBPaWQgcmVzdWx0X3R5cGUs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmgKaW5kZXggOGE1NTAzZWI5NzMuLjRlY2NjZjQ2YmQz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3N1YnNlbGVjdC5oCkBAIC0yMiw2ICsyMiw3IEBAIGV4dGVybiBT Y2FsYXJBcnJheU9wRXhwciAqY29udmVydF9WQUxVRVNfdG9fQU5ZKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJUXVlcnkgKnZhbHVlcyk7CiBleHRlcm4gSm9pbkV4cHIgKmNvbnZlcnRf QU5ZX3N1YmxpbmtfdG9fam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJIFN1Ykxp bmsgKnN1YmxpbmssCisJCQkJCQkJCQkJCSBib29sIHVuZGVyX25vdCwKIAkJCQkJCQkJCQkJIFJl bGlkcyBhdmFpbGFibGVfcmVscyk7CiBleHRlcm4gSm9pbkV4cHIgKmNvbnZlcnRfRVhJU1RTX3N1 YmxpbmtfdG9fam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCVN1YkxpbmsgKnN1 YmxpbmssCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9sc3lzY2FjaGUuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCmluZGV4IDU2NTVhY2E0YzE0Li5iOWFkODRlY2Q0MSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvbHN5c2NhY2hlLmgKQEAgLTg5LDYgKzg5LDcgQEAgZXh0ZXJuIGJvb2wgZ2V0X29w X2hhc2hfZnVuY3Rpb25zKE9pZCBvcG5vLAogZXh0ZXJuIExpc3QgKmdldF9vcF9pbmRleF9pbnRl cnByZXRhdGlvbihPaWQgb3Bubyk7CiBleHRlcm4gYm9vbCBlcXVhbGl0eV9vcHNfYXJlX2NvbXBh dGlibGUoT2lkIG9wbm8xLCBPaWQgb3BubzIpOwogZXh0ZXJuIGJvb2wgY29tcGFyaXNvbl9vcHNf YXJlX2NvbXBhdGlibGUoT2lkIG9wbm8xLCBPaWQgb3BubzIpOworZXh0ZXJuIGJvb2wgb3BfaXNf c2FmZV9pbmRleF9tZW1iZXIoT2lkIG9wbm8pOwogZXh0ZXJuIE9pZAlnZXRfb3BmYW1pbHlfcHJv YyhPaWQgb3BmYW1pbHksIE9pZCBsZWZ0dHlwZSwgT2lkIHJpZ2h0dHlwZSwKIAkJCQkJCQkgIGlu dDE2IHByb2NudW0pOwogZXh0ZXJuIGNoYXIgKmdldF9hdHRuYW1lKE9pZCByZWxpZCwgQXR0ck51 bWJlciBhdHRudW0sIGJvb2wgbWlzc2luZ19vayk7CkBAIC05OCw2ICs5OSw3IEBAIGV4dGVybiBP aWQJZ2V0X2F0dHR5cGUoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSk7CiBleHRlcm4gdm9p ZCBnZXRfYXR0dHlwZXR5cG1vZGNvbGwoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSwKIAkJ CQkJCQkJICBPaWQgKnR5cGlkLCBpbnQzMiAqdHlwbW9kLCBPaWQgKmNvbGxpZCk7CiBleHRlcm4g RGF0dW0gZ2V0X2F0dG9wdGlvbnMoT2lkIHJlbGlkLCBpbnQxNiBhdHRudW0pOworZXh0ZXJuIGJv b2wgZ2V0X2F0dG5vdG51bGwoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51bSk7CiBleHRlcm4g T2lkCWdldF9jYXN0X29pZChPaWQgc291cmNldHlwZWlkLCBPaWQgdGFyZ2V0dHlwZWlkLCBib29s IG1pc3Npbmdfb2spOwogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25fbmFtZShPaWQgY29sbG9p ZCk7CiBleHRlcm4gYm9vbCBnZXRfY29sbGF0aW9uX2lzZGV0ZXJtaW5pc3RpYyhPaWQgY29sbG9p ZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKaW5kZXggMjEzNWQ4Mjg4 NGQuLjIwMDIzNmEwYTY5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1 YnNlbGVjdC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0 CkBAIC0zMzIzLDMgKzMzMjMsNDQyIEBAIFNFTEVDVCB0ZW4gRlJPTSBvbmVrIHQgV0hFUkUgMS4w OjppbnRlZ2VyIElOICgoVkFMVUVTICgxKSwgKDMpKSk7CiAgU2VxIFNjYW4gb24gb25layB0CiAo MSByb3cpCiAKKy0tCistLSBDaGVjayBOT1QgSU4gcGVyZm9ybXMgYW4gQU5USSBKT0lOIHdoZW4g Ym90aCB0aGUgb3V0ZXIgcXVlcnkncyBleHByZXNzaW9ucworLS0gYW5kIHRoZSBzdWItc2VsZWN0 J3Mgb3V0cHV0IGNvbHVtbnMgYXJlIHByb3ZhYmx5IG5vbi1udWxsYWJsZSwgYW5kIHRoZQorLS0g b3BlcmF0b3IgaXRzZWxmIGNhbm5vdCByZXR1cm4gTlVMTCBmb3Igbm9uLW51bGwgaW5wdXRzLgor LS0KK0JFR0lOOworQ1JFQVRFIFRFTVAgVEFCTEUgbm90X251bGxfdGFiIChpZCBpbnQgTk9UIE5V TEwsIHZhbCBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFRFTVAgVEFCTEUgbnVsbF90YWIgKGlkIGlu dCwgdmFsIGludCk7CistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRlZmluZWQgTk9UIE5V TEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVS RSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgor ICAgSGFzaCBDb25kOiAobm90X251bGxfdGFiLmlkID0gbm90X251bGxfdGFiXzEuaWQpCisgICAt PiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVsbF90YWJfMQorKDUgcm93cykKKworLS0gTm8g QU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5v dF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbnVsbF90YWIKKyAgIEZpbHRlcjogKE5P VCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgU3ViUGxhbiBh bnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoNCByb3dzKQorCistLSBO byBBTlRJIEpPSU46IGlubmVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBG Uk9NIG51bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIEZpbHRl cjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgU3Vi UGxhbiBhbnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIKKyg0IHJvd3MpCisKKy0t IEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlz IGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBp ZCBGUk9NIG51bGxfdGFiIFdIRVJFIGlkIElTIE5PVCBOVUxMKTsKKyAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90 X251bGxfdGFiLmlkID0gbnVsbF90YWIuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxf dGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisgICAg ICAgICAgICAgICBGaWx0ZXI6IChpZCBJUyBOT1QgTlVMTCkKKyg2IHJvd3MpCisKKy0tIE5vIEFO VEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxsYWJsZSAod2UgZG9uJ3QgY2hlY2sgb3V0ZXIgcXVl cnkgcXVhbHMgZm9yIG5vdykKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVs bF90YWIKK1dIRVJFIGlkIElTIE5PVCBOVUxMCisgIEFORCBpZCBOT1QgSU4gKFNFTEVDVCBpZCBG Uk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG51bGxfdGFiCisgICBGaWx0ZXI6ICgoaWQgSVMg Tk9UIE5VTEwpIEFORCAoTk9UIChBTlkgKGlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wx KSkpKQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFi CisoNCByb3dzKQorCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVM TCwgaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCistLSBhbmQgaXMgbm90IG51bGxlZCBi eSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxs X3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9NIG5vdF9u dWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5p ZAorKTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSB0MS5p ZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAg ICAtPiAgTWVyZ2UgTGVmdCBKb2luCisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQg PSB0Mi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBT b3J0IEtleTogdDEuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3Rf bnVsbF90YWIgdDEKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAg ICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBu b3RfbnVsbF90YWIgdDIKKygxMiByb3dzKQorCistLSBObyBBTlRJIEpPSU46IGlubmVyIHNpZGUg aXMgZGVmaW5lZCBOT1QgTlVMTCBidXQgaXMgbnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4g KAorICAgIFNFTEVDVCB0Mi5pZAorICAgIEZST00gbm90X251bGxfdGFiIHQxCisgICAgTEVGVCBK T0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCispOworICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhhc2hlZCBTdWJQ bGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBNZXJnZSBMZWZ0 IEpvaW4KKyAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQyCisoMTEgcm93cykKKworLS0gQU5USSBKT0lOOiBv dXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51 bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQyLmlkCisg ICAgRlJPTSBub3RfbnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9O IHQxLmlkID0gdDIuaWQKKyAgICBXSEVSRSB0Mi5pZCBJUyBOT1QgTlVMTAorKTsKKyAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBK b2luCisgICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSB0Mi5pZCkKKyAgIC0+ICBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgTWVyZ2UgSm9p bgorICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQyCisoMTIg cm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlu bmVyIHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJ TiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAgRlJPTSBudWxsX3RhYiB0MQorICAgIExFRlQgSk9J TiBudWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCisgICAgV0hFUkUgdDEuaWQgSVMgTk9UIE5V TEwKKyk7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9udWxsX3RhYi5pZCA9IHQxLmlk KQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBNZXJnZSBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MS5pZCA9 IHQyLmlkKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiB0MS5pZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxf dGFiIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChpZCBJUyBOT1QgTlVM TCkKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtl eTogdDIuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0 MgorKDEzIHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBO VUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBp ZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0MS5pZAorICAgIEZST00gbnVsbF90YWIgdDEKKyAgICBJ Tk5FUiBKT0lOIG51bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyAgICBMRUZUIEpPSU4gbnVs bF90YWIgdDMgT04gVFJVRQorKTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBBbnRpIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChub3RfbnVsbF90YWIu aWQgPSB0MS5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogbm90X251bGxfdGFi LmlkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgTmVzdGVk IExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAg TWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDEKKyAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MgorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDMKKygxNiByb3dzKQorCistLSBB TlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBhbmQgaXMgbm90IG51bGxl ZCBieSBvdXRlciBqb2luLAorLS0gaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lO IG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCitXSEVSRSB0MS5pZCBOT1QgSU4gKFNF TEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgTGVmdCBKb2luCisgICBNZXJnZSBDb25kOiAo dDEuaWQgPSB0Mi5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAg ICAgICAgIC0+ICBIYXNoIEFudGkgSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEu aWQgPSBub3RfbnVsbF90YWIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90 X251bGxfdGFiIHQxCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiB0Mi5pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0Mgor KDEyIHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxsZWQgYnkgb3V0 ZXIgam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIg dDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorV0hFUkUgdDIu aWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIExlZnQgSm9pbgorICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICBGaWx0ZXI6 IChOT1QgKEFOWSAodDIuaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIC0+ ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBub3RfbnVsbF90YWIgdDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogdDIuaWQK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKyAgIFN1YlBsYW4gYW55 XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDExIHJvd3MpCisKKy0tIE5v IEFOVEkgSk9JTjogc3VibGluayBpcyBpbiBhbiBvdXRlciBqb2luJ3MgT04gcXVhbCBhbmQgcmVm ZXJlbmNlcyB0aGUKKy0tIG5vbi1udWxsYWJsZSBzaWRlCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0Mgor T04gdDEuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoTk9U IChBTlkgKHQxLmlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICAtPiAgU2Vx IFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4g IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDcgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRl ciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwgYW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9p biwKKy0tIGlubmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIg dDIKK09OIHQyLmlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEhhc2ggQW50aSBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0Mi5pZCA9IG5vdF9udWxsX3RhYi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisoOCByb3dzKQor CistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkg Tk9UIElOIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFudGkgSm9pbgorICAgTWVyZ2UgQ29uZDogKChub3Rf bnVsbF90YWIuaWQgPSBub3RfbnVsbF90YWJfMS5pZCkgQU5EIChub3RfbnVsbF90YWIudmFsID0g bm90X251bGxfdGFiXzEudmFsKSkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogbm90 X251bGxfdGFiLmlkLCBub3RfbnVsbF90YWIudmFsCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g bm90X251bGxfdGFiCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IG5vdF9udWxsX3Rh Yl8xLmlkLCBub3RfbnVsbF90YWJfMS52YWwKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3Rf bnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg4IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogYm90aCBz aWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIE5PVCAoaWQsIHZhbCkgPiBBTlkgKFNFTEVDVCBpZCwg dmFsIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AgQW50aSBKb2luCisgICBKb2luIEZpbHRlcjogKFJPVyhub3RfbnVs bF90YWIuaWQsIG5vdF9udWxsX3RhYi52YWwpID4gUk9XKG5vdF9udWxsX3RhYl8xLmlkLCBub3Rf bnVsbF90YWJfMS52YWwpKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9u dWxsX3RhYl8xCisoNSByb3dzKQorCistLSBObyBBTlRJIEpPSU46IG9uZSBjb2x1bW4gb2YgdGhl IG91dGVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gbm90X251bGxfdGFiIHQxLCBudWxsX3RhYiB0MgorV0hFUkUgKHQxLmlkLCB0Mi5pZCkgTk9U IElOIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6IChOT1QgKEFOWSAoKHQxLmlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wx KSBBTkQgKHQyLmlkID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wyKSkpKQorICAgLT4gIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDIKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDcgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBvbmUg Y29sdW1uIG9mIHRoZSBpbm5lciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgKGlkLCB2YWwpIE5PVCBJTiAoU0VM RUNUIHQxLmlkLCB0Mi5pZCBGUk9NIG5vdF9udWxsX3RhYiB0MSwgbnVsbF90YWIgdDIpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAoKGlkID0g KFN1YlBsYW4gYW55XzEpLmNvbDEpIEFORCAodmFsID0gKFN1YlBsYW4gYW55XzEpLmNvbDIpKSkp CisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3Rh YiB0MQorICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiIHQyCisoOCByb3dzKQorCistLSBBTlRJIEpP SU46IENPQUxFU0NFKG51bGxhYmxlLCBjb25zdGFudCkgaXMgbm9uLW51bGxhYmxlCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVSRSBDT0FMRVNDRShpZCwg LTEpIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6IChDT0FMRVND RShudWxsX3RhYi5pZCwgJy0xJzo6aW50ZWdlcikgPSBub3RfbnVsbF90YWIuaWQpCisgICAtPiAg U2VxIFNjYW4gb24gbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gbm90X251bGxfdGFiCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgQ09BTEVTQ0UoaWQs IC0xKSBGUk9NIG51bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggQW50aSBKb2luCisgICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSBDT0FMRVNDRShu dWxsX3RhYi5pZCwgJy0xJzo6aW50ZWdlcikpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxf dGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisoNSBy b3dzKQorCistLSBBTlRJIEpPSU46IEdST1VQIEJZICh3aXRob3V0IEdyb3VwaW5nIFNldHMpIHBy ZXNlcnZlcyB0aGUgbm9uLW51bGxhYmlsaXR5IG9mCistLSB0aGUgY29sdW1uCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChT RUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIgR1JPVVAgQlkgaWQpOworICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBB bnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9udWxsX3RhYi5pZCA9IG5vdF9udWxsX3RhYl8x LmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IG5vdF9udWxs X3RhYl8xLmlkCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5v dF9udWxsX3RhYl8xCisoNyByb3dzKQorCistLSBObyBBTlRJIEpPSU46IEdST1VQIEJZIG9uIGEg bnVsbGFibGUgY29sdW1uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9u dWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYiBHUk9VUCBC WSBpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1Qg KEFOWSAoaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55 XzEKKyAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgR3JvdXAgS2V5OiBudWxsX3Rh Yi5pZAorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIKKyg2IHJvd3MpCisKKy0t IE5vIEFOVEkgSk9JTjogR3JvdXBpbmcgU2V0cyBjYW4gaW50cm9kdWNlIE5VTExzCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElO ICgKKyAgICBTRUxFQ1QgaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYgorICAgIEdST1VQIEJZIEdS T1VQSU5HIFNFVFMgKChpZCksICh2YWwpKQorKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIKKyAgIEZpbHRlcjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSku Y29sMSkpKQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICBIYXNoIEtleTogbm90X251bGxfdGFiXzEuaWQKKyAgICAgICAgICAgSGFzaCBLZXk6IG5v dF9udWxsX3RhYl8xLnZhbAorICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFi IG5vdF9udWxsX3RhYl8xCisoNyByb3dzKQorCistLSBjcmVhdGUgYSBjdXN0b20gInVuc2FmZSIg ZXF1YWxpdHkgb3BlcmF0b3IKK0NSRUFURSBGVU5DVElPTiBpbnQ0ZXFfdW5zYWZlKGludDQsIGlu dDQpCisgICAgUkVUVVJOUyBib29sCisgICAgQVMgJ2ludDRlcScKKyAgICBMQU5HVUFHRSBpbnRl cm5hbCBJTU1VVEFCTEU7CitDUkVBVEUgT1BFUkFUT1IgPz0gKAorICAgIFBST0NFRFVSRSA9IGlu dDRlcV91bnNhZmUsCisgICAgTEVGVEFSRyA9IGludDQsCisgICAgUklHSFRBUkcgPSBpbnQ0Cisp OworLS0gTm8gQU5USSBKT0lOOiB0aGUgb3BlcmF0b3IgaXMgbm90IHNhZmUKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBOT1QgaWQgPz0gQU5Z IChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vdF9udWxsX3Rh YgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID89IChTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisg ICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCisoNSByb3dzKQorCitST0xMQkFD SzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCmluZGV4IGNhZGMzMjkzNjg3Li40Y2QwMTZm NGFjMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2VsZWN0LnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsCkBAIC0xNDQ4LDMgKzE0NDgsMTg4 IEBAIFNFTEVDVCAqIEZST00gb25layB0MSwgbGF0ZXJhbCAoU0VMRUNUICogRlJPTSBvbmVrIHQy IFdIRVJFIHQyLnRlbiBJTiAodmFsdWVzICh0CiAtLSBWdEEgY2F1c2VzIHRoZSB3aG9sZSBleHBy ZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBhcyBhIGNvbnN0YW50CiBFWFBMQUlOIChDT1NUUyBPRkYp CiBTRUxFQ1QgdGVuIEZST00gb25layB0IFdIRVJFIDEuMDo6aW50ZWdlciBJTiAoKFZBTFVFUyAo MSksICgzKSkpOworCistLQorLS0gQ2hlY2sgTk9UIElOIHBlcmZvcm1zIGFuIEFOVEkgSk9JTiB3 aGVuIGJvdGggdGhlIG91dGVyIHF1ZXJ5J3MgZXhwcmVzc2lvbnMKKy0tIGFuZCB0aGUgc3ViLXNl bGVjdCdzIG91dHB1dCBjb2x1bW5zIGFyZSBwcm92YWJseSBub24tbnVsbGFibGUsIGFuZCB0aGUK Ky0tIG9wZXJhdG9yIGl0c2VsZiBjYW5ub3QgcmV0dXJuIE5VTEwgZm9yIG5vbi1udWxsIGlucHV0 cy4KKy0tCisKK0JFR0lOOworCitDUkVBVEUgVEVNUCBUQUJMRSBub3RfbnVsbF90YWIgKGlkIGlu dCBOT1QgTlVMTCwgdmFsIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVEVNUCBUQUJMRSBudWxsX3Rh YiAoaWQgaW50LCB2YWwgaW50KTsKKworLS0gQU5USSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZp bmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxs X3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCist LSBObyBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZS T00gbm90X251bGxfdGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBpbm5lciBzaWRlIGlzIG51bGxh YmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hF UkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjog b3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25u dWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxf dGFiIFdIRVJFIGlkIElTIE5PVCBOVUxMKTsKKworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRl IGlzIG51bGxhYmxlICh3ZSBkb24ndCBjaGVjayBvdXRlciBxdWVyeSBxdWFscyBmb3Igbm93KQor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgaWQgSVMg Tk9UIE5VTEwKKyAgQU5EIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsK KworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNp ZGUgaXMgZGVmaW5lZCBOT1QgTlVMTAorLS0gYW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9p bgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJF IGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAgRlJPTSBub3RfbnVsbF90YWIgdDEK KyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyk7CisKKy0t IE5vIEFOVEkgSk9JTjogaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMIGJ1dCBpcyBudWxs ZWQgYnkgb3V0ZXIgam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3Rf bnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIHQyLmlkCisgICAgRlJPTSBu b3RfbnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0g dDIuaWQKKyk7CisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxM LCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBO T1QgSU4gKAorICAgIFNFTEVDVCB0Mi5pZAorICAgIEZST00gbm90X251bGxfdGFiIHQxCisgICAg TEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCisgICAgV0hFUkUgdDIu aWQgSVMgTk9UIE5VTEwKKyk7CisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVk IE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBj bGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitX SEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0MS5pZAorICAgIEZST00gbnVsbF90YWIgdDEK KyAgICBMRUZUIEpPSU4gbnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICAgIFdIRVJFIHQx LmlkIElTIE5PVCBOVUxMCispOworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5l ZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwg Y2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgor V0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9NIG51bGxfdGFiIHQx CisgICAgSU5ORVIgSk9JTiBudWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCisgICAgTEVGVCBK T0lOIG51bGxfdGFiIHQzIE9OIFRSVUUKKyk7CisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBp cyBkZWZpbmVkIE5PVCBOVUxMIGFuZCBpcyBub3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4sCistLSBp bm5lciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gbm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQx LmlkID0gdDIuaWQKK1dIRVJFIHQxLmlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxf dGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIG51bGxlZCBieSBvdXRlciBq b2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQor TEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCitXSEVSRSB0Mi5pZCBO T1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKKy0tIE5vIEFOVEkgSk9JTjog c3VibGluayBpcyBpbiBhbiBvdXRlciBqb2luJ3MgT04gcXVhbCBhbmQgcmVmZXJlbmNlcyB0aGUK Ky0tIG5vbi1udWxsYWJsZSBzaWRlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MgorT04gdDEuaWQgTk9U IElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IG91dGVy IHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBhbmQgaXMgbm90IG51bGxlZCBieSBvdXRlciBqb2lu LAorLS0gaW5uZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0 MgorT04gdDIuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBB TlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkgTk9UIElO IChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjogYm90 aCBzaWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIE5PVCAoaWQsIHZhbCkgPiBBTlkgKFNFTEVDVCBp ZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBvbmUgY29sdW1u IG9mIHRoZSBvdXRlciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0MSwgbnVsbF90YWIgdDIKK1dIRVJFICh0MS5pZCwgdDIu aWQpIE5PVCBJTiAoU0VMRUNUIGlkLCB2YWwgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBB TlRJIEpPSU46IG9uZSBjb2x1bW4gb2YgdGhlIGlubmVyIHNpZGUgaXMgbnVsbGFibGUKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZh bCkgTk9UIElOIChTRUxFQ1QgdDEuaWQsIHQyLmlkIEZST00gbm90X251bGxfdGFiIHQxLCBudWxs X3RhYiB0Mik7CisKKy0tIEFOVEkgSk9JTjogQ09BTEVTQ0UobnVsbGFibGUsIGNvbnN0YW50KSBp cyBub24tbnVsbGFibGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90 YWIKK1dIRVJFIENPQUxFU0NFKGlkLCAtMSkgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVs bF90YWIpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3Rh YgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgQ09BTEVTQ0UoaWQsIC0xKSBGUk9NIG51bGxfdGFi KTsKKworLS0gQU5USSBKT0lOOiBHUk9VUCBCWSAod2l0aG91dCBHcm91cGluZyBTZXRzKSBwcmVz ZXJ2ZXMgdGhlIG5vbi1udWxsYWJpbGl0eSBvZgorLS0gdGhlIGNvbHVtbgorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VM RUNUIGlkIEZST00gbm90X251bGxfdGFiIEdST1VQIEJZIGlkKTsKKworLS0gTm8gQU5USSBKT0lO OiBHUk9VUCBCWSBvbiBhIG51bGxhYmxlIGNvbHVtbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00g bnVsbF90YWIgR1JPVVAgQlkgaWQpOworCistLSBObyBBTlRJIEpPSU46IEdyb3VwaW5nIFNldHMg Y2FuIGludHJvZHVjZSBOVUxMcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBu b3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIGlkCisgICAgRlJPTSBu b3RfbnVsbF90YWIKKyAgICBHUk9VUCBCWSBHUk9VUElORyBTRVRTICgoaWQpLCAodmFsKSkKKyk7 CisKKy0tIGNyZWF0ZSBhIGN1c3RvbSAidW5zYWZlIiBlcXVhbGl0eSBvcGVyYXRvcgorQ1JFQVRF IEZVTkNUSU9OIGludDRlcV91bnNhZmUoaW50NCwgaW50NCkKKyAgICBSRVRVUk5TIGJvb2wKKyAg ICBBUyAnaW50NGVxJworICAgIExBTkdVQUdFIGludGVybmFsIElNTVVUQUJMRTsKKworQ1JFQVRF IE9QRVJBVE9SID89ICgKKyAgICBQUk9DRURVUkUgPSBpbnQ0ZXFfdW5zYWZlLAorICAgIExFRlRB UkcgPSBpbnQ0LAorICAgIFJJR0hUQVJHID0gaW50NAorKTsKKworLS0gTm8gQU5USSBKT0lOOiB0 aGUgb3BlcmF0b3IgaXMgbm90IHNhZmUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gbm90X251bGxfdGFiCitXSEVSRSBOT1QgaWQgPz0gQU5ZIChTRUxFQ1QgaWQgRlJPTSBub3Rf bnVsbF90YWIpOworCitST0xMQkFDSzsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzI1 MDU2NGQ0ZmYuLjgwODBkYzE2YWZhIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTc4 OCw2ICsxNzg4LDcgQEAgTm9kZQogTm9kZVRhZwogTm9uRW1wdHlSYW5nZQogTm9uZUNvbXByZXNz b3JTdGF0ZQorTm90TnVsbFNvdXJjZQogTm90aWZpY2F0aW9uCiBOb3RpZmljYXRpb25MaXN0CiBO b3RpZnlTdG10Ci0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000adc72c064c7ee92e--