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 1vxitz-00H4bW-3D for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 09:52:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxity-00CEWj-1P for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 09:52:22 +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 1vxitx-00CEWa-29 for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 09:52:22 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxitw-00000000LxX-0Umw for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 09:52:21 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-4138136f02eso1463273fac.2 for ; Wed, 04 Mar 2026 01:52:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772617939; cv=none; d=google.com; s=arc-20240605; b=kkmdzpztrWYnkwYMqa6xQ7fvnP62pzpoAdOHJd5B4HfOmKWbg0e9Ocr4MmzZ+oC1C/ Z/Zii3Ysepe811Milbfj3Xfzb9k4YygEZytDTGo3FNf2WAx3o/1z0Ziq4TTLhVcIBZYX BWzVUCVvkrnSeAXojAB5gbIlFGlTBy95L6sNxqUdbOL4YQsgkO9a1qwLd8C+j946moTq /oq2nlsLNqVSCPbZj5OGm7MIgmai7aokx1EyCbDeYjwF9N7CK+D3+uT8FKWiWH5aGWIJ 7z5ifUdyjwagvQvsuRwL5TiKWXH0KXjCp5HILCACOEbEwq9AjM/Jw6MPWJHgYFSkarrk AMoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=B6H+GGWFX6AtS5UnkdfT1o6det3pCW5i9J4kl2P5AnE=; fh=pmBMntjmyx6XYOkmIq7jCPL8+6Ex8nEv6KGKxj4+8uc=; b=LcZy+CarwZr/i9NsrvsgJBmloEaUgxX8RauR8Oj8geWgUqb4KA8AxpGJYrDdeT48wP H+ymP6hNJBHsPhUre9ur4ngOkbV9wI1CGUjNQzRv/0zYU/Vf7Ir9iK4k4nx3xGsNH4UP pQMW+3vGd4O1mA54BI2HTBX6Nb0BIZX5FTCT3VBd5U7EHqPBZl9JUL11YHTrxHbeel2o JwPuwbMzl29b0tHKrq/Jxt6VcOv4eALU7WXGkaq+r17ECJESYXbvhLMSG3N34cRSqS12 kqP8Z2yZ0N6QceFLHXMfvwkBP5YA8He+8gkb47TnNq1lNoHP2FSyJLDX8ns2cCPex52x kEXg==; 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=1772617939; x=1773222739; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=B6H+GGWFX6AtS5UnkdfT1o6det3pCW5i9J4kl2P5AnE=; b=GLExKgyMy1BO7A8TLbpAhOfXizPSqEmlmQhemJxz/CVIOSNiQNRzy7F5ikvUEcMmdy NSjSfLuJF814cjJTe1+Bn+lyf68iJKzSX/DmeIIxemymcq8kiDMz/dqGI1MhVxrfI2/p s6wPHOhIHUw1YqT/2B4Oo8ibYo55NMWFYM9+cQo47XfIN9m+lvjPErW6rcl40GLvCzn1 t57awHn+tAl22dSOOtIXd2JptD5WvaZqlaPIn6ZZcMBV689eq5yAMSa0SSUZOfqdWyM7 XZ8iwwou0GYElhHuULIGc2R2dix3cH4AxHZxsNmloK8NJg7jdqV0yV+oKW3JHZxUBvwX Cz8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772617939; x=1773222739; h=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=B6H+GGWFX6AtS5UnkdfT1o6det3pCW5i9J4kl2P5AnE=; b=st+0GgFvWWTHxg+7mWF8aqCy4yL4ovyiYf9NmXXEjIs7K1NFxqr6/QwNwA0sNe2Hbe IhVE4hD4y/It0pL5b6uluVl4xAlEMpeVzxBNjjVRDxN/SD2A+x9KWZWXJz9Zhbt+ZCjC 5MzRV+Ei+PCobNOHcIfAQahaxtYcj3MOXB18iSmReP48A90mRaXRR7ZJyVlQS/r8Y+g0 BPBetRzjoj0qBJnn3eFljUFVqQ0wUecMQh4k9u32bfc17BheI/kMlg9FlQQ/la+themG Bm6i2iDO97gAQrq4fWtrmogxZ2sP3+q/6p4xSU240gd6LYz8vhCfEmsGEw3L+p4gznX7 8ZAw== X-Gm-Message-State: AOJu0YwicDo2pidQUe7vhJHcyk0MXvGvsj0xRBEcketWt0wianEWhKfz vUOEuv6q3iZThw1YC8i3WozJCO1VlRq1AtMq1yNkiRVWIZ55CSRQ/esCFT5eOi6agKDouAo2slX 7zA6tR399WO96aPxQUdRvAtVd8ihPpTrb8ACp X-Gm-Gg: ATEYQzzb9RQyED7+shhugKDGMPaSbXZWgvsUk0Zo/RXreditWJTKKgNdE8koId1YMfz vVQRkaRdVnSQT+cIXa1ptO+g74twAKIBsDu67BGDj5rfBig1xWosK0DLxVQR+cc4wNYru3RJ70w vbY4tn3eUsSu9LswaedI2dLT5TqWQc8S2xbDVtgxrOEK1tats3lCbRF/pUpVbs8VaZQIMXIuKrx 2+7WeXp+LAy90q1b8X74wciu48ikASQT/8FCEm12agq3PPxHkrCRSzLxZ+T566FvAVqn77qb2QN 7ew2W4rxEg== X-Received: by 2002:a05:6870:7094:b0:3ff:4ae5:1452 with SMTP id 586e51a60fabf-416aba5d03cmr785337fac.29.1772617939287; Wed, 04 Mar 2026 01:52:19 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Wed, 4 Mar 2026 18:52:07 +0900 X-Gm-Features: AaiRm53mRsAFxwgVq9q6bQajZVQuvL1Bnwk2tJX1GlgmILdw0pW5FAhRotMf_Lg Message-ID: Subject: Re: Convert NOT IN sublinks to anti-joins when safe To: Pg Hackers Content-Type: multipart/mixed; boundary="0000000000009825bb064c2fc673" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000009825bb064c2fc673 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Feb 14, 2026 at 4:37=E2=80=AFPM Richard Guo wrote: > On Thu, Feb 5, 2026 at 3:51=E2=80=AFPM Richard Guo wrote: > > Attached is the updated patch, which adds the check requiring the > > operator to be a member of a btree or hash opfamily. > Attached is another updated patch rebased on current master, with the > addition of support for RowCompareExpr to handle multi-column ordering > operations; otherwise unchanged. Attached is another updated patch rebased on current master, with some minor cosmetic adjustments; nothing essential has changed. - Richard --0000000000009825bb064c2fc673 Content-Type: application/octet-stream; name="v4-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Disposition: attachment; filename="v4-0001-Convert-NOT-IN-sublinks-to-anti-joins-when-safe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmbuxxj10 RnJvbSBjZjA3NjNkZWU5MTQ5YjlmNmY3ZDVjZDM3NzBiMmI2YmRmNDZkOGE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxMjoyOTo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjRd 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 ZSB0byBkZWR1Y2Ugbm9uLW51bGxhYmlsaXR5IGZvciBvdGhlcgpleHByZXNzaW9uIHR5cGVzLgot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgIHwgICA0ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyAgICB8IDE2NiArKysrKysrLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAgNzIgKysrLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jICAgICAgfCAzODQgKysrKysrKysrKysr KysrKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jICAgICAgIHwgIDY4ICsrKysK IHNyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmggICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaCAgICAgICAgIHwgIDEzICstCiBzcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvc3Vic2VsZWN0LmggICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGls cy9sc3lzY2FjaGUuaCAgICAgICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N1YnNlbGVjdC5vdXQgICB8IDQzOSArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAgICAgICB8IDE4NSArKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAxICsKIDEzIGZpbGVzIGNo YW5nZWQsIDEyNzIgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCA5N2VhOTVhNGViOC4uOWFhZjFjNGU1Y2EgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0zNDQ3LDcgKzM0NDcsNyBA QCByZXN0cmljdGlvbl9pc19hbHdheXNfdHJ1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJaWYgKG51 bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVybiBmYWxzZTsKIAotCQlyZXR1cm4gZXhwcl9pc19u b25udWxsYWJsZShyb290LCBudWxsdGVzdC0+YXJnLCB0cnVlKTsKKwkJcmV0dXJuIGV4cHJfaXNf bm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3QtPmFyZywgTk9UTlVMTF9TT1VSQ0VfUkVMT1BUKTsK IAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBjaGVjayBpdHMgc3ViLWNsYXVzZXMgKi8KQEAgLTM1 MTIsNyArMzUxMiw3IEBAIHJlc3RyaWN0aW9uX2lzX2Fsd2F5c19mYWxzZShQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKG51bGx0ZXN0LT5hcmdpc3JvdykKIAkJCXJldHVybiBmYWxzZTsKIAotCQly ZXR1cm4gZXhwcl9pc19ub25udWxsYWJsZShyb290LCBudWxsdGVzdC0+YXJnLCB0cnVlKTsKKwkJ cmV0dXJuIGV4cHJfaXNfbm9ubnVsbGFibGUocm9vdCwgbnVsbHRlc3QtPmFyZywgTk9UTlVMTF9T T1VSQ0VfUkVMT1BUKTsKIAl9CiAKIAkvKiBJZiBpdCdzIGFuIE9SLCBjaGVjayBpdHMgc3ViLWNs YXVzZXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVj dC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggZDdmM2Nl ZGYzZDUuLjI5OWIzMzU0ZjZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3Qu YwpAQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluX291dGVyX3NlbGZyZWYoTm9k ZSAqbm9kZSk7CiBzdGF0aWMgYm9vbCBjb250YWluX291dGVyX3NlbGZyZWZfd2Fsa2VyKE5vZGUg Km5vZGUsIEluZGV4ICpkZXB0aCk7CiBzdGF0aWMgdm9pZCBpbmxpbmVfY3RlKFBsYW5uZXJJbmZv ICpyb290LCBDb21tb25UYWJsZUV4cHIgKmN0ZSk7CiBzdGF0aWMgYm9vbCBpbmxpbmVfY3RlX3dh bGtlcihOb2RlICpub2RlLCBpbmxpbmVfY3RlX3dhbGtlcl9jb250ZXh0ICpjb250ZXh0KTsKK3N0 YXRpYyBib29sIHN1YmxpbmtfdGVzdGV4cHJfaXNfbm90X251bGxhYmxlKFBsYW5uZXJJbmZvICpy b290LCBTdWJMaW5rICpzdWJsaW5rKTsKIHN0YXRpYyBib29sIHNpbXBsaWZ5X0VYSVNUU19xdWVy eShQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKnF1ZXJ5KTsKIHN0YXRpYyBRdWVyeSAqY29udmVy dF9FWElTVFNfdG9fQU5ZKFBsYW5uZXJJbmZvICpyb290LCBRdWVyeSAqc3Vic2VsZWN0LAogCQkJ CQkJCQkJTm9kZSAqKnRlc3RleHByLCBMaXN0ICoqcGFyYW1JZHMpOwpAQCAtMTMwNiwxMSArMTMw NywxNCBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKnRl c3RleHByLCBRdWVyeSAqdmFsdWVzKQogICogSWYgc28sIGZvcm0gYSBKb2luRXhwciBhbmQgcmV0 dXJuIGl0LiAgUmV0dXJuIE5VTEwgaWYgdGhlIFN1YkxpbmsgY2Fubm90CiAgKiBiZSBjb252ZXJ0 ZWQgdG8gYSBqb2luLgogICoKLSAqIFRoZSBvbmx5IG5vbi1vYnZpb3VzIGlucHV0IHBhcmFtZXRl ciBpcyBhdmFpbGFibGVfcmVsczogdGhpcyBpcyB0aGUgc2V0Ci0gKiBvZiBxdWVyeSByZWxzIHRo YXQgY2FuIHNhZmVseSBiZSByZWZlcmVuY2VkIGluIHRoZSBzdWJsaW5rIGV4cHJlc3Npb24uCi0g KiAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBzZW1hbnRpY3Mg d2hlbiBhIHN1YmxpbmsKLSAqIGlzIHByZXNlbnQgaW4gYW4gb3V0ZXIgam9pbidzIE9OIHF1YWwu KSAgVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmCi0gKiB0aGUgY29udmVydGVkIHF1YWwgd291 bGQgcmVmZXJlbmNlIGFueSBidXQgdGhlc2UgcGFyZW50LXF1ZXJ5IHJlbGlkcy4KKyAqIElmIHVu ZGVyX25vdCBpcyB0cnVlLCB0aGUgY2FsbGVyIGFjdHVhbGx5IGZvdW5kIE5PVCAoQU5ZIFN1Ykxp bmspLCBzbworICogdGhhdCB3aGF0IHdlIG11c3QgdHJ5IHRvIGJ1aWxkIGlzIGFuIEFOVEkgbm90 IFNFTUkgam9pbi4KKyAqCisgKiBhdmFpbGFibGVfcmVscyBpcyB0aGUgc2V0IG9mIHF1ZXJ5IHJl bHMgdGhhdCBjYW4gc2FmZWx5IGJlIHJlZmVyZW5jZWQKKyAqIGluIHRoZSBzdWJsaW5rIGV4cHJl c3Npb24uICAoV2UgbXVzdCByZXN0cmljdCB0aGlzIHRvIGF2b2lkIGNoYW5naW5nCisgKiB0aGUg c2VtYW50aWNzIHdoZW4gYSBzdWJsaW5rIGlzIHByZXNlbnQgaW4gYW4gb3V0ZXIgam9pbidzIE9O IHF1YWwuKQorICogVGhlIGNvbnZlcnNpb24gbXVzdCBmYWlsIGlmIHRoZSBjb252ZXJ0ZWQgcXVh bCB3b3VsZCByZWZlcmVuY2UgYW55IGJ1dAorICogdGhlc2UgcGFyZW50LXF1ZXJ5IHJlbGlkcy4K ICAqCiAgKiBPbiBzdWNjZXNzLCB0aGUgcmV0dXJuZWQgSm9pbkV4cHIgaGFzIGxhcmcgPSBOVUxM IGFuZCByYXJnID0gdGhlIGpvaW50cmVlCiAgKiBpdGVtIHJlcHJlc2VudGluZyB0aGUgcHVsbGVk LXVwIHN1YnF1ZXJ5LiAgVGhlIGNhbGxlciBtdXN0IHNldCBsYXJnIHRvCkBAIC0xMzMzLDcgKzEz MzcsNyBAQCBjb252ZXJ0X1ZBTFVFU190b19BTlkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKnRl c3RleHByLCBRdWVyeSAqdmFsdWVzKQogICovCiBKb2luRXhwciAqCiBjb252ZXJ0X0FOWV9zdWJs aW5rX3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCi0JCQkJCQkJ UmVsaWRzIGF2YWlsYWJsZV9yZWxzKQorCQkJCQkJCWJvb2wgdW5kZXJfbm90LCBSZWxpZHMgYXZh aWxhYmxlX3JlbHMpCiB7CiAJSm9pbkV4cHIgICAqcmVzdWx0OwogCVF1ZXJ5CSAgICpwYXJzZSA9 IHJvb3QtPnBhcnNlOwpAQCAtMTM1MSw2ICsxMzU1LDE5IEBAIGNvbnZlcnRfQU5ZX3N1Ymxpbmtf dG9fam9pbihQbGFubmVySW5mbyAqcm9vdCwgU3ViTGluayAqc3VibGluaywKIAogCUFzc2VydChz dWJsaW5rLT5zdWJMaW5rVHlwZSA9PSBBTllfU1VCTElOSyk7CiAKKwkvKgorCSAqIFBlciBTUUwg c3BlYywgTk9UIElOIGlzIG5vdCBvcmRpbmFyaWx5IGVxdWl2YWxlbnQgdG8gYW4gYW50aS1qb2lu LCBzbworCSAqIHRoYXQgYnkgZGVmYXVsdCB3ZSBoYXZlIHRvIGZhaWwgd2hlbiB1bmRlcl9ub3Qu ICBIb3dldmVyLCBpZiB3ZSBjYW4KKwkgKiBwcm92ZSB0aGF0IG5laXRoZXIgdGhlIG91dGVyIHF1 ZXJ5J3MgZXhwcmVzc2lvbnMgbm9yIHRoZSBzdWItc2VsZWN0J3MKKwkgKiBvdXRwdXQgY29sdW1u cyBjYW4gYmUgTlVMTCwgYW5kIGZ1cnRoZXIgdGhhdCB0aGUgb3BlcmF0b3IgaXRzZWxmIGNhbm5v dAorCSAqIHJldHVybiBOVUxMIGZvciBub24tbnVsbCBpbnB1dHMsIHRoZW4gdGhlIGxvZ2ljIGlz IGlkZW50aWNhbCBhbmQgaXQncworCSAqIHNhZmUgdG8gY29udmVydCBOT1QgSU4gdG8gYW4gYW50 aS1qb2luLgorCSAqLworCWlmICh1bmRlcl9ub3QgJiYKKwkJKCFzdWJsaW5rX3Rlc3RleHByX2lz X25vdF9udWxsYWJsZShyb290LCBzdWJsaW5rKSB8fAorCQkgIXF1ZXJ5X291dHB1dHNfYXJlX25v dF9udWxsYWJsZShzdWJzZWxlY3QpKSkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIElmIHRo ZSBzdWItc2VsZWN0IGNvbnRhaW5zIGFueSBWYXJzIG9mIHRoZSBwYXJlbnQgcXVlcnksIHdlIHRy ZWF0IGl0IGFzCiAJICogTEFURVJBTC4gIChWYXJzIGZyb20gaGlnaGVyIGxldmVscyBkb24ndCBt YXR0ZXIgaGVyZS4pCkBAIC0xNDI4LDcgKzE0NDUsNyBAQCBjb252ZXJ0X0FOWV9zdWJsaW5rX3Rv X2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCiAJICogQW5kIGZpbmFs bHksIGJ1aWxkIHRoZSBKb2luRXhwciBub2RlLgogCSAqLwogCXJlc3VsdCA9IG1ha2VOb2RlKEpv aW5FeHByKTsKLQlyZXN1bHQtPmpvaW50eXBlID0gSk9JTl9TRU1JOworCXJlc3VsdC0+am9pbnR5 cGUgPSB1bmRlcl9ub3QgPyBKT0lOX0FOVEkgOiBKT0lOX1NFTUk7CiAJcmVzdWx0LT5pc05hdHVy YWwgPSBmYWxzZTsKIAlyZXN1bHQtPmxhcmcgPSBOVUxMOwkJLyogY2FsbGVyIG11c3QgZmlsbCB0 aGlzIGluICovCiAJcmVzdWx0LT5yYXJnID0gKE5vZGUgKikgcnRyOwpAQCAtMTQ0MSwxMiArMTQ1 OCwxNDEgQEAgY29udmVydF9BTllfc3VibGlua190b19qb2luKFBsYW5uZXJJbmZvICpyb290LCBT dWJMaW5rICpzdWJsaW5rLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiBzdWJsaW5rX3Rl c3RleHByX2lzX25vdF9udWxsYWJsZTogdmVyaWZ5IHRoYXQgdGVzdGV4cHIgb2YgYW4gQU5ZX1NV QkxJTksKKyAqIGd1YXJhbnRlZXMgYSBub24tbnVsbCByZXN1bHQsIGFzc3VtaW5nIHRoZSBpbm5l ciBzaWRlIGlzIGFsc28gbm9uLW51bGwuCisgKgorICogVG8gZW5zdXJlIHRoZSBleHByZXNzaW9u IG5ldmVyIHJldHVybnMgTlVMTCwgd2UgcmVxdWlyZSBib3RoIHRoYXQgdGhlIG91dGVyCisgKiBl eHByZXNzaW9ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxhYmxlIGFuZCB0aGF0IHRoZSBvcGVyYXRv ciBpdHNlbGYgaXMgc2FmZS4KKyAqIFdlIHZhbGlkYXRlIG9wZXJhdG9yIHNhZmV0eSBieSBjaGVj a2luZyBmb3IgbWVtYmVyc2hpcCBpbiBhIHN0YW5kYXJkIGluZGV4CisgKiBvcGVyYXRvciBmYW1p bHkgKEItdHJlZSBvciBIYXNoKTsgdGhpcyBhY3RzIGFzIGEgcHJveHkgZm9yIHN0YW5kYXJkIGJv b2xlYW4KKyAqIGJlaGF2aW9yLCBlbnN1cmluZyB0aGUgb3BlcmF0b3IgZG9lcyBub3QgcHJvZHVj ZSBOVUxMIHJlc3VsdHMgZnJvbSBub24tbnVsbAorICogaW5wdXRzLgorICoKKyAqIFdlIGhhbmRs ZSB0aGUgdGhyZWUgc3RhbmRhcmQgcGFyc2VyIHJlcHJlc2VudGF0aW9ucyBmb3IgQU5ZIHN1Ymxp bmtzOiBhCisgKiBzaW5nbGUgT3BFeHByIGZvciBzaW5nbGUtY29sdW1uIGNvbXBhcmlzb25zLCBh IEJvb2xFeHByIGNvbnRhaW5pbmcgYSBsaXN0IG9mCisgKiBPcEV4cHJzIGZvciBtdWx0aS1jb2x1 bW4gZXF1YWxpdHkgb3IgaW5lcXVhbGl0eSBjaGVja3MgKHdoZXJlIGVxdWFsaXR5CisgKiBiZWNv bWVzIGFuIEFORCBhbmQgaW5lcXVhbGl0eSBiZWNvbWVzIGFuIE9SKSwgYW5kIGEgUm93Q29tcGFy ZUV4cHIgZm9yCisgKiBtdWx0aS1jb2x1bW4gb3JkZXJpbmcgY2hlY2tzLiAgSW4gYWxsIGNhc2Vz LCB3ZSB2YWxpZGF0ZSB0aGUgb3BlcmF0b3JzIGFuZAorICogdGhlIG91dGVyIGV4cHJlc3Npb25z LgorICoKKyAqIEl0IGlzIGFjY2VwdGFibGUgZm9yIHRoaXMgY2hlY2sgbm90IHRvIGJlIGV4aGF1 c3RpdmUuICBXZSBjYW4gZXJyIG9uIHRoZQorICogc2lkZSBvZiBjb25zZXJ2YXRpc206IGlmIHdl J3JlIG5vdCBzdXJlLCBpdCdzIG9rYXkgdG8gcmV0dXJuIEZBTFNFLgorICovCitzdGF0aWMgYm9v bAorc3VibGlua190ZXN0ZXhwcl9pc19ub3RfbnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFN1 YkxpbmsgKnN1YmxpbmspCit7CisJTm9kZQkgICAqdGVzdGV4cHIgPSBzdWJsaW5rLT50ZXN0ZXhw cjsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8q IFB1bnQgaWYgc3VibGluayBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdCAqLworCWlmIChz dWJsaW5rLT5zdWJMaW5rVHlwZSAhPSBBTllfU1VCTElOSyB8fCB0ZXN0ZXhwciA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKHRlc3RleHByLCBPcEV4cHIpKQorCXsKKwkJLyog c2luZ2xlLWNvbHVtbiBjb21wYXJpc29uICovCisJCU9wRXhwcgkgICAqb3BleHByID0gKE9wRXhw ciAqKSB0ZXN0ZXhwcjsKKworCQkvKiBzdGFuZGFyZCBBTlkgc3RydWN0dXJlIHNob3VsZCBiZSBv cChvdXRlcl92YXIsIHBhcmFtKSAqLworCQlpZiAobGlzdF9sZW5ndGgob3BleHByLT5hcmdzKSAh PSAyKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFdlIHJlbHkgb24gbWVtYmVyc2hp cCBpbiBhIEItdHJlZSBvciBIYXNoIG9wZXJhdG9yIGZhbWlseSBhcyBhCisJCSAqIGd1YXJhbnRl ZSB0aGF0IHRoZSBvcGVyYXRvciBhY3RzIGFzIGEgcHJvcGVyIGJvb2xlYW4gY29tcGFyaXNvbiBh bmQKKwkJICogZG9lcyBub3QgeWllbGQgTlVMTCBmb3IgdmFsaWQgbm9uLW51bGwgaW5wdXRzLgor CQkgKi8KKwkJaWYgKCFvcF9pc19zYWZlX2luZGV4X21lbWJlcihvcGV4cHItPm9wbm8pKQorCQkJ cmV0dXJuIGZhbHNlOworCisJCW91dGVyX2V4cHJzID0gbGFwcGVuZChvdXRlcl9leHBycywgbGlu aXRpYWwob3BleHByLT5hcmdzKSk7CisJfQorCWVsc2UgaWYgKGlzX2FuZGNsYXVzZSh0ZXN0ZXhw cikgfHwgaXNfb3JjbGF1c2UodGVzdGV4cHIpKQorCXsKKwkJLyogbXVsdGktY29sdW1uIGVxdWFs aXR5IG9yIGluZXF1YWxpdHkgY2hlY2tzICovCisJCUJvb2xFeHByICAgKmJleHByID0gKEJvb2xF eHByICopIHRlc3RleHByOworCisJCWZvcmVhY2gobGMsIGJleHByLT5hcmdzKQorCQl7CisJCQlP cEV4cHIJICAgKm9wZXhwciA9IChPcEV4cHIgKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKCFJc0Eo b3BleHByLCBPcEV4cHIpKQorCQkJCXJldHVybiBmYWxzZTsKKworCQkJLyogc3RhbmRhcmQgQU5Z IHN0cnVjdHVyZSBzaG91bGQgYmUgb3Aob3V0ZXJfdmFyLCBwYXJhbSkgKi8KKwkJCWlmIChsaXN0 X2xlbmd0aChvcGV4cHItPmFyZ3MpICE9IDIpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQkvKiB2 ZXJpZnkgb3BlcmF0b3Igc2FmZXR5OyBzZWUgY29tbWVudCBhYm92ZSAqLworCQkJaWYgKCFvcF9p c19zYWZlX2luZGV4X21lbWJlcihvcGV4cHItPm9wbm8pKQorCQkJCXJldHVybiBmYWxzZTsKKwor CQkJb3V0ZXJfZXhwcnMgPSBsYXBwZW5kKG91dGVyX2V4cHJzLCBsaW5pdGlhbChvcGV4cHItPmFy Z3MpKTsKKwkJfQorCX0KKwllbHNlIGlmIChJc0EodGVzdGV4cHIsIFJvd0NvbXBhcmVFeHByKSkK Kwl7CisJCS8qIG11bHRpLWNvbHVtbiBvcmRlcmluZyBjaGVja3MgKi8KKwkJUm93Q29tcGFyZUV4 cHIgKnJjZXhwciA9IChSb3dDb21wYXJlRXhwciAqKSB0ZXN0ZXhwcjsKKworCQlmb3JlYWNoKGxj LCByY2V4cHItPm9wbm9zKQorCQl7CisJCQlPaWQJCQlvcG5vID0gbGZpcnN0X29pZChsYyk7CisK KwkJCS8qIHZlcmlmeSBvcGVyYXRvciBzYWZldHk7IHNlZSBjb21tZW50IGFib3ZlICovCisJCQlp ZiAoIW9wX2lzX3NhZmVfaW5kZXhfbWVtYmVyKG9wbm8pKQorCQkJCXJldHVybiBmYWxzZTsKKwkJ fQorCisJCW91dGVyX2V4cHJzID0gbGlzdF9jb25jYXQob3V0ZXJfZXhwcnMsIHJjZXhwci0+bGFy Z3MpOworCX0KKwllbHNlCisJeworCQkvKiBQdW50IGlmIG90aGVyIG5vZGUgdHlwZXMgKi8KKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogU2luY2UgdGhlIHF1ZXJ5IGhhc24ndCB5ZXQg YmVlbiB0aHJvdWdoIGV4cHJlc3Npb24gcHJlcHJvY2Vzc2luZywgd2UKKwkgKiBtdXN0IGFwcGx5 IGZsYXR0ZW5fam9pbl9hbGlhc192YXJzIHRvIHRoZSBvdXRlciBleHByZXNzaW9ucyB0byBhdm9p ZAorCSAqIGJlaW5nIGZvb2xlZCBieSBqb2luIGFsaWFzZXMuCisJICoKKwkgKiBXZSBkbyBub3Qg bmVlZCB0byBhcHBseSBmbGF0dGVuX2dyb3VwX2V4cHJzIHRob3VnaCwgc2luY2UgZ3JvdXBpbmcg VmFycworCSAqIGNhbm5vdCBhcHBlYXIgaW4gam9pbnRyZWUgcXVhbHMuCisJICovCisJb3V0ZXJf ZXhwcnMgPSAoTGlzdCAqKQorCQlmbGF0dGVuX2pvaW5fYWxpYXNfdmFycyhyb290LCByb290LT5w YXJzZSwgKE5vZGUgKikgb3V0ZXJfZXhwcnMpOworCisJLyogQ2hlY2sgdGhhdCBldmVyeSBvdXRl ciBleHByZXNzaW9uIGlzIG5vbi1udWxsYWJsZSAqLworCWZvcmVhY2gobGMsIG91dGVyX2V4cHJz KQorCXsKKwkJRXhwcgkgICAqZXhwciA9IChFeHByICopIGxmaXJzdChsYyk7CisKKwkJLyoKKwkJ ICogV2UgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCByZWxhdGlvbi1sZXZlbCBub3QtbnVsbCBjb25z dHJhaW50cyBmb3IKKwkJICogdGhlIG91dGVyIHF1ZXJ5LCBzbyB3ZSBjYW4gY29uc3VsdCB0aGUg Z2xvYmFsIGhhc2ggdGFibGUgZm9yCisJCSAqIG51bGxhYmlsaXR5IGluZm9ybWF0aW9uLgorCQkg Ki8KKwkJaWYgKCFleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGV4cHIsIE5PVE5VTExfU09VUkNF X0hBU0hUQUJMRSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogTm90ZTogSXQgaXMg cG9zc2libGUgdG8gZnVydGhlciBwcm92ZSBub24tbnVsbGFiaWxpdHkgYnkgZXhhbWluaW5nCisJ CSAqIHRoZSBxdWFsIGNsYXVzZXMgYXZhaWxhYmxlIGF0IG9yIGJlbG93IHRoZSBqb2ludHJlZSBu b2RlIHdoZXJlIHRoaXMKKwkJICogTk9UIElOIGNsYXVzZSBpcyBldmFsdWF0ZWQsIGJ1dCBmb3Ig dGhlIG1vbWVudCBpdCBkb2Vzbid0IHNlZW0KKwkJICogd29ydGggdGhlIGV4dHJhIGNvbXBsaWNh dGlvbi4KKwkJICovCisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBjb252ZXJ0X0VY SVNUU19zdWJsaW5rX3RvX2pvaW46IHRyeSB0byBjb252ZXJ0IGFuIEVYSVNUUyBTdWJMaW5rIHRv IGEgam9pbgogICoKLSAqIFRoZSBBUEkgb2YgdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8g Y29udmVydF9BTllfc3VibGlua190b19qb2luJ3MsCi0gKiBleGNlcHQgdGhhdCB3ZSBhbHNvIHN1 cHBvcnQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhbGxlciBoYXMgZm91bmQgTk9UIEVYSVNUUywKLSAq IHNvIHdlIG5lZWQgYW4gYWRkaXRpb25hbCBpbnB1dCBwYXJhbWV0ZXIgInVuZGVyX25vdCIuCisg KiBUaGUgQVBJIG9mIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGNvbnZlcnRfQU5ZX3N1 YmxpbmtfdG9fam9pbidzLgogICovCiBKb2luRXhwciAqCiBjb252ZXJ0X0VYSVNUU19zdWJsaW5r X3RvX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFN1YkxpbmsgKnN1YmxpbmssCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCmluZGV4IGM5MGY0YjMyNzMzLi5iMmJlYjBh MGQ2OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVl LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKQEAgLTg1 MiwxNCArODUyLDE1IEBAIHB1bGxfdXBfc3VibGlua3NfcXVhbF9yZWN1cnNlKFBsYW5uZXJJbmZv ICpyb290LCBOb2RlICpub2RlLAogCQkJaWYgKChzYW9wID0gY29udmVydF9WQUxVRVNfdG9fQU5Z KHJvb3QsCiAJCQkJCQkJCQkJCSAgc3VibGluay0+dGVzdGV4cHIsCiAJCQkJCQkJCQkJCSAgKFF1 ZXJ5ICopIHN1YmxpbmstPnN1YnNlbGVjdCkpICE9IE5VTEwpCi0KKwkJCXsKIAkJCQkvKgogCQkJ CSAqIFRoZSBWQUxVRVMgc2VxdWVuY2Ugd2FzIHNpbXBsaWZpZWQuICBOb3RoaW5nIG1vcmUgdG8g ZG8KIAkJCQkgKiBoZXJlLgogCQkJCSAqLwogCQkJCXJldHVybiAoTm9kZSAqKSBzYW9wOworCQkJ fQogCi0JCQlpZiAoKGogPSBjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pvaW4ocm9vdCwgc3VibGlu aywKKwkJCWlmICgoaiA9IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9fam9pbihyb290LCBzdWJsaW5r LCBmYWxzZSwKIAkJCQkJCQkJCQkJCSBhdmFpbGFibGVfcmVsczEpKSAhPSBOVUxMKQogCQkJewog CQkJCS8qIFllczsgaW5zZXJ0IHRoZSBuZXcgam9pbiBub2RlIGludG8gdGhlIGpvaW4gdHJlZSAq LwpAQCAtODg1LDcgKzg4Niw3IEBAIHB1bGxfdXBfc3VibGlua3NfcXVhbF9yZWN1cnNlKFBsYW5u ZXJJbmZvICpyb290LCBOb2RlICpub2RlLAogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQkJaWYg KGF2YWlsYWJsZV9yZWxzMiAhPSBOVUxMICYmCi0JCQkJKGogPSBjb252ZXJ0X0FOWV9zdWJsaW5r X3RvX2pvaW4ocm9vdCwgc3VibGluaywKKwkJCQkoaiA9IGNvbnZlcnRfQU5ZX3N1YmxpbmtfdG9f am9pbihyb290LCBzdWJsaW5rLCBmYWxzZSwKIAkJCQkJCQkJCQkJCSBhdmFpbGFibGVfcmVsczIp KSAhPSBOVUxMKQogCQkJewogCQkJCS8qIFllczsgaW5zZXJ0IHRoZSBuZXcgam9pbiBub2RlIGlu dG8gdGhlIGpvaW4gdHJlZSAqLwpAQCAtOTcwLDE0ICs5NzEsNjggQEAgcHVsbF91cF9zdWJsaW5r c19xdWFsX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCiAJfQogCWlmIChp c19ub3RjbGF1c2Uobm9kZSkpCiAJewotCQkvKiBJZiB0aGUgaW1tZWRpYXRlIGFyZ3VtZW50IG9m IE5PVCBpcyBFWElTVFMsIHRyeSB0byBjb252ZXJ0ICovCisJCS8qIElmIHRoZSBpbW1lZGlhdGUg YXJndW1lbnQgb2YgTk9UIGlzIEFOWSBvciBFWElTVFMsIHRyeSB0byBjb252ZXJ0ICovCiAJCVN1 YkxpbmsgICAgKnN1YmxpbmsgPSAoU3ViTGluayAqKSBnZXRfbm90Y2xhdXNlYXJnKChFeHByICop IG5vZGUpOwogCQlKb2luRXhwciAgICpqOwogCQlSZWxpZHMJCWNoaWxkX3JlbHM7CiAKIAkJaWYg KHN1YmxpbmsgJiYgSXNBKHN1YmxpbmssIFN1YkxpbmspKQogCQl7Ci0JCQlpZiAoc3VibGluay0+ c3ViTGlua1R5cGUgPT0gRVhJU1RTX1NVQkxJTkspCisJCQlpZiAoc3VibGluay0+c3ViTGlua1R5 cGUgPT0gQU5ZX1NVQkxJTkspCisJCQl7CisJCQkJaWYgKChqID0gY29udmVydF9BTllfc3VibGlu a190b19qb2luKHJvb3QsIHN1YmxpbmssIHRydWUsCisJCQkJCQkJCQkJCQkJIGF2YWlsYWJsZV9y ZWxzMSkpICE9IE5VTEwpCisJCQkJeworCQkJCQkvKiBZZXM7IGluc2VydCB0aGUgbmV3IGpvaW4g bm9kZSBpbnRvIHRoZSBqb2luIHRyZWUgKi8KKwkJCQkJai0+bGFyZyA9ICpqdGxpbmsxOworCQkJ CQkqanRsaW5rMSA9IChOb2RlICopIGo7CisJCQkJCS8qIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgcHVs bGVkLXVwIGpvaW50cmVlIG5vZGVzICovCisJCQkJCWotPnJhcmcgPSBwdWxsX3VwX3N1Ymxpbmtz X2pvaW50cmVlX3JlY3Vyc2Uocm9vdCwKKwkJCQkJCQkJCQkJCQkJCQlqLT5yYXJnLAorCQkJCQkJ CQkJCQkJCQkJCSZjaGlsZF9yZWxzKTsKKworCQkJCQkvKgorCQkJCQkgKiBOb3cgcmVjdXJzaXZl bHkgcHJvY2VzcyB0aGUgcHVsbGVkLXVwIHF1YWxzLiAgQmVjYXVzZQorCQkJCQkgKiB3ZSBhcmUg dW5kZXJuZWF0aCBhIE5PVCwgd2UgY2FuJ3QgcHVsbCB1cCBzdWJsaW5rcyB0aGF0CisJCQkJCSAq IHJlZmVyZW5jZSB0aGUgbGVmdC1oYW5kIHN0dWZmLCBidXQgaXQncyBzdGlsbCBva2F5IHRvCisJ CQkJCSAqIHB1bGwgdXAgc3VibGlua3MgcmVmZXJlbmNpbmcgai0+cmFyZy4KKwkJCQkJICovCisJ CQkJCWotPnF1YWxzID0gcHVsbF91cF9zdWJsaW5rc19xdWFsX3JlY3Vyc2Uocm9vdCwKKwkJCQkJ CQkJCQkJCQkJCSBqLT5xdWFscywKKwkJCQkJCQkJCQkJCQkJCSAmai0+cmFyZywKKwkJCQkJCQkJ CQkJCQkJCSBjaGlsZF9yZWxzLAorCQkJCQkJCQkJCQkJCQkJIE5VTEwsIE5VTEwpOworCQkJCQkv KiBSZXR1cm4gTlVMTCByZXByZXNlbnRpbmcgY29uc3RhbnQgVFJVRSAqLworCQkJCQlyZXR1cm4g TlVMTDsKKwkJCQl9CisJCQkJaWYgKGF2YWlsYWJsZV9yZWxzMiAhPSBOVUxMICYmCisJCQkJCShq ID0gY29udmVydF9BTllfc3VibGlua190b19qb2luKHJvb3QsIHN1YmxpbmssIHRydWUsCisJCQkJ CQkJCQkJCQkJIGF2YWlsYWJsZV9yZWxzMikpICE9IE5VTEwpCisJCQkJeworCQkJCQkvKiBZZXM7 IGluc2VydCB0aGUgbmV3IGpvaW4gbm9kZSBpbnRvIHRoZSBqb2luIHRyZWUgKi8KKwkJCQkJai0+ bGFyZyA9ICpqdGxpbmsyOworCQkJCQkqanRsaW5rMiA9IChOb2RlICopIGo7CisJCQkJCS8qIFJl Y3Vyc2l2ZWx5IHByb2Nlc3MgcHVsbGVkLXVwIGpvaW50cmVlIG5vZGVzICovCisJCQkJCWotPnJh cmcgPSBwdWxsX3VwX3N1YmxpbmtzX2pvaW50cmVlX3JlY3Vyc2Uocm9vdCwKKwkJCQkJCQkJCQkJ CQkJCQlqLT5yYXJnLAorCQkJCQkJCQkJCQkJCQkJCSZjaGlsZF9yZWxzKTsKKworCQkJCQkvKgor CQkJCQkgKiBOb3cgcmVjdXJzaXZlbHkgcHJvY2VzcyB0aGUgcHVsbGVkLXVwIHF1YWxzLiAgQmVj YXVzZQorCQkJCQkgKiB3ZSBhcmUgdW5kZXJuZWF0aCBhIE5PVCwgd2UgY2FuJ3QgcHVsbCB1cCBz dWJsaW5rcyB0aGF0CisJCQkJCSAqIHJlZmVyZW5jZSB0aGUgbGVmdC1oYW5kIHN0dWZmLCBidXQg aXQncyBzdGlsbCBva2F5IHRvCisJCQkJCSAqIHB1bGwgdXAgc3VibGlua3MgcmVmZXJlbmNpbmcg ai0+cmFyZy4KKwkJCQkJICovCisJCQkJCWotPnF1YWxzID0gcHVsbF91cF9zdWJsaW5rc19xdWFs X3JlY3Vyc2Uocm9vdCwKKwkJCQkJCQkJCQkJCQkJCSBqLT5xdWFscywKKwkJCQkJCQkJCQkJCQkJ CSAmai0+cmFyZywKKwkJCQkJCQkJCQkJCQkJCSBjaGlsZF9yZWxzLAorCQkJCQkJCQkJCQkJCQkJ IE5VTEwsIE5VTEwpOworCQkJCQkvKiBSZXR1cm4gTlVMTCByZXByZXNlbnRpbmcgY29uc3RhbnQg VFJVRSAqLworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChzdWJs aW5rLT5zdWJMaW5rVHlwZSA9PSBFWElTVFNfU1VCTElOSykKIAkJCXsKIAkJCQlpZiAoKGogPSBj b252ZXJ0X0VYSVNUU19zdWJsaW5rX3RvX2pvaW4ocm9vdCwgc3VibGluaywgdHJ1ZSwKIAkJCQkJ CQkJCQkJCQkJYXZhaWxhYmxlX3JlbHMxKSkgIT0gTlVMTCkKQEAgLTM3MDYsNiArMzc2MSwxMyBA QCBoYXNfbm90bnVsbF9mb3JjZWRfdmFyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpmb3JjZWRf bnVsbF92YXJzLAogCiAJCXJ0ZSA9IHJ0X2ZldGNoKHZhcm5vLCByb290LT5wYXJzZS0+cnRhYmxl KTsKIAorCQkvKiBXZSBjYW4gb25seSByZWFzb24gYWJvdXQgb3JkaW5hcnkgcmVsYXRpb25zICov CisJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQl7CisJCQlibXNfZnJlZShm b3JjZWRudWxsYXR0bnVtcyk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIFdlIG11 c3Qgc2tpcCBpbmhlcml0YW5jZSBwYXJlbnQgdGFibGVzLCBhcyBzb21lIGNoaWxkIHRhYmxlcyBt YXkKIAkJICogaGF2ZSBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgZm9yIGEgY29sdW1uIHdoaWxlIG90 aGVycyBtYXkgbm90LiAgVGhpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4 IGE0MWQ4MTczNGNmLi5jNDdjOWRhNGE5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVz ZXMuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2lu aGVyaXRzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKQEAgLTEx Miw2ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBjb250YWluX2NvbnRleHRfZGVwZW5kZW50X25vZGVf d2Fsa2VyKE5vZGUgKm5vZGUsIGludCAqZmxhZ3MpOwogc3RhdGljIGJvb2wgY29udGFpbl9sZWFr ZWRfdmFyc193YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7CiBzdGF0aWMgUmVsaWRz IGZpbmRfbm9ubnVsbGFibGVfcmVsc193YWxrZXIoTm9kZSAqbm9kZSwgYm9vbCB0b3BfbGV2ZWwp Owogc3RhdGljIExpc3QgKmZpbmRfbm9ubnVsbGFibGVfdmFyc193YWxrZXIoTm9kZSAqbm9kZSwg Ym9vbCB0b3BfbGV2ZWwpOworc3RhdGljIHZvaWQgZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKE5v ZGUgKmp0bm9kZSwgTGlzdCAqKnNhZmVfcXVhbHMpOwogc3RhdGljIGJvb2wgaXNfc3RyaWN0X3Nh b3AoU2NhbGFyQXJyYXlPcEV4cHIgKmV4cHIsIGJvb2wgZmFsc2VPSyk7CiBzdGF0aWMgYm9vbCBj b252ZXJ0X3Nhb3BfdG9faGFzaGVkX3Nhb3Bfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRl eHQpOwogc3RhdGljIE5vZGUgKmV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpu b2RlLApAQCAtMTQzMyw2ICsxNDM1LDEwIEBAIGNvbnRhaW5fbGVha2VkX3ZhcnNfd2Fsa2VyKE5v ZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiAJCQkJCQkJCSAgY29udGV4dCk7CiB9CiAKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICoJCSAgTnVsbGFiaWxpdHkgYW5hbHlzaXMKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKwogLyoKICAqIGZpbmRfbm9ubnVsbGFibGVfcmVscwogICoJCURldGVybWlu ZSB3aGljaCBiYXNlIHJlbHMgYXJlIGZvcmNlZCBub25udWxsYWJsZSBieSBnaXZlbiBjbGF1c2Uu CkBAIC0xNzAxLDcgKzE3MDcsNyBAQCBmaW5kX25vbm51bGxhYmxlX3JlbHNfd2Fsa2VyKE5vZGUg Km5vZGUsIGJvb2wgdG9wX2xldmVsKQogICogYnV0IGhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIGlu cHV0IGlzIGEgQm9vbGVhbiBleHByZXNzaW9uLCBhbmQgd2lzaCB0bwogICogc2VlIGlmIE5VTEwg aW5wdXRzIHdpbGwgcHJvdmFibHkgY2F1c2UgYSBGQUxTRS1vci1OVUxMIHJlc3VsdC4gIFdlIGV4 cGVjdAogICogdGhlIGV4cHJlc3Npb24gdG8gaGF2ZSBiZWVuIEFORC9PUiBmbGF0dGVuZWQgYW5k IGNvbnZlcnRlZCB0byBpbXBsaWNpdC1BTkQKLSAqIGZvcm1hdC4KKyAqIGZvcm1hdCAoYnV0IHRo ZSByZXN1bHRzIGFyZSBzdGlsbCBnb29kIGlmIGl0IHdhc24ndCBBTkQvT1IgZmxhdHRlbmVkKS4K ICAqCiAgKiBBdHRub3Mgb2YgdGhlIGlkZW50aWZpZWQgVmFycyBhcmUgcmV0dXJuZWQgaW4gYSBt dWx0aWJpdG1hcHNldCAoYSBMaXN0IG9mCiAgKiBCaXRtYXBzZXRzKS4gIExpc3QgaW5kZXhlcyBj b3JyZXNwb25kIHRvIHJlbGlkcyAodmFybm9zKSwgd2hpbGUgdGhlIHBlci1yZWwKQEAgLTIwMjEs NiArMjAyNywyMzAgQEAgZmluZF9mb3JjZWRfbnVsbF92YXIoTm9kZSAqbm9kZSkKIAlyZXR1cm4g TlVMTDsKIH0KIAorLyoKKyAqIHF1ZXJ5X291dHB1dHNfYXJlX25vdF9udWxsYWJsZQorICoJCVJl dHVybnMgVFJVRSBpZiB0aGUgb3V0cHV0IHZhbHVlcyBvZiB0aGUgUXVlcnkgYXJlIGNlcnRhaW5s eSBub3QgTlVMTC4KKyAqCQlBbGwgb3V0cHV0IGNvbHVtbnMgbXVzdCByZXR1cm4gbm9uLU5VTEwg dG8gYW5zd2VyIFRSVUUuCisgKgorICogVGhlIHJlYXNvbiB0aGlzIHRha2VzIGEgUXVlcnksIGFu ZCBub3QganVzdCBhbiBpbmRpdmlkdWFsIHRsaXN0IGV4cHJlc3Npb24sCisgKiBpcyBzbyB0aGF0 IHdlIGNhbiBtYWtlIHVzZSBvZiB0aGUgcXVlcnkncyBXSEVSRS9PTiBjbGF1c2VzIHRvIHByb3Zl IGl0IGRvZXMKKyAqIG5vdCByZXR1cm4gbnVsbHMuCisgKgorICogSW4gY3VycmVudCB1c2FnZSwg dGhlIHBhc3NlZCBzdWItUXVlcnkgaGFzbid0IHlldCBiZWVuIHRocm91Z2ggYW55IHBsYW5uZXIK KyAqIHByb2Nlc3NpbmcuICBUaGlzIG1lYW5zIHRoYXQgYXBwbHlpbmcgZmluZF9ub25udWxsYWJs ZV92YXJzKCkgdG8gaXRzIFdIRVJFCisgKiBjbGF1c2VzIGlzbid0IHJlYWxseSBpZGVhbDogZm9y IGxhY2sgb2YgY29uc3Qtc2ltcGxpZmljYXRpb24sIHdlIG1pZ2h0IGJlCisgKiB1bmFibGUgdG8g cHJvdmUgbm90LW51bGxuZXNzIGluIHNvbWUgY2FzZXMgd2hlcmUgd2UgY291bGQgaGF2ZSBwcm92 ZWQgaXQKKyAqIGFmdGVyd2FyZHMuICBIb3dldmVyLCB3ZSBzaG91bGQgbm90IGdldCBhbnkgZmFs c2UgcG9zaXRpdmUgcmVzdWx0cy4KKyAqCisgKiBMaWtlIHRoZSBvdGhlciBmb3JtcyBvZiBudWxs YWJpbGl0eSBhbmFseXNpcyBhYm92ZSwgd2UgY2FuIGVyciBvbiB0aGUKKyAqIHNpZGUgb2YgY29u c2VydmF0aXNtOiBpZiB3ZSdyZSBub3Qgc3VyZSwgaXQncyBva2F5IHRvIHJldHVybiBGQUxTRS4K KyAqLworYm9vbAorcXVlcnlfb3V0cHV0c19hcmVfbm90X251bGxhYmxlKFF1ZXJ5ICpxdWVyeSkK K3sKKwlQbGFubmVySW5mbyBzdWJyb290OworCUxpc3QJICAgKnNhZmVfcXVhbHMgPSBOSUw7CisJ TGlzdAkgICAqbm9ubnVsbGFibGVfdmFycyA9IE5JTDsKKwlib29sCQljb21wdXRlZF9ub25udWxs YWJsZV92YXJzID0gZmFsc2U7CisJTGlzdENlbGwgICAqdGw7CisKKwkvKgorCSAqIElmIHRoZSBx dWVyeSBjb250YWlucyBzZXQgb3BlcmF0aW9ucywgcHVudC4gIFRoZSBzZXQgb3BzIHRoZW1zZWx2 ZXMKKwkgKiBjb3VsZG4ndCBpbnRyb2R1Y2UgbnVsbHMgdGhhdCB3ZXJlbid0IGluIHRoZWlyIGlu cHV0cywgYnV0IHRoZSB0bGlzdAorCSAqIHByZXNlbnQgaW4gdGhlIHRvcC1sZXZlbCBxdWVyeSBp cyBqdXN0IGR1bW15IGFuZCB3b24ndCBnaXZlIHVzIHVzZWZ1bAorCSAqIGluZm8uICBXZSBjb3Vs ZCBnZXQgYW4gYW5zd2VyIGJ5IHJlY3Vyc2luZyB0byBleGFtaW5lIGVhY2ggbGVhZiBxdWVyeSwK KwkgKiBidXQgZm9yIHRoZSBtb21lbnQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZSBleHRyYSBj b21wbGljYXRpb24uCisJICovCisJaWYgKHF1ZXJ5LT5zZXRPcGVyYXRpb25zKQorCQlyZXR1cm4g ZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSBxdWVyeSBjb250YWlucyBncm91cGluZyBzZXRzLCBw dW50LiAgR3JvdXBpbmcgc2V0cyBjYW4gaW50cm9kdWNlCisJICogTlVMTCB2YWx1ZXMsIGFuZCB3 ZSBjdXJyZW50bHkgbGFjayB0aGUgUGxhbm5lckluZm8gbmVlZGVkIHRvIGZsYXR0ZW4KKwkgKiBn cm91cGluZyBWYXJzIGluIHRoZSBxdWVyeSdzIG91dHB1dHMuCisJICovCisJaWYgKHF1ZXJ5LT5n cm91cGluZ1NldHMpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgbmVlZCBhIFBsYW5u ZXJJbmZvIHRvIHBhc3MgdG8gZXhwcl9pc19ub25udWxsYWJsZS4gIEZvcnR1bmF0ZWx5LCB3ZQor CSAqIGNhbiBjb25zIHVwIGFuIGVudGlyZWx5IGR1bW15IG9uZSwgYmVjYXVzZSBvbmx5IHRoZSAi cGFyc2UiIGxpbmsgaW4gdGhlCisJICogc3RydWN0IGlzIHVzZWQgYnkgZXhwcl9pc19ub25udWxs YWJsZS4KKwkgKi8KKwlNZW1TZXQoJnN1YnJvb3QsIDAsIHNpemVvZihzdWJyb290KSk7CisJc3Vi cm9vdC5wYXJzZSA9IHF1ZXJ5OworCisJLyoKKwkgKiBFeGFtaW5lIGVhY2ggdGFyZ2V0bGlzdCBl bnRyeSB0byBwcm92ZSB0aGF0IGl0IGNhbid0IHByb2R1Y2UgTlVMTC4KKwkgKi8KKwlmb3JlYWNo KHRsLCBxdWVyeS0+dGFyZ2V0TGlzdCkKKwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSAoVGFyZ2V0 RW50cnkgKikgbGZpcnN0KHRsKTsKKwkJRXhwcgkgICAqZXhwciA9IHRsZS0+ZXhwcjsKKworCQkv KiBSZXNqdW5rIGNvbHVtbnMgY2FuIGJlIGlnbm9yZWQ6IHRoZXkgZG9uJ3QgcHJvZHVjZSBvdXRw dXQgdmFsdWVzICovCisJCWlmICh0bGUtPnJlc2p1bmspCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBMb29rIHRocm91Z2ggYmluYXJ5IHJlbGFiZWxpbmdzLCBzaW5jZSB3ZSBrbm93IHRob3Nl IGRvbid0CisJCSAqIGludHJvZHVjZSBudWxscy4KKwkJICovCisJCXdoaWxlIChleHByICYmIElz QShleHByLCBSZWxhYmVsVHlwZSkpCisJCQlleHByID0gKChSZWxhYmVsVHlwZSAqKSBleHByKS0+ YXJnOworCisJCWlmIChleHByID09IE5VTEwpCQkvKiBwYXJhbm9pYSAqLworCQkJcmV0dXJuIGZh bHNlOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBzdWJxdWVyeSBoYXNuJ3QgeWV0IGJlZW4gdGhy b3VnaCBleHByZXNzaW9uCisJCSAqIHByZXByb2Nlc3NpbmcsIHdlIG11c3QgYXBwbHkgZmxhdHRl bl9qb2luX2FsaWFzX3ZhcnMgdG8gdGhlIGdpdmVuCisJCSAqIGV4cHJlc3Npb24sIGFuZCB0byB0 aGUgcXVhbHMgZm91bmQgYnkgZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzLCB0bworCQkgKiBhdm9p ZCBiZWluZyBmb29sZWQgYnkgam9pbiBhbGlhc2VzLgorCQkgKgorCQkgKiBXZSB3b24ndCBiZSBk ZWFsaW5nIHdpdGggYXJiaXRyYXJ5IGV4cHJlc3Npb25zLCBzbyBpdCdzIHNhZmUgdG8gdXNlCisJ CSAqIE5VTEwgYXMgdGhlIHJvb3QsIHNvIGxvbmcgYXMgYWRqdXN0X3N0YW5kYXJkX2pvaW5fYWxp YXNfZXhwcmVzc2lvbgorCQkgKiBjYW4gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhlIHBhcnNlciB3b3Vs ZCBtYWtlIGFzIGEgam9pbiBhbGlhcworCQkgKiBleHByZXNzaW9uLgorCQkgKi8KKwkJZXhwciA9 IChFeHByICopIGZsYXR0ZW5fam9pbl9hbGlhc192YXJzKE5VTEwsIHF1ZXJ5LCAoTm9kZSAqKSBl eHByKTsKKworCQkvKgorCQkgKiBTaW1pbGFybHksIHdlIG11c3QgYXBwbHkgZmxhdHRlbl9ncm91 cF9leHBycyB0byB0aGUgZ2l2ZW4KKwkJICogZXhwcmVzc2lvbiB0byBhdm9pZCBiZWluZyBmb29s ZWQgYnkgZ3JvdXBpbmcgVmFycy4gIFdlIGRvIG5vdCBuZWVkCisJCSAqIHRvIGFwcGx5IGZsYXR0 ZW5fZ3JvdXBfZXhwcnMgdG8gdGhlIHF1YWxzIGZvdW5kIGJ5CisJCSAqIGZpbmRfc3VicXVlcnlf c2FmZV9xdWFscyB0aG91Z2gsIGFzIGdyb3VwaW5nIFZhcnMgY2Fubm90IGFwcGVhciBpbgorCQkg KiBqb2ludHJlZSBxdWFscy4KKwkJICoKKwkJICogV2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZSBx dWVyeSBkb2VzIG5vdCBjb250YWluIGdyb3VwaW5nIHNldHMsIHNvCisJCSAqIGl0J3Mgc2FmZSB0 byB1c2UgTlVMTCBhcyB0aGUgcm9vdCBoZXJlLgorCQkgKi8KKwkJZXhwciA9IChFeHByICopIGZs YXR0ZW5fZ3JvdXBfZXhwcnMoTlVMTCwgcXVlcnksIChOb2RlICopIGV4cHIpOworCisJCS8qCisJ CSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZXhwciBjYW5ub3QgYmUgTlVMTC4gIFNpbmNlIHdlJ3Jl IG9uIGEgcmF3CisJCSAqIHBhcnNlIHRyZWUsIHdlIG5lZWQgdG8gbG9vayB1cCB0aGUgbm90LW51 bGwgY29uc3RyYWludHMgZnJvbSB0aGUKKwkJICogc3lzdGVtIGNhdGFsb2dzLgorCQkgKi8KKwkJ aWYgKGV4cHJfaXNfbm9ubnVsbGFibGUoJnN1YnJvb3QsIGV4cHIsIE5PVE5VTExfU09VUkNFX1NZ U0NBQ0hFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChJc0EoZXhwciwgVmFyKSkKKwkJeworCQkJ VmFyCQkgICAqdmFyID0gKFZhciAqKSBleHByOworCisJCQkvKgorCQkJICogRm9yIGEgcGxhaW4g VmFyLCBldmVuIGlmIHRoYXQgZGlkbid0IHdvcmssIHdlIGNhbiBjb25jbHVkZSB0aGF0CisJCQkg KiB0aGUgVmFyIGlzIG5vdCBudWxsYWJsZSBpZiBmaW5kX25vbm51bGxhYmxlX3ZhcnMgY2FuIGZp bmQgYQorCQkJICogInZhciBJUyBOT1QgTlVMTCIgb3Igc2ltaWxhcmx5IHN0cmljdCBjb25kaXRp b24gYW1vbmcgdGhlIHF1YWxzCisJCQkgKiBvbiBub24tb3V0ZXJqb2luZWQtcmVscy4gIENvbXB1 dGUgdGhlIGxpc3Qgb2YgVmFycyBoYXZpbmcgc3VjaAorCQkJICogcXVhbHMgaWYgd2UgZGlkbid0 IGFscmVhZHkuCisJCQkgKi8KKwkJCWlmICghY29tcHV0ZWRfbm9ubnVsbGFibGVfdmFycykKKwkJ CXsKKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoKE5vZGUgKikgcXVlcnktPmpvaW50cmVl LCAmc2FmZV9xdWFscyk7CisJCQkJc2FmZV9xdWFscyA9IChMaXN0ICopCisJCQkJCWZsYXR0ZW5f am9pbl9hbGlhc192YXJzKE5VTEwsIHF1ZXJ5LCAoTm9kZSAqKSBzYWZlX3F1YWxzKTsKKwkJCQlu b25udWxsYWJsZV92YXJzID0gZmluZF9ub25udWxsYWJsZV92YXJzKChOb2RlICopIHNhZmVfcXVh bHMpOworCQkJCWNvbXB1dGVkX25vbm51bGxhYmxlX3ZhcnMgPSB0cnVlOworCQkJfQorCisJCQlp ZiAoIW1ibXNfaXNfbWVtYmVyKHZhci0+dmFybm8sCisJCQkJCQkJCXZhci0+dmFyYXR0bm8gLSBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAorCQkJCQkJCQlub25udWxsYWJsZV92 YXJzKSkKKwkJCQlyZXR1cm4gZmFsc2U7CS8qIHdlIGZhaWxlZCB0byBwcm92ZSB0aGUgVmFyIG5v bi1udWxsICovCisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBQdW50IG90aGVyd2lzZSAqLworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBmaW5k X3N1YnF1ZXJ5X3NhZmVfcXVhbHMKKyAqCQlUcmF2ZXJzZSBqb2ludHJlZSB0byBsb2NhdGUgcXVh bHMgb24gbm9uLW91dGVyam9pbmVkLXJlbHMuCisgKgorICogV2UgbG9jYXRlIGFsbCBXSEVSRSBh bmQgSk9JTi9PTiBxdWFscyB0aGF0IGNvbnN0cmFpbiB0aGUgcmVscyB0aGF0IGFyZSBub3QKKyAq IGJlbG93IHRoZSBudWxsYWJsZSBzaWRlIG9mIGFueSBvdXRlciBqb2luLCBhbmQgYWRkIHRoZW0g dG8gdGhlICpzYWZlX3F1YWxzCisgKiBsaXN0IChmb3JtaW5nIGEgbGlzdCB3aXRoIGltcGxpY2l0 LUFORCBzZW1hbnRpY3MpLiAgVGhlc2UgcXVhbHMgY2FuIGJlIHVzZWQKKyAqIHRvIHByb3ZlIG5v bi1udWxsYWJpbGl0eSBvZiB0aGUgc3VicXVlcnkncyBvdXRwdXRzLgorICoKKyAqIFRvcC1sZXZl bCBjYWxsZXIgbXVzdCBpbml0aWFsaXplICpzYWZlX3F1YWxzIHRvIE5JTC4KKyAqLworc3RhdGlj IHZvaWQKK2ZpbmRfc3VicXVlcnlfc2FmZV9xdWFscyhOb2RlICpqdG5vZGUsIExpc3QgKipzYWZl X3F1YWxzKQoreworCWlmIChqdG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChJc0EoanRu b2RlLCBSYW5nZVRibFJlZikpCisJeworCQkvKiBMZWFmIG5vZGU6IG5vdGhpbmcgdG8gZG8gKi8K KwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChJc0EoanRub2RlLCBGcm9tRXhwcikpCisJeworCQlG cm9tRXhwciAgICpmID0gKEZyb21FeHByICopIGp0bm9kZTsKKwkJTGlzdENlbGwgICAqbGM7CisK KwkJLyogQWxsIGVsZW1lbnRzIG9mIHRoZSBGUk9NIGxpc3QgYXJlIGFsbG93YWJsZSAqLworCQlm b3JlYWNoKGxjLCBmLT5mcm9tbGlzdCkKKwkJCWZpbmRfc3VicXVlcnlfc2FmZV9xdWFscygoTm9k ZSAqKSBsZmlyc3QobGMpLCBzYWZlX3F1YWxzKTsKKwkJLyogLi4uIGFuZCBpdHMgV0hFUkUgcXVh bHMgYXJlIHRvbyAqLworCQlpZiAoZi0+cXVhbHMpCisJCQkqc2FmZV9xdWFscyA9IGxhcHBlbmQo KnNhZmVfcXVhbHMsIGYtPnF1YWxzKTsKKwl9CisJZWxzZSBpZiAoSXNBKGp0bm9kZSwgSm9pbkV4 cHIpKQorCXsKKwkJSm9pbkV4cHIgICAqaiA9IChKb2luRXhwciAqKSBqdG5vZGU7CisKKwkJc3dp dGNoIChqLT5qb2ludHlwZSkKKwkJeworCQkJY2FzZSBKT0lOX0lOTkVSOgorCQkJCS8qIHZpc2l0 IGJvdGggY2hpbGRyZW4gKi8KKwkJCQlmaW5kX3N1YnF1ZXJ5X3NhZmVfcXVhbHMoai0+bGFyZywg c2FmZV9xdWFscyk7CisJCQkJZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKGotPnJhcmcsIHNhZmVf cXVhbHMpOworCQkJCS8qIGFuZCBncmFiIHRoZSBPTiBxdWFscyB0b28gKi8KKwkJCQlpZiAoai0+ cXVhbHMpCisJCQkJCSpzYWZlX3F1YWxzID0gbGFwcGVuZCgqc2FmZV9xdWFscywgai0+cXVhbHMp OworCQkJCWJyZWFrOworCisJCQljYXNlIEpPSU5fTEVGVDoKKwkJCWNhc2UgSk9JTl9TRU1JOgor CQkJY2FzZSBKT0lOX0FOVEk6CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgdGhlIGxlZnQgaW5wdXQg aXMgcG9zc2libHkgbm9uLW51bGxhYmxlOyBmdXJ0aGVybW9yZSwKKwkJCQkgKiB0aGUgcXVhbHMg b2YgdGhpcyBqb2luIGRvbid0IGNvbnN0cmFpbiB0aGUgbGVmdCBpbnB1dC4KKwkJCQkgKiBOb3Rl OiB3ZSBwcm9iYWJseSBjYW4ndCBzZWUgU0VNSSBvciBBTlRJIGpvaW5zIGF0IHRoaXMKKwkJCQkg KiBwb2ludCwgYnV0IGlmIHdlIGRvLCB3ZSBjYW4gdHJlYXQgdGhlbSBsaWtlIExFRlQgam9pbnMu CisJCQkJICovCisJCQkJZmluZF9zdWJxdWVyeV9zYWZlX3F1YWxzKGotPmxhcmcsIHNhZmVfcXVh bHMpOworCQkJCWJyZWFrOworCisJCQljYXNlIEpPSU5fUklHSFQ6CisJCQkJLyogUmV2ZXJzZSBv ZiB0aGUgYWJvdmUgY2FzZSAqLworCQkJCWZpbmRfc3VicXVlcnlfc2FmZV9xdWFscyhqLT5yYXJn LCBzYWZlX3F1YWxzKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBKT0lOX0ZVTEw6CisJCQkJLyog TmVpdGhlciBzaWRlIGlzIG5vbi1udWxsYWJsZSwgc28gc3RvcCBkZXNjZW5kaW5nICovCisJCQkJ YnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqb2lu IHR5cGU6ICVkIiwKKwkJCQkJIChpbnQpIGotPmpvaW50eXBlKTsKKwkJCQlicmVhazsKKwkJfQor CX0KKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCisJ CQkgKGludCkgbm9kZVRhZyhqdG5vZGUpKTsKK30KKwogLyoKICAqIENhbiB3ZSB0cmVhdCBhIFNj YWxhckFycmF5T3BFeHByIGFzIHN0cmljdD8KICAqCkBAIC0yNzM5LDcgKzI5NjksOCBAQCBldmFs X2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAogCQkJCQkJaWYgKCFoYXNf bnVsbGFibGVfbm9uY29uc3QgJiYKIAkJCQkJCQkhZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0 LT5yb290LAotCQkJCQkJCQkJCQkJIChFeHByICopIGxmaXJzdChhcmcpLCBmYWxzZSkpCisJCQkJ CQkJCQkJCQkgKEV4cHIgKikgbGZpcnN0KGFyZyksCisJCQkJCQkJCQkJCQkgTk9UTlVMTF9TT1VS Q0VfSEFTSFRBQkxFKSkKIAkJCQkJCQloYXNfbnVsbGFibGVfbm9uY29uc3QgPSB0cnVlOwogCQkJ CQl9CiAJCQkJfQpAQCAtMzQxOCw3ICszNjQ5LDggQEAgZXZhbF9jb25zdF9leHByZXNzaW9uc19t dXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQluZXdhcmdzID0gbGFwcGVuZChuZXdhcmdzLCBlKTsK IAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKGNvbnRl eHQtPnJvb3QsIChFeHByICopIGUsIGZhbHNlKSkKKwkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFi bGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgZSwKKwkJCQkJCQkJCQkJTk9UTlVMTF9TT1VSQ0Vf SEFTSFRBQkxFKSkKIAkJCQkJewogCQkJCQkJaWYgKG5ld2FyZ3MgPT0gTklMKQogCQkJCQkJCXJl dHVybiBlOwkvKiBmaXJzdCBleHByICovCkBAIC0zNjEyLDcgKzM4NDQsNyBAQCBldmFsX2NvbnN0 X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCSAqLwogCQkJCQkJaWYgKHJl bGVtICYmCiAJCQkJCQkJZXhwcl9pc19ub25udWxsYWJsZShjb250ZXh0LT5yb290LCAoRXhwciAq KSByZWxlbSwKLQkJCQkJCQkJCQkJCWZhbHNlKSkKKwkJCQkJCQkJCQkJCU5PVE5VTExfU09VUkNF X0hBU0hUQUJMRSkpCiAJCQkJCQl7CiAJCQkJCQkJaWYgKG50ZXN0LT5udWxsdGVzdHR5cGUgPT0g SVNfTlVMTCkKIAkJCQkJCQkJcmV0dXJuIG1ha2VCb29sQ29uc3QoZmFsc2UsIGZhbHNlKTsKQEAg LTM2NjQsNyArMzg5Niw4IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpu b2RlLAogCQkJCQlyZXR1cm4gbWFrZUJvb2xDb25zdChyZXN1bHQsIGZhbHNlKTsKIAkJCQl9CiAJ CQkJaWYgKCFudGVzdC0+YXJnaXNyb3cgJiYgYXJnICYmCi0JCQkJCWV4cHJfaXNfbm9ubnVsbGFi bGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgYXJnLCBmYWxzZSkpCisJCQkJCWV4cHJfaXNfbm9u bnVsbGFibGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgYXJnLAorCQkJCQkJCQkJCU5PVE5VTExf U09VUkNFX0hBU0hUQUJMRSkpCiAJCQkJewogCQkJCQlib29sCQlyZXN1bHQ7CiAKQEAgLTM3NDks NyArMzk4Miw5IEBAIGV2YWxfY29uc3RfZXhwcmVzc2lvbnNfbXV0YXRvcihOb2RlICpub2RlLAog CiAJCQkJCXJldHVybiBtYWtlQm9vbENvbnN0KHJlc3VsdCwgZmFsc2UpOwogCQkJCX0KLQkJCQlp ZiAoYXJnICYmIGV4cHJfaXNfbm9ubnVsbGFibGUoY29udGV4dC0+cm9vdCwgKEV4cHIgKikgYXJn LCBmYWxzZSkpCisJCQkJaWYgKGFyZyAmJgorCQkJCQlleHByX2lzX25vbm51bGxhYmxlKGNvbnRl eHQtPnJvb3QsIChFeHByICopIGFyZywKKwkJCQkJCQkJCQlOT1ROVUxMX1NPVVJDRV9IQVNIVEFC TEUpKQogCQkJCXsKIAkJCQkJLyoKIAkJCQkJICogSWYgYXJnIGlzIHByb3ZlbiBub24tbnVsbGFi bGUsIHNpbXBsaWZ5IHRvIGJvb2xlYW4KQEAgLTQzODQsMTQgKzQ2MTksMTEgQEAgc2ltcGxpZnlf YWdncmVmKEFnZ3JlZiAqYWdncmVmLCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX2NvbnRleHQgKmNv bnRleHQpCiAgKiBJZiB0aGUgVmFyIGlzIGRlZmluZWQgTk9UIE5VTEwgYW5kIG1lYW53aGlsZSBp cyBub3QgbnVsbGVkIGJ5IGFueSBvdXRlcgogICogam9pbnMgb3IgZ3JvdXBpbmcgc2V0cywgdGhl biB3ZSBjYW4ga25vdyB0aGF0IGl0IGNhbm5vdCBiZSBOVUxMLgogICoKLSAqIHVzZV9yZWxfaW5m byBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBSZWxPcHRJbmZvIGlzIGF2YWls YWJsZSBmb3IKLSAqIHVzZS4KKyAqICJzb3VyY2UiIHNwZWNpZmllcyB3aGVyZSB3ZSBzaG91bGQg bG9vayBmb3IgTk9UIE5VTEwgcHJvb2ZzLgogICovCiBib29sCi12YXJfaXNfbm9ubnVsbGFibGUo UGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBib29sIHVzZV9yZWxfaW5mbykKK3Zhcl9pc19u b25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIE5vdE51bGxTb3VyY2Ugc291 cmNlKQogewotCUJpdG1hcHNldCAgKm5vdG51bGxhdHRudW1zID0gTlVMTDsKLQogCUFzc2VydChJ c0EodmFyLCBWYXIpKTsKIAogCS8qIHNraXAgdXBwZXItbGV2ZWwgVmFycyAqLwpAQCAtNDQwNiwz NSArNDYzOCw4OSBAQCB2YXJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFZhciAq dmFyLCBib29sIHVzZV9yZWxfaW5mbykKIAlpZiAodmFyLT52YXJhdHRubyA8IDApCiAJCXJldHVy biB0cnVlOwogCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgVmFyIGlzIGRlZmluZWQgYXMgTk9UIE5V TEwuICBXZSByZXRyaWV2ZSB0aGUgY29sdW1uIE5PVAotCSAqIE5VTEwgY29uc3RyYWludCBpbmZv cm1hdGlvbiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIFJlbE9wdEluZm8gaWYgaXQgaXMKLQkgKiBh dmFpbGFibGU7IG90aGVyd2lzZSwgd2Ugc2VhcmNoIHRoZSBoYXNoIHRhYmxlIGZvciB0aGlzIGlu Zm9ybWF0aW9uLgotCSAqLwotCWlmICh1c2VfcmVsX2luZm8pCi0JewotCQlSZWxPcHRJbmZvICpy ZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCS8qIHdlIGRvbid0IHRydXN0 IHdob2xlLXJvdyBWYXJzICovCisJaWYgKHZhci0+dmFyYXR0bm8gPT0gMCkKKwkJcmV0dXJuIGZh bHNlOwogCi0JCW5vdG51bGxhdHRudW1zID0gcmVsLT5ub3RudWxsYXR0bnVtczsKLQl9Ci0JZWxz ZQorCS8qIENoZWNrIGlmIHRoZSBWYXIgaXMgZGVmaW5lZCBhcyBOT1QgTlVMTC4gKi8KKwlzd2l0 Y2ggKHNvdXJjZSkKIAl7Ci0JCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2go dmFyLT52YXJubywgcm9vdCk7CisJCWNhc2UgTk9UTlVMTF9TT1VSQ0VfUkVMT1BUOgorCQkJewor CQkJCS8qCisJCQkJICogV2UgcmV0cmlldmUgdGhlIGNvbHVtbiBOT1QgTlVMTCBjb25zdHJhaW50 IGluZm9ybWF0aW9uIGZyb20KKwkJCQkgKiB0aGUgY29ycmVzcG9uZGluZyBSZWxPcHRJbmZvLgor CQkJCSAqLworCQkJCVJlbE9wdEluZm8gKnJlbDsKKwkJCQlCaXRtYXBzZXQgICpub3RudWxsYXR0 bnVtczsKIAotCQkvKgotCQkgKiBXZSBtdXN0IHNraXAgaW5oZXJpdGFuY2UgcGFyZW50IHRhYmxl cywgYXMgc29tZSBjaGlsZCB0YWJsZXMgbWF5Ci0JCSAqIGhhdmUgYSBOT1QgTlVMTCBjb25zdHJh aW50IGZvciBhIGNvbHVtbiB3aGlsZSBvdGhlcnMgbWF5IG5vdC4gIFRoaXMKLQkJICogY2Fubm90 IGhhcHBlbiB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlcywgdGhvdWdoLgotCQkgKi8KLQkJaWYgKHJ0 ZS0+aW5oICYmIHJ0ZS0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQkJ cmV0dXJuIGZhbHNlOworCQkJCXJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgdmFyLT52YXJubyk7 CisJCQkJbm90bnVsbGF0dG51bXMgPSByZWwtPm5vdG51bGxhdHRudW1zOwogCi0JCW5vdG51bGxh dHRudW1zID0gZmluZF9yZWxhdGlvbl9ub3RudWxsYXR0cyhyb290LCBydGUtPnJlbGlkKTsKLQl9 CisJCQkJcmV0dXJuIGJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubywgbm90bnVsbGF0dG51bXMp OworCQkJfQorCQljYXNlIE5PVE5VTExfU09VUkNFX0hBU0hUQUJMRToKKwkJCXsKKwkJCQkvKgor CQkJCSAqIFdlIHJldHJpZXZlIHRoZSBjb2x1bW4gTk9UIE5VTEwgY29uc3RyYWludCBpbmZvcm1h dGlvbiBmcm9tCisJCQkJICogdGhlIGhhc2ggdGFibGUuCisJCQkJICovCisJCQkJUmFuZ2VUYmxF bnRyeSAqcnRlOworCQkJCUJpdG1hcHNldCAgKm5vdG51bGxhdHRudW1zOwogCi0JaWYgKHZhci0+ dmFyYXR0bm8gPiAwICYmCi0JCWJtc19pc19tZW1iZXIodmFyLT52YXJhdHRubywgbm90bnVsbGF0 dG51bXMpKQotCQlyZXR1cm4gdHJ1ZTsKKwkJCQlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHZhci0+ dmFybm8sIHJvb3QpOworCisJCQkJLyogV2UgY2FuIG9ubHkgcmVhc29uIGFib3V0IG9yZGluYXJ5 IHJlbGF0aW9ucyAqLworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJ CQlyZXR1cm4gZmFsc2U7CisKKwkJCQkvKgorCQkJCSAqIFdlIG11c3Qgc2tpcCBpbmhlcml0YW5j ZSBwYXJlbnQgdGFibGVzLCBhcyBzb21lIGNoaWxkCisJCQkJICogdGFibGVzIG1heSBoYXZlIGEg Tk9UIE5VTEwgY29uc3RyYWludCBmb3IgYSBjb2x1bW4gd2hpbGUKKwkJCQkgKiBvdGhlcnMgbWF5 IG5vdC4gIFRoaXMgY2Fubm90IGhhcHBlbiB3aXRoIHBhcnRpdGlvbmVkCisJCQkJICogdGFibGVz LCB0aG91Z2guCisJCQkJICovCisJCQkJaWYgKHJ0ZS0+aW5oICYmIHJ0ZS0+cmVsa2luZCAhPSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCQlub3Ru dWxsYXR0bnVtcyA9IGZpbmRfcmVsYXRpb25fbm90bnVsbGF0dHMocm9vdCwgcnRlLT5yZWxpZCk7 CisKKwkJCQlyZXR1cm4gYm1zX2lzX21lbWJlcih2YXItPnZhcmF0dG5vLCBub3RudWxsYXR0bnVt cyk7CisJCQl9CisJCWNhc2UgTk9UTlVMTF9TT1VSQ0VfU1lTQ0FDSEU6CisJCQl7CisJCQkJLyoK KwkJCQkgKiBXZSBsb29rIHVwIHRoZSAiYXR0bm90bnVsbCIgZmllbGQgaW4gdGhlIGF0dHJpYnV0 ZQorCQkJCSAqIHJlbGF0aW9uLgorCQkJCSAqLworCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwor CQkJCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2godmFyLT52YXJubywgcm9vdCk7CisKKwkJCQkvKiBX ZSBjYW4gb25seSByZWFzb24gYWJvdXQgb3JkaW5hcnkgcmVsYXRpb25zICovCisJCQkJaWYgKHJ0 ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCS8q CisJCQkJICogV2UgbXVzdCBza2lwIGluaGVyaXRhbmNlIHBhcmVudCB0YWJsZXMsIGFzIHNvbWUg Y2hpbGQKKwkJCQkgKiB0YWJsZXMgbWF5IGhhdmUgYSBOT1QgTlVMTCBjb25zdHJhaW50IGZvciBh IGNvbHVtbiB3aGlsZQorCQkJCSAqIG90aGVycyBtYXkgbm90LiAgVGhpcyBjYW5ub3QgaGFwcGVu IHdpdGggcGFydGl0aW9uZWQKKwkJCQkgKiB0YWJsZXMsIHRob3VnaC4KKwkJCQkgKgorCQkJCSAq IE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSByZWxhdGlvbiBhY3R1YWxseSBoYXMg YW55CisJCQkJICogY2hpbGRyZW4sIGFzIHdlIG1pZ2h0IG5vdCBoYXZlIGRvbmUgdGhhdCB5ZXQu CisJCQkJICovCisJCQkJaWYgKHJ0ZS0+aW5oICYmIGhhc19zdWJjbGFzcyhydGUtPnJlbGlkKSAm JgorCQkJCQlydGUtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJ cmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIGdldF9hdHRub3RudWxsKHJ0ZS0+cmVsaWQsIHZh ci0+dmFyYXR0bm8pOworCQkJfQorCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2du aXplZCBOb3ROdWxsU291cmNlOiAlZCIsCisJCQkJIChpbnQpIHNvdXJjZSk7CisJCQlicmVhazsK Kwl9CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC00NDQ0LDE2ICs0NzMwLDIyIEBAIHZhcl9pc19u b25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2YXIsIGJvb2wgdXNlX3JlbF9pbmZv KQogICoKICAqIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGdpdmVuICdleHByJyBjYW5ub3QgcHJvZHVj ZSBTUUwgTlVMTHMuCiAgKgotICogSWYgJ3VzZV9yZWxfaW5mbycgaXMgdHJ1ZSwgbnVsbGFiaWxp dHkgb2YgVmFycyBpcyBjaGVja2VkIHZpYSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgUmVsT3B0SW5m byBmb3IgdGhlIGdpdmVuIFZhci4gIFNvbWUgY2FsbGVycyByZXF1aXJlCi0gKiBudWxsYWJpbGl0 eSBpbmZvcm1hdGlvbiBiZWZvcmUgUmVsT3B0SW5mb3MgYXJlIGdlbmVyYXRlZC4gIFRoZXNlIHNo b3VsZAotICogcGFzcyAndXNlX3JlbF9pbmZvJyBhcyBmYWxzZS4KKyAqIHNvdXJjZTogc3BlY2lm aWVzIHdoZXJlIHdlIHNob3VsZCBsb29rIGZvciBOT1QgTlVMTCBwcm9vZnMgZm9yIFZhcnMuCisg KgktIE5PVE5VTExfU09VUkNFX1JFTE9QVDogVXNlZCB3aGVuIFJlbE9wdEluZm9zIGhhdmUgYmVl biBnZW5lcmF0ZWQuICBXZQorICoJcmV0cmlldmUgbnVsbGFiaWxpdHkgaW5mb3JtYXRpb24gZGly ZWN0bHkgZnJvbSB0aGUgUmVsT3B0SW5mbyBjb3JyZXNwb25kaW5nCisgKgl0byB0aGUgVmFyLgor ICoJLSBOT1ROVUxMX1NPVVJDRV9IQVNIVEFCTEU6IFVzZWQgd2hlbiBSZWxPcHRJbmZvcyBhcmUg bm90IHlldCBhdmFpbGFibGUsCisgKglidXQgd2UgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCByZWxh dGlvbi1sZXZlbCBub3QtbnVsbCBjb25zdHJhaW50cyBpbnRvIHRoZQorICoJZ2xvYmFsIGhhc2gg dGFibGUuCisgKgktIE5PVE5VTExfU09VUkNFX1NZU0NBQ0hFOiBVc2VkIGZvciByYXcgcGFyc2Ug dHJlZXMgd2hlcmUgbmVpdGhlcgorICoJUmVsT3B0SW5mb3Mgbm9yIHRoZSBoYXNoIHRhYmxlIGFy ZSBhdmFpbGFibGUuICBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgdG8KKyAqCWxvb2sgdXAgdGhlICdh dHRub3RudWxsJyBmaWVsZCBkaXJlY3RseSBpbiB0aGUgc3lzdGVtIGNhdGFsb2dzLgogICoKICAq IEZvciBub3csIHdlIHN1cHBvcnQgb25seSBhIGxpbWl0ZWQgc2V0IG9mIGV4cHJlc3Npb24gdHlw ZXMuICBTdXBwb3J0IGZvcgogICogYWRkaXRpb25hbCBub2RlIHR5cGVzIGNhbiBiZSBhZGRlZCBp biB0aGUgZnV0dXJlLgogICovCiBib29sCi1leHByX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZv ICpyb290LCBFeHByICpleHByLCBib29sIHVzZV9yZWxfaW5mbykKK2V4cHJfaXNfbm9ubnVsbGFi bGUoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIgKmV4cHIsIE5vdE51bGxTb3VyY2Ugc291cmNlKQog ewogCS8qIHNpbmNlIHRoaXMgZnVuY3Rpb24gcmVjdXJzZXMsIGl0IGNvdWxkIGJlIGRyaXZlbiB0 byBzdGFjayBvdmVyZmxvdyAqLwogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CkBAIC00NDYzLDcgKzQ3 NTUsNyBAQCBleHByX2lzX25vbm51bGxhYmxlKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHBy LCBib29sIHVzZV9yZWxfaW5mbykKIAkJY2FzZSBUX1ZhcjoKIAkJCXsKIAkJCQlpZiAocm9vdCkK LQkJCQkJcmV0dXJuIHZhcl9pc19ub25udWxsYWJsZShyb290LCAoVmFyICopIGV4cHIsIHVzZV9y ZWxfaW5mbyk7CisJCQkJCXJldHVybiB2YXJfaXNfbm9ubnVsbGFibGUocm9vdCwgKFZhciAqKSBl eHByLCBzb3VyY2UpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVF9Db25zdDoKQEAgLTQ0ODAs NyArNDc3Miw3IEBAIGV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4cHIg KmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQogCiAJCQkJZm9yZWFjaF9wdHIoRXhwciwgYXJnLCBj b2FsZXNjZWV4cHItPmFyZ3MpCiAJCQkJewotCQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShy b290LCBhcmcsIHVzZV9yZWxfaW5mbykpCisJCQkJCWlmIChleHByX2lzX25vbm51bGxhYmxlKHJv b3QsIGFyZywgc291cmNlKSkKIAkJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCX0KQEAgLTQ0 OTUsNyArNDc4Nyw3IEBAIGV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIEV4 cHIgKmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQogCiAJCQkJZm9yZWFjaF9wdHIoRXhwciwgYXJn LCBtaW5tYXhleHByLT5hcmdzKQogCQkJCXsKLQkJCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUo cm9vdCwgYXJnLCB1c2VfcmVsX2luZm8pKQorCQkJCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShy b290LCBhcmcsIHNvdXJjZSkpCiAJCQkJCQlyZXR1cm4gdHJ1ZTsKIAkJCQl9CiAJCQl9CkBAIC00 NTExLDEzICs0ODAzLDEzIEBAIGV4cHJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3Qs IEV4cHIgKmV4cHIsIGJvb2wgdXNlX3JlbF9pbmZvKQogCiAJCQkJLyogVGhlIGRlZmF1bHQgcmVz dWx0IG11c3QgYmUgcHJlc2VudCBhbmQgbm9uLW51bGxhYmxlICovCiAJCQkJaWYgKGNhc2VleHBy LT5kZWZyZXN1bHQgPT0gTlVMTCB8fAotCQkJCQkhZXhwcl9pc19ub25udWxsYWJsZShyb290LCBj YXNlZXhwci0+ZGVmcmVzdWx0LCB1c2VfcmVsX2luZm8pKQorCQkJCQkhZXhwcl9pc19ub25udWxs YWJsZShyb290LCBjYXNlZXhwci0+ZGVmcmVzdWx0LCBzb3VyY2UpKQogCQkJCQlyZXR1cm4gZmFs c2U7CiAKIAkJCQkvKiBBbGwgYnJhbmNoIHJlc3VsdHMgbXVzdCBiZSBub24tbnVsbGFibGUgKi8K IAkJCQlmb3JlYWNoX3B0cihDYXNlV2hlbiwgY2FzZXdoZW4sIGNhc2VleHByLT5hcmdzKQogCQkJ CXsKLQkJCQkJaWYgKCFleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIGNhc2V3aGVuLT5yZXN1bHQs IHVzZV9yZWxfaW5mbykpCisJCQkJCWlmICghZXhwcl9pc19ub25udWxsYWJsZShyb290LCBjYXNl d2hlbi0+cmVzdWx0LCBzb3VyY2UpKQogCQkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIApAQCAt NDU2NSw3ICs0ODU3LDcgQEAgZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwg RXhwciAqZXhwciwgYm9vbCB1c2VfcmVsX2luZm8pCiAJCQkJICogbm9uLW51bGxhYmxlLgogCQkJ CSAqLwogCQkJCXJldHVybiBleHByX2lzX25vbm51bGxhYmxlKHJvb3QsICgoUmVsYWJlbFR5cGUg KikgZXhwciktPmFyZywKLQkJCQkJCQkJCQkgICB1c2VfcmVsX2luZm8pOworCQkJCQkJCQkJCSAg IHNvdXJjZSk7CiAJCQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCmlu ZGV4IDM3ZDM0Njg1YjkzLi42YzhmYjdiNzI3NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2ludDguYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCkBAIC04MzQs NyArODM0LDcgQEAgaW50OGluY19zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJUEdfUkVU VVJOX1BPSU5URVIoTlVMTCk7CiAKIAkJCS8qIElmIHRoZSBhcmcgaXNuJ3QgTlVMTGFibGUsIGRv IHRoZSBjb252ZXJzaW9uICovCi0JCQlpZiAoZXhwcl9pc19ub25udWxsYWJsZShyZXEtPnJvb3Qs IGFyZywgZmFsc2UpKQorCQkJaWYgKGV4cHJfaXNfbm9ubnVsbGFibGUocmVxLT5yb290LCBhcmcs IE5PVE5VTExfU09VUkNFX0hBU0hUQUJMRSkpCiAJCQl7CiAJCQkJQWdncmVmCSAgICpuZXdhZ2c7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2xzeXNjYWNoZS5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvbHN5c2NhY2hlLmMKaW5kZXggMTkxM2IwMDlkNDAuLmYxMDk0 ODQ4M2I5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9sc3lzY2FjaGUuYwpAQCAtODU4LDYgKzg1OCw0 NyBAQCBjb21wYXJpc29uX29wc19hcmVfY29tcGF0aWJsZShPaWQgb3BubzEsIE9pZCBvcG5vMikK IAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogb3BfaXNfc2FmZV9pbmRleF9tZW1iZXIKKyAq CQlDaGVjayBpZiB0aGUgb3BlcmF0b3IgaXMgYSBtZW1iZXIgb2YgYSBCLXRyZWUgb3IgSGFzaCBv cGVyYXRvciBmYW1pbHkuCisgKgorICogV2UgdXNlIHRoaXMgY2hlY2sgYXMgYSBwcm94eSBmb3Ig Im51bGwtc2FmZXR5IjogaWYgYW4gb3BlcmF0b3IgaXMgdHJ1c3RlZCBieQorICogdGhlIGJ0cmVl IG9yIGhhc2ggb3BmYW1pbHksIGl0IGltcGxpZXMgdGhhdCB0aGUgb3BlcmF0b3IgYWRoZXJlcyB0 byBzdGFuZGFyZAorICogYm9vbGVhbiBiZWhhdmlvciwgYW5kIHdvdWxkIG5vdCByZXR1cm4gTlVM TCB3aGVuIGdpdmVuIHZhbGlkIG5vbi1udWxsCisgKiBpbnB1dHMsIGFzIGRvaW5nIHNvIHdvdWxk IGJyZWFrIGluZGV4IGludGVncml0eS4KKyAqLworYm9vbAorb3BfaXNfc2FmZV9pbmRleF9tZW1i ZXIoT2lkIG9wbm8pCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJQ2F0Q0xpc3QgICAqY2F0 bGlzdDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBTZWFyY2ggcGdfYW1vcCB0byBzZWUgaWYgdGhl IHRhcmdldCBvcGVyYXRvciBpcyByZWdpc3RlcmVkIGZvciBhbnkKKwkgKiBidHJlZSBvciBoYXNo IG9wZmFtaWx5LgorCSAqLworCWNhdGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKEFNT1BPUElE LCBPYmplY3RJZEdldERhdHVtKG9wbm8pKTsKKworCWZvciAoaSA9IDA7IGkgPCBjYXRsaXN0LT5u X21lbWJlcnM7IGkrKykKKwl7CisJCUhlYXBUdXBsZQl0dXBsZSA9ICZjYXRsaXN0LT5tZW1iZXJz W2ldLT50dXBsZTsKKwkJRm9ybV9wZ19hbW9wIGFmb3JtID0gKEZvcm1fcGdfYW1vcCkgR0VUU1RS VUNUKHR1cGxlKTsKKworCQkvKiBDaGVjayBpZiB0aGUgQU0gaXMgQi10cmVlIG9yIEhhc2ggKi8K KwkJaWYgKGFmb3JtLT5hbW9wbWV0aG9kID09IEJUUkVFX0FNX09JRCB8fAorCQkJYWZvcm0tPmFt b3BtZXRob2QgPT0gSEFTSF9BTV9PSUQpCisJCXsKKwkJCXJlc3VsdCA9IHRydWU7CisJCQlicmVh azsKKwkJfQorCX0KKworCVJlbGVhc2VTeXNDYWNoZUxpc3QoY2F0bGlzdCk7CisKKwlyZXR1cm4g cmVzdWx0OworfQorCiAKIC8qCQkJCS0tLS0tLS0tLS0gQU1QUk9DIENBQ0hFUyAtLS0tLS0tLS0t CQkJCQkJICovCiAKQEAgLTEwNzEsNiArMTExMiwzMyBAQCBnZXRfYXR0b3B0aW9ucyhPaWQgcmVs aWQsIGludDE2IGF0dG51bSkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogZ2V0X2F0dG5v dG51bGwKKyAqCisgKgkJR2l2ZW4gdGhlIHJlbGF0aW9uIGlkIGFuZCB0aGUgYXR0cmlidXRlIG51 bWJlciwKKyAqCQlyZXR1cm4gdGhlICJhdHRub3RudWxsIiBmaWVsZCBmcm9tIHRoZSBhdHRyaWJ1 dGUgcmVsYXRpb24uCisgKi8KK2Jvb2wKK2dldF9hdHRub3RudWxsKE9pZCByZWxpZCwgQXR0ck51 bWJlciBhdHRudW0pCit7CisJSGVhcFR1cGxlCXRwOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOwor CisJdHAgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJIE9iamVjdElkR2V0RGF0dW0o cmVsaWQpLAorCQkJCQkJIEludDE2R2V0RGF0dW0oYXR0bnVtKSk7CisKKwlpZiAoSGVhcFR1cGxl SXNWYWxpZCh0cCkpCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRfdHVwID0gKEZvcm1fcGdf YXR0cmlidXRlKSBHRVRTVFJVQ1QodHApOworCisJCXJlc3VsdCA9IGF0dF90dXAtPmF0dG5vdG51 bGw7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwog LyoJCQkJLS0tLS0tLS0tLSBQR19DQVNUIENBQ0hFIC0tLS0tLS0tLS0JCQkJCSAqLwogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMuaCBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jbGF1c2VzLmgKaW5kZXggYTY0MDM0ZThhNmQuLjg1M2EyOGMwMDA3IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oCisrKyBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jbGF1c2VzLmgKQEAgLTQyLDYgKzQyLDcgQEAgZXh0ZXJuIFJlbGlkcyBmaW5k X25vbm51bGxhYmxlX3JlbHMoTm9kZSAqY2xhdXNlKTsKIGV4dGVybiBMaXN0ICpmaW5kX25vbm51 bGxhYmxlX3ZhcnMoTm9kZSAqY2xhdXNlKTsKIGV4dGVybiBMaXN0ICpmaW5kX2ZvcmNlZF9udWxs X3ZhcnMoTm9kZSAqbm9kZSk7CiBleHRlcm4gVmFyICpmaW5kX2ZvcmNlZF9udWxsX3ZhcihOb2Rl ICpub2RlKTsKK2V4dGVybiBib29sIHF1ZXJ5X291dHB1dHNfYXJlX25vdF9udWxsYWJsZShRdWVy eSAqcXVlcnkpOwogCiBleHRlcm4gYm9vbCBpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlKE5vZGUg KmNsYXVzZSk7CiBleHRlcm4gYm9vbCBpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlX3JlbGlkcyhO b2RlICpjbGF1c2UsIFJlbGlkcyByZWxpZHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL29wdGltaXplci5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCmlu ZGV4IDNkMjdhMDE5NjA5Li42ODU0ODUxNDhhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL29wdGltaXplci5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIu aApAQCAtMTMwLDYgKzEzMCwxNCBAQCBleHRlcm4gRXhwciAqY2Fub25pY2FsaXplX3F1YWwoRXhw ciAqcXVhbCwgYm9vbCBpc19jaGVjayk7CiAKIC8qIGluIHV0aWwvY2xhdXNlcy5jOiAqLwogCisv KiBFbnVtIHRvIHNwZWNpZnkgd2hlcmUgdmFyX2lzX25vbm51bGxhYmxlIHNob3VsZCBsb29rIGZv ciBOT1QgTlVMTCBwcm9vZnMgKi8KK3R5cGVkZWYgZW51bQoreworCU5PVE5VTExfU09VUkNFX1JF TE9QVCwJCS8qIFVzZSBSZWxPcHRJbmZvICovCisJTk9UTlVMTF9TT1VSQ0VfSEFTSFRBQkxFLAkv KiBVc2UgR2xvYmFsIEhhc2ggVGFibGUgKi8KKwlOT1ROVUxMX1NPVVJDRV9TWVNDQUNIRSwJLyog VXNlIFN5c3RlbSBDYXRhbG9nICovCit9IE5vdE51bGxTb3VyY2U7CisKIGV4dGVybiBib29sIGNv bnRhaW5fbXV0YWJsZV9mdW5jdGlvbnMoTm9kZSAqY2xhdXNlKTsKIGV4dGVybiBib29sIGNvbnRh aW5fbXV0YWJsZV9mdW5jdGlvbnNfYWZ0ZXJfcGxhbm5pbmcoRXhwciAqZXhwcik7CiBleHRlcm4g Ym9vbCBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyhOb2RlICpjbGF1c2UpOwpAQCAtMTQ1LDEw ICsxNTMsMTEgQEAgZXh0ZXJuIE5vZGUgKmVzdGltYXRlX2V4cHJlc3Npb25fdmFsdWUoUGxhbm5l ckluZm8gKnJvb3QsIE5vZGUgKm5vZGUpOwogZXh0ZXJuIEV4cHIgKmV2YWx1YXRlX2V4cHIoRXhw ciAqZXhwciwgT2lkIHJlc3VsdF90eXBlLCBpbnQzMiByZXN1bHRfdHlwbW9kLAogCQkJCQkJICAg T2lkIHJlc3VsdF9jb2xsYXRpb24pOwogCi1leHRlcm4gYm9vbCB2YXJfaXNfbm9ubnVsbGFibGUo UGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBib29sIHVzZV9yZWxfaW5mbyk7CitleHRlcm4g Ym9vbCB2YXJfaXNfbm9ubnVsbGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLAorCQkJ CQkJCSAgIE5vdE51bGxTb3VyY2Ugc291cmNlKTsKIAogZXh0ZXJuIGJvb2wgZXhwcl9pc19ub25u dWxsYWJsZShQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwKLQkJCQkJCQkJYm9vbCB1c2Vf cmVsX2luZm8pOworCQkJCQkJCQlOb3ROdWxsU291cmNlIHNvdXJjZSk7CiAKIGV4dGVybiBMaXN0 ICpleHBhbmRfZnVuY3Rpb25fYXJndW1lbnRzKExpc3QgKmFyZ3MsIGJvb2wgaW5jbHVkZV9vdXRf YXJndW1lbnRzLAogCQkJCQkJCQkJICAgT2lkIHJlc3VsdF90eXBlLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3N1YnNlbGVjdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3N1 YnNlbGVjdC5oCmluZGV4IDhhNTUwM2ViOTczLi40ZWNjY2Y0NmJkMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3N1YnNlbGVjdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9zdWJzZWxlY3QuaApAQCAtMjIsNiArMjIsNyBAQCBleHRlcm4gU2NhbGFyQXJyYXlPcEV4cHIg KmNvbnZlcnRfVkFMVUVTX3RvX0FOWShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCVF1 ZXJ5ICp2YWx1ZXMpOwogZXh0ZXJuIEpvaW5FeHByICpjb252ZXJ0X0FOWV9zdWJsaW5rX3RvX2pv aW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSBTdWJMaW5rICpzdWJsaW5rLAorCQkJ CQkJCQkJCQkgYm9vbCB1bmRlcl9ub3QsCiAJCQkJCQkJCQkJCSBSZWxpZHMgYXZhaWxhYmxlX3Jl bHMpOwogZXh0ZXJuIEpvaW5FeHByICpjb252ZXJ0X0VYSVNUU19zdWJsaW5rX3RvX2pvaW4oUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQlTdWJMaW5rICpzdWJsaW5rLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvbHN5c2NhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9sc3lz Y2FjaGUuaAppbmRleCA1NjU1YWNhNGMxNC4uYjlhZDg0ZWNkNDEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2xzeXNjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2xzeXNjYWNo ZS5oCkBAIC04OSw2ICs4OSw3IEBAIGV4dGVybiBib29sIGdldF9vcF9oYXNoX2Z1bmN0aW9ucyhP aWQgb3BubywKIGV4dGVybiBMaXN0ICpnZXRfb3BfaW5kZXhfaW50ZXJwcmV0YXRpb24oT2lkIG9w bm8pOwogZXh0ZXJuIGJvb2wgZXF1YWxpdHlfb3BzX2FyZV9jb21wYXRpYmxlKE9pZCBvcG5vMSwg T2lkIG9wbm8yKTsKIGV4dGVybiBib29sIGNvbXBhcmlzb25fb3BzX2FyZV9jb21wYXRpYmxlKE9p ZCBvcG5vMSwgT2lkIG9wbm8yKTsKK2V4dGVybiBib29sIG9wX2lzX3NhZmVfaW5kZXhfbWVtYmVy KE9pZCBvcG5vKTsKIGV4dGVybiBPaWQJZ2V0X29wZmFtaWx5X3Byb2MoT2lkIG9wZmFtaWx5LCBP aWQgbGVmdHR5cGUsIE9pZCByaWdodHR5cGUsCiAJCQkJCQkJICBpbnQxNiBwcm9jbnVtKTsKIGV4 dGVybiBjaGFyICpnZXRfYXR0bmFtZShPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29s IG1pc3Npbmdfb2spOwpAQCAtOTgsNiArOTksNyBAQCBleHRlcm4gT2lkCWdldF9hdHR0eXBlKE9p ZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwogZXh0ZXJuIHZvaWQgZ2V0X2F0dHR5cGV0eXBt b2Rjb2xsKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0sCiAJCQkJCQkJCSAgT2lkICp0eXBp ZCwgaW50MzIgKnR5cG1vZCwgT2lkICpjb2xsaWQpOwogZXh0ZXJuIERhdHVtIGdldF9hdHRvcHRp b25zKE9pZCByZWxpZCwgaW50MTYgYXR0bnVtKTsKK2V4dGVybiBib29sIGdldF9hdHRub3RudWxs KE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwogZXh0ZXJuIE9pZAlnZXRfY2FzdF9vaWQo T2lkIHNvdXJjZXR5cGVpZCwgT2lkIHRhcmdldHR5cGVpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4 dGVybiBjaGFyICpnZXRfY29sbGF0aW9uX25hbWUoT2lkIGNvbGxvaWQpOwogZXh0ZXJuIGJvb2wg Z2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWMoT2lkIGNvbGxvaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CmluZGV4IDIxMzVkODI4ODRkLi4yMDAyMzZhMGE2OSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dApAQCAtMzMyMywzICszMzIz LDQ0MiBAQCBTRUxFQ1QgdGVuIEZST00gb25layB0IFdIRVJFIDEuMDo6aW50ZWdlciBJTiAoKFZB TFVFUyAoMSksICgzKSkpOwogIFNlcSBTY2FuIG9uIG9uZWsgdAogKDEgcm93KQogCistLQorLS0g Q2hlY2sgTk9UIElOIHBlcmZvcm1zIGFuIEFOVEkgSk9JTiB3aGVuIGJvdGggdGhlIG91dGVyIHF1 ZXJ5J3MgZXhwcmVzc2lvbnMKKy0tIGFuZCB0aGUgc3ViLXNlbGVjdCdzIG91dHB1dCBjb2x1bW5z IGFyZSBwcm92YWJseSBub24tbnVsbGFibGUsIGFuZCB0aGUKKy0tIG9wZXJhdG9yIGl0c2VsZiBj YW5ub3QgcmV0dXJuIE5VTEwgZm9yIG5vbi1udWxsIGlucHV0cy4KKy0tCitCRUdJTjsKK0NSRUFU RSBURU1QIFRBQkxFIG5vdF9udWxsX3RhYiAoaWQgaW50IE5PVCBOVUxMLCB2YWwgaW50IE5PVCBO VUxMKTsKK0NSRUFURSBURU1QIFRBQkxFIG51bGxfdGFiIChpZCBpbnQsIHZhbCBpbnQpOworLS0g QU5USSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxF Q1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5v dF9udWxsX3RhYi5pZCA9IG5vdF9udWxsX3RhYl8xLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5v dF9udWxsX3RhYgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIgbm90X251bGxfdGFiXzEKKyg1IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogb3V0ZXIg c2lkZSBpcyBudWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxs X3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIG51bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAoaWQgPSAoaGFz aGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAgLT4gIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDQgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBpbm5l ciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5v dF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChOT1QgKEFOWSAoaWQg PSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAgICAg LT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisoNCByb3dzKQorCistLSBBTlRJIEpPSU46IG91dGVy IHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBmb3JjZWQgbm9ubnVsbGFi bGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYiBX SEVSRSBpZCBJUyBOT1QgTlVMTCk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSGFzaCBBbnRpIEpvaW4KKyAgIEhhc2ggQ29uZDogKG5vdF9udWxsX3RhYi5pZCA9IG51 bGxfdGFiLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgorICAgICAgICAgICAgICAgRmlsdGVy OiAoaWQgSVMgTk9UIE5VTEwpCisoNiByb3dzKQorCistLSBObyBBTlRJIEpPSU46IG91dGVyIHNp ZGUgaXMgbnVsbGFibGUgKHdlIGRvbid0IGNoZWNrIG91dGVyIHF1ZXJ5IHF1YWxzIGZvciBub3cp CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVSRSBpZCBJ UyBOT1QgTlVMTAorICBBTkQgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXEgU2NhbiBvbiBudWxsX3RhYgorICAgRmlsdGVyOiAoKGlkIElTIE5PVCBOVUxMKSBBTkQgKE5P VCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkpKSkKKyAgIFN1YlBsYW4g YW55XzEKKyAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDQgcm93cykKKworLS0g QU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVyIHNpZGUgaXMg ZGVmaW5lZCBOT1QgTlVMTAorLS0gYW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9pbgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5P VCBJTiAoCisgICAgU0VMRUNUIHQxLmlkCisgICAgRlJPTSBub3RfbnVsbF90YWIgdDEKKyAgICBM RUZUIEpPSU4gbm90X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyk7CisgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9p bgorICAgSGFzaCBDb25kOiAobm90X251bGxfdGFiLmlkID0gdDEuaWQpCisgICAtPiAgU2VxIFNj YW4gb24gbm90X251bGxfdGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIE1lcmdlIExlZnQg Sm9pbgorICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAg ICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmlk CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQyCiso MTIgcm93cykKKworLS0gTm8gQU5USSBKT0lOOiBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9UIE5V TEwgYnV0IGlzIG51bGxlZCBieSBvdXRlciBqb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxFQ1QgdDIu aWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBub3RfbnVsbF90YWIg dDIgT04gdDEuaWQgPSB0Mi5pZAorKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIK KyAgIEZpbHRlcjogKE5PVCAoQU5ZIChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkp KQorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgTWVyZ2UgTGVmdCBKb2luCisgICAgICAgICAg IE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIG5vdF9udWxsX3RhYiB0MQorICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg ICBTb3J0IEtleTogdDIuaWQKKyAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9u dWxsX3RhYiB0MgorKDExIHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZp bmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNlZCBub25udWxsYWJsZQorLS0gYnkgcXVh bCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFi CitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0Mi5pZAorICAgIEZST00gbm90X251bGxf dGFiIHQxCisgICAgTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCisg ICAgV0hFUkUgdDIuaWQgSVMgTk9UIE5VTEwKKyk7CisgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25k OiAobm90X251bGxfdGFiLmlkID0gdDIuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxf dGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAg IE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAgICAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5pZAorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MgorKDEyIHJvd3MpCisKKy0tIEFOVEkg Sk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGZvcmNl ZCBub25udWxsYWJsZQorLS0gYnkgcXVhbCBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0 MS5pZAorICAgIEZST00gbnVsbF90YWIgdDEKKyAgICBMRUZUIEpPSU4gbnVsbF90YWIgdDIgT04g dDEuaWQgPSB0Mi5pZAorICAgIFdIRVJFIHQxLmlkIElTIE5PVCBOVUxMCispOworICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2lu CisgICBIYXNoIENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSB0MS5pZCkKKyAgIC0+ICBTZXEgU2Nh biBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgTWVyZ2UgTGVmdCBK b2luCisgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDEuaWQgPSB0Mi5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDEuaWQKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoaWQgSVMgTk9UIE5VTEwpCisgICAgICAgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVsbF90YWIgdDIKKygxMyByb3dzKQorCist LSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBp cyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBT RUxFQ1QgdDEuaWQKKyAgICBGUk9NIG51bGxfdGFiIHQxCisgICAgSU5ORVIgSk9JTiBudWxsX3Rh YiB0MiBPTiB0MS5pZCA9IHQyLmlkCisgICAgTEVGVCBKT0lOIG51bGxfdGFiIHQzIE9OIFRSVUUK Kyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug QW50aSBKb2luCisgICBNZXJnZSBDb25kOiAobm90X251bGxfdGFiLmlkID0gdDEuaWQpCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IG5vdF9udWxsX3RhYi5pZAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgor ICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0MS5p ZCA9IHQyLmlkKQorICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAg IFNvcnQgS2V5OiB0MS5pZAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51 bGxfdGFiIHQxCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAg U29ydCBLZXk6IHQyLmlkCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbnVs bF90YWIgdDIKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIG51bGxfdGFiIHQzCisoMTYgcm93cykKKworLS0gQU5USSBKT0lOOiBvdXRlciBz aWRlIGlzIGRlZmluZWQgTk9UIE5VTEwgYW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9pbiwK Ky0tIGlubmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIg T04gdDEuaWQgPSB0Mi5pZAorV0hFUkUgdDEuaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBub3Rf bnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE1lcmdlIExlZnQgSm9pbgorICAgTWVyZ2UgQ29uZDogKHQxLmlkID0gdDIuaWQpCisg ICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHQxLmlkCisgICAgICAgICAtPiAgSGFzaCBB bnRpIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmlkID0gbm90X251bGxfdGFi LmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiB0MQorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBub3RfbnVsbF90YWIKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogdDIuaWQKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDIKKygxMiByb3dzKQorCistLSBO byBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgbnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4gbm90 X251bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKK1dIRVJFIHQyLmlkIE5PVCBJTiAoU0VMRUNU IGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBMZWZ0IEpvaW4KKyAg IE1lcmdlIENvbmQ6ICh0MS5pZCA9IHQyLmlkKQorICAgRmlsdGVyOiAoTk9UIChBTlkgKHQyLmlk ID0gKGhhc2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHQxLmlkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQx CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHQyLmlkCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gbm90X251bGxfdGFiIHQyCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKygxMSByb3dzKQorCistLSBObyBBTlRJIEpPSU46IHN1Ymxp bmsgaXMgaW4gYW4gb3V0ZXIgam9pbidzIE9OIHF1YWwgYW5kIHJlZmVyZW5jZXMgdGhlCistLSBu b24tbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3Rf bnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIKK09OIHQxLmlkIE5PVCBJTiAo U0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKE5PVCAoQU5ZICh0MS5pZCA9ICho YXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxs X3RhYiB0MQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90 X251bGxfdGFiIHQyCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBub3Rf bnVsbF90YWIKKyg3IHJvd3MpCisKKy0tIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBkZWZpbmVk IE5PVCBOVUxMIGFuZCBpcyBub3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4sCistLSBpbm5lciBzaWRl IGlzIGRlZmluZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g bm90X251bGxfdGFiIHQxCitMRUZUIEpPSU4gbm90X251bGxfdGFiIHQyCitPTiB0Mi5pZCBOT1Qg SU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAt PiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgIC0+ICBIYXNoIEFudGkgSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDIuaWQg PSBub3RfbnVsbF90YWIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251 bGxfdGFiIHQyCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorKDggcm93cykKKworLS0gQU5USSBKT0lOOiBi b3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgKGlkLCB2YWwpIE5PVCBJTiAoU0VMRUNUIGlk LCB2YWwgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBBbnRpIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgobm90X251bGxfdGFiLmlkID0gbm90 X251bGxfdGFiXzEuaWQpIEFORCAobm90X251bGxfdGFiLnZhbCA9IG5vdF9udWxsX3RhYl8xLnZh bCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IG5vdF9udWxsX3RhYi5pZCwgbm90 X251bGxfdGFiLnZhbAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAg LT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBub3RfbnVsbF90YWJfMS5pZCwgbm90X251bGxf dGFiXzEudmFsCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxs X3RhYl8xCisoOCByb3dzKQorCistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRlZmluZWQg Tk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFi CitXSEVSRSBOT1QgKGlkLCB2YWwpID4gQU5ZIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxs X3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w IEFudGkgSm9pbgorICAgSm9pbiBGaWx0ZXI6IChST1cobm90X251bGxfdGFiLmlkLCBub3RfbnVs bF90YWIudmFsKSA+IFJPVyhub3RfbnVsbF90YWJfMS5pZCwgbm90X251bGxfdGFiXzEudmFsKSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVsbF90YWJfMQorKDUgcm93 cykKKworLS0gTm8gQU5USSBKT0lOOiBvbmUgY29sdW1uIG9mIHRoZSBvdXRlciBzaWRlIGlzIG51 bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYiB0 MSwgbnVsbF90YWIgdDIKK1dIRVJFICh0MS5pZCwgdDIuaWQpIE5PVCBJTiAoU0VMRUNUIGlkLCB2 YWwgRlJPTSBub3RfbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoTk9UIChB TlkgKCh0MS5pZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMSkgQU5EICh0Mi5pZCA9ICho YXNoZWQgU3ViUGxhbiBhbnlfMSkuY29sMikpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIgdDEKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG51 bGxfdGFiIHQyCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVs bF90YWIKKyg3IHJvd3MpCisKKy0tIE5vIEFOVEkgSk9JTjogb25lIGNvbHVtbiBvZiB0aGUgaW5u ZXIgc2lkZSBpcyBudWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBu b3RfbnVsbF90YWIKK1dIRVJFIChpZCwgdmFsKSBOT1QgSU4gKFNFTEVDVCB0MS5pZCwgdDIuaWQg RlJPTSBub3RfbnVsbF90YWIgdDEsIG51bGxfdGFiIHQyKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5v dF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKChpZCA9IChTdWJQbGFuIGFueV8xKS5j b2wxKSBBTkQgKHZhbCA9IChTdWJQbGFuIGFueV8xKS5jb2wyKSkpKQorICAgU3ViUGxhbiBhbnlf MQorICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgdDEKKyAgICAgICAgICAg ICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBudWxsX3RhYiB0MgorKDggcm93cykKKworLS0gQU5USSBKT0lOOiBDT0FMRVNDRShudWxs YWJsZSwgY29uc3RhbnQpIGlzIG5vbi1udWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgQ09BTEVTQ0UoaWQsIC0xKSBOT1QgSU4gKFNFTEVD VCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAoQ09BTEVTQ0UobnVsbF90YWIuaWQsICct MSc6OmludGVnZXIpID0gbm90X251bGxfdGFiLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIG51bGxf dGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgor KDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90 YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIENPQUxFU0NFKGlkLCAtMSkgRlJPTSBudWxsX3Rh Yik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAg SGFzaCBDb25kOiAobm90X251bGxfdGFiLmlkID0gQ09BTEVTQ0UobnVsbF90YWIuaWQsICctMSc6 OmludGVnZXIpKQorICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgLT4gIEhhc2gK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgorKDUgcm93cykKKworLS0gQU5USSBK T0lOOiBHUk9VUCBCWSAod2l0aG91dCBHcm91cGluZyBTZXRzKSBwcmVzZXJ2ZXMgdGhlIG5vbi1u dWxsYWJpbGl0eSBvZgorLS0gdGhlIGNvbHVtbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90 X251bGxfdGFiIEdST1VQIEJZIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggQW50aSBKb2luCisgICBIYXNo IENvbmQ6IChub3RfbnVsbF90YWIuaWQgPSBub3RfbnVsbF90YWJfMS5pZCkKKyAgIC0+ICBTZXEg U2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBub3RfbnVsbF90YWJfMS5pZAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVsbF90YWJfMQorKDcg cm93cykKKworLS0gTm8gQU5USSBKT0lOOiBHUk9VUCBCWSBvbiBhIG51bGxhYmxlIGNvbHVtbgor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlk IE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIgR1JPVVAgQlkgaWQpOworICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhhc2hl ZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBIYXNo QWdncmVnYXRlCisgICAgICAgICAgIEdyb3VwIEtleTogbnVsbF90YWIuaWQKKyAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisoNiByb3dzKQorCistLSBObyBBTlRJIEpPSU46IEdy b3VwaW5nIFNldHMgY2FuIGludHJvZHVjZSBOVUxMcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoCisgICAgU0VMRUNUIGlk CisgICAgRlJPTSBub3RfbnVsbF90YWIKKyAgICBHUk9VUCBCWSBHUk9VUElORyBTRVRTICgoaWQp LCAodmFsKSkKKyk7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6 IChOT1QgKEFOWSAoaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKSkKKyAgIFN1YlBs YW4gYW55XzEKKyAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgSGFzaCBLZXk6IG5v dF9udWxsX3RhYl8xLmlkCisgICAgICAgICAgIEhhc2ggS2V5OiBub3RfbnVsbF90YWJfMS52YWwK KyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVsbF90YWJfMQor KDcgcm93cykKKworLS0gY3JlYXRlIGEgY3VzdG9tICJ1bnNhZmUiIGVxdWFsaXR5IG9wZXJhdG9y CitDUkVBVEUgRlVOQ1RJT04gaW50NGVxX3Vuc2FmZShpbnQ0LCBpbnQ0KQorICAgIFJFVFVSTlMg Ym9vbAorICAgIEFTICdpbnQ0ZXEnCisgICAgTEFOR1VBR0UgaW50ZXJuYWwgSU1NVVRBQkxFOwor Q1JFQVRFIE9QRVJBVE9SID89ICgKKyAgICBQUk9DRURVUkUgPSBpbnQ0ZXFfdW5zYWZlLAorICAg IExFRlRBUkcgPSBpbnQ0LAorICAgIFJJR0hUQVJHID0gaW50NAorKTsKKy0tIE5vIEFOVEkgSk9J TjogdGhlIG9wZXJhdG9yIGlzIG5vdCBzYWZlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgTk9UIGlkID89IEFOWSAoU0VMRUNUIGlkIEZST00g bm90X251bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIEZpbHRlcjogKE5P VCAoQU5ZIChpZCA/PSAoU3ViUGxhbiBhbnlfMSkuY29sMSkpKQorICAgU3ViUGxhbiBhbnlfMQor ICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxs X3RhYiBub3RfbnVsbF90YWJfMQorKDUgcm93cykKKworUk9MTEJBQ0s7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv c3Vic2VsZWN0LnNxbAppbmRleCBjYWRjMzI5MzY4Ny4uNGNkMDE2ZjRhYzMgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3Vic2VsZWN0LnNxbApAQCAtMTQ0OCwzICsxNDQ4LDE4OCBAQCBTRUxFQ1QgKiBGUk9N IG9uZWsgdDEsIGxhdGVyYWwgKFNFTEVDVCAqIEZST00gb25layB0MiBXSEVSRSB0Mi50ZW4gSU4g KHZhbHVlcyAodAogLS0gVnRBIGNhdXNlcyB0aGUgd2hvbGUgZXhwcmVzc2lvbiB0byBiZSBldmFs dWF0ZWQgYXMgYSBjb25zdGFudAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIHRlbiBGUk9N IG9uZWsgdCBXSEVSRSAxLjA6OmludGVnZXIgSU4gKChWQUxVRVMgKDEpLCAoMykpKTsKKworLS0K Ky0tIENoZWNrIE5PVCBJTiBwZXJmb3JtcyBhbiBBTlRJIEpPSU4gd2hlbiBib3RoIHRoZSBvdXRl ciBxdWVyeSdzIGV4cHJlc3Npb25zCistLSBhbmQgdGhlIHN1Yi1zZWxlY3QncyBvdXRwdXQgY29s dW1ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxhYmxlLCBhbmQgdGhlCistLSBvcGVyYXRvciBpdHNl bGYgY2Fubm90IHJldHVybiBOVUxMIGZvciBub24tbnVsbCBpbnB1dHMuCistLQorCitCRUdJTjsK KworQ1JFQVRFIFRFTVAgVEFCTEUgbm90X251bGxfdGFiIChpZCBpbnQgTk9UIE5VTEwsIHZhbCBp bnQgTk9UIE5VTEwpOworQ1JFQVRFIFRFTVAgVEFCTEUgbnVsbF90YWIgKGlkIGludCwgdmFsIGlu dCk7CisKKy0tIEFOVEkgSk9JTjogYm90aCBzaWRlcyBhcmUgZGVmaW5lZCBOT1QgTlVMTAorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5P VCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBv dXRlciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG51bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7 CisKKy0tIE5vIEFOVEkgSk9JTjogaW5uZXIgc2lkZSBpcyBudWxsYWJsZQorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAoU0VM RUNUIGlkIEZST00gbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVm aW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1 YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3Rh YgorV0hFUkUgaWQgTk9UIElOIChTRUxFQ1QgaWQgRlJPTSBudWxsX3RhYiBXSEVSRSBpZCBJUyBO T1QgTlVMTCk7CisKKy0tIE5vIEFOVEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxsYWJsZSAod2Ug ZG9uJ3QgY2hlY2sgb3V0ZXIgcXVlcnkgcXVhbHMgZm9yIG5vdykKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIGlkIElTIE5PVCBOVUxMCisgIEFORCBp ZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKKy0tIEFOVEkgSk9JTjog b3V0ZXIgc2lkZSBpcyBkZWZpbmVkIE5PVCBOVUxMLCBpbm5lciBzaWRlIGlzIGRlZmluZWQgTk9U IE5VTEwKKy0tIGFuZCBpcyBub3QgbnVsbGVkIGJ5IG91dGVyIGpvaW4KK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKAorICAg IFNFTEVDVCB0MS5pZAorICAgIEZST00gbm90X251bGxfdGFiIHQxCisgICAgTEVGVCBKT0lOIG5v dF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCispOworCistLSBObyBBTlRJIEpPSU46IGlu bmVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCBidXQgaXMgbnVsbGVkIGJ5IG91dGVyIGpvaW4K K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBp ZCBOT1QgSU4gKAorICAgIFNFTEVDVCB0Mi5pZAorICAgIEZST00gbm90X251bGxfdGFiIHQxCisg ICAgTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCispOworCistLSBB TlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIgc2lkZSBpcyBm b3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgKKyAgICBTRUxF Q1QgdDIuaWQKKyAgICBGUk9NIG5vdF9udWxsX3RhYiB0MQorICAgIExFRlQgSk9JTiBub3RfbnVs bF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICAgIFdIRVJFIHQyLmlkIElTIE5PVCBOVUxMCisp OworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVMTCwgaW5uZXIg c2lkZSBpcyBmb3JjZWQgbm9ubnVsbGFibGUKKy0tIGJ5IHF1YWwgY2xhdXNlCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgTk9UIElOICgK KyAgICBTRUxFQ1QgdDEuaWQKKyAgICBGUk9NIG51bGxfdGFiIHQxCisgICAgTEVGVCBKT0lOIG51 bGxfdGFiIHQyIE9OIHQxLmlkID0gdDIuaWQKKyAgICBXSEVSRSB0MS5pZCBJUyBOT1QgTlVMTAor KTsKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQgTk9UIE5VTEwsIGlubmVy IHNpZGUgaXMgZm9yY2VkIG5vbm51bGxhYmxlCistLSBieSBxdWFsIGNsYXVzZQorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJTiAo CisgICAgU0VMRUNUIHQxLmlkCisgICAgRlJPTSBudWxsX3RhYiB0MQorICAgIElOTkVSIEpPSU4g bnVsbF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorICAgIExFRlQgSk9JTiBudWxsX3RhYiB0MyBP TiBUUlVFCispOworCistLSBBTlRJIEpPSU46IG91dGVyIHNpZGUgaXMgZGVmaW5lZCBOT1QgTlVM TCBhbmQgaXMgbm90IG51bGxlZCBieSBvdXRlciBqb2luLAorLS0gaW5uZXIgc2lkZSBpcyBkZWZp bmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxs X3RhYiB0MQorTEVGVCBKT0lOIG5vdF9udWxsX3RhYiB0MiBPTiB0MS5pZCA9IHQyLmlkCitXSEVS RSB0MS5pZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisKKy0tIE5vIEFO VEkgSk9JTjogb3V0ZXIgc2lkZSBpcyBudWxsZWQgYnkgb3V0ZXIgam9pbgorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVs bF90YWIgdDIgT04gdDEuaWQgPSB0Mi5pZAorV0hFUkUgdDIuaWQgTk9UIElOIChTRUxFQ1QgaWQg RlJPTSBub3RfbnVsbF90YWIpOworCistLSBObyBBTlRJIEpPSU46IHN1YmxpbmsgaXMgaW4gYW4g b3V0ZXIgam9pbidzIE9OIHF1YWwgYW5kIHJlZmVyZW5jZXMgdGhlCistLSBub24tbnVsbGFibGUg c2lkZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIgdDEK K0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIKK09OIHQxLmlkIE5PVCBJTiAoU0VMRUNUIGlkIEZS T00gbm90X251bGxfdGFiKTsKKworLS0gQU5USSBKT0lOOiBvdXRlciBzaWRlIGlzIGRlZmluZWQg Tk9UIE5VTEwgYW5kIGlzIG5vdCBudWxsZWQgYnkgb3V0ZXIgam9pbiwKKy0tIGlubmVyIHNpZGUg aXMgZGVmaW5lZCBOT1QgTlVMTAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBu b3RfbnVsbF90YWIgdDEKK0xFRlQgSk9JTiBub3RfbnVsbF90YWIgdDIKK09OIHQyLmlkIE5PVCBJ TiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworLS0gQU5USSBKT0lOOiBib3RoIHNp ZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIG5vdF9udWxsX3RhYgorV0hFUkUgKGlkLCB2YWwpIE5PVCBJTiAoU0VMRUNUIGlkLCB2YWwg RlJPTSBub3RfbnVsbF90YWIpOworCistLSBBTlRJIEpPSU46IGJvdGggc2lkZXMgYXJlIGRlZmlu ZWQgTk9UIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxf dGFiCitXSEVSRSBOT1QgKGlkLCB2YWwpID4gQU5ZIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9u dWxsX3RhYik7CisKKy0tIE5vIEFOVEkgSk9JTjogb25lIGNvbHVtbiBvZiB0aGUgb3V0ZXIgc2lk ZSBpcyBudWxsYWJsZQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVs bF90YWIgdDEsIG51bGxfdGFiIHQyCitXSEVSRSAodDEuaWQsIHQyLmlkKSBOT1QgSU4gKFNFTEVD VCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsKKworLS0gTm8gQU5USSBKT0lOOiBvbmUgY29s dW1uIG9mIHRoZSBpbm5lciBzaWRlIGlzIG51bGxhYmxlCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgKGlkLCB2YWwpIE5PVCBJTiAoU0VMRUNU IHQxLmlkLCB0Mi5pZCBGUk9NIG5vdF9udWxsX3RhYiB0MSwgbnVsbF90YWIgdDIpOworCistLSBB TlRJIEpPSU46IENPQUxFU0NFKG51bGxhYmxlLCBjb25zdGFudCkgaXMgbm9uLW51bGxhYmxlCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVSRSBDT0FMRVND RShpZCwgLTEpIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIGlkIE5PVCBJ TiAoU0VMRUNUIENPQUxFU0NFKGlkLCAtMSkgRlJPTSBudWxsX3RhYik7CisKKy0tIEFOVEkgSk9J TjogR1JPVVAgQlkgKHdpdGhvdXQgR3JvdXBpbmcgU2V0cykgcHJlc2VydmVzIHRoZSBub24tbnVs bGFiaWxpdHkgb2YKKy0tIHRoZSBjb2x1bW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG5vdF9u dWxsX3RhYiBHUk9VUCBCWSBpZCk7CisKKy0tIE5vIEFOVEkgSk9JTjogR1JPVVAgQlkgb24gYSBu dWxsYWJsZSBjb2x1bW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251 bGxfdGFiCitXSEVSRSBpZCBOT1QgSU4gKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiIEdST1VQIEJZ IGlkKTsKKworLS0gTm8gQU5USSBKT0lOOiBHcm91cGluZyBTZXRzIGNhbiBpbnRyb2R1Y2UgTlVM THMKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVS RSBpZCBOT1QgSU4gKAorICAgIFNFTEVDVCBpZAorICAgIEZST00gbm90X251bGxfdGFiCisgICAg R1JPVVAgQlkgR1JPVVBJTkcgU0VUUyAoKGlkKSwgKHZhbCkpCispOworCistLSBjcmVhdGUgYSBj dXN0b20gInVuc2FmZSIgZXF1YWxpdHkgb3BlcmF0b3IKK0NSRUFURSBGVU5DVElPTiBpbnQ0ZXFf dW5zYWZlKGludDQsIGludDQpCisgICAgUkVUVVJOUyBib29sCisgICAgQVMgJ2ludDRlcScKKyAg ICBMQU5HVUFHRSBpbnRlcm5hbCBJTU1VVEFCTEU7CisKK0NSRUFURSBPUEVSQVRPUiA/PSAoCisg ICAgUFJPQ0VEVVJFID0gaW50NGVxX3Vuc2FmZSwKKyAgICBMRUZUQVJHID0gaW50NCwKKyAgICBS SUdIVEFSRyA9IGludDQKKyk7CisKKy0tIE5vIEFOVEkgSk9JTjogdGhlIG9wZXJhdG9yIGlzIG5v dCBzYWZlCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgor V0hFUkUgTk9UIGlkID89IEFOWSAoU0VMRUNUIGlkIEZST00gbm90X251bGxfdGFiKTsKKworUk9M TEJBQ0s7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDc3ZTNjMDQxNDRlLi5lNmY4OTZk NjYzYiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE3ODgsNiArMTc4OCw3IEBAIE5v ZGUKIE5vZGVUYWcKIE5vbkVtcHR5UmFuZ2UKIE5vbmVDb21wcmVzc29yU3RhdGUKK05vdE51bGxT b3VyY2UKIE5vdGlmaWNhdGlvbgogTm90aWZpY2F0aW9uTGlzdAogTm90aWZ5U3RtdAotLSAKMi4z OS41IChBcHBsZSBHaXQtMTU0KQoK --0000000000009825bb064c2fc673--