From unknown Sun Apr 26 04:43:38 2026
X-Loop: owner@bugs.x2go.org
Subject: Bug#1469: But wait; there is more... patches!
Reply-To: Melroy van den Berg <melroy89@protonmail.com>, 1469@bugs.x2go.org
Resent-From: Melroy van den Berg <melroy89@protonmail.com>
Resent-To: x2go-dev@lists.x2go.org
Resent-CC: X2Go Developers <x2go-dev@lists.x2go.org>
X-Loop: owner@bugs.x2go.org
Resent-Date: Tue, 19 May 2020 21:30:05 +0000
Resent-Message-ID: <handler.1469.B1469.158992371611641@bugs.x2go.org>
Resent-Sender: owner@bugs.x2go.org
X-X2Go-PR-Message: followup 1469
X-X2Go-PR-Package: x2goclient
X-X2Go-PR-Keywords: 
References: <vq79NxFEEt8Pcp8OgUNEMq3mjc-pTXr2Am-M5IFBFEQ3Z2QlGHllLVmhjXXGe6fRM_hIfq91T7Y419CPz62rBb9Yn0GQL6Fc2s1kdrffjlY=@protonmail.com>
Received: via spool by 1469-submit@bugs.x2go.org id=B1469.158992371611641
          (code B ref 1469); Tue, 19 May 2020 21:30:05 +0000
Received: (at 1469) by bugs.x2go.org; 19 May 2020 21:28:36 +0000
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	ymir.das-netzwerkteam.de
X-Spam-Level: 
X-Spam-Status: No, score=-1.7 required=3.0 tests=BAYES_00,DKIM_SIGNED,
	DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,FREEMAIL_REPLYTO_END_DIGIT,
	HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,URIBL_BLOCKED
	autolearn=no autolearn_force=no version=3.4.2
Received: from mail-40137.protonmail.ch (mail-40137.protonmail.ch [185.70.40.137])
	by ymir.das-netzwerkteam.de (Postfix) with ESMTPS id 562BB5DAF0
	for <1469@bugs.x2go.org>; Tue, 19 May 2020 23:24:17 +0200 (CEST)
Date: Tue, 19 May 2020 21:24:09 +0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
	s=protonmail; t=1589923453;
	bh=4uxOm4VXH3JH7DymW/RQnJ4HesyxjnuiD3vbooqYnao=;
	h=Date:To:From:Reply-To:Subject:From;
	b=nptJgc/L2OTC5w1in4KhGFowGL2MMoVdt2hkHmw6Q+sKOzjP32BTAzNuY+bsTI6UW
	 Er1qtZheLBpDVdWR7aAEvQefc+q7TN0Hby/wJwwKd7NKfDjGxitUSAfxd1zF740oBM
	 oty0kUGixeOL/MNsbbQHkonc1+qnU3qOFsj0aCOA=
To: "1469@bugs.x2go.org" <1469@bugs.x2go.org>, Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
From: Melroy van den Berg <melroy89@protonmail.com>
Message-ID: <VnStfHqOfEV696XWKKjeMSuahU9XjhK2Txgit7J8BASDxM9h7eFulrhhTX481UZ4QDaWEvDllKfWhjB1nhYCeZfXEgVGQ0jo-T87qRzFgBU=@protonmail.com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="b1_f1c3740bfb6ee79fae139d70cf52c605"

This is a multi-part message in MIME format.

--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: multipart/alternative;
	boundary="b2_f1c3740bfb6ee79fae139d70cf52c605"

--b2_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

SGkgTWlrZSAmIFVsaSwKCkFzIE1pa2Ugc3VnZ2VzdGVkLCBJIHJlZG9uZSBhbGwgY2hhbmdlcyAo
cGx1cyBldmVuIHNvbWUgbW9yZSBib251cyBpdGVtcykuClNpbmNlIEkgd2FzIGluIGEgc2VwYXJh
dGUgZ2l0IGJyYW5jaCBJIGNvdWxkIHJ1biB0aGUgZm9ybWF0LXBhdGNoIGVhc2lseSB2aWE6Z2l0
IGZvcm1hdC1wYXRjaCBtYXN0ZXIuIFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb24uCgpAVWxpIEkn
bSB1c2luZyB0aGUgYXV0by1mb3JtYXR0ZXIgZm9yIEMrKyBidWlsdC1pbiBpbiBWUyBDb2RlLgoK
SSB0aGluayB0aGUgZW5kLXJlc3VsdCB3aXRoIGFsbCB0aGUgc2VwYXJhdGUgcGF0Y2hlcyBtYWtl
cyBtb3JlIHNlbnNlIG5vdywgc29ycnkgSSBkaWRuJ3QgZG8gaXQgcmlnaHQgYXdheS4gSSB0aGlu
ayBvbmNlIEkgaGF2ZSBhIHdpa2kgYWNjb3VudCwgSSB3aWxsIGFkZCBhbGwgdGhlc2UgYmVzdCBw
cmFjdGljZXMgeW91ciB4MmdvIHdpa2kuIEluc3RlYWQgb2YgQXR0YWNobWVudDogPHlvdXItcGF0
Y2guZGlmZj46IGh0dHBzOi8vd2lraS54MmdvLm9yZy9kb2t1LnBocC93aWtpOmJ1Z3M/c1tdPWdp
dCZzW109cGF0Y2gjYnVnX3N1Ym1pc3Npb25fd2l0aF9hX3BhdGNoLgoKU2VlIHRoZSBhdHRhY2ht
ZW50cyBmb3IgYWxsIHRoZSBwYXRjaGVzIGluIHRoaXMgbWFpbCAoMTEgaW4gdG90YWwpLiBUaGFu
a3MgaW4gYWR2YW5jZS4KCkJlc3QgcmVnYXJkcywKTWVscm95IHZhbiBkZW4gQmVyZw==


--b2_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

PGRpdj5IaSBNaWtlICZhbXA7IFVsaSw8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BcyBN
aWtlIHN1Z2dlc3RlZCwgSSByZWRvbmUgYWxsIGNoYW5nZXMgKHBsdXMgZXZlbiBzb21lIG1vcmUg
Ym9udXMgaXRlbXMpLjxicj48L2Rpdj48ZGl2PlNpbmNlIEkgd2FzIGluIGEgc2VwYXJhdGUgZ2l0
IGJyYW5jaCBJIGNvdWxkIHJ1biB0aGUgZm9ybWF0LXBhdGNoIGVhc2lseSB2aWE6Z2l0IGZvcm1h
dC1wYXRjaCBtYXN0ZXIuIFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb24uIDxicj48L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2PkBVbGkgSSdtIHVzaW5nIHRoZSBhdXRvLWZvcm1hdHRlciBmb3IgQysr
IGJ1aWx0LWluIGluIFZTIENvZGUuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSB0aGlu
ayB0aGUgZW5kLXJlc3VsdCB3aXRoIGFsbCB0aGUgc2VwYXJhdGUgcGF0Y2hlcyBtYWtlcyBtb3Jl
IHNlbnNlIG5vdywgc29ycnkgSSBkaWRuJ3QgZG8gaXQgcmlnaHQgYXdheS4gSSB0aGluayBvbmNl
IEkgaGF2ZSBhIHdpa2kgYWNjb3VudCwgSSB3aWxsIGFkZCBhbGwgdGhlc2UgYmVzdCBwcmFjdGlj
ZXMgeW91ciB4MmdvIHdpa2kuIEluc3RlYWQgb2YgQXR0YWNobWVudDogJmx0O3lvdXItcGF0Y2gu
ZGlmZiZndDs6IDxhIGhyZWY9Imh0dHBzOi8vd2lraS54MmdvLm9yZy9kb2t1LnBocC93aWtpOmJ1
Z3M/c1tdPWdpdCZhbXA7c1tdPXBhdGNoI2J1Z19zdWJtaXNzaW9uX3dpdGhfYV9wYXRjaCI+aHR0
cHM6Ly93aWtpLngyZ28ub3JnL2Rva3UucGhwL3dpa2k6YnVncz9zW109Z2l0JmFtcDtzW109cGF0
Y2gjYnVnX3N1Ym1pc3Npb25fd2l0aF9hX3BhdGNoPC9hPi48YnI+PC9kaXY+PGRpdj48YnI+PC9k
aXY+PGRpdj5TZWUgdGhlIGF0dGFjaG1lbnRzIGZvciBhbGwgdGhlIHBhdGNoZXMgaW4gdGhpcyBt
YWlsICgxMSBpbiB0b3RhbCkuIFRoYW5rcyBpbiBhZHZhbmNlLjxicj48L2Rpdj48ZGl2Pjxicj48
L2Rpdj48ZGl2PkJlc3QgcmVnYXJkcyw8YnI+PC9kaXY+PGRpdiBjbGFzcz0icHJvdG9ubWFpbF9z
aWduYXR1cmVfYmxvY2siPjxkaXYgY2xhc3M9InByb3Rvbm1haWxfc2lnbmF0dXJlX2Jsb2NrLXVz
ZXIiPjxkaXY+TWVscm95IHZhbiBkZW4gQmVyZzxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rp
dj48L2Rpdj48ZGl2Pjxicj48L2Rpdj4=



--b2_f1c3740bfb6ee79fae139d70cf52c605--

--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0002-endl-for-every-debug-line.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0002-endl-for-every-debug-line.patch

RnJvbSBjNjMzZjExMDUzMjU4N2UxNTY4ZTkzNzM1Njg4ZDkyNmJjZTk5Y2I3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0MDowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDIvMTFdIGVuZGwgZm9yIGV2ZXJ5IGRlYnVnIGxpbmUuLgoKLS0tCiBzcmMvc3NobWFzdGVyY29u
bmVjdGlvbi5jcHAgfCAxNDAgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiAx
IGZpbGUgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rp
b24uY3BwCmluZGV4IDQyNGNhZDIuLmY1OThlOWMgMTAwNjQ0Ci0tLSBhL3NyYy9zc2htYXN0ZXJj
b25uZWN0aW9uLmNwcAorKysgYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKQEAgLTE2MSw3
ICsxNjEsNyBAQCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpTc2hNYXN0ZXJDb25uZWN0aW9uKFFPYmpl
Y3QgKnBhcmVudCwgUVN0cmluZyBob3N0LCBpbnQgcG9ydAogICAgIGtlcmJlcm9zRGVsZWdhdGlv
biA9IGZhbHNlOwogICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaG9zdCAi
IDw8IGhvc3QgPDwgIjsgcG9ydCAiIDw8IHBvcnQgPDwgIjsgdXNlciAiIDw8IHVzZXIKICAgICAg
ICAgICAgICAgPDwgIjsgdXNlcHJveHkgIiA8PCB1c2Vwcm94eSA8PCAiOyBwcm94eXNlcnZlciAi
IDw8IHByb3h5c2VydmVyCi0gICAgICAgICAgICAgIDw8ICI7IHByb3h5cG9ydCAiIDw8IHByb3h5
cG9ydDsKKyAgICAgICAgICAgICAgPDwgIjsgcHJveHlwb3J0ICIgPDwgcHJveHlwb3J0IDw8IGVu
ZGw7CiAgICAgdGhpcy0+aG9zdCA9IGhvc3Q7CiAgICAgLy8gSWYgdGhlIGhvc3RuYW1lIHN0YXJ0
cyB3aXRoICIhIiBkbyBub3QgcGVyZm9ybSBsb2dpbkNoZWNrKCkgZm9yIHRoaXMgY29ubmVjdGlv
bgogICAgIGlmICh0aGlzLT5ob3N0LmluZGV4T2YoIiEiKSA9PSAwKQpAQCAtMjAyLDcgKzIwMiw3
IEBAIFNzaE1hc3RlckNvbm5lY3Rpb246OlNzaE1hc3RlckNvbm5lY3Rpb24oUU9iamVjdCAqcGFy
ZW50LCBRU3RyaW5nIGhvc3QsIGludCBwb3J0CiAgICAgICAgIHsKICAgICAgICAgICAgIFFTdHJp
bmcgZXJyb3JfbXNnID0gdHIoIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CiAgICAgICAg
ICAgICBlcnJvcl9tc2cgKz0gIiAiICsgdHIoIlVzaW5nIGVudmlyb25tZW50LXByb3ZpZGVkIHVz
ZXJuYW1lLiIpOwotICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZzsKKyAgICAgICAg
ICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2cgPDwgZW5kbDsKICAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKQEAgLTIxNCwxMiArMjE0LDEyIEBAIFNzaE1hc3RlckNvbm5lY3Rpb246
OlNzaE1hc3RlckNvbm5lY3Rpb24oUU9iamVjdCAqcGFyZW50LCBRU3RyaW5nIGhvc3QsIGludCBw
b3J0CiAKICAgICAgICAgICAgIGlmIChzc2hfb3B0aW9uc19wYXJzZV9jb25maWcodG1wX3Nlc3Np
b24sIE5VTEwpIDwgMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWcg
PDwgIldhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7CisgICAg
ICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8gcGFyc2UgdGhlIFNT
SCBjb25maWcgZmlsZS4iIDw8IGVuZGw7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNo
YXIgKmluZmVycmVkX3VzZXJuYW1lID0gTlVMTDsKICAgICAgICAgICAgIHNzaF9vcHRpb25zX2dl
dCh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfVVNFUiwgJmluZmVycmVkX3VzZXJuYW1lKTsKLSAg
ICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24gdXNlciBuYW1lIGFmdGVy
IGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX3VzZXJuYW1lOworICAgICAgICAgICAg
eDJnb0RlYnVnIDw8ICJUZW1wb3Jhcnkgc2Vzc2lvbiB1c2VyIG5hbWUgYWZ0ZXIgY29uZmlnIGZp
bGUgcGFyc2U6ICIgPDwgaW5mZXJyZWRfdXNlcm5hbWUgPDwgZW5kbDsKIAogICAgICAgICAgICAg
dGhpcy0+dXNlciA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoaW5mZXJyZWRfdXNlcm5hbWUpOwog
CkBAIC0yNDAsMTggKzI0MCwxOCBAQCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpTc2hNYXN0ZXJDb25u
ZWN0aW9uKFFPYmplY3QgKnBhcmVudCwgUVN0cmluZyBob3N0LCBpbnQgcG9ydAogCiAgICAgaWYg
KGtlcmJlcm9zKQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJTdGFydGluZyBTU0ggY29u
bmVjdGlvbiB3aXRoIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLiI7CisgICAgICAgIHgyZ29EZWJ1
ZyA8PCAiU3RhcnRpbmcgU1NIIGNvbm5lY3Rpb24gd2l0aCBLZXJiZXJvcyBhdXRoZW50aWNhdGlv
bi4iIDw8IGVuZGw7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1ZyA8
PCAiU3RhcnRpbmcgU1NIIGNvbm5lY3Rpb24gd2l0aG91dCBLZXJiZXJvcyBhdXRoZW50aWNhdGlv
bi4iOworICAgICAgICB4MmdvRGVidWcgPDwgIlN0YXJ0aW5nIFNTSCBjb25uZWN0aW9uIHdpdGhv
dXQgS2VyYmVyb3MgYXV0aGVudGljYXRpb24uIiA8PCBlbmRsOwogICAgIH0KLSAgICB4MmdvRGVi
dWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIgPDwgdGhpcyA8PCAiIGNyZWF0
ZWQuIjsKKyAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIg
PDwgdGhpcyA8PCAiIGNyZWF0ZWQuIiA8PCBlbmRsOwogfQogCiB2b2lkIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnNsb3RTc2hQcm94eUNvbm5lY3Rpb25PaygpCiB7Ci0gICAgeDJnb0RlYnVnIDw8ICJT
U0ggcHJveHkgY29ubmVjdGVkLiI7CisgICAgeDJnb0RlYnVnIDw8ICJTU0ggcHJveHkgY29ubmVj
dGVkLiIgPDwgZW5kbDsKIAogICAgIGxvY2FsUHJveHlQb3J0ID0gUFJPWFlUVU5ORUxQT1JUOwog
ICAgIHdoaWxlIChPTk1haW5XaW5kb3c6OmlzU2VydmVyUnVubmluZyhsb2NhbFByb3h5UG9ydCkp
CkBAIC0zMTksMTIgKzMxOSwxMiBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZFJldmVy
c2VUdW5uZWxDb25uZWN0aW9ucygpCiAgICAgICAgICAgICAgICAgaWYgKHJjID09IFNTSF9PSykK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGVtaXQgcmV2ZXJzZVR1bm5l
bE9rKHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmNyZWF0b3IpOwotICAgICAgICAgICAgICAgICAg
ICB4MmdvRGVidWcgPDwgIkxpc3RlbmluZyBmb3IgVENQL0lQIGNvbm5lY3Rpb25zIG9uICIgPDwg
cmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uZm9yd2FyZFBvcnQ7CisgICAgICAgICAgICAgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiTGlzdGVuaW5nIGZvciBUQ1AvSVAgY29ubmVjdGlvbnMgb24gIiA8PCBy
ZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9ydCA8PCBlbmRsOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAocmMgPT0gU1NIX0VSUk9SKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15
X3NzaF9zZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJk
IHBvcnQgIiA8PCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9ydCA8PCAiIGZhaWxl
ZDoiIDw8IGVycjsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJkIHBv
cnQgIiA8PCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9ydCA8PCAiIGZhaWxlZDoi
IDw8IGVyciA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICBlbWl0IHJldmVyc2VUdW5uZWxG
YWlsZWQocmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uY3JlYXRvciwgZXJyKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBTc2hNYXN0ZXJD
b25uZWN0aW9uOjpjaGVja1JldmVyc2VUdW5uZWxDb25uZWN0aW9ucygpCiAgICAgc3NoX2NoYW5u
ZWwgY2hhbiA9IHNzaF9jaGFubmVsX2FjY2VwdF9mb3J3YXJkKG15X3NzaF9zZXNzaW9uLCAwLCAm
cG9ydCk7CiAgICAgaWYgKGNoYW4pCiAgICAgewotICAgICAgICB4MmdvRGVidWcgPDwgIk5ldyBy
ZXZlcnNlIGNvbm5lY3Rpb24gb24gcG9ydCAiIDw8IHBvcnQ7CisgICAgICAgIHgyZ29EZWJ1ZyA8
PCAiTmV3IHJldmVyc2UgY29ubmVjdGlvbiBvbiBwb3J0ICIgPDwgcG9ydCA8PCBlbmRsOwogCiAg
ICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0TXV0ZXgubG9jaygpOwogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJldmVyc2VUdW5uZWxSZXF1ZXN0LmNvdW50KCk7ICsraSkKQEAgLTM0Nyw3
ICszNDcsNyBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoZWNrUmV2ZXJzZVR1bm5lbENv
bm5lY3Rpb25zKCkKICAgICAgICAgICAgIFJldmVyc2VUdW5uZWxSZXF1ZXN0IHJlcSA9IHJldmVy
c2VUdW5uZWxSZXF1ZXN0W2ldOwogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4ocmVx
LmZvcndhcmRQb3J0KSA9PSBwb3J0KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHgy
Z29EZWJ1ZyA8PCAiQ3JlYXRpbmcgbmV3IGNoYW5uZWwgZm9yIHJldmVyc2UgdHVubmVsICIgPDwg
cG9ydDsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkNyZWF0aW5nIG5ldyBjaGFubmVs
IGZvciByZXZlcnNlIHR1bm5lbCAiIDw8IHBvcnQgPDwgZW5kbDsKICAgICAgICAgICAgICAgICBp
bnQgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CiAjaWZuZGVmIFFfT1Nf
V0lOCiAgICAgICAgICAgICAgICAgY29uc3QgaW50IHkgPSAxOwpAQCAtMzgzLDcgKzM4Myw3IEBA
IHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y2hlY2tSZXZlcnNlVHVubmVsQ29ubmVjdGlvbnMo
KQogICAgICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LmxvY2soKTsKICAgICAg
ICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnMgPDwgY29uOwogICAgICAgICAgICAgICAgIGNo
YW5uZWxDb25uZWN0aW9uc011dGV4LnVubG9jaygpOwotICAgICAgICAgICAgICAgIHgyZ29EZWJ1
ZyA8PCAiTmV3IGNoYW5uZWwgY3JlYXRlZCI7CisgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8
ICJOZXcgY2hhbm5lbCBjcmVhdGVkIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MTQsNyArNDE0LDcgQEAgaW50IFNzaE1hc3Rl
ckNvbm5lY3Rpb246OnN0YXJ0VHVubmVsKGNvbnN0IFFTdHJpbmcgJmZvcndhcmRIb3N0LCB1aW50
IGZvcndhcmRQb3IKICAgICAgICAgcmVxLmxvY2FsSG9zdCA9IGxvY2FsSG9zdDsKICAgICAgICAg
cmVxLmZvcndhcmRQb3J0ID0gZm9yd2FyZFBvcnQ7CiAgICAgICAgIHJlcS5saXN0ZW4gPSBmYWxz
ZTsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJSZXF1ZXN0aW5nIHJldmVyc2UgdHVubmVsIGZyb20g
cG9ydCAiIDw8IGZvcndhcmRQb3J0IDw8ICIgdG8gIiA8PCBsb2NhbFBvcnQ7CisgICAgICAgIHgy
Z29EZWJ1ZyA8PCAiUmVxdWVzdGluZyByZXZlcnNlIHR1bm5lbCBmcm9tIHBvcnQgIiA8PCBmb3J3
YXJkUG9ydCA8PCAiIHRvICIgPDwgbG9jYWxQb3J0IDw8IGVuZGw7CiAgICAgICAgIHJldmVyc2VU
dW5uZWxSZXF1ZXN0TXV0ZXgubG9jaygpOwogICAgICAgICByZXZlcnNlVHVubmVsUmVxdWVzdCA8
PCByZXE7CiAgICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0TXV0ZXgudW5sb2NrKCk7CkBAIC00
MjUsNyArNDI1LDcgQEAgaW50IFNzaE1hc3RlckNvbm5lY3Rpb246OnN0YXJ0VHVubmVsKGNvbnN0
IFFTdHJpbmcgJmZvcndhcmRIb3N0LCB1aW50IGZvcndhcmRQb3IKIAogdm9pZCBTc2hNYXN0ZXJD
b25uZWN0aW9uOjpzbG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0
aW9uICpjb25uZWN0aW9uKQogewotICAgIHgyZ29EZWJ1ZyA8PCAiU1NIIHByb3h5IGludGVyYWN0
aW9uIGZpbmlzaGVkIjsKKyAgICB4MmdvRGVidWcgPDwgIlNTSCBwcm94eSBpbnRlcmFjdGlvbiBm
aW5pc2hlZCIgPDwgZW5kbDsKICAgICBzbG90U3NoUHJveHlVc2VyQXV0aEVycm9yKCJOT19FUlJP
UiIpOwogfQogCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpz
bG90U3NoUHJveHlVc2VyQXV0aEVycm9yKFFTdHJpbmcgZXJyKQogCiB2b2lkIFNzaE1hc3RlckNv
bm5lY3Rpb246OnNsb3RTc2hQcm94eVR1bm5lbE9rKGludCkKIHsKLSAgICB4MmdvRGVidWcgPDwg
IlNTSCBwcm94eSB0dW5uZWwgZXN0YWJsaXNoZWQuIjsKKyAgICB4MmdvRGVidWcgPDwgIlNTSCBw
cm94eSB0dW5uZWwgZXN0YWJsaXNoZWQuIiA8PCBlbmRsOwogICAgIHNzaFByb3h5UmVhZHkgPSB0
cnVlOwogfQogCkBAIC00NzksMTAgKzQ3OSwxMCBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246
OnNsb3RTc2hQcm94eVNlcnZlckF1dGhBYm9ydGVkKCkKIAogdm9pZCBTc2hNYXN0ZXJDb25uZWN0
aW9uOjpydW4oKQogewotICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5z
dGFuY2UgIiA8PCB0aGlzIDw8ICIgZW50ZXJpbmcgdGhyZWFkLiI7CisgICAgeDJnb0RlYnVnIDw8
ICJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAiIDw8IHRoaXMgPDwgIiBlbnRlcmluZyB0
aHJlYWQuIiA8PCBlbmRsOwogICAgIGlmICh1c2Vwcm94eSAmJiBwcm94eXR5cGUgPT0gUFJPWFlT
U0gpCiAgICAgewotICAgICAgICB4MmdvRGVidWcgPDwgInByb3h5c2VydmVyOiAiIDw8IHByb3h5
c2VydmVyIDw8ICI7IHByb3h5cG9ydDogIiA8PCBwcm94eXBvcnQgPDwgIjsgcHJveHlsb2dpbjog
IiA8PCBwcm94eWxvZ2luOworICAgICAgICB4MmdvRGVidWcgPDwgInByb3h5c2VydmVyOiAiIDw8
IHByb3h5c2VydmVyIDw8ICI7IHByb3h5cG9ydDogIiA8PCBwcm94eXBvcnQgPDwgIjsgcHJveHls
b2dpbjogIiA8PCBwcm94eWxvZ2luIDw8IGVuZGw7CiAgICAgICAgIHNzaFByb3h5ID0gbmV3IFNz
aE1hc3RlckNvbm5lY3Rpb24oMCwgcHJveHlzZXJ2ZXIsIHByb3h5cG9ydCwgYWNjZXB0VW5rbm93
blNlcnZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
eHlsb2dpbiwgcHJveHlwYXNzd29yZCwgcHJveHlrZXksIHByb3h5YXV0b2xvZ2luLCBwcm94eUty
YkxvZ2luLCBmYWxzZSk7CiAKQEAgLTYwOCw3ICs2MDgsNyBAQCB2b2lkIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnJ1bigpCiAgICAgICAgIH0KICAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vy
cm9yKG15X3NzaF9zZXNzaW9uKTsKICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gdHIoIkNhbm5v
dCBjb25uZWN0IHRvICIpICsgaG9zdCArICI6IiArIFFTdHJpbmc6Om51bWJlcihwb3J0KTsKLSAg
ICAgICAgeDJnb0RlYnVnIDw8IG1lc3NhZ2UgPDwgIiAtICIgPDwgZXJyOworICAgICAgICB4Mmdv
RGVidWcgPDwgbWVzc2FnZSA8PCAiIC0gIiA8PCBlcnIgPDwgZW5kbDsKICAgICAgICAgZW1pdCBj
b25uZWN0aW9uRXJyb3IobWVzc2FnZSwgZXJyKTsKICAgICAgICAgc3NoX2ZyZWUobXlfc3NoX3Nl
c3Npb24pOwogICAgICAgICBxdWl0KCk7CkBAIC02NzMsNyArNjczLDcgQEAgdm9pZCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpydW4oKQogICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIGlz
IGFscmVhZHkgZGlzY29ubmVjdGVkLCBleGl0aW5nLiIgPDwgZW5kbDsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICB4MmdvRGVidWcgPDwgIlVzZXIgYXV0aGVudGljYXRp
b24gT0suIjsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJVc2VyIGF1dGhlbnRpY2F0aW9uIE9LLiIg
PDwgZW5kbDsKICAgICAgICAgLy8gY2hlY2tMb2dpbigpIGlzIGN1cnJlbnRseSBzcGVjaWZpYyB0
byBsaWJzc2guCiAgICAgICAgIGlmIChrZXJiZXJvcykKICAgICAgICAgewpAQCAtNjgxLDE5ICs2
ODEsMTkgQEAgdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpydW4oKQogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgaWYgKHRoaXMtPmxvZ2luQ2hlY2sgPT0gZmFsc2UpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHgyZ29EZWJ1ZyA8PCAiU2tpcHBpbmcgTG9naW4gQ2hlY2sgYXMgcmVxdWVzdGVkIGJ5
IGNvbmZpZ3VyYXRpb24iOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJTa2lwcGluZyBMb2dp
biBDaGVjayBhcyByZXF1ZXN0ZWQgYnkgY29uZmlndXJhdGlvbiIgPDwgZW5kbDsKICAgICAgICAg
ICAgIGVtaXQgY29ubmVjdGlvbk9rKGhvc3QpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKGNoZWNrTG9naW4oKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkxvZ2luIENoZWNrIC0gT0siOworICAgICAgICAg
ICAgICAgIHgyZ29EZWJ1ZyA8PCAiTG9naW4gQ2hlY2sgLSBPSyIgPDwgZW5kbDsKICAgICAgICAg
ICAgICAgICBlbWl0IGNvbm5lY3Rpb25Payhob3N0KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkxv
Z2luIENoZWNrIC0gRmFpbGVkIjsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkxvZ2lu
IENoZWNrIC0gRmFpbGVkIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgIC8vICAgICAgICAgIGlm
KCFpbnRlcmFjdGlvbkludGVycnVwdCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGVtaXQgZmluaXNoSW50ZXJhY3Rpb24odGhpcyk7CkBAIC03MjIsNyArNzIyLDcgQEAg
dm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpydW4oKQogICAgICAgICAgICAgZXJyID0gc3NoUHJv
Y0VyclN0cmluZzsKICAgICAgICAgfQogICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSB0cigiQXV0
aGVudGljYXRpb24gZmFpbGVkLiIpOwotICAgICAgICB4MmdvRGVidWcgPDwgbWVzc2FnZSA8PCAi
IC0gIiA8PCBlcnI7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBtZXNzYWdlIDw8ICIgLSAiIDw8IGVy
ciA8PCBlbmRsOwogICAgICAgICBlbWl0IHVzZXJBdXRoRXJyb3IoYXV0aEVycm9ycy5qb2luKCJc
biIpKTsKICAgICAgICAgc3NoX2Rpc2Nvbm5lY3QobXlfc3NoX3Nlc3Npb24pOwogICAgICAgICBz
c2hfZnJlZShteV9zc2hfc2Vzc2lvbik7CkBAIC03NDcsMTQgKzc0NywxNCBAQCBTc2hNYXN0ZXJD
b25uZWN0aW9uOjp+U3NoTWFzdGVyQ29ubmVjdGlvbigpCiAgICAgZGlzY29ubmVjdEZsYWdNdXRl
eC5sb2NrKCk7CiAgICAgZGlzY29ubmVjdFNlc3Npb25GbGFnID0gdHJ1ZTsKICAgICBkaXNjb25u
ZWN0RmxhZ011dGV4LnVubG9jaygpOwotICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVj
dGlvbiwgaW5zdGFuY2UgIiA8PCB0aGlzIDw8ICIgd2FpdGluZyBmb3IgdGhyZWFkIHRvIGZpbmlz
aC4iOworICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5zdGFuY2UgIiA8
PCB0aGlzIDw8ICIgd2FpdGluZyBmb3IgdGhyZWFkIHRvIGZpbmlzaC4iIDw8IGVuZGw7CiAgICAg
d2FpdCgxNTAwMCk7Ci0gICAgeDJnb0RlYnVnIDw8ICJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0
YW5jZSAiIDw8IHRoaXMgPDwgIiB0aHJlYWQgZmluaXNoZWQuIjsKKyAgICB4MmdvRGVidWcgPDwg
IlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIgPDwgdGhpcyA8PCAiIHRocmVhZCBmaW5p
c2hlZC4iIDw8IGVuZGw7CiAgICAgZm9yIChpbnQgaSA9IHByb2Nlc3Nlcy5jb3VudCgpIC0gMTsg
aSA+PSAwOyAtLWkpCiAgICAgewogICAgICAgICBkZWxldGUgcHJvY2Vzc2VzW2ldOwogICAgIH0K
LSAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIgPDwgdGhp
cyA8PCAiIGZpbmlzaGVkIGRlc3RydWN0b3IuIjsKKyAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3Rl
ckNvbm5lY3Rpb24sIGluc3RhbmNlICIgPDwgdGhpcyA8PCAiIGZpbmlzaGVkIGRlc3RydWN0b3Iu
IiA8PCBlbmRsOwogfQogCiBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnNzaENvbm5lY3QoKQpA
QCAtNzgxLDcgKzc4MSw3IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c3NoQ29ubmVjdCgp
CiAjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQogICAg
IHVuc2lnbmVkIGludCBjdXJfcG9ydCA9IDA7CiAgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQobXlf
c3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7Ci0gICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIHBvcnQg
YmVmb3JlIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGN1cl9wb3J0OworICAgIHgyZ29EZWJ1ZyA8
PCAiU2Vzc2lvbiBwb3J0IGJlZm9yZSBjb25maWcgZmlsZSBwYXJzZTogIiA8PCBjdXJfcG9ydCA8
PCBlbmRsOwogI2VuZGlmCiAKICAgICAvKiBQYXJzZSB+Ly5zc2gvY29uZmlnLiAqLwpAQCAtNzky
LDcgKzc5Miw3IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c3NoQ29ubmVjdCgpCiAKICNp
ZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCiAgICAgc3No
X29wdGlvbnNfZ2V0X3BvcnQobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7Ci0gICAgeDJnb0Rl
YnVnIDw8ICJTZXNzaW9uIHBvcnQgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgY3VyX3Bv
cnQ7CisgICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIHBvcnQgYWZ0ZXIgY29uZmlnIGZpbGUgcGFy
c2U6ICIgPDwgY3VyX3BvcnQgPDwgZW5kbDsKICNlbmRpZgogCiAgICAgcmMgPSBzc2hfY29ubmVj
dChteV9zc2hfc2Vzc2lvbik7CkBAIC04MDMsNyArODAzLDcgQEAgYm9vbCBTc2hNYXN0ZXJDb25u
ZWN0aW9uOjpzc2hDb25uZWN0KCkKICAgICAvL3NldCB2YWx1ZXMgZm9yIHJlbW90ZSBob3N0IGZv
ciBwcm9wZXIgc2VydmVyIGF1dGhlbnRpY2F0aW9uCiAgICAgaWYgKHVzZXByb3h5ICYmIHByb3h5
dHlwZSA9PSBQUk9YWVNTSCkKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ29ubmVjdGVk
IHZpYSBwcm94eSwgcmVzZXR0aW5nIGNvbm5lY3Rpb24gdmFsdWVzIG9uIHNlc3Npb24gdG8gIiA8
PCB0bXBCQS5kYXRhKCkgPDwgIjoiIDw8IHBvcnQ7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ29u
bmVjdGVkIHZpYSBwcm94eSwgcmVzZXR0aW5nIGNvbm5lY3Rpb24gdmFsdWVzIG9uIHNlc3Npb24g
dG8gIiA8PCB0bXBCQS5kYXRhKCkgPDwgIjoiIDw8IHBvcnQgPDwgZW5kbDsKICAgICAgICAgc3No
X29wdGlvbnNfc2V0KG15X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBCQS5kYXRh
KCkpOwogCiAgICAgICAgIC8qCkBAIC04MzAsNyArODMwLDcgQEAgYm9vbCBTc2hNYXN0ZXJDb25u
ZWN0aW9uOjpzc2hDb25uZWN0KCkKICAgICAgICAgICAgIGlmICghdG1wX3Nlc3Npb24pCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvcl9tc2cgPSB0cigiQ2Fubm90
IGNyZWF0ZSBTU0ggc2Vzc2lvbi4iKTsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJy
b3JfbXNnOworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2cgPDwgZW5kbDsK
ICAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGVsc2UKQEAgLTg0MCwxMiArODQwLDEyIEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6
c3NoQ29ubmVjdCgpCiAgICAgICAgICAgICAgICAgLyogUGFyc2Ugfi8uc3NoL2NvbmZpZy4gKi8K
ICAgICAgICAgICAgICAgICBpZiAoc3NoX29wdGlvbnNfcGFyc2VfY29uZmlnKHRtcF9zZXNzaW9u
LCBOVUxMKSA8IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIldhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7
CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzogdW5hYmxlIHRvIHBh
cnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZlcnJlZF9wb3J0ID0gMDsKICAgICAgICAg
ICAgICAgICBzc2hfb3B0aW9uc19nZXRfcG9ydCh0bXBfc2Vzc2lvbiwgJmluZmVycmVkX3BvcnQp
OwotICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmV0Y2hlZCBpbmZlcnJlZCBzZXNzaW9u
IHBvcnQ6ICIgPDwgaW5mZXJyZWRfcG9ydDsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IkZldGNoZWQgaW5mZXJyZWQgc2Vzc2lvbiBwb3J0OiAiIDw8IGluZmVycmVkX3BvcnQgPDwgZW5k
bDsKIAogICAgICAgICAgICAgICAgIHdvcmtfcG9ydCA9IGluZmVycmVkX3BvcnQgJiAweEZGRkY7
CiAKQEAgLTg1OSw3ICs4NTksNyBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnNzaENvbm5l
Y3QoKQogCiAjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAw
KQogICAgIHNzaF9vcHRpb25zX2dldF9wb3J0KG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOwot
ICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0IGJlZm9yZSBjb25maWcgZmlsZSBwYXJzZSAo
cGFydCAyKTogIiA8PCBjdXJfcG9ydDsKKyAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24gcG9ydCBi
ZWZvcmUgY29uZmlnIGZpbGUgcGFyc2UgKHBhcnQgMik6ICIgPDwgY3VyX3BvcnQgPDwgZW5kbDsK
ICNlbmRpZgogCiAgICAgLyogUGFyc2Ugfi8uc3NoL2NvbmZpZy4gKi8KQEAgLTg3MCw3ICs4NzAs
NyBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnNzaENvbm5lY3QoKQogCiAjaWYgTElCU1NI
X1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQogICAgIHNzaF9vcHRpb25z
X2dldF9wb3J0KG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOwotICAgIHgyZ29EZWJ1ZyA8PCAi
U2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlIChwYXJ0IDIpOiAiIDw8IGN1cl9w
b3J0OworICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBh
cnNlIChwYXJ0IDIpOiAiIDw8IGN1cl9wb3J0IDw8IGVuZGw7CiAjZW5kaWYKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtODkxLDcgKzg5MSw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6d3Jp
dGVLbm93bkhvc3RzKGJvb2wgd3JpdGUpCiAKIGludCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzZXJ2
ZXJBdXRoKFFTdHJpbmcgJmVycm9yTXNnKQogewotICAgIHgyZ29EZWJ1ZyA8PCAiY3NlcnZlckF1
dGgiOworICAgIHgyZ29EZWJ1ZyA8PCAiY3NlcnZlckF1dGgiIDw8IGVuZGw7CiAKICAgICBpbnQg
c3RhdGUgPSBTU0hfU0VSVkVSX0VSUk9SOwogICAgIHVuc2lnbmVkIGNoYXIgKmhhc2ggPSBOVUxM
OwpAQCAtOTc0LDcgKzk3NCw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2V0VmVyZmlj
YXRpb25Db2RlKFFTdHJpbmcgY29kZSkKIAogYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2Vy
QXV0aEtleWJvYXJkSW50ZXJhY3RpdmUoUVN0cmluZyBwcm9tcHQpCiB7Ci0gICAgeDJnb0RlYnVn
IDw8ICJPcGVuIEludGVyYWN0aW9uIGRpYWxvZyB0byBjb21wbGV0ZSBhdXRoZW50aWNhdGlvbiI7
CisgICAgeDJnb0RlYnVnIDw8ICJPcGVuIEludGVyYWN0aW9uIGRpYWxvZyB0byBjb21wbGV0ZSBh
dXRoZW50aWNhdGlvbiIgPDwgZW5kbDsKICAgICBlbWl0IHN0YXJ0SW50ZXJhY3Rpb24odGhpcywg
cHJvbXB0KTsKICAgICBpbnRlcmFjdGlvbkludGVycnVwdCA9IGZhbHNlOwogICAgIGludGVyYWN0
aW9uSW5wdXRUZXh0ID0gUVN0cmluZzo6bnVsbDsKQEAgLTEwMTMsMTQgKzEwMTMsMTQgQEAgYm9v
bCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEtleWJvYXJkSW50ZXJhY3RpdmUoUVN0cmlu
ZyBwcm9tcHQpCiAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LnVubG9jaygp
OwogICAgICAgICAgICAgICAgIGlmICh0ZXh0VG9TZW5kLmxlbmd0aCgpID4gMCkKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU0VORCBJbnB1dCB0
byBTRVJWRVIiOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlNFTkQgSW5wdXQg
dG8gU0VSVkVSIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICB0ZXh0VG9TZW5kLnJlcGxh
Y2UoIlxuIiwgIiIpOwogICAgICAgICAgICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2JkaW50X3Nl
dGFuc3dlcihteV9zc2hfc2Vzc2lvbiwgMCwgdGV4dFRvU2VuZC50b0xvY2FsOEJpdCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChpbnRlcnJ1cHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB4MmdvRGVidWcgPDwgIktleWJvYXJkIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCI7CisgICAgICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gZmFpbGVk
IiA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIFFTdHJpbmcgZXJyPXNz
aF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwogICAgICAgICAgICAgICAgICAgICBhdXRo
RXJyb3JzIDw8ICJOT19FUlJPUiI7CiAgICAgICAgICAgICAgICAgICAgIGVtaXQgZmluaXNoSW50
ZXJhY3Rpb24odGhpcyk7CkBAIC0xMDM1LDEzICsxMDM1LDEzIEBAIGJvb2wgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6dXNlckF1dGhLZXlib2FyZEludGVyYWN0aXZlKFFTdHJpbmcgcHJvbXB0KQogICAg
IH0KICAgICBpZiAocmV6ID09IFNTSF9BVVRIX1NVQ0NFU1MpCiAgICAgewotICAgICAgICB4Mmdv
RGVidWcgPDwgIktleWJvYXJkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwiOworICAgICAgICB4
MmdvRGVidWcgPDwgIktleWJvYXJkIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwiIDw8IGVuZGw7
CiAgICAgICAgIGVtaXQgZmluaXNoSW50ZXJhY3Rpb24odGhpcyk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAocmV6ID09IFNTSF9BVVRIX0RFTklFRCkKICAgICB7Ci0gICAg
ICAgIHgyZ29EZWJ1ZyA8PCAiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKKyAgICAg
ICAgeDJnb0RlYnVnIDw8ICJLZXlib2FyZCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiIDw8IGVuZGw7
CiAgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CiAg
ICAgICAgIGlmIChpbnN0cnVjdGlvbi5sZW5ndGgoKSA+IDApCiAgICAgICAgIHsKQEAgLTEzMjQs
NyArMTMyNCw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2V0S2V5UGhyYXNlKFFTdHJp
bmcgcGhyYXNlKQogCiBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnVzZXJBdXRoV2l0aEtleSgp
CiB7Ci0gICAgeDJnb0RlYnVnIDw8ICJUcnlpbmcgdG8gYXV0aGVudGljYXRlIHVzZXIgd2l0aCBw
cml2YXRlIGtleS4iOworICAgIHgyZ29EZWJ1ZyA8PCAiVHJ5aW5nIHRvIGF1dGhlbnRpY2F0ZSB1
c2VyIHdpdGggcHJpdmF0ZSBrZXkuIiA8PCBlbmRsOwogICAgIFFTdHJpbmcga2V5TmFtZSA9IGtl
eTsKICAgICBib29sIGF1dG9SZW1vdmUgPSBmYWxzZTsKICAgICBpZiAoa2V5LmluZGV4T2YoIlBS
SVZBVEUgS0VZIikgIT0gLTEpCkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBib29sIFNzaE1hc3RlckNv
bm5lY3Rpb246OnVzZXJBdXRoV2l0aEtleSgpCiAgICAgICAgIG91dCA8PCBrZXk7CiAgICAgICAg
IGZsLmNsb3NlKCk7CiAgICAgICAgIGF1dG9SZW1vdmUgPSB0cnVlOwotICAgICAgICB4MmdvRGVi
dWcgPDwgIlRlbXBvcmFyaWx5IHNhdmVkIGtleSBpbiAiIDw8IGtleU5hbWU7CisgICAgICAgIHgy
Z29EZWJ1ZyA8PCAiVGVtcG9yYXJpbHkgc2F2ZWQga2V5IGluICIgPDwga2V5TmFtZSA8PCBlbmRs
OwogICAgIH0KIAogICAgIFFCeXRlQXJyYXkgdG1wX2JhID0ga2V5TmFtZS50b0xvY2FsOEJpdCgp
OwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0
aFdpdGhLZXkoKQogCiAgICAgaWYgKFNTSF9FT0YgPT0gcmMpCiAgICAgewotICAgICAgICB4Mmdv
RGVidWcgPDwgIkZhaWxlZCB0byBnZXQgcHJpdmF0ZSBrZXkgZnJvbSAiIDw8IGtleU5hbWUgPDwg
IjsgZmlsZSBkb2VzIG5vdCBleGlzdC4iOworICAgICAgICB4MmdvRGVidWcgPDwgIkZhaWxlZCB0
byBnZXQgcHJpdmF0ZSBrZXkgZnJvbSAiIDw8IGtleU5hbWUgPDwgIjsgZmlsZSBkb2VzIG5vdCBl
eGlzdC4iIDw8IGVuZGw7CiAKICAgICAgICAgc3NoX2tleV9mcmVlKHByaXZfa2V5KTsKIApAQCAt
MTM3MSw3ICsxMzcxLDcgQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aFdpdGhL
ZXkoKQogICAgIH0KICAgICBlbHNlIGlmIChTU0hfT0sgIT0gcmMpCiAgICAgewotICAgICAgICB4
MmdvRGVidWcgPDwgIkZhaWxlZCB0byBnZXQgcHJpdmF0ZSBrZXkgZnJvbSAiIDw8IGtleU5hbWUg
PDwgIjsgdHJ5aW5nIHRvIHF1ZXJ5IHBhc3NwaHJhc2UuIjsKKyAgICAgICAgeDJnb0RlYnVnIDw8
ICJGYWlsZWQgdG8gZ2V0IHByaXZhdGUga2V5IGZyb20gIiA8PCBrZXlOYW1lIDw8ICI7IHRyeWlu
ZyB0byBxdWVyeSBwYXNzcGhyYXNlLiIgPDwgZW5kbDsKIAogICAgICAgICBzc2hfa2V5X2ZyZWUo
cHJpdl9rZXkpOwogICAgICAgICBwcml2X2tleSA9IE5VTEw7CkBAIC0xNDQxLDcgKzE0NDEsNyBA
QCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnVzZXJBdXRoV2l0aEtleSgpCiAgICAgaWYgKCFw
cml2X2tleSkKICNlbmRpZgogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJGYWlsZWQgdG8g
Z2V0IHByaXZhdGUga2V5IGZyb20gIiA8PCBrZXlOYW1lOworICAgICAgICB4MmdvRGVidWcgPDwg
IkZhaWxlZCB0byBnZXQgcHJpdmF0ZSBrZXkgZnJvbSAiIDw8IGtleU5hbWUgPDwgZW5kbDsKICAg
ICAgICAgaWYgKGF1dG9SZW1vdmUpCiAgICAgICAgICAgICBRRmlsZTo6cmVtb3ZlKGtleU5hbWUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDYxLDcgKzE0NjEsNyBAQCBib29sIFNzaE1h
c3RlckNvbm5lY3Rpb246OnVzZXJBdXRoV2l0aEtleSgpCiAgICAgaWYgKCFwdWJfa2V5KQogI2Vu
ZGlmCiAgICAgewotICAgICAgICB4MmdvRGVidWcgPDwgIkZhaWxlZCB0byBnZXQgcHVibGljIGtl
eSBmcm9tIHByaXZhdGUga2V5LiI7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdl
dCBwdWJsaWMga2V5IGZyb20gcHJpdmF0ZSBrZXkuIiA8PCBlbmRsOwogI2lmIExJQlNTSF9WRVJT
SU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICAgICAgc3NoX2tleV9mcmVl
KHByaXZfa2V5KTsKICAgICAgICAgcHJpdl9rZXkgPSBOVUxMOwpAQCAtMTQ4OCw3ICsxNDg4LDcg
QEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aFdpdGhLZXkoKQogICAgIC8qIEZJ
WE1FOiBoYW5kbGUgU1NIX0FVVEhfUEFSVElBTCBjb3JyZWN0bHkhICovCiAgICAgaWYgKFNTSF9B
VVRIX1NVQ0NFU1MgIT0gcmMpCiAgICAgewotICAgICAgICB4MmdvRGVidWcgPDwgIlVuYWJsZSB0
byBhdXRoZW50aWNhdGUgd2l0aCBwdWJsaWMga2V5LiI7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
VW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHB1YmxpYyBrZXkuIiA8PCBlbmRsOwogCiAgICAg
ICAgIHNzaF9rZXlfZnJlZShwcml2X2tleSk7CiAgICAgICAgIHByaXZfa2V5ID0gTlVMTDsKQEAg
LTE2MTIsNyArMTYxMiw3IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1dGhLcmIo
KQogICAgIH0KICAgICBRU3RyaW5nIG91dHAgPSBzc2gucmVhZEFsbFN0YW5kYXJkT3V0cHV0KCk7
CiAgICAgUVN0cmluZyBlcnIgPSBzc2gucmVhZEFsbFN0YW5kYXJkRXJyb3IoKTsKLSAgICB4Mmdv
RGVidWcgPDwgIlNTSCBleGl0ZWQuIjsKKyAgICB4MmdvRGVidWcgPDwgIlNTSCBleGl0ZWQuIiA8
PCBlbmRsOwogICAgIHgyZ29EZWJ1ZyA8PCAic3Rkb3V0OiAiIDw8IG91dHAgPDwgZW5kbDsKICAg
ICB4MmdvRGVidWcgPDwgInN0ZGVycjogIiA8PCBlcnIgPDwgZW5kbDsKICAgICB4MmdvRGVidWcg
PDwgIkV4aXQgY29kZTogIiA8PCBzc2guZXhpdENvZGUoKSA8PCAiOyBzdGF0dXM6ICIgPDwgc3No
LmV4aXRTdGF0dXMoKSA8PCBlbmRsOwpAQCAtMTcwNSw3ICsxNzA1LDYgQEAgYm9vbCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpjaGVja0xvZ2luKCkKICAgICAgICAgY2hhciBidWZmZXJbMTAyNCAqIDUx
Ml07IC8vNTEySyBidWZmZXIKICAgICAgICAgYm9vbCBoYXNJbnRlcnJhY3Rpb24gPSB0cnVlOwog
ICAgICAgICBib29sIGludGVyYWN0aW9uU3RhcnRlZCA9IGZhbHNlOwotICAgICAgICAvLyAgICAg
ICAgIHgyZ29EZWJ1Zzw8IkNIRUNLIExPR0lOIGNoYW5uZWwgY3JlYXRlZC4iPDxlbmRsOwogICAg
ICAgICB3aGlsZSAoc3NoX2NoYW5uZWxfaXNfb3BlbihjaGFubmVsKSAmJgogICAgICAgICAgICAg
ICAgIXNzaF9jaGFubmVsX2lzX2VvZihjaGFubmVsKSkKICAgICAgICAgewpAQCAtMTcxOCwxMCAr
MTcxNywxMCBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoZWNrTG9naW4oKQogICAgICAg
ICAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgUVN0
cmluZyBpbmYgPSBRQnl0ZUFycmF5KGJ1ZmZlciwgbmJ5dGVzKTsKLSAgICAgICAgICAgICAgICB4
MmdvRGVidWcgPDwgIkxPR0lOIENIRUNLOiIgPDwgaW5mOworICAgICAgICAgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiTE9HSU4gQ0hFQ0s6IiA8PCBpbmYgPDwgZW5kbDsKICAgICAgICAgICAgICAgICBp
ZiAoaW5mLmluZGV4T2YoIkxPR0lOIE9LIikgIT0gLTEpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgImRvbid0IGhhdmUgaW50ZXJhY3Rpb24iOwor
ICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgImRvbid0IGhhdmUgaW50ZXJhY3Rpb24i
IDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVycmFjdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzQ0LDcg
KzE3NDMsNiBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoZWNrTG9naW4oKQogICAgICAg
ICAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LnVubG9jaygpOwogICAgICAgICAgICAgaWYgKHRl
eHRUb1NlbmQubGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IAkgICAgICAgIHgyZ29EZWJ1Zzw8IlNFTkQgSW5wdXQgdG8gU0VSVkVSIjsKICAgICAgICAgICAg
ICAgICBzc2hfY2hhbm5lbF93cml0ZShjaGFubmVsLCB0ZXh0VG9TZW5kLnRvTG9jYWw4Qml0KCku
Y29uc3REYXRhKCksIHRleHRUb1NlbmQubGVuZ3RoKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGludGVycnVwdCkKQEAgLTE3NTQsMTcgKzE3NTIsMTcgQEAgYm9vbCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpjaGVja0xvZ2luKCkKICAgICAgICAgICAgIHRoaXMtPnVzbGVlcCgzMCk7
CiAgICAgICAgIH0KIAotICAgICAgICB4MmdvRGVidWcgPDwgIkxPT1AgRklOSVNIRUQiOworICAg
ICAgICB4MmdvRGVidWcgPDwgIkxPT1AgRklOSVNIRUQiIDw8IGVuZGw7CiAgICAgICAgIGJvb2wg
cmV0VmFsID0gZmFsc2U7CiAgICAgICAgIGlmICghaGFzSW50ZXJyYWN0aW9uKQogICAgICAgICB7
Ci0gICAgICAgICAgICB4MmdvRGVidWcgPDwgIk5vIGludGVyYWN0aW9uIG5lZWRlZCwgY29udGlu
dWUgc2Vzc2lvbiI7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIk5vIGludGVyYWN0aW9uIG5l
ZWRlZCwgY29udGludWUgc2Vzc2lvbiIgPDwgZW5kbDsKICAgICAgICAgICAgIHJldFZhbCA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBzc2hQ
cm9jRXJyU3RyaW5nID0gdHIoIlJlY29ubmVjdCBzZXNzaW9uIik7Ci0gICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIlJlY29ubmVjdCBzZXNzaW9uIjsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
UmVjb25uZWN0IHNlc3Npb24iIDw8IGVuZGw7CiAgICAgICAgIH0KICAgICAgICAgc3NoX2NoYW5u
ZWxfY2xvc2UoY2hhbm5lbCk7CiAgICAgICAgIHNzaF9jaGFubmVsX3NlbmRfZW9mKGNoYW5uZWwp
OwpAQCAtMTgxNiwxMSArMTgxNCwxMSBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZENo
YW5uZWxDb25uZWN0aW9uKFNzaFByb2Nlc3MgKmNyZWF0b3IsIFFTdHJpbmcgdXVpZAogICAgIGNv
bi5jb21tYW5kID0gY21kOwogICAgIGNvbi51dWlkID0gdXVpZDsKIAotICAgIHgyZ29EZWJ1ZyA8
PCAiTG9ja2luZyBTU0ggY2hhbm5lbCBjb25uZWN0aW9uIE1VVEVYLiI7CisgICAgeDJnb0RlYnVn
IDw8ICJMb2NraW5nIFNTSCBjaGFubmVsIGNvbm5lY3Rpb24gTVVURVguIiA8PCBlbmRsOwogICAg
IGNoYW5uZWxDb25uZWN0aW9uc011dGV4LmxvY2soKTsKLSAgICB4MmdvRGVidWcgPDwgIlBhc3Np
bmcgbmV3IGNoYW5uZWwgY29ubmVjdGlvbiBvYmplY3QgdG8gY2hhbm5lbENvbm5lY3Rpb25zLiI7
CisgICAgeDJnb0RlYnVnIDw8ICJQYXNzaW5nIG5ldyBjaGFubmVsIGNvbm5lY3Rpb24gb2JqZWN0
IHRvIGNoYW5uZWxDb25uZWN0aW9ucy4iIDw8IGVuZGw7CiAgICAgY2hhbm5lbENvbm5lY3Rpb25z
IDw8IGNvbjsKLSAgICB4MmdvRGVidWcgPDwgIlVubG9ja2luZyBTU0ggY2hhbm5lbCBjb25uZWN0
aW9uIE1VVEVYLiI7CisgICAgeDJnb0RlYnVnIDw8ICJVbmxvY2tpbmcgU1NIIGNoYW5uZWwgY29u
bmVjdGlvbiBNVVRFWC4iIDw8IGVuZGw7CiAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgudW5s
b2NrKCk7CiB9CiAKQEAgLTE5NjIsNyArMTk2MCw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlv
bjo6Y2hhbm5lbExvb3AoKQogICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC5sb2NrKCk7
CiAgICAgICAgIGlmIChjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpIDw9IDApCiAgICAgICAgIHsK
LSAgICAgICAgICAgIC8vICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8Im5vIGNoYW5uZWwgY29ubmVj
dGlvbnMsIHdhaXRpbmdcbiI7CisgICAgICAgICAgICAvLyB4MmdvRGVidWc8PCJubyBjaGFubmVs
IGNvbm5lY3Rpb25zLCB3YWl0aW5nXG4iOwogICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25z
TXV0ZXgudW5sb2NrKCk7CiAgICAgICAgICAgICB1c2xlZXAoNTAwKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMjAwMSw3ICsxOTk5LDcgQEAgdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpj
aGFubmVsTG9vcCgpCiAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRm9yd2FyZGlu
ZyBwYXJhbWV0ZXJzOiBmcm9tIHJlbW90ZSAoIiA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSku
Zm9yd2FyZEhvc3QgPDwgIjoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjaGFu
bmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQgPDwgIikgdG8gbG9jYWwgKCIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5sb2Nh
bEhvc3QgPDwgIjoiIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5sb2NhbFBvcnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIpIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8ICIpIiA8PCBlbmRsOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAg
ICAgICAgICAgICAgICAqIENhbm5vdCBzdXBwb3J0IGNvbmZpZyBmaWxlIHBhcnNpbmcgaGVyZSB3
aXRoIHByZS0wLjYuMCBsaWJzc2ggdmVyc2lvbnMuCkBAIC0yMDEzLDcgKzIwMTEsNyBAQCB2b2lk
IFNzaE1hc3RlckNvbm5lY3Rpb246OmNoYW5uZWxMb29wKCkKICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0bXBfc2Vzc2lvbikKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBlcnJvcl9tc2cgPSB0cigiQ2Fubm90IGNyZWF0ZSBTU0ggc2Vzc2lv
bi4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2c7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JfbXNnIDw8IGVuZGw7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5j
cmVhdG9yLCBlcnJvcl9tc2csICIiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBlbHNlCkBAIC0yMDMxLDE2ICsyMDI5LDE2IEBAIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6Y2hhbm5lbExvb3AoKQogICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGhv
c3QgYW5kIHBvcnQgbWlnaHQgYmUgYSBzaG9ydGhhbmQgYW5kIHplcm8sIHNvIGZldGNoIHRoZSBh
Y3R1YWwgZGF0YS4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2hfb3B0aW9uc19w
YXJzZV9jb25maWcodG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIldhcm5pbmc6
IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8gcGFyc2UgdGhlIFNT
SCBjb25maWcgZmlsZS4iIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZlcnJlZF9wb3J0ID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX2dldF9wb3J0KHRtcF9zZXNzaW9uLCAm
aW5mZXJyZWRfcG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlRl
bXBvcmFyeSBzZXNzaW9uIHBvcnQgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgaW5mZXJy
ZWRfcG9ydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5
IHNlc3Npb24gcG9ydCBhZnRlciBjb25maWcgZmlsZSBwYXJzZTogIiA8PCBpbmZlcnJlZF9wb3J0
IDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmluZmVycmVkX2hvc3Qg
PSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0KHRtcF9zZXNz
aW9uLCBTU0hfT1BUSU9OU19IT1NULCAmaW5mZXJyZWRfaG9zdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB4MmdvRGVidWcgPDwgIlRlbXBvcmFyeSBzZXNzaW9uIGhvc3QgYWZ0ZXIgY29uZmln
IGZpbGUgcGFyc2U6ICIgPDwgaW5mZXJyZWRfaG9zdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24gaG9zdCBhZnRlciBjb25maWcgZmlsZSBw
YXJzZTogIiA8PCBpbmZlcnJlZF9ob3N0IDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYW5uZWxDb25uZWN0aW9uc1tpXS5mb3J3YXJkSG9zdCA9IFFTdHJpbmcoaW5mZXJyZWRf
aG9zdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNbaV0uZm9y
d2FyZFBvcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZmVycmVkX3BvcnQpOwpAQCAtMjEwNSwxMiAr
MjEwMywxMCBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoYW5uZWxMb29wKCkKIAogICAg
ICAgICBpZiAocmV0dmFsID09IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWcg
PDwgInNlbGVjdCgpIGVycm9yLiI7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgInNlbGVjdCgp
IGVycm9yLiIgPDwgZW5kbDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgLy8gICAgICAgICB4MmdvRGVidWc8PCJzZWxlY3QgZXhpdGVkIjw8ZW5kbDsKLQogICAg
ICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC5sb2NrKCk7CiAgICAgICAgIGZvciAoaW50IGkg
PSBjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgIHsK
QEAgLTIxMjgsNyArMjEyNCw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y2hhbm5lbExv
b3AoKQogICAgICAgICAgICAgaW50IHJleiA9IHNzaF9jaGFubmVsX3BvbGwoY2hhbm5lbCwgMCk7
CiAgICAgICAgICAgICBpZiAocmV6ID09IFNTSF9FT0YpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygb24gY2hhbm5lbCAiIDw8IGNoYW5uZWwgPDwgIjsg
U3NoUHJvY2VzcyBvYmplY3Q6ICIgPDwgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3ItPnBp
ZDsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkVPRiBvbiBjaGFubmVsICIgPDwgY2hh
bm5lbCA8PCAiOyBTc2hQcm9jZXNzIG9iamVjdDogIiA8PCBjaGFubmVsQ29ubmVjdGlvbnNbaV0u
Y3JlYXRvci0+cGlkIDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICAvLy8vLy9GaW5pc2hlZC8v
Ly8vLy8vCiAgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CkBAIC0yMTcyLDcgKzIxNjgsNyBA
QCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoYW5uZWxMb29wKCkKIAogICAgICAgICAgICAg
ICAgIGlmIChzc2hfY2hhbm5lbF9pc19lb2YoY2hhbm5lbCkpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkVPRiBvbiBjaGFubmVsICIgPDwgY2hh
bm5lbCA8PCAiOyBTc2hQcm9jZXNzIG9iamVjdDogIiA8PCBjaGFubmVsQ29ubmVjdGlvbnNbaV0u
Y3JlYXRvci0+cGlkOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkVPRiBvbiBj
aGFubmVsICIgPDwgY2hhbm5lbCA8PCAiOyBTc2hQcm9jZXNzIG9iamVjdDogIiA8PCBjaGFubmVs
Q29ubmVjdGlvbnNbaV0uY3JlYXRvci0+cGlkIDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICAg
ICAgLy8vLy8vRmluaXNoZWQvLy8vLy8vLwogICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZShp
KTsKQEAgLTIyMjksOSArMjIyNSw5IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6ZmluYWxp
emUoaW50IGl0ZW0pCiAgICAgaWYgKGNoYW5uZWwpCiAgICAgewogICAgICAgICBzc2hfY2hhbm5l
bF9zZW5kX2VvZihjaGFubmVsKTsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygc2VudC4iOwor
ICAgICAgICB4MmdvRGVidWcgPDwgIkVPRiBzZW50LiIgPDwgZW5kbDsKICAgICAgICAgc3NoX2No
YW5uZWxfY2xvc2UoY2hhbm5lbCk7Ci0gICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ2hhbm5lbCBjbG9z
ZWQuIjsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJDaGFubmVsIGNsb3NlZC4iIDw8IGVuZGw7CiAg
ICAgICAgIHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CiAgICAgfQogICAgIGlmICh0Y3BTb2Nr
ZXQgPiAwKQotLSAKMi4xNy4xCgo=


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0003-send-eof-before-close.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0003-send-eof-before-close.patch

RnJvbSA5YmZjMTcyOGJhYTQ0NGEwODhkNTY3ZmE0ODRmZGNmZmNlNjI5ZGIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0MDo0NCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDMvMTFdIHNlbmQgZW9mIGJlZm9yZSBjbG9zZQoKLS0tCiBzcmMvc3NobWFzdGVyY29ubmVjdGlv
bi5jcHAgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24o
LSkKCmRpZmYgLS1naXQgYS9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAgYi9zcmMvc3NobWFz
dGVyY29ubmVjdGlvbi5jcHAKaW5kZXggZjU5OGU5Yy4uZDhmODk0ZCAxMDA2NDQKLS0tIGEvc3Jj
L3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCisrKyBiL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNw
cApAQCAtMTc2NCw4ICsxNzY0LDggQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGVja0xv
Z2luKCkKICAgICAgICAgICAgIHNzaFByb2NFcnJTdHJpbmcgPSB0cigiUmVjb25uZWN0IHNlc3Np
b24iKTsKICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiUmVjb25uZWN0IHNlc3Npb24iIDw8IGVu
ZGw7CiAgICAgICAgIH0KLSAgICAgICAgc3NoX2NoYW5uZWxfY2xvc2UoY2hhbm5lbCk7CiAgICAg
ICAgIHNzaF9jaGFubmVsX3NlbmRfZW9mKGNoYW5uZWwpOworICAgICAgICBzc2hfY2hhbm5lbF9j
bG9zZShjaGFubmVsKTsKICAgICAgICAgc3NoX2NoYW5uZWxfZnJlZShjaGFubmVsKTsKICAgICAg
ICAgcmV0dXJuIHJldFZhbDsKICAgICB9Ci0tIAoyLjE3LjEKCg==


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0004-return-false-in-all-bad-cases.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0004-return-false-in-all-bad-cases.patch

RnJvbSA4NjNjOGEyYzc5ZTliOTEyYTJmYzg3NTliYmNjZDEwNGYzOThmNTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0MjoxOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDQvMTFdIHJldHVybiBmYWxzZSBpbiBhbGwgYmFkIGNhc2VzCgotLS0KIHNyYy9zc2htYXN0ZXJj
b25uZWN0aW9uLmNwcCB8IDEgKwogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCgpkaWZm
IC0tZ2l0IGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwIGIvc3JjL3NzaG1hc3RlcmNvbm5l
Y3Rpb24uY3BwCmluZGV4IGQ4Zjg5NGQuLmFhNzVlYzEgMTAwNjQ0Ci0tLSBhL3NyYy9zc2htYXN0
ZXJjb25uZWN0aW9uLmNwcAorKysgYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKQEAgLTE2
OTksNiArMTY5OSw3IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y2hlY2tMb2dpbigpCiAg
ICAgICAgIFFTdHJpbmcgZXJyb3JNc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3NoX2NoYW5u
ZWxfcmVxdWVzdF9leGVjIik7CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVy
cm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAgIHNzaF9j
aGFubmVsX2ZyZWUoY2hhbm5lbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKLS0gCjIuMTcuMQoK


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0006-Remove-deprecated-call-and-use-new-libssh-API-call.-.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0006-Remove-deprecated-call-and-use-new-libssh-API-call.-.patch

RnJvbSA3OGYyMzA0MmQ2MjAzYzg4ZWRmOGYzYmVmZGUxNWY0ZGM2NDI5ZmM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo1OToxNSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDYvMTFdIFJlbW92ZSBkZXByZWNhdGVkIGNhbGwgYW5kIHVzZSBuZXcgbGlic3NoIEFQSSBjYWxs
LgogUGx1cyBzb21lIG1pbm9yIGZvcm1hdHRpbmcuCgotLS0KIHNyYy9zc2htYXN0ZXJjb25uZWN0
aW9uLmNwcCB8IDcgKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAgYi9z
cmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKaW5kZXggYzA2OGM4OS4uMDIyZjcxMCAxMDA2NDQK
LS0tIGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCisrKyBiL3NyYy9zc2htYXN0ZXJjb25u
ZWN0aW9uLmNwcApAQCAtNTcxLDcgKzU3MSw2IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6
cnVuKCkKICNlbmRpZgogCiAgICAgc3NoX29wdGlvbnNfc2V0KG15X3NzaF9zZXNzaW9uLCBTU0hf
T1BUSU9OU19MT0dfVkVSQk9TSVRZLCAmdmVyYm9zaXR5KTsKLQogICAgIHNzaF9vcHRpb25zX3Nl
dChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfVElNRU9VVCwgJnRpbWVvdXQpOwogCiAgICAg
aWYgKHVzZXByb3h5ICYmIHByb3h5dHlwZSA9PSBQUk9YWUhUVFApCkBAIC05MTIsNyArOTExLDEx
IEBAIGludCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzZXJ2ZXJBdXRoKFFTdHJpbmcgJmVycm9yTXNn
KQogI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgOCwgMCkKICAg
ICByYyA9IHNzaF9nZXRfc2VydmVyX3B1YmxpY2tleShteV9zc2hfc2Vzc2lvbiwgJnNydl9wdWJr
ZXkpOwogI2Vsc2UgIC8qIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAs
IDgsIDApICovCi0gICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleShteV9zc2hfc2Vzc2lvbiwgJnNy
dl9wdWJrZXkpOworICAgIHJjID0gc3NoX2dldF9zZXJ2ZXJfcHVibGlja2V5KG15X3NzaF9zZXNz
aW9uLCAmc3J2X3B1YmtleSk7CisgICAgaWYgKFNTSF9PSyAhPSByYykKKyAgICB7CisgICAgICAg
IHJldHVybiAoU1NIX1NFUlZFUl9FUlJPUik7CisgICAgfQogI2VuZGlmIC8qIExJQlNTSF9WRVJT
SU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDgsIDApICovCiAKICAgICBpZiAoU1NIX09L
ICE9IHJjKQotLSAKMi4xNy4xCgo=


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0005-Refactor-and-fix-channel-session-closes.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0005-Refactor-and-fix-channel-session-closes.patch

RnJvbSBiZmJiMmYzZDIyYjY4N2RmNGQ3ZTA3M2I0MmQzY2UxNDA5ZjQ5NTc0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo1NzoxOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDUvMTFdIFJlZmFjdG9yIGFuZCBmaXggY2hhbm5lbC9zZXNzaW9uIGNsb3NlcwoKLS0tCiBzcmMv
c3NobWFzdGVyY29ubmVjdGlvbi5jcHAgfCAyNzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0t
LS0tLS0tLS0tCiBzcmMvc3NobWFzdGVyY29ubmVjdGlvbi5oICAgfCAgMTMgKy0KIDIgZmlsZXMg
Y2hhbmdlZCwgMTU2IGluc2VydGlvbnMoKyksIDEyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAgYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5j
cHAKaW5kZXggYWE3NWVjMS4uYzA2OGM4OSAxMDA2NDQKLS0tIGEvc3JjL3NzaG1hc3RlcmNvbm5l
Y3Rpb24uY3BwCisrKyBiL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcApAQCAtNTQ0LDYgKzU0
NCw3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6cnVuKCkKICNlbmRpZgogICAgIH0KIAor
ICAgIC8vIFNldCB0aW1lLW91dCB0byAxIG1pbi4KICAgICBsb25nIHRpbWVvdXQgPSA2MDsKIAog
ICAgIG15X3NzaF9zZXNzaW9uID0gc3NoX25ldygpOwpAQCAtNjk0LDcgKzY5NSw3IEBAIHZvaWQg
U3NoTWFzdGVyQ29ubmVjdGlvbjo6cnVuKCkKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkxvZ2luIENoZWNrIC0gRmFpbGVkIiA8
PCBlbmRsOwotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIGlmKCFpbnRlcmFjdGlvbkludGVy
cnVwdCkKKyAgICAgICAgICAgICAgICAvLyBpZighaW50ZXJhY3Rpb25JbnRlcnJ1cHQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBlbWl0IGZpbmlzaEludGVyYWN0aW9u
KHRoaXMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTc4Nyw3ICs3ODgsNyBAQCBib29sIFNzaE1h
c3RlckNvbm5lY3Rpb246OnNzaENvbm5lY3QoKQogICAgIC8qIFBhcnNlIH4vLnNzaC9jb25maWcu
ICovCiAgICAgaWYgKHNzaF9vcHRpb25zX3BhcnNlX2NvbmZpZyhteV9zc2hfc2Vzc2lvbiwgTlVM
TCkgPCAwKQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8g
cGFyc2UgdGhlIFNTSCBjb25maWcgZmlsZS4iOworICAgICAgICB4MmdvRGVidWcgPDwgIldhcm5p
bmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiIgPDwgZW5kbDsKICAgICB9
CiAKICNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCkBA
IC04NDksNiArODUwLDcgQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzc2hDb25uZWN0KCkK
IAogICAgICAgICAgICAgICAgIHdvcmtfcG9ydCA9IGluZmVycmVkX3BvcnQgJiAweEZGRkY7CiAK
KyAgICAgICAgICAgICAgICBzc2hfZGlzY29ubmVjdCh0bXBfc2Vzc2lvbik7CiAgICAgICAgICAg
ICAgICAgc3NoX2ZyZWUodG1wX3Nlc3Npb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xOTc0LDEyOSArMTk3NiwxNiBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoYW5uZWxM
b29wKCkKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYW5uZWxDb25uZWN0aW9ucy5z
aXplKCk7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHRjcFNvY2tldCA9IGNoYW5u
ZWxDb25uZWN0aW9ucy5hdChpKS5zb2NrOwotICAgICAgICAgICAgaWYgKHRjcFNvY2tldCA+IDAp
Ci0gICAgICAgICAgICAgICAgRkRfU0VUKHRjcFNvY2tldCwgJnJmZHMpOwotICAgICAgICAgICAg
aWYgKGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5jaGFubmVsID09IDBsKQorICAgICAgICAgICAg
Ly8gVHJ5IHRvIG1ha2UgYSBjaGFubmVsIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIC8vIFRPRE86
IE1hYnllIGEgcmV0cnk/CisgICAgICAgICAgICBib29sIHJlcyA9IGNyZWF0ZUNoYW5uZWxDb25u
ZWN0aW9uKGksIG1heHNvY2ssIHJmZHMsIHJlYWRfY2hhbik7CisgICAgICAgICAgICBpZiAoIXJl
cykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkNyZWF0aW5n
IG5ldyBjaGFubmVsLiIgPDwgZW5kbDsKLSAgICAgICAgICAgICAgICBzc2hfY2hhbm5lbCBjaGFu
bmVsID0gc3NoX2NoYW5uZWxfbmV3KG15X3NzaF9zZXNzaW9uKTsKLQotICAgICAgICAgICAgICAg
IGlmICghY2hhbm5lbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7Ci0gICAgICAgICAgICAg
ICAgICAgIC8qOiBBcmd1bWVudCBpbiB0aGlzIGNvbnRleHQgd2lsbCBiZSBhIGZ1bmN0aW9uIG5h
bWUuICovCi0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIiUxIGZh
aWxlZC4iKS5hcmcoInNzaF9jaGFubmVsX25ldyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0
IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvcl9tc2csIGVycik7Ci0K
LSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZy5sZWZ0KGVycm9yX21z
Zy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOwotCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4MmdvRGVi
dWcgPDwgIk5ldyBjaGFubmVsOiIgPDwgY2hhbm5lbCA8PCBlbmRsOwotICAgICAgICAgICAgICAg
IGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jaGFubmVsID0gY2hhbm5lbDsKLSAgICAgICAgICAgICAg
ICBpZiAodGNwU29ja2V0ID4gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHgyZ29EZWJ1ZyA8PCAiRm9yd2FyZGluZyBwYXJhbWV0ZXJzOiBmcm9tIHJlbW90ZSAoIiA8
PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZEhvc3QgPDwgIjoiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZFBv
cnQgPDwgIikgdG8gbG9jYWwgKCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNo
YW5uZWxDb25uZWN0aW9ucy5hdChpKS5sb2NhbEhvc3QgPDwgIjoiIDw8IGNoYW5uZWxDb25uZWN0
aW9ucy5hdChpKS5sb2NhbFBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIp
IiA8PCBlbmRsOwotCi0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAg
ICAqIENhbm5vdCBzdXBwb3J0IGNvbmZpZyBmaWxlIHBhcnNpbmcgaGVyZSB3aXRoIHByZS0wLjYu
MCBsaWJzc2ggdmVyc2lvbnMuCi0gICAgICAgICAgICAgICAgICAgICAqIFRoZXJlJ3MganVzdCBu
byB3YXkgdG8gZ2V0IHRoZSBpbmZlcnJlZCBob3N0IGFuZCBwb3J0IHZhbHVlcy4KLSAgICAgICAg
ICAgICAgICAgICAgICovCi0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lO
VCgwLCA2LCAwKQotICAgICAgICAgICAgICAgICAgICBzc2hfc2Vzc2lvbiB0bXBfc2Vzc2lvbiA9
IHNzaF9uZXcoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXRtcF9zZXNzaW9uKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycm9y
X21zZyA9IHRyKCJDYW5ub3QgY3JlYXRlIFNTSCBzZXNzaW9uLiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZyA8PCBlbmRsOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3Jf
bXNnLCAiIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRQnl0ZUFy
cmF5IHRtcF9CQSA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5mb3J3YXJkSG9zdC50b0xvY2Fs
OEJpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHRtcF9wb3J0ID0gY2hh
bm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRQb3J0OwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzc2hfb3B0aW9uc19zZXQodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIHRtcF9C
QS5kYXRhKCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3BvcnQpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoX29w
dGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19QT1JULCAmdG1wX3BvcnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUg
aG9zdCBhbmQgcG9ydCBtaWdodCBiZSBhIHNob3J0aGFuZCBhbmQgemVybywgc28gZmV0Y2ggdGhl
IGFjdHVhbCBkYXRhLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNzaF9vcHRpb25z
X3BhcnNlX2NvbmZpZyh0bXBfc2Vzc2lvbiwgTlVMTCkgPCAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2Fybmlu
ZzogdW5hYmxlIHRvIHBhcnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIiA8PCBlbmRsOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaW5mZXJyZWRfcG9ydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzc2hfb3B0aW9u
c19nZXRfcG9ydCh0bXBfc2Vzc2lvbiwgJmluZmVycmVkX3BvcnQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgeDJnb0RlYnVnIDw8ICJUZW1wb3Jhcnkgc2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZp
ZyBmaWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX3BvcnQgPDwgZW5kbDsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqaW5mZXJyZWRfaG9zdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzc2hfb3B0aW9uc19nZXQodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsICZp
bmZlcnJlZF9ob3N0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVt
cG9yYXJ5IHNlc3Npb24gaG9zdCBhZnRlciBjb25maWcgZmlsZSBwYXJzZTogIiA8PCBpbmZlcnJl
ZF9ob3N0IDw8IGVuZGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0
aW9uc1tpXS5mb3J3YXJkSG9zdCA9IFFTdHJpbmcoaW5mZXJyZWRfaG9zdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNbaV0uZm9yd2FyZFBvcnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGluZmVycmVkX3BvcnQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzc2hf
c3RyaW5nX2ZyZWVfY2hhcihpbmZlcnJlZF9ob3N0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNzaF9mcmVlKHRtcF9zZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCi0K
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUUJ5dGVBcnJh
eSB0bXBfQkFfZm9yd2FyZCA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5mb3J3YXJkSG9zdC50
b0xvY2FsOEJpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUUJ5dGVBcnJheSB0bXBfQkFf
bG9jYWwgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxIb3N0LnRvTG9jYWw4Qml0KCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzc2hfY2hhbm5lbF9vcGVuX2ZvcndhcmQo
Y2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wX0JBX2ZvcndhcmQuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2Fy
ZFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcF9CQV9sb2NhbC5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5sb2NhbFBvcnQp
ICE9IFNTSF9PSykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JNc2cgPSB0cigiJTEgZmFp
bGVkLiIpLmFyZygic3NoX2NoYW5uZWxfb3Blbl9mb3J3YXJkIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJy
b3JNc2csIGVycik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVy
cm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
MmdvRGVidWcgPDwgIk5ldyBjaGFubmVsIGZvcndhcmRlZC4iIDw8IGVuZGw7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJFeGVjdXRpbmcgcmVtb3RlOiAiIDw8IGNoYW5uZWxDb25uZWN0
aW9ucy5hdChpKS5jb21tYW5kIDw8IGVuZGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzc2hf
Y2hhbm5lbF9vcGVuX3Nlc3Npb24oY2hhbm5lbCkgIT0gU1NIX09LKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJy
b3IobXlfc3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJv
ck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9vcGVuX3Nlc3Npb24iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIoY2hhbm5lbENvbm5lY3Rpb25zW2ld
LmNyZWF0b3IsIGVycm9yTXNnLCBlcnIpOwotICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0Rl
YnVnIDw8IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIg
PDwgZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChzc2hfY2hhbm5lbF9yZXF1ZXN0X2V4ZWMoY2hhbm5lbCwgY2hhbm5lbENvbm5lY3Rpb25z
W2ldLmNvbW1hbmQudG9MYXRpbjEoKSkgIT0gU1NIX09LKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlf
c3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvck1zZyA9
IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9yZXF1ZXN0X2V4ZWMiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIoY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0
b3IsIGVycm9yTXNnLCBlcnIpOwotICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8
IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5k
bDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
TmV3IGV4ZWMgY2hhbm5lbCBjcmVhdGVkLiIgPDwgZW5kbDsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkNvbm5l
Y3Rpb24gdG8gY2hhbm5lbCB3ZW50IHdyb25nLiI7CisgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWFkX2NoYW5baV0gPSBjaGFubmVsQ29ubmVj
dGlvbnMuYXQoaSkuY2hhbm5lbDsKLSAgICAgICAgICAgIGlmICh0Y3BTb2NrZXQgPiBtYXhzb2Nr
KQotICAgICAgICAgICAgICAgIG1heHNvY2sgPSB0Y3BTb2NrZXQ7CiAgICAgICAgIH0KKwogICAg
ICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2soKTsKICAgICAgICAgcmV0dmFsID0g
c3NoX3NlbGVjdChyZWFkX2NoYW4sIG91dF9jaGFuLCBtYXhzb2NrICsgMSwgJnJmZHMsICZ0dik7
CiAgICAgICAgIGRlbGV0ZVtdIHJlYWRfY2hhbjsKQEAgLTIyMTksNiArMjEwOCwxNDUgQEAgdm9p
ZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGFubmVsTG9vcCgpCiAgICAgfQogfQogCisvKioKKyAq
IENyZWF0ZSBTU0ggY2hhbm5lbCBjb25uZWN0aW9uICh1c2VkIHdpdGhpbiBhIGxvb3Agb2YgY2hh
bm5lbHMpCisgKi8KK2Jvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y3JlYXRlQ2hhbm5lbENvbm5l
Y3Rpb24oaW50IGksIGludCAmbWF4c29jaywgZmRfc2V0ICZyZmRzLCBzc2hfY2hhbm5lbCByZWFk
X2NoYW5bXSkKK3sKKyAgICBpbnQgdGNwU29ja2V0ID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkp
LnNvY2s7CisgICAgaWYgKHRjcFNvY2tldCA+IDApCisgICAgICAgIEZEX1NFVCh0Y3BTb2NrZXQs
ICZyZmRzKTsKKyAgICBpZiAoY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmNoYW5uZWwgPT0gMGwp
CisgICAgeworICAgICAgICB4MmdvRGVidWcgPDwgIkNyZWF0aW5nIG5ldyBjaGFubmVsLiIgPDwg
ZW5kbDsKKworICAgICAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gc3NoX2NoYW5uZWxfbmV3KG15
X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgaWYgKCFjaGFubmVsKQorICAgICAgICB7CisgICAgICAg
ICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAg
ICAgICAgLyo6IEFyZ3VtZW50IGluIHRoaXMgY29udGV4dCB3aWxsIGJlIGEgZnVuY3Rpb24gbmFt
ZS4gKi8KKyAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIiUxIGZhaWxlZC4iKS5h
cmcoInNzaF9jaGFubmVsX25ldyIpOworICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29u
bmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JfbXNnLCBlcnIpOworCisgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgZXJyb3JfbXNnLmxlZnQoZXJyb3JfbXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwg
ZXJyIDw8IGVuZGw7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgeDJnb0RlYnVnIDw8ICJOZXcgY2hhbm5lbDoiIDw8IGNoYW5uZWwgPDwgZW5kbDsKKyAgICAg
ICAgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICBpZiAo
dGNwU29ja2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3
YXJkaW5nIHBhcmFtZXRlcnM6IGZyb20gcmVtb3RlICgiIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5h
dChpKS5mb3J3YXJkSG9zdCA8PCAiOiIKKyAgICAgICAgICAgICAgICAgICAgICA8PCBjaGFubmVs
Q29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQgPDwgIikgdG8gbG9jYWwgKCIKKyAgICAgICAg
ICAgICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxIb3N0IDw8ICI6
IiA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxQb3J0CisgICAgICAgICAgICAgICAg
ICAgICAgPDwgIikiOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICogQ2Fubm90
IHN1cHBvcnQgY29uZmlnIGZpbGUgcGFyc2luZyBoZXJlIHdpdGggcHJlLTAuNi4wIGxpYnNzaCB2
ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICAqIFRoZXJlJ3MganVzdCBubyB3YXkgdG8gZ2V0IHRo
ZSBpbmZlcnJlZCBob3N0IGFuZCBwb3J0IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAqLworI2lm
IExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyAgICAgICAg
ICAgIHNzaF9zZXNzaW9uIHRtcF9zZXNzaW9uID0gc3NoX25ldygpOworCisgICAgICAgICAgICBp
ZiAoIXRtcF9zZXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJpbmcg
ZXJyb3JfbXNnID0gdHIoIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CisgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZyA8PCBlbmRsOworICAgICAgICAgICAgICAgIGVt
aXQgaW9FcnIoY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yX21zZywgIiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndh
cmRIb3N0LnRvTG9jYWw4Qml0KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHRtcF9wb3J0
ID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRQb3J0OworCisgICAgICAgICAgICAg
ICAgc3NoX29wdGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBfQkEu
ZGF0YSgpKTsKKworICAgICAgICAgICAgICAgIGlmICh0bXBfcG9ydCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCh0bXBfc2Vzc2lvbiwgU1NI
X09QVElPTlNfUE9SVCwgJnRtcF9wb3J0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvKiBUaGUgaG9zdCBhbmQgcG9ydCBtaWdodCBiZSBhIHNob3J0aGFuZCBhbmQgemVy
bywgc28gZmV0Y2ggdGhlIGFjdHVhbCBkYXRhLiAqLworICAgICAgICAgICAgICAgIGlmIChzc2hf
b3B0aW9uc19wYXJzZV9jb25maWcodG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzogdW5hYmxl
IHRvIHBhcnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZlcnJlZF9wb3J0ID0gMDsKKyAg
ICAgICAgICAgICAgICBzc2hfb3B0aW9uc19nZXRfcG9ydCh0bXBfc2Vzc2lvbiwgJmluZmVycmVk
X3BvcnQpOworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24g
cG9ydCBhZnRlciBjb25maWcgZmlsZSBwYXJzZTogIiA8PCBpbmZlcnJlZF9wb3J0IDw8IGVuZGw7
CisKKyAgICAgICAgICAgICAgICBjaGFyICppbmZlcnJlZF9ob3N0ID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICBzc2hfb3B0aW9uc19nZXQodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsICZp
bmZlcnJlZF9ob3N0KTsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlRlbXBvcmFyeSBz
ZXNzaW9uIGhvc3QgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgaW5mZXJyZWRfaG9zdCA8
PCBlbmRsOworCisgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmZvcndhcmRI
b3N0ID0gUVN0cmluZyhpbmZlcnJlZF9ob3N0KTsKKyAgICAgICAgICAgICAgICBjaGFubmVsQ29u
bmVjdGlvbnNbaV0uZm9yd2FyZFBvcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZmVycmVkX3BvcnQp
OworCisgICAgICAgICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaW5mZXJyZWRfaG9zdCk7
CisgICAgICAgICAgICAgICAgc3NoX2ZyZWUodG1wX3Nlc3Npb24pOworICAgICAgICAgICAgfQor
I2VuZGlmCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBRQnl0ZUFycmF5IHRtcF9C
QV9mb3J3YXJkID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRIb3N0LnRvTG9jYWw4
Qml0KCk7CisgICAgICAgICAgICAgICAgUUJ5dGVBcnJheSB0bXBfQkFfbG9jYWwgPSBjaGFubmVs
Q29ubmVjdGlvbnMuYXQoaSkubG9jYWxIb3N0LnRvTG9jYWw4Qml0KCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoc3NoX2NoYW5uZWxfb3Blbl9mb3J3YXJkKGNoYW5uZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQkFfZm9yd2FyZC5kYXRhKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVj
dGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0bXBfQkFfbG9jYWwuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmxvY2FsUG9y
dCkgIT0gU1NIX09LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5l
bF9vcGVuX2ZvcndhcmQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVs
Q29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVycik7CisgICAgICAgICAgICAgICAg
ICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6
ICIgPDwgZXJyIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
TmV3IGNoYW5uZWwgZm9yd2FyZGVkLiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICB4MmdvRGVidWcgPDwgIkV4ZWN1dGluZyByZW1vdGU6ICIgPDwgY2hhbm5lbENvbm5lY3Rpb25z
LmF0KGkpLmNvbW1hbmQgPDwgZW5kbDsKKyAgICAgICAgICAgIGlmIChzc2hfY2hhbm5lbF9vcGVu
X3Nlc3Npb24oY2hhbm5lbCkgIT0gU1NIX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAg
ICAgICAgICAgUVN0cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hh
bm5lbF9vcGVuX3Nlc3Npb24iKTsKKworICAgICAgICAgICAgICAgIC8vIEZyZWUgY2hhbm5lbAor
ICAgICAgICAgICAgICAgIHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CisgICAgICAgICAgICAg
ICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVy
cik7CisgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cu
c2l6ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzc2hfY2hhbm5l
bF9yZXF1ZXN0X2V4ZWMoY2hhbm5lbCwgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNvbW1hbmQudG9M
YXRpbjEoKSkgIT0gU1NIX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJp
bmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAgICAg
UVN0cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9yZXF1
ZXN0X2V4ZWMiKTsKKworICAgICAgICAgICAgICAgIC8vIEZyZWUgY2xvc2UgY29ubmVjdGlvbiBh
bmQgZnJlZSBjaGFubmVsCisgICAgICAgICAgICAgICAgc3NoX2NoYW5uZWxfY2xvc2UoY2hhbm5l
bCk7CisgICAgICAgICAgICAgICAgc3NoX2NoYW5uZWxfZnJlZShjaGFubmVsKTsKKyAgICAgICAg
ICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1z
ZywgZXJyKTsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JNc2cubGVmdChlcnJv
ck1zZy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIE9LCisgICAgICAgICAgICAg
ICAgeDJnb0RlYnVnIDw8ICJOZXcgZXhlYyBjaGFubmVsIGNyZWF0ZWQuIiA8PCBlbmRsOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJlYWRfY2hhbltpXSA9IGNoYW5uZWxD
b25uZWN0aW9ucy5hdChpKS5jaGFubmVsOworICAgIGlmICh0Y3BTb2NrZXQgPiBtYXhzb2NrKQor
ICAgICAgICBtYXhzb2NrID0gdGNwU29ja2V0OworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lk
IFNzaE1hc3RlckNvbm5lY3Rpb246OmZpbmFsaXplKGludCBpdGVtKQogewogICAgIGludCB0Y3BT
b2NrZXQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaXRlbSkuc29jazsKZGlmZiAtLWdpdCBhL3Ny
Yy9zc2htYXN0ZXJjb25uZWN0aW9uLmggYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5oCmluZGV4
IGM3ODgzYmUuLmVmZmFlMTYgMTAwNjQ0Ci0tLSBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmgK
KysrIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uaApAQCAtMjcsMTMgKzI3LDExIEBACiAjaW5j
bHVkZSA8UVRjcFNvY2tldD4KICNpbmNsdWRlIDxRTmV0d29ya1Byb3h5PgogCi0jZGVmaW5lIFBS
T1BFUlRZKFRZUEUsIE5BTUUpICAgICAgICAgICBcCi1wcml2YXRlOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgVFlQRSBOQU1FOyAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1wdWJsaWM6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVFlQRSBnZXRfIyNOQU1FKCkgeyByZXR1
cm4gTkFNRTsgfSBcCi0gICAgdm9pZCBzZXRfIyNOQU1FKFRZUEUgVkFMKSB7IE5BTUUgPSBWQUw7
IH0KKworI2RlZmluZSBQUk9QRVJUWShUWVBFLE5BTUUpICBwcml2YXRlOiBUWVBFIE5BTUU7IFwK
K3B1YmxpYzogVFlQRSBnZXRfIyNOQU1FKCl7cmV0dXJuIE5BTUU7fSBcCit2b2lkIHNldF8jI05B
TUUoVFlQRSBWQUwpe05BTUU9VkFMO30KKwogCiBjbGFzcyBPTk1haW5XaW5kb3c7CiBjbGFzcyBT
c2hQcm9jZXNzOwpAQCAtMTQxLDYgKzEzOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB1c2VyQXV0
aEtyYigpOwogICAgIGJvb2wgdXNlckF1dGhLZXlib2FyZEludGVyYWN0aXZlKFFTdHJpbmcgcHJv
bXB0KTsKICAgICB2b2lkIGNoYW5uZWxMb29wKCk7CisgICAgYm9vbCBjcmVhdGVDaGFubmVsQ29u
bmVjdGlvbihpbnQgaSwgaW50JiBtYXhzb2NrLCBmZF9zZXQmIHJmZHMsIHNzaF9jaGFubmVsIHJl
YWRfY2hhbltdKTsKICAgICB2b2lkIGZpbmFsaXplKGludCBhcmcxKTsKICAgICB2b2lkIGNvcHko
KTsKICAgICBpbnQgc2VydmVyQXV0aChRU3RyaW5nICZlcnJvck1zZyk7Ci0tIAoyLjE3LjEKCg==


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0007-Fix-when-not-password-auth.-Otherwise-you-get-double.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0007-Fix-when-not-password-auth.-Otherwise-you-get-double.patch

RnJvbSBmZjU2Y2M3ZGFkMWY5OWUyMGRjOWZmYWQ4NjQxYmQzY2IwMzIzNmZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMzowMDoxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDcvMTFdIEZpeCAnd2hlbiBub3QnIHBhc3N3b3JkIGF1dGguIE90aGVyd2lzZSB5b3UgZ2V0IGRv
dWJsZQogZXJyb3IgbWVzc2FnZXMuIHJldHVybiByZXQgaXNvIHJldHVybiAocmV0KQoKLS0tCiBz
cmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAgfCA0ICsrLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGlu
c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3NzaG1hc3RlcmNv
bm5lY3Rpb24uY3BwIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCmluZGV4IDAyMmY3MTAu
LjcxOTI1NzQgMTAwNjQ0Ci0tLSBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcAorKysgYi9z
cmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKQEAgLTEyNjMsNyArMTI2Myw3IEBAIGJvb2wgU3No
TWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1dGhXaXRoUGFzcygpCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoKCFyZXQpICYmIChtZXRob2QgJiB+U1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSkK
KyAgICBpZiAoKCFyZXQpICYmICEobWV0aG9kICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSkK
ICAgICB7CiAgICAgICAgIC8qIEluIGNhc2UgcGFzc3dvcmQgYXV0aCBpcyBkaXNhYmxlZCwgbWFr
ZSBzdXJlIHRoZSBlcnJvciBtZXNzYWdlIGlzIG5vdCBlbXB0eS4gKi8KICAgICAgICAgUVN0cmlu
ZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKQEAgLTEyNzEsNyArMTI3MSw3
IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1dGhXaXRoUGFzcygpCiAgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiUGFzc3dvcmQgYXV0aGVudGljYXRpb24gbm90IGF2YWlsYWJsZTogIiA8
PCBlcnIgPDwgZW5kbDsKICAgICB9CiAKLSAgICByZXR1cm4gKHJldCk7CisgICAgcmV0dXJuIHJl
dDsKIH0KIAogYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEF1dG8oKQotLSAKMi4x
Ny4xCgo=


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0010-Mark-as-unused-explicitly.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0010-Mark-as-unused-explicitly.patch

RnJvbSA1ZTc1NzcwOWFjMDNjMzk3ZDZhMGNiNDYyZDJlYWNhZWIwZjBkNzM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMzoxMzoyNyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MTAvMTFdIE1hcmsgYXMgdW51c2VkIGV4cGxpY2l0bHkKCi0tLQogc3JjL3NzaG1hc3RlcmNvbm5l
Y3Rpb24uY3BwIHwgNiArKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwIGIv
c3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCmluZGV4IDYzYmY1MDcuLjQwMWQ3NzggMTAwNjQ0
Ci0tLSBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcAorKysgYi9zcmMvc3NobWFzdGVyY29u
bmVjdGlvbi5jcHAKQEAgLTQyMywxOCArNDIzLDE4IEBAIGludCBTc2hNYXN0ZXJDb25uZWN0aW9u
OjpzdGFydFR1bm5lbChjb25zdCBRU3RyaW5nICZmb3J3YXJkSG9zdCwgdWludCBmb3J3YXJkUG9y
CiAgICAgcmV0dXJuIHByb2MtPnBpZDsKIH0KIAotdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpz
bG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uICpjb25uZWN0
aW9uKQordm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlJbnRlcmFjdGlvbkZp
bmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uICpjb25uZWN0aW9uIC8qIHVudXNlZCAqLykKIHsKICAg
ICB4MmdvRGVidWcgPDwgIlNTSCBwcm94eSBpbnRlcmFjdGlvbiBmaW5pc2hlZCIgPDwgZW5kbDsK
ICAgICBzbG90U3NoUHJveHlVc2VyQXV0aEVycm9yKCJOT19FUlJPUiIpOwogfQogCi12b2lkIFNz
aE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uU3RhcnQoU3NoTWFzdGVy
Q29ubmVjdGlvbiAqY29ubmVjdGlvbiwgUVN0cmluZyBwcm9tcHQpCit2b2lkIFNzaE1hc3RlckNv
bm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uU3RhcnQoU3NoTWFzdGVyQ29ubmVjdGlv
biAqY29ubmVjdGlvbiAvKiB1bnVzZWQgKi8sIFFTdHJpbmcgcHJvbXB0KQogewogICAgIGVtaXQg
c3RhcnRJbnRlcmFjdGlvbih0aGlzLCBwcm9tcHQpOwogfQogCi12b2lkIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uVXBkYXRlKFNzaE1hc3RlckNvbm5lY3Rpb24g
KmNvbm5lY3Rpb24sIFFTdHJpbmcgb3V0cHV0KQordm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpz
bG90U3NoUHJveHlJbnRlcmFjdGlvblVwZGF0ZShTc2hNYXN0ZXJDb25uZWN0aW9uICpjb25uZWN0
aW9uIC8qIHVudXNlZCAqLywgUVN0cmluZyBvdXRwdXQpCiB7CiAgICAgZW1pdCB1cGRhdGVJbnRl
cmFjdGlvbih0aGlzLCBvdXRwdXQpOwogfQotLSAKMi4xNy4xCgo=


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0011-improve-gitignore-why-not.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0011-improve-gitignore-why-not.patch

RnJvbSBlM2M3NDc5YWFhYWNiZGZlMGY4MmQ3OTQ1ODMzOTZkZGUyZjdhYmQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMzoxNDoyMCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MTEvMTFdIGltcHJvdmUgZ2l0aWdub3JlLCB3aHkgbm90CgotLS0KIC5naXRpZ25vcmUgfCA0ICsr
LS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggZWFmZWU2YS4uMzZjODU1OCAx
MDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0yOSw1ICsyOSw1IEBA
IHgyZ29jbGllbnQuZG1nCiAKIHgyZ29jbGllbnQucHJvLnVzZXIKIAotIyBUaGlzIGZpbGUuCi0u
Z2l0aWdub3JlCisjIEVkaXRvcnMKKy52c2NvZGUvCi0tIAoyLjE3LjEKCg==


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0008-Correct-retval-check.-Plus-some-minor-formatting.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0008-Correct-retval-check.-Plus-some-minor-formatting.patch

RnJvbSBmZWY0MzE1NzY4NTNlYzEzNTlkY2VmODc5NTA3YjhlOTlkNmU3MWMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMzowMTowNSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDgvMTFdIENvcnJlY3QgcmV0dmFsIGNoZWNrLiBQbHVzIHNvbWUgbWlub3IgZm9ybWF0dGluZy4K
Ci0tLQogc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwIHwgMyArLS0KIDEgZmlsZSBjaGFuZ2Vk
LCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvc3NobWFz
dGVyY29ubmVjdGlvbi5jcHAgYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKaW5kZXggNzE5
MjU3NC4uZmVhZmY0YyAxMDA2NDQKLS0tIGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCisr
KyBiL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcApAQCAtMTY2NSw3ICsxNjY1LDYgQEAgYm9v
bCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGVja0xvZ2luKCkKICAgICBpbnRlcmFjdGlvbklucHV0
VGV4dCA9IFFTdHJpbmc6Om51bGw7CiAKICAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gc3NoX2No
YW5uZWxfbmV3KG15X3NzaF9zZXNzaW9uKTsKLQogICAgIGlmICghY2hhbm5lbCkKICAgICB7CiAg
ICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CkBAIC0x
OTk0LDcgKzE5OTMsNyBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoYW5uZWxMb29wKCkK
ICAgICAgICAgZGVsZXRlW10gcmVhZF9jaGFuOwogICAgICAgICBkZWxldGVbXSBvdXRfY2hhbjsK
IAotICAgICAgICBpZiAocmV0dmFsID09IC0xKQorICAgICAgICBpZiAoU1NIX09LICE9IHJldHZh
bCkKICAgICAgICAgewogICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJzZWxlY3QoKSBlcnJvci4i
IDw8IGVuZGw7CiAgICAgICAgICAgICBjb250aW51ZTsKLS0gCjIuMTcuMQoK


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0009-Another-missing-endl.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0009-Another-missing-endl.patch

RnJvbSBiODczZWIxNzJiZjA5ZjU0NDc2ZWQxZjIxODQzNjFlMDJiMzViYzUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMzowOTo0MCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDkvMTFdIEFub3RoZXIgbWlzc2luZyBlbmRsCgotLS0KIHNyYy9zc2htYXN0ZXJjb25uZWN0aW9u
LmNwcCB8IDIgKy0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigt
KQoKZGlmZiAtLWdpdCBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcCBiL3NyYy9zc2htYXN0
ZXJjb25uZWN0aW9uLmNwcAppbmRleCBmZWFmZjRjLi42M2JmNTA3IDEwMDY0NAotLS0gYS9zcmMv
c3NobWFzdGVyY29ubmVjdGlvbi5jcHAKKysrIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3Bw
CkBAIC0yMTQwLDcgKzIxNDAsNyBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OmNyZWF0ZUNo
YW5uZWxDb25uZWN0aW9uKGludCBpLCBpbnQgJm1heHNvY2ssIGZkX3NldCAmcgogICAgICAgICAg
ICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJkaW5nIHBhcmFtZXRlcnM6IGZyb20gcmVtb3RlICgiIDw8
IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5mb3J3YXJkSG9zdCA8PCAiOiIKICAgICAgICAgICAg
ICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQgPDwgIikg
dG8gbG9jYWwgKCIKICAgICAgICAgICAgICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMu
YXQoaSkubG9jYWxIb3N0IDw8ICI6IiA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxQ
b3J0Ci0gICAgICAgICAgICAgICAgICAgICAgPDwgIikiOworICAgICAgICAgICAgICAgICAgICAg
IDw8ICIpIiA8PCBlbmRsOwogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICogQ2Fu
bm90IHN1cHBvcnQgY29uZmlnIGZpbGUgcGFyc2luZyBoZXJlIHdpdGggcHJlLTAuNi4wIGxpYnNz
aCB2ZXJzaW9ucy4KLS0gCjIuMTcuMQoK


--b1_f1c3740bfb6ee79fae139d70cf52c605
Content-Type: text/x-patch; name="0001-First-auto-format-the-code-for-readability-and-human.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=0001-First-auto-format-the-code-for-readability-and-human.patch

RnJvbSBjNzFmZGVkOTE5ODU1MzE0Y2JkOWQxNTU0Nzc3ZmI5YjRkZGFjNTQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxyb3kgdmFuIGRlbiBCZXJnIDxtZWxyb3lAbWVscm95Lm9y
Zz4KRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjoyODo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MDEvMTFdIEZpcnN0IGF1dG8tZm9ybWF0IHRoZSBjb2RlLCBmb3IgcmVhZGFiaWxpdHkgYW5kCiBo
dW1hbmtpbmQKCi0tLQogc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwIHwgMTk0MCArKysrKysr
KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uaCAg
IHwgIDExOSArKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTAzNSBpbnNlcnRpb25zKCspLCAxMDI0IGRl
bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcCBiL3Ny
Yy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcAppbmRleCA4YjU5ZmU3Li40MjRjYWQyIDEwMDY0NAot
LS0gYS9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5jcHAKKysrIGIvc3JjL3NzaG1hc3RlcmNvbm5l
Y3Rpb24uY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVk
ZSAic3NocHJvY2Vzcy5oIgogCi0KICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxR
RmlsZT4KICNpbmNsdWRlIDxRRGlyPgpAQCAtNDMsMzYgKzQyLDMzIEBACiAjaW5jbHVkZSA8UXRO
ZXR3b3JrL3FhYnN0cmFjdHNvY2tldC5oPgogI2VuZGlmCiAKLQogI2luY2x1ZGUgIm9ubWFpbndp
bmRvdy5oIgogCi0KICNkZWZpbmUgUFJPWFlUVU5ORUxQT1JUIDQ0NDQ0CiAKIGNvbnN0IFFTdHJp
bmcgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tdID0g
ewotICAiVmVyaWZpY2F0aW9uIGNvZGU6IiwgICAgICAgICAgICAvLyBHQSAgICAgIChodHRwOi8v
Z2l0aHViLmNvbS9nb29nbGUvZ29vZ2xlLWF1dGhlbnRpY2F0b3IpCi0gICJPbmUtdGltZSBwYXNz
d29yZCAoT0FUSCkgZm9yIiwgIC8vIE9BVEggICAgKGh0dHA6Ly93d3cubm9uZ251Lm9yZy9vYXRo
LXRvb2xraXQvcGFtX29hdGguaHRtbCkKLSAgInBhc3Njb2RlOiIsICAgICAgICAgICAgICAgICAg
ICAgLy8gTU9UUCAgICAoaHR0cDovL21vdHAuc291cmNlZm9yZ2UubmV0KQotICAiRW50ZXIgUEFT
U0NPREU6IiwgICAgICAgICAgICAgICAvLyBTZWN1cklECi0gICJZdWJpS2V5IGZvciIgICAgICAg
ICAgICAgICAgICAgIC8vIFl1YmlLZXkgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1l1
YmlLZXkpCisgICAgIlZlcmlmaWNhdGlvbiBjb2RlOiIsICAgICAgICAgICAvLyBHQSAgICAgICho
dHRwOi8vZ2l0aHViLmNvbS9nb29nbGUvZ29vZ2xlLWF1dGhlbnRpY2F0b3IpCisgICAgIk9uZS10
aW1lIHBhc3N3b3JkIChPQVRIKSBmb3IiLCAvLyBPQVRIICAgIChodHRwOi8vd3d3Lm5vbmdudS5v
cmcvb2F0aC10b29sa2l0L3BhbV9vYXRoLmh0bWwpCisgICAgInBhc3Njb2RlOiIsICAgICAgICAg
ICAgICAgICAgICAvLyBNT1RQICAgIChodHRwOi8vbW90cC5zb3VyY2Vmb3JnZS5uZXQpCisgICAg
IkVudGVyIFBBU1NDT0RFOiIsICAgICAgICAgICAgICAvLyBTZWN1cklECisgICAgIll1YmlLZXkg
Zm9yIiAgICAgICAgICAgICAgICAgICAvLyBZdWJpS2V5IChodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9ZdWJpS2V5KQogfTsKIAotCiAjaWZkZWYgUV9PU19XSU4KICNpbmNsdWRlIDxRU2V0
dGluZ3M+CiAvLyBwYXJzZSBrbm93bl9ob3N0cyBmaWxlIGZyb20gbGlic3NoIGFuZCBleHBvcnQg
a2V5cyBpbiByZWdpc3RyeSB0byB1c2Ugd2l0aCBwbGluay5leGUKIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6cGFyc2VLbm93bkhvc3RzKCkKIHsKLSAgICBRRmlsZSBmbChtYWluV25kLT5nZXRI
b21lRGlyZWN0b3J5KCkrIi9zc2gva25vd25faG9zdHMiKTsKKyAgICBRRmlsZSBmbChtYWluV25k
LT5nZXRIb21lRGlyZWN0b3J5KCkgKyAiL3NzaC9rbm93bl9ob3N0cyIpOwogICAgIGlmICghZmwu
b3BlbihRRmlsZTo6UmVhZE9ubHkpKQogICAgICAgICByZXR1cm47CiAgICAgUVNldHRpbmdzIHNl
dHRpbmdzKCJIS0VZX0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXFNpbW9uVGF0aGFtXFxQdVRUWVxc
U3NoSG9zdEtleXMiLAogICAgICAgICAgICAgICAgICAgICAgICBRU2V0dGluZ3M6Ok5hdGl2ZUZv
cm1hdCk7CiAgICAgd2hpbGUgKCFmbC5hdEVuZCgpKQogICAgIHsKLSAgICAgICAgUVN0cmluZyBs
aW5lPWZsLnJlYWRMaW5lKCk7Ci0gICAgICAgIFFTdHJpbmdMaXN0IHBhcnRzPWxpbmUuc3BsaXQo
JyAnLFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsKLSAgICAgICAgaWYgKHBhcnRzLmNvdW50KCkh
PTMpCisgICAgICAgIFFTdHJpbmcgbGluZSA9IGZsLnJlYWRMaW5lKCk7CisgICAgICAgIFFTdHJp
bmdMaXN0IHBhcnRzID0gbGluZS5zcGxpdCgnICcsIFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsK
KyAgICAgICAgaWYgKHBhcnRzLmNvdW50KCkgIT0gMykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIC8vbGluZXMgaW4ga25vd25faG9zdHMgaGF2ZSBmb3JtYXQ6CkBAIC04MCwyNTcg
Kzc2LDI1NSBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnBhcnNlS25vd25Ib3N0cygpCiAg
ICAgICAgIC8vd2UgcHJvY2VlZGluZyBvbmx5IGxpbmVzIGZyb20gbGlic3NoIC0gbm8gaGFzaGVk
IGhvc3RuYW1lcwogICAgICAgICAvL29yIHBhdHRlcm5zIGFyZSBhbGxvd2VkCiAKLSAgICAgICAg
UVN0cmluZyB0eXBlPSJ1bmtub3duIjsKLSAgICAgICAgUVN0cmluZyBwb3J0PSIyMiI7Ci0gICAg
ICAgIGlmIChwYXJ0c1sxXT09InNzaC1kc3MiKQotICAgICAgICAgICAgdHlwZT0iZHNzIjsKLSAg
ICAgICAgaWYgKHBhcnRzWzFdPT0ic3NoLXJzYSIpCi0gICAgICAgICAgICB0eXBlPSJyc2EyIjsK
LQorICAgICAgICBRU3RyaW5nIHR5cGUgPSAidW5rbm93biI7CisgICAgICAgIFFTdHJpbmcgcG9y
dCA9ICIyMiI7CisgICAgICAgIGlmIChwYXJ0c1sxXSA9PSAic3NoLWRzcyIpCisgICAgICAgICAg
ICB0eXBlID0gImRzcyI7CisgICAgICAgIGlmIChwYXJ0c1sxXSA9PSAic3NoLXJzYSIpCisgICAg
ICAgICAgICB0eXBlID0gInJzYTIiOwogCi0gICAgICAgIFFTdHJpbmdMaXN0IGhvc3RQYXJ0cz1w
YXJ0c1swXS5zcGxpdCgiOiIsUVN0cmluZzo6U2tpcEVtcHR5UGFydHMpOwotICAgICAgICBpZiAo
aG9zdFBhcnRzLmNvdW50KCk+MSkKLSAgICAgICAgICAgIHBvcnQ9aG9zdFBhcnRzWzFdOwotICAg
ICAgICBob3N0UGFydHNbMF0ucmVwbGFjZSgiWyIsIiIpOwotICAgICAgICBob3N0UGFydHNbMF0u
cmVwbGFjZSgiXSIsIiIpOworICAgICAgICBRU3RyaW5nTGlzdCBob3N0UGFydHMgPSBwYXJ0c1sw
XS5zcGxpdCgiOiIsIFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsKKyAgICAgICAgaWYgKGhvc3RQ
YXJ0cy5jb3VudCgpID4gMSkKKyAgICAgICAgICAgIHBvcnQgPSBob3N0UGFydHNbMV07CisgICAg
ICAgIGhvc3RQYXJ0c1swXS5yZXBsYWNlKCJbIiwgIiIpOworICAgICAgICBob3N0UGFydHNbMF0u
cmVwbGFjZSgiXSIsICIiKTsKIAotICAgICAgICBRU3RyaW5nIGtleU5hbWU9dHlwZSsiQCIrcG9y
dCsiOiIraG9zdFBhcnRzWzBdOworICAgICAgICBRU3RyaW5nIGtleU5hbWUgPSB0eXBlICsgIkAi
ICsgcG9ydCArICI6IiArIGhvc3RQYXJ0c1swXTsKIAotICAgICAgICBRQnl0ZUFycmF5IGJ5dGVz
PVFCeXRlQXJyYXk6OmZyb21CYXNlNjQocGFydHNbMl0udG9MYXRpbjEoKSk7CisgICAgICAgIFFC
eXRlQXJyYXkgYnl0ZXMgPSBRQnl0ZUFycmF5Ojpmcm9tQmFzZTY0KHBhcnRzWzJdLnRvTGF0aW4x
KCkpOwogICAgICAgICBRU3RyaW5nTGlzdCBmaWVsZHM7CiAKICAgICAgICAgLy9rZXkgaXMgYSBz
ZXQgb2YgZGF0YSBmaWVsZHM6CiAgICAgICAgIC8vW3NpemVdW2RhdGFdW3NpemVdW2RhdGFdLi4u
Li5bc2l6ZV1bZGF0YV0KIAotICAgICAgICBmb3IgKGludCBpPTA7IGk8Ynl0ZXMuY291bnQoKTsp
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMuY291bnQoKTspCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGludCBzaXplPTA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CiAgICAg
ICAgICAgICAvL2ZpcnN0IDQgYnl0ZXMgYXJlIGZvciBzaXplIG9mIGRhdGEgZmllbGQgKGJpZy1l
bmRpYW4pCi0gICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8NDsgKytqKQorICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgc2l6ZSs9KCh1Y2hhcikoYnl0ZXNbaV0pKSAqIHBvdygoZmxvYXQpMjU2LDMtaik7CisgICAg
ICAgICAgICAgICAgc2l6ZSArPSAoKHVjaGFyKShieXRlc1tpXSkpICogcG93KChmbG9hdCkyNTYs
IDMgLSBqKTsKICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBRQnl0ZUFycmF5IGRhdGE7Ci0gICAgICAgICAgICBkYXRhPWJ5dGVzLm1pZChpLHNpemUpOwor
ICAgICAgICAgICAgZGF0YSA9IGJ5dGVzLm1pZChpLCBzaXplKTsKICAgICAgICAgICAgIFFTdHJp
bmcgaGV4OwogCi0gICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8ZGF0YS5jb3VudCgpOyArK2op
CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGRhdGEuY291bnQoKTsgKytqKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgYnl0ZTsKLSAgICAgICAgICAgICAg
ICBieXRlLnNwcmludGYoIiUwMngiLCh1Y2hhcikoZGF0YVtqXSkpOwotICAgICAgICAgICAgICAg
IGhleCs9Ynl0ZTsKKyAgICAgICAgICAgICAgICBieXRlLnNwcmludGYoIiUwMngiLCAodWNoYXIp
KGRhdGFbal0pKTsKKyAgICAgICAgICAgICAgICBoZXggKz0gYnl0ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vcmVtb3ZlIGxlYWRpbmcgJzAnCiAgICAgICAgICAgICBmb3IgKDs7KQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoKCk9PTApCisgICAg
ICAgICAgICAgICAgaWYgKGhleC5sZW5ndGgoKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBpZiAoaGV4WzBdPT0nMCcpCi0gICAgICAgICAgICAgICAg
ICAgIGhleC5yZW1vdmUoMCwxKTsKKyAgICAgICAgICAgICAgICBpZiAoaGV4WzBdID09ICcwJykK
KyAgICAgICAgICAgICAgICAgICAgaGV4LnJlbW92ZSgwLCAxKTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaGV4PSIweCIraGV4OwotICAgICAgICAgICAgZmllbGRzPDxoZXg7Ci0gICAgICAgICAgICBp
Kz1zaXplOworICAgICAgICAgICAgaGV4ID0gIjB4IiArIGhleDsKKyAgICAgICAgICAgIGZpZWxk
cyA8PCBoZXg7CisgICAgICAgICAgICBpICs9IHNpemU7CiAgICAgICAgIH0KICAgICAgICAgLy9m
aXJzdCBlbGVtZW50IGlzIGEgdHlwZSBvZiBrZXksIHdlIGRvbid0IG5lZWQgaXQKICAgICAgICAg
ZmllbGRzLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgIHNldHRpbmdzLnNldFZhbHVlKGtleU5hbWUs
ZmllbGRzLmpvaW4oIiwiKSk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IldyaXRpbmcga2V5IHRvIHJl
Z2lzdHJ5OiBIS0VZX0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXFNpbW9uVGF0aGFtXFxQdVRUWVxc
U3NoSG9zdEtleXMiPDxlbmRsOwotICAgICAgICB4MmdvRGVidWc8PGtleU5hbWU8PCI9Ijw8Zmll
bGRzLmpvaW4oIiwiKTw8ZW5kbDsKKyAgICAgICAgc2V0dGluZ3Muc2V0VmFsdWUoa2V5TmFtZSwg
ZmllbGRzLmpvaW4oIiwiKSk7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV3JpdGluZyBrZXkgdG8g
cmVnaXN0cnk6IEhLRVlfQ1VSUkVOVF9VU0VSXFxTb2Z0d2FyZVxcU2ltb25UYXRoYW1cXFB1VFRZ
XFxTc2hIb3N0S2V5cyIgPDwgZW5kbDsKKyAgICAgICAgeDJnb0RlYnVnIDw8IGtleU5hbWUgPDwg
Ij0iIDw8IGZpZWxkcy5qb2luKCIsIikgPDwgZW5kbDsKICAgICB9CiAgICAgc2V0dGluZ3Muc3lu
YygpOwogfQogI2VuZGlmCiAKLQotU3NoTWFzdGVyQ29ubmVjdGlvbjo6U3NoTWFzdGVyQ29ubmVj
dGlvbiAoUU9iamVjdCogcGFyZW50LCBRU3RyaW5nIGhvc3QsIGludCBwb3J0LCBib29sIGFjY2Vw
dFVua25vd25TZXJ2ZXJzLCBRU3RyaW5nIHVzZXIsCi0gICAgICAgIFFTdHJpbmcgcGFzcywgUVN0
cmluZyBrZXksIGJvb2wgYXV0b2xvZ2luLCBib29sIGtyYmxvZ2luLAotICAgICAgICBib29sIHVz
ZXByb3h5LCBQcm94eVR5cGUgdHlwZSwgUVN0cmluZyBwcm94eXNlcnZlciwgcXVpbnQxNiBwcm94
eXBvcnQsCi0gICAgICAgIFFTdHJpbmcgcHJveHlsb2dpbiwgUVN0cmluZyBwcm94eXBhc3N3b3Jk
LCBRU3RyaW5nIHByb3h5a2V5LAotICAgICAgICBib29sIHByb3h5YXV0b2xvZ2luLCBib29sIHBy
b3h5S3JiTG9naW4gKSA6IFFUaHJlYWQgKCBwYXJlbnQgKQorU3NoTWFzdGVyQ29ubmVjdGlvbjo6
U3NoTWFzdGVyQ29ubmVjdGlvbihRT2JqZWN0ICpwYXJlbnQsIFFTdHJpbmcgaG9zdCwgaW50IHBv
cnQsIGJvb2wgYWNjZXB0VW5rbm93blNlcnZlcnMsIFFTdHJpbmcgdXNlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBwYXNzLCBRU3RyaW5nIGtleSwg
Ym9vbCBhdXRvbG9naW4sIGJvb2wga3JibG9naW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgdXNlcHJveHksIFByb3h5VHlwZSB0eXBlLCBRU3RyaW5nIHBy
b3h5c2VydmVyLCBxdWludDE2IHByb3h5cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUVN0cmluZyBwcm94eWxvZ2luLCBRU3RyaW5nIHByb3h5cGFzc3dvcmQs
IFFTdHJpbmcgcHJveHlrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJveHlhdXRvbG9naW4sIGJvb2wgcHJveHlLcmJMb2dpbikgOiBRVGhyZWFkKHBh
cmVudCkKIHsKLSNpZiBkZWZpbmVkICggUV9PU19EQVJXSU4gKQorI2lmIGRlZmluZWQoUV9PU19E
QVJXSU4pCiAgICAgLy8gTWFjIE9TIFggcHJvdmlkZXMgb25seSA1MTJLQiBzdGFjayBzcGFjZSBm
b3Igc2Vjb25kYXJ5IHRocmVhZHMuCiAgICAgLy8gQXMgd2UgcHV0IGEgNTEyS0IgYnVmZmVyIG9u
IHRoZSBzdGFjayBsYXRlciBvbiwgd2UgbmVlZCBhIGJpZ2dlciBzdGFjayBzcGFjZS4KLSAgICBz
ZXRTdGFja1NpemUgKHNpemVvZiAoY2hhcikgKiAxMDI0ICogMTAyNCAqIDIpOworICAgIHNldFN0
YWNrU2l6ZShzaXplb2YoY2hhcikgKiAxMDI0ICogMTAyNCAqIDIpOwogI2VuZGlmCiAgICAgdGNw
UHJveHlTb2NrZXQgPSBOVUxMOwogICAgIHRjcE5ldHdvcmtQcm94eSA9IE5VTEw7Ci0gICAgc3No
UHJveHk9IE5VTEw7Ci0gICAgc3NoUHJveHlSZWFkeT1mYWxzZTsKLSAgICBuZXh0UGlkPTA7Cisg
ICAgc3NoUHJveHkgPSBOVUxMOworICAgIHNzaFByb3h5UmVhZHkgPSBmYWxzZTsKKyAgICBuZXh0
UGlkID0gMDsKIAotICAgIGJyZWFrTG9vcD1mYWxzZTsKLSAgICBrZXJiZXJvc0RlbGVnYXRpb249
ZmFsc2U7CisgICAgYnJlYWtMb29wID0gZmFsc2U7CisgICAga2VyYmVyb3NEZWxlZ2F0aW9uID0g
ZmFsc2U7CiAgICAgeDJnb0RlYnVnIDw8ICJTc2hNYXN0ZXJDb25uZWN0aW9uLCBob3N0ICIgPDwg
aG9zdCA8PCAiOyBwb3J0ICIgPDwgcG9ydCA8PCAiOyB1c2VyICIgPDwgdXNlcgogICAgICAgICAg
ICAgICA8PCAiOyB1c2Vwcm94eSAiIDw8IHVzZXByb3h5IDw8ICI7IHByb3h5c2VydmVyICIgPDwg
cHJveHlzZXJ2ZXIKICAgICAgICAgICAgICAgPDwgIjsgcHJveHlwb3J0ICIgPDwgcHJveHlwb3J0
OwotICAgIHRoaXMtPmhvc3Q9aG9zdDsKKyAgICB0aGlzLT5ob3N0ID0gaG9zdDsKICAgICAvLyBJ
ZiB0aGUgaG9zdG5hbWUgc3RhcnRzIHdpdGggIiEiIGRvIG5vdCBwZXJmb3JtIGxvZ2luQ2hlY2so
KSBmb3IgdGhpcyBjb25uZWN0aW9uCiAgICAgaWYgKHRoaXMtPmhvc3QuaW5kZXhPZigiISIpID09
IDApCiAgICAgewotICAgICAgICB0aGlzLT5sb2dpbkNoZWNrPWZhbHNlOworICAgICAgICB0aGlz
LT5sb2dpbkNoZWNrID0gZmFsc2U7CiAgICAgICAgIHRoaXMtPmhvc3QucmVtb3ZlKDAsIDEpOwog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICB0aGlzLT5sb2dpbkNoZWNrPXRydWU7Ci0g
ICAgfQotICAgIHRoaXMtPnBvcnQ9cG9ydDsKLSAgICB0aGlzLT51c2VyPXVzZXI7Ci0gICAgdGhp
cy0+cGFzcz1wYXNzOwotICAgIHRoaXMtPmtleT1rZXk7Ci0gICAgdGhpcy0+YXV0b2xvZ2luPWF1
dG9sb2dpbjsKLSAgICB0aGlzLT5hY2NlcHRVbmtub3duU2VydmVycz1hY2NlcHRVbmtub3duU2Vy
dmVyczsKLSAgICB0aGlzLT51c2Vwcm94eT11c2Vwcm94eTsKLSAgICB0aGlzLT5wcm94eXR5cGU9
dHlwZTsKLSAgICB0aGlzLT5wcm94eWF1dG9sb2dpbj1wcm94eWF1dG9sb2dpbjsKLSAgICB0aGlz
LT5wcm94eWtleT1wcm94eWtleTsKLSAgICB0aGlzLT5wcm94eXNlcnZlcj1wcm94eXNlcnZlcjsK
LSAgICB0aGlzLT5wcm94eXBvcnQ9cHJveHlwb3J0OwotICAgIHRoaXMtPnByb3h5bG9naW49cHJv
eHlsb2dpbjsKLSAgICB0aGlzLT5wcm94eXBhc3N3b3JkPXByb3h5cGFzc3dvcmQ7Ci0gICAgdGhp
cy0+cHJveHlLcmJMb2dpbj1wcm94eUtyYkxvZ2luOwotICAgIG1haW5XbmQ9KE9OTWFpbldpbmRv
dyopIHBhcmVudDsKLSAgICBrZXJiZXJvcz1rcmJsb2dpbjsKLSAgICBjaGFsbGVuZ2VBdXRoVmVy
aWZpY2F0aW9uQ29kZT1RU3RyaW5nOjpudWxsOwotCi0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49
IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBpZiAodGhpcy0+dXNlci5pc0VtcHR5ICgp
KSB7CisgICAgICAgIHRoaXMtPmxvZ2luQ2hlY2sgPSB0cnVlOworICAgIH0KKyAgICB0aGlzLT5w
b3J0ID0gcG9ydDsKKyAgICB0aGlzLT51c2VyID0gdXNlcjsKKyAgICB0aGlzLT5wYXNzID0gcGFz
czsKKyAgICB0aGlzLT5rZXkgPSBrZXk7CisgICAgdGhpcy0+YXV0b2xvZ2luID0gYXV0b2xvZ2lu
OworICAgIHRoaXMtPmFjY2VwdFVua25vd25TZXJ2ZXJzID0gYWNjZXB0VW5rbm93blNlcnZlcnM7
CisgICAgdGhpcy0+dXNlcHJveHkgPSB1c2Vwcm94eTsKKyAgICB0aGlzLT5wcm94eXR5cGUgPSB0
eXBlOworICAgIHRoaXMtPnByb3h5YXV0b2xvZ2luID0gcHJveHlhdXRvbG9naW47CisgICAgdGhp
cy0+cHJveHlrZXkgPSBwcm94eWtleTsKKyAgICB0aGlzLT5wcm94eXNlcnZlciA9IHByb3h5c2Vy
dmVyOworICAgIHRoaXMtPnByb3h5cG9ydCA9IHByb3h5cG9ydDsKKyAgICB0aGlzLT5wcm94eWxv
Z2luID0gcHJveHlsb2dpbjsKKyAgICB0aGlzLT5wcm94eXBhc3N3b3JkID0gcHJveHlwYXNzd29y
ZDsKKyAgICB0aGlzLT5wcm94eUtyYkxvZ2luID0gcHJveHlLcmJMb2dpbjsKKyAgICBtYWluV25k
ID0gKE9OTWFpbldpbmRvdyAqKXBhcmVudDsKKyAgICBrZXJiZXJvcyA9IGtyYmxvZ2luOworICAg
IGNoYWxsZW5nZUF1dGhWZXJpZmljYXRpb25Db2RlID0gUVN0cmluZzo6bnVsbDsKKworI2lmIExJ
QlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyAgICBpZiAodGhp
cy0+dXNlci5pc0VtcHR5KCkpCisgICAgewogICAgICAgICAvKiBXZSBtaWdodCBoYXZlIGEgY29u
ZmlnIGZpbGUgcmVxdWVzdCBwZW5kaW5nLCBob25vciB0aGlzLiAqLwotICAgICAgICBzc2hfc2Vz
c2lvbiB0bXBfc2Vzc2lvbiA9IHNzaF9uZXcgKCk7CisgICAgICAgIHNzaF9zZXNzaW9uIHRtcF9z
ZXNzaW9uID0gc3NoX25ldygpOwogCi0gICAgICAgIGlmICghdG1wX3Nlc3Npb24pIHsKLSAgICAg
ICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIgKCJDYW5ub3QgY3JlYXRlIFNTSCBzZXNzaW9u
LiIpOwotICAgICAgICAgICAgZXJyb3JfbXNnICs9ICIgIiArIHRyICgiVXNpbmcgZW52aXJvbm1l
bnQtcHJvdmlkZWQgdXNlcm5hbWUuIik7CisgICAgICAgIGlmICghdG1wX3Nlc3Npb24pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIkNhbm5vdCBjcmVhdGUg
U1NIIHNlc3Npb24uIik7CisgICAgICAgICAgICBlcnJvcl9tc2cgKz0gIiAiICsgdHIoIlVzaW5n
IGVudmlyb25tZW50LXByb3ZpZGVkIHVzZXJuYW1lLiIpOwogICAgICAgICAgICAgeDJnb0RlYnVn
IDw8IGVycm9yX21zZzsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgZWxzZQor
ICAgICAgICB7CiAgICAgICAgICAgICBRQnl0ZUFycmF5IHRtcF9CQTsKIAotICAgICAgICAgICAg
dG1wX0JBID0gdGhpcy0+aG9zdC50b0xvY2FsOEJpdCAoKTsKKyAgICAgICAgICAgIHRtcF9CQSA9
IHRoaXMtPmhvc3QudG9Mb2NhbDhCaXQoKTsKIAotICAgICAgICAgICAgc3NoX29wdGlvbnNfc2V0
ICh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wX0JBLmRhdGEgKCkpOworICAgICAg
ICAgICAgc3NoX29wdGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBf
QkEuZGF0YSgpKTsKIAotICAgICAgICAgICAgaWYgKHNzaF9vcHRpb25zX3BhcnNlX2NvbmZpZyAo
dG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgaWYgKHNzaF9vcHRpb25zX3Bh
cnNlX2NvbmZpZyh0bXBfc2Vzc2lvbiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzogdW5hYmxlIHRvIHBhcnNlIHRoZSBTU0gg
Y29uZmlnIGZpbGUuIjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2hhciAqaW5mZXJy
ZWRfdXNlcm5hbWUgPSBOVUxMOwotICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0ICh0bXBfc2Vz
c2lvbiwgU1NIX09QVElPTlNfVVNFUiwgJmluZmVycmVkX3VzZXJuYW1lKTsKKyAgICAgICAgICAg
IHNzaF9vcHRpb25zX2dldCh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfVVNFUiwgJmluZmVycmVk
X3VzZXJuYW1lKTsKICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24g
dXNlciBuYW1lIGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX3VzZXJuYW1l
OwogCi0gICAgICAgICAgICB0aGlzLT51c2VyID0gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdCAoaW5m
ZXJyZWRfdXNlcm5hbWUpOworICAgICAgICAgICAgdGhpcy0+dXNlciA9IFFTdHJpbmc6OmZyb21M
b2NhbDhCaXQoaW5mZXJyZWRfdXNlcm5hbWUpOwogCi0gICAgICAgICAgICBzc2hfc3RyaW5nX2Zy
ZWVfY2hhciAoaW5mZXJyZWRfdXNlcm5hbWUpOwotICAgICAgICAgICAgc3NoX2ZyZWUgKHRtcF9z
ZXNzaW9uKTsKKyAgICAgICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFyKGluZmVycmVkX3VzZXJu
YW1lKTsKKyAgICAgICAgICAgIHNzaF9mcmVlKHRtcF9zZXNzaW9uKTsKICAgICAgICAgfQogICAg
IH0KICNlbmRpZgogCi0gICAgaWYgKHRoaXMtPnVzZXIuaXNFbXB0eSAoKSkgeworICAgIGlmICh0
aGlzLT51c2VyLmlzRW1wdHkoKSkKKyAgICB7CiAjaWZkZWYgUV9PU19XSU4KLSAgICAgICAgdGhp
cy0+dXNlciA9IGdldGVudiAoIlVTRVJOQU1FIik7CisgICAgICAgIHRoaXMtPnVzZXIgPSBnZXRl
bnYoIlVTRVJOQU1FIik7CiAjZWxzZQotICAgICAgICB0aGlzLT51c2VyID0gZ2V0ZW52ICgiVVNF
UiIpOworICAgICAgICB0aGlzLT51c2VyID0gZ2V0ZW52KCJVU0VSIik7CiAjZW5kaWYKICAgICB9
CiAKICAgICBpZiAoa2VyYmVyb3MpCiAgICAgewotICAgICAgICB4MmdvRGVidWc8PCJTdGFydGlu
ZyBTU0ggY29ubmVjdGlvbiB3aXRoIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uLiI7CisgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiU3RhcnRpbmcgU1NIIGNvbm5lY3Rpb24gd2l0aCBLZXJiZXJvcyBhdXRo
ZW50aWNhdGlvbi4iOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICB4MmdvRGVidWc8
PCJTdGFydGluZyBTU0ggY29ubmVjdGlvbiB3aXRob3V0IEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9u
LiI7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU3RhcnRpbmcgU1NIIGNvbm5lY3Rpb24gd2l0aG91
dCBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbi4iOwogICAgIH0KLSAgICB4MmdvRGVidWc8PCJTc2hN
YXN0ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAiPDx0aGlzPDwiIGNyZWF0ZWQuIjsKKyAgICB4Mmdv
RGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIgPDwgdGhpcyA8PCAiIGNy
ZWF0ZWQuIjsKIH0KIAotCiB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUNv
bm5lY3Rpb25PaygpCiB7Ci0gICAgeDJnb0RlYnVnPDwiU1NIIHByb3h5IGNvbm5lY3RlZC4iOwor
ICAgIHgyZ29EZWJ1ZyA8PCAiU1NIIHByb3h5IGNvbm5lY3RlZC4iOwogCi0KLSAgICBsb2NhbFBy
b3h5UG9ydD1QUk9YWVRVTk5FTFBPUlQ7Ci0gICAgd2hpbGUgKCBPTk1haW5XaW5kb3c6OmlzU2Vy
dmVyUnVubmluZyAoIGxvY2FsUHJveHlQb3J0ICkgKQorICAgIGxvY2FsUHJveHlQb3J0ID0gUFJP
WFlUVU5ORUxQT1JUOworICAgIHdoaWxlIChPTk1haW5XaW5kb3c6OmlzU2VydmVyUnVubmluZyhs
b2NhbFByb3h5UG9ydCkpCiAgICAgICAgICsrbG9jYWxQcm94eVBvcnQ7CiAKLSAgICBzc2hQcm94
eS0+c3RhcnRUdW5uZWwgKCBob3N0LCBwb3J0LCAiMTI3LjAuMC4xIixsb2NhbFByb3h5UG9ydCxm
YWxzZSx0aGlzLCBTTE9UICggc2xvdFNzaFByb3h5VHVubmVsT2soaW50KSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0xPVCAoIHNsb3RTc2hQcm94eVR1bm5lbEZhaWxlZChib29sLFFT
dHJpbmcsaW50KSkpOwotCisgICAgc3NoUHJveHktPnN0YXJ0VHVubmVsKGhvc3QsIHBvcnQsICIx
MjcuMC4wLjEiLCBsb2NhbFByb3h5UG9ydCwgZmFsc2UsIHRoaXMsIFNMT1Qoc2xvdFNzaFByb3h5
VHVubmVsT2soaW50KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNMT1Qoc2xvdFNzaFBy
b3h5VHVubmVsRmFpbGVkKGJvb2wsIFFTdHJpbmcsIGludCkpKTsKIH0KIAotCi1pbnQgU3NoTWFz
dGVyQ29ubmVjdGlvbjo6Y29weUZpbGUoY29uc3QgUVN0cmluZyYgc3JjLCBjb25zdCBRU3RyaW5n
IGRzdCwgUU9iamVjdCogcmVjZWl2ZXIsIGNvbnN0IGNoYXIqIHNsb3RGaW5pc2hlZCkKK2ludCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjpjb3B5RmlsZShjb25zdCBRU3RyaW5nICZzcmMsIGNvbnN0IFFT
dHJpbmcgZHN0LCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqc2xvdEZpbmlzaGVkKQog
ewotICAgIFNzaFByb2Nlc3MqIHByb2M9bmV3IFNzaFByb2Nlc3ModGhpcywgbmV4dFBpZCsrKTsK
LSAgICBpZihyZWNlaXZlciAmJiBzbG90RmluaXNoZWQpCisgICAgU3NoUHJvY2VzcyAqcHJvYyA9
IG5ldyBTc2hQcm9jZXNzKHRoaXMsIG5leHRQaWQrKyk7CisgICAgaWYgKHJlY2VpdmVyICYmIHNs
b3RGaW5pc2hlZCkKICAgICB7Ci0gICAgICAgIGNvbm5lY3QocHJvYywgU0lHTkFMKHNzaEZpbmlz
aGVkKGJvb2wsUVN0cmluZyxpbnQpKSwgcmVjZWl2ZXIsIHNsb3RGaW5pc2hlZCk7CisgICAgICAg
IGNvbm5lY3QocHJvYywgU0lHTkFMKHNzaEZpbmlzaGVkKGJvb2wsIFFTdHJpbmcsIGludCkpLCBy
ZWNlaXZlciwgc2xvdEZpbmlzaGVkKTsKICAgICB9Ci0gICAgcHJvYy0+c3RhcnRfY3Aoc3JjLGRz
dCk7Ci0gICAgcHJvY2Vzc2VzPDxwcm9jOworICAgIHByb2MtPnN0YXJ0X2NwKHNyYywgZHN0KTsK
KyAgICBwcm9jZXNzZXMgPDwgcHJvYzsKICAgICByZXR1cm4gcHJvYy0+cGlkOwogfQogCi1pbnQg
U3NoTWFzdGVyQ29ubmVjdGlvbjo6ZXhlY3V0ZUNvbW1hbmQoY29uc3QgUVN0cmluZyYgY29tbWFu
ZCwgUU9iamVjdCogcmVjZWl2ZXIsIGNvbnN0IGNoYXIqIHNsb3RGaW5pc2hlZCwgYm9vbCBvdmVy
cmlkZVBhdGgpCitpbnQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6ZXhlY3V0ZUNvbW1hbmQoY29uc3Qg
UVN0cmluZyAmY29tbWFuZCwgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKnNsb3RGaW5p
c2hlZCwgYm9vbCBvdmVycmlkZVBhdGgpCiB7Ci0gICAgU3NoUHJvY2VzcyogcHJvYz1uZXcgU3No
UHJvY2Vzcyh0aGlzLCBuZXh0UGlkKyspOwotICAgIGlmKHJlY2VpdmVyICYmIHNsb3RGaW5pc2hl
ZCkKKyAgICBTc2hQcm9jZXNzICpwcm9jID0gbmV3IFNzaFByb2Nlc3ModGhpcywgbmV4dFBpZCsr
KTsKKyAgICBpZiAocmVjZWl2ZXIgJiYgc2xvdEZpbmlzaGVkKQogICAgIHsKLSAgICAgICAgY29u
bmVjdChwcm9jLCBTSUdOQUwoc3NoRmluaXNoZWQoYm9vbCxRU3RyaW5nLGludCkpLCByZWNlaXZl
ciwgc2xvdEZpbmlzaGVkKTsKKyAgICAgICAgY29ubmVjdChwcm9jLCBTSUdOQUwoc3NoRmluaXNo
ZWQoYm9vbCwgUVN0cmluZywgaW50KSksIHJlY2VpdmVyLCBzbG90RmluaXNoZWQpOwogICAgIH0K
ICAgICBwcm9jLT5zdGFydE5vcm1hbChjb21tYW5kLCBvdmVycmlkZVBhdGgpOwotICAgIHByb2Nl
c3Nlczw8cHJvYzsKKyAgICBwcm9jZXNzZXMgPDwgcHJvYzsKICAgICByZXR1cm4gcHJvYy0+cGlk
OwotCiB9CiAKIFFTdHJpbmcgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Z2V0U291cmNlRmlsZShpbnQg
cGlkKQogewotICAgIGZvcmVhY2ggKFNzaFByb2Nlc3MqIHByb2MsIHByb2Nlc3NlcykKKyAgICBm
b3JlYWNoIChTc2hQcm9jZXNzICpwcm9jLCBwcm9jZXNzZXMpCiAgICAgewotICAgICAgICBpZihw
cm9jLT5waWQ9PXBpZCkKKyAgICAgICAgaWYgKHByb2MtPnBpZCA9PSBwaWQpCiAgICAgICAgICAg
ICByZXR1cm4gcHJvYy0+Z2V0U291cmNlKCk7CiAgICAgfQogICAgIHJldHVybiBRU3RyaW5nIDo6
bnVsbDsKIH0KIAotCiB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZFJldmVyc2VUdW5uZWxD
b25uZWN0aW9ucygpCiB7CiAgICAgcmV2ZXJzZVR1bm5lbFJlcXVlc3RNdXRleC5sb2NrKCk7Ci0g
ICAgZm9yKGludCBpPTA7IGk8cmV2ZXJzZVR1bm5lbFJlcXVlc3QuY291bnQoKTsgKytpKQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcmV2ZXJzZVR1bm5lbFJlcXVlc3QuY291bnQoKTsgKytpKQog
ICAgIHsKLSAgICAgICAgaWYoIXJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmxpc3RlbikKKyAgICAg
ICAgaWYgKCFyZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5saXN0ZW4pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmxpc3Rlbj10cnVlOworICAgICAgICAgICAg
cmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0ubGlzdGVuID0gdHJ1ZTsKIAogICAgICAgICAgICAgaW50
IHJjID0gU1NIX0FHQUlOOwogCi0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9O
X0lOVCAoMCwgNywgMCkKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5U
KDAsIDcsIDApCiAgICAgICAgICAgICAvKiBOb24tYmxvY2tpbmcgbW9kZSBtYXkgcmV0dXJuIFNT
SF9BR0FJTiwgc28gdHJ5IGFnYWluIGlmIG5lY2Vhc3NhcnkuICovCi0gICAgICAgICAgICB3aGls
ZSAoU1NIX0FHQUlOID09IHJjKSB7CisgICAgICAgICAgICB3aGlsZSAoU1NIX0FHQUlOID09IHJj
KQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJjID0gc3NoX2NoYW5uZWxfbGlzdGVu
X2ZvcndhcmQobXlfc3NoX3Nlc3Npb24sIE5VTEwsIHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmZv
cndhcmRQb3J0LCBOVUxMKTsKICNlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmMgPSBzc2hfZm9yd2FyZF9saXN0ZW4obXlfc3NoX3Nlc3Npb24sIE5VTEwsIHJldmVyc2VUdW5u
ZWxSZXF1ZXN0W2ldLmZvcndhcmRQb3J0LCBOVUxMKTsKICNlbmRpZgogCi0gICAgICAgICAgICAg
ICAgaWYocmM9PVNTSF9PSykKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0gU1NIX09LKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZW1pdCByZXZlcnNlVHVubmVsT2so
cmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uY3JlYXRvcik7Ci0gICAgICAgICAgICAgICAgICAgIHgy
Z29EZWJ1Zzw8Ikxpc3RlbmluZyBmb3IgVENQL0lQIGNvbm5lY3Rpb25zIG9uICI8PHJldmVyc2VU
dW5uZWxSZXF1ZXN0W2ldLmZvcndhcmRQb3J0OworICAgICAgICAgICAgICAgICAgICB4MmdvRGVi
dWcgPDwgIkxpc3RlbmluZyBmb3IgVENQL0lQIGNvbm5lY3Rpb25zIG9uICIgPDwgcmV2ZXJzZVR1
bm5lbFJlcXVlc3RbaV0uZm9yd2FyZFBvcnQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmKHJjPT1TU0hfRVJST1IpCisgICAgICAgICAgICAgICAgaWYgKHJjID09IFNTSF9F
UlJPUikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJy
PXNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICB4Mmdv
RGVidWc8PCJGb3J3YXJkIHBvcnQgIjw8cmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uZm9yd2FyZFBv
cnQ8PCIgZmFpbGVkOiI8PGVycjsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnIgPSBz
c2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0Rl
YnVnIDw8ICJGb3J3YXJkIHBvcnQgIiA8PCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJk
UG9ydCA8PCAiIGZhaWxlZDoiIDw8IGVycjsKICAgICAgICAgICAgICAgICAgICAgZW1pdCByZXZl
cnNlVHVubmVsRmFpbGVkKHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmNyZWF0b3IsIGVycik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzQyLDE5MiArMzM2LDE4NSBAQCB2
b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZFJldmVyc2VUdW5uZWxDb25uZWN0aW9ucygpCiB2
b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmNoZWNrUmV2ZXJzZVR1bm5lbENvbm5lY3Rpb25zKCkK
IHsKICAgICBpbnQgcG9ydDsKLSAgICBzc2hfY2hhbm5lbCBjaGFuPXNzaF9jaGFubmVsX2FjY2Vw
dF9mb3J3YXJkKG15X3NzaF9zZXNzaW9uLCAwLCAmcG9ydCk7Ci0gICAgaWYoY2hhbikKKyAgICBz
c2hfY2hhbm5lbCBjaGFuID0gc3NoX2NoYW5uZWxfYWNjZXB0X2ZvcndhcmQobXlfc3NoX3Nlc3Np
b24sIDAsICZwb3J0KTsKKyAgICBpZiAoY2hhbikKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8
Ik5ldyByZXZlcnNlIGNvbm5lY3Rpb24gb24gcG9ydCAiPDxwb3J0OworICAgICAgICB4MmdvRGVi
dWcgPDwgIk5ldyByZXZlcnNlIGNvbm5lY3Rpb24gb24gcG9ydCAiIDw8IHBvcnQ7CiAKICAgICAg
ICAgcmV2ZXJzZVR1bm5lbFJlcXVlc3RNdXRleC5sb2NrKCk7Ci0gICAgICAgIGZvcihpbnQgaT0w
OyBpPHJldmVyc2VUdW5uZWxSZXF1ZXN0LmNvdW50KCk7ICsraSkKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZXZlcnNlVHVubmVsUmVxdWVzdC5jb3VudCgpOyArK2kpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIFJldmVyc2VUdW5uZWxSZXF1ZXN0IHJlcT1yZXZlcnNlVHVubmVsUmVxdWVz
dFtpXTsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+IChyZXEuZm9yd2FyZFBvcnQp
ID09IHBvcnQpCisgICAgICAgICAgICBSZXZlcnNlVHVubmVsUmVxdWVzdCByZXEgPSByZXZlcnNl
VHVubmVsUmVxdWVzdFtpXTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHJlcS5m
b3J3YXJkUG9ydCkgPT0gcG9ydCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4Mmdv
RGVidWc8PCJDcmVhdGluZyBuZXcgY2hhbm5lbCBmb3IgcmV2ZXJzZSB0dW5uZWwgIjw8cG9ydDsK
LSAgICAgICAgICAgICAgICBpbnQgc29jaz1zb2NrZXQgKCBBRl9JTkVULCBTT0NLX1NUUkVBTSww
ICk7CisgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJDcmVhdGluZyBuZXcgY2hhbm5lbCBm
b3IgcmV2ZXJzZSB0dW5uZWwgIiA8PCBwb3J0OworICAgICAgICAgICAgICAgIGludCBzb2NrID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKICNpZm5kZWYgUV9PU19XSU4KLSAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgeT0xOworICAgICAgICAgICAgICAgIGNvbnN0IGludCB5ID0g
MTsKICNlbHNlCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciB5PTE7CisgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciB5ID0gMTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHNldHNvY2tvcHQo
c29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCZ5LCBzaXplb2YoaW50KSk7CisgICAgICAg
ICAgICAgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZ5LCBz
aXplb2YoaW50KSk7CiAKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcmVz
czsKLSAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9mYW1pbHk9QUZfSU5FVDsKLSAgICAgICAg
ICAgICAgICBhZGRyZXNzLnNpbl9wb3J0PWh0b25zICggcmVxLmxvY2FsUG9ydCApOwotICAgICAg
ICAgICAgICAgIHgyZ29EZWJ1Zzw8IkNvbm5lY3RpbmcgdG8gIjw8cmVxLmxvY2FsSG9zdDw8Ijoi
PDxyZXEubG9jYWxQb3J0PDxlbmRsOworICAgICAgICAgICAgICAgIGFkZHJlc3Muc2luX2ZhbWls
eSA9IEFGX0lORVQ7CisgICAgICAgICAgICAgICAgYWRkcmVzcy5zaW5fcG9ydCA9IGh0b25zKHJl
cS5sb2NhbFBvcnQpOworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ29ubmVjdGluZyB0
byAiIDw8IHJlcS5sb2NhbEhvc3QgPDwgIjoiIDw8IHJlcS5sb2NhbFBvcnQgPDwgZW5kbDsKICNp
Zm5kZWYgUV9PU19XSU4KLSAgICAgICAgICAgICAgICBpbmV0X2F0b24gKCByZXEubG9jYWxIb3N0
LnRvTGF0aW4xKCksICZhZGRyZXNzLnNpbl9hZGRyICk7CisgICAgICAgICAgICAgICAgaW5ldF9h
dG9uKHJlcS5sb2NhbEhvc3QudG9MYXRpbjEoKSwgJmFkZHJlc3Muc2luX2FkZHIpOwogI2Vsc2UK
LSAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9hZGRyLnNfYWRkcj1pbmV0X2FkZHIgKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEubG9jYWxIb3N0LnRv
TGF0aW4xKCkgKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9hZGRyLnNfYWRkciA9IGlu
ZXRfYWRkcigKKyAgICAgICAgICAgICAgICAgICAgcmVxLmxvY2FsSG9zdC50b0xhdGluMSgpKTsK
ICNlbmRpZgogCi0gICAgICAgICAgICAgICAgaWYgKCA6OmNvbm5lY3QgKCBzb2NrLCAoIHN0cnVj
dCBzb2NrYWRkciAqICkgJmFkZHJlc3Msc2l6ZW9mICggYWRkcmVzcyApICkgIT0wICkKKyAgICAg
ICAgICAgICAgICBpZiAoOjpjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVz
cywgc2l6ZW9mKGFkZHJlc3MpKSAhPSAwKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBlcnJNc2c9dHIgKCAiQ2Fubm90IGNvbm5lY3QgdG8gIiApICsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmxvY2FsSG9zdCsiOiIrUVN0cmlu
Zzo6bnVtYmVyICggcmVxLmxvY2FsUG9ydCApOwotICAgICAgICAgICAgICAgICAgICB4MmdvRGVi
dWc8PGVyck1zZzw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VyciAoIHJlcS5j
cmVhdG9yLCBlcnJNc2csICIiICk7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyTXNn
ID0gdHIoIkNhbm5vdCBjb25uZWN0IHRvICIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXEubG9jYWxIb3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHJlcS5sb2Nh
bFBvcnQpOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyTXNnIDw8IGVuZGw7
CisgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIocmVxLmNyZWF0b3IsIGVyck1zZywgIiIp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBDaGFubmVsQ29ubmVjdGlvbiBjb247Ci0gICAgICAgICAgICAgICAgY29uLmNo
YW5uZWw9Y2hhbjsKLSAgICAgICAgICAgICAgICBjb24uc29jaz1zb2NrOwotICAgICAgICAgICAg
ICAgIGNvbi5jcmVhdG9yPXJlcS5jcmVhdG9yOworICAgICAgICAgICAgICAgIGNvbi5jaGFubmVs
ID0gY2hhbjsKKyAgICAgICAgICAgICAgICBjb24uc29jayA9IHNvY2s7CisgICAgICAgICAgICAg
ICAgY29uLmNyZWF0b3IgPSByZXEuY3JlYXRvcjsKICAgICAgICAgICAgICAgICBjaGFubmVsQ29u
bmVjdGlvbnNNdXRleC5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25z
PDxjb247CisgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zIDw8IGNvbjsKICAgICAg
ICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2soKTsKLSAgICAgICAgICAg
ICAgICB4MmdvRGVidWc8PCJOZXcgY2hhbm5lbCBjcmVhdGVkIjsKKyAgICAgICAgICAgICAgICB4
MmdvRGVidWcgPDwgIk5ldyBjaGFubmVsIGNyZWF0ZWQiOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0
TXV0ZXgudW5sb2NrKCk7Ci0KLQogICAgIH0KIH0KIAotCi1pbnQgU3NoTWFzdGVyQ29ubmVjdGlv
bjo6c3RhcnRUdW5uZWwoY29uc3QgUVN0cmluZyYgZm9yd2FyZEhvc3QsIHVpbnQgZm9yd2FyZFBv
cnQsIGNvbnN0IFFTdHJpbmcmIGxvY2FsSG9zdCwgdWludCBsb2NhbFBvcnQsIGJvb2wgcmV2ZXJz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRT2JqZWN0KiByZWNlaXZl
ciwgY29uc3QgY2hhciogc2xvdFR1bm5lbE9rLCBjb25zdCBjaGFyKiBzbG90RmluaXNoZWQpCitp
bnQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c3RhcnRUdW5uZWwoY29uc3QgUVN0cmluZyAmZm9yd2Fy
ZEhvc3QsIHVpbnQgZm9yd2FyZFBvcnQsIGNvbnN0IFFTdHJpbmcgJmxvY2FsSG9zdCwgdWludCBs
b2NhbFBvcnQsIGJvb2wgcmV2ZXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqc2xvdFR1bm5lbE9rLCBjb25zdCBj
aGFyICpzbG90RmluaXNoZWQpCiB7Ci0gICAgU3NoUHJvY2VzcyogcHJvYz1uZXcgU3NoUHJvY2Vz
cyh0aGlzLCBuZXh0UGlkKyspOwotICAgIGlmKHJlY2VpdmVyICYmIHNsb3RGaW5pc2hlZCkKKyAg
ICBTc2hQcm9jZXNzICpwcm9jID0gbmV3IFNzaFByb2Nlc3ModGhpcywgbmV4dFBpZCsrKTsKKyAg
ICBpZiAocmVjZWl2ZXIgJiYgc2xvdEZpbmlzaGVkKQogICAgIHsKLSAgICAgICAgY29ubmVjdChw
cm9jLCBTSUdOQUwoc3NoRmluaXNoZWQoYm9vbCxRU3RyaW5nLGludCkpLCByZWNlaXZlciwgc2xv
dEZpbmlzaGVkKTsKKyAgICAgICAgY29ubmVjdChwcm9jLCBTSUdOQUwoc3NoRmluaXNoZWQoYm9v
bCwgUVN0cmluZywgaW50KSksIHJlY2VpdmVyLCBzbG90RmluaXNoZWQpOwogICAgIH0KLSAgICBp
ZihyZWNlaXZlciAmJiBzbG90VHVubmVsT2spCisgICAgaWYgKHJlY2VpdmVyICYmIHNsb3RUdW5u
ZWxPaykKICAgICB7CiAgICAgICAgIGNvbm5lY3QocHJvYywgU0lHTkFMKHNzaFR1bm5lbE9rKGlu
dCkpLCByZWNlaXZlciwgc2xvdFR1bm5lbE9rKTsKICAgICB9CiAgICAgcHJvYy0+c3RhcnRUdW5u
ZWwoZm9yd2FyZEhvc3QsIGZvcndhcmRQb3J0LCBsb2NhbEhvc3QsIGxvY2FsUG9ydCwgcmV2ZXJz
ZSk7Ci0gICAgaWYocmV2ZXJzZSAmJiAha2VyYmVyb3MpCisgICAgaWYgKHJldmVyc2UgJiYgIWtl
cmJlcm9zKQogICAgIHsKLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmV2ZXJzZVR1bm5l
bE9rKFNzaFByb2Nlc3MqKSksIHByb2MsIFNMT1Qoc2xvdFJldmVyc2VUdW5uZWxPayhTc2hQcm9j
ZXNzKikpKTsKLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmV2ZXJzZVR1bm5lbEZhaWxl
ZChTc2hQcm9jZXNzKixRU3RyaW5nKSksIHByb2MsIFNMT1Qoc2xvdFJldmVyc2VUdW5uZWxGYWls
ZWQoU3NoUHJvY2VzcyosUVN0cmluZykpKTsKKyAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwo
cmV2ZXJzZVR1bm5lbE9rKFNzaFByb2Nlc3MgKikpLCBwcm9jLCBTTE9UKHNsb3RSZXZlcnNlVHVu
bmVsT2soU3NoUHJvY2VzcyAqKSkpOworICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZXZl
cnNlVHVubmVsRmFpbGVkKFNzaFByb2Nlc3MgKiwgUVN0cmluZykpLCBwcm9jLCBTTE9UKHNsb3RS
ZXZlcnNlVHVubmVsRmFpbGVkKFNzaFByb2Nlc3MgKiwgUVN0cmluZykpKTsKICAgICAgICAgUmV2
ZXJzZVR1bm5lbFJlcXVlc3QgcmVxOwotICAgICAgICByZXEuY3JlYXRvcj1wcm9jOwotICAgICAg
ICByZXEubG9jYWxQb3J0PWxvY2FsUG9ydDsKLSAgICAgICAgcmVxLmxvY2FsSG9zdD1sb2NhbEhv
c3Q7Ci0gICAgICAgIHJlcS5mb3J3YXJkUG9ydD1mb3J3YXJkUG9ydDsKLSAgICAgICAgcmVxLmxp
c3Rlbj1mYWxzZTsKLSAgICAgICAgeDJnb0RlYnVnPDwiUmVxdWVzdGluZyByZXZlcnNlIHR1bm5l
bCBmcm9tIHBvcnQgIjw8Zm9yd2FyZFBvcnQ8PCAiIHRvICI8PGxvY2FsUG9ydDsKKyAgICAgICAg
cmVxLmNyZWF0b3IgPSBwcm9jOworICAgICAgICByZXEubG9jYWxQb3J0ID0gbG9jYWxQb3J0Owor
ICAgICAgICByZXEubG9jYWxIb3N0ID0gbG9jYWxIb3N0OworICAgICAgICByZXEuZm9yd2FyZFBv
cnQgPSBmb3J3YXJkUG9ydDsKKyAgICAgICAgcmVxLmxpc3RlbiA9IGZhbHNlOworICAgICAgICB4
MmdvRGVidWcgPDwgIlJlcXVlc3RpbmcgcmV2ZXJzZSB0dW5uZWwgZnJvbSBwb3J0ICIgPDwgZm9y
d2FyZFBvcnQgPDwgIiB0byAiIDw8IGxvY2FsUG9ydDsKICAgICAgICAgcmV2ZXJzZVR1bm5lbFJl
cXVlc3RNdXRleC5sb2NrKCk7Ci0gICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0PDxyZXE7Cisg
ICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0IDw8IHJlcTsKICAgICAgICAgcmV2ZXJzZVR1bm5l
bFJlcXVlc3RNdXRleC51bmxvY2soKTsKICAgICB9Ci0gICAgcHJvY2Vzc2VzPDxwcm9jOworICAg
IHByb2Nlc3NlcyA8PCBwcm9jOwogICAgIHJldHVybiBwcm9jLT5waWQ7CiB9CiAKLXZvaWQgU3No
TWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5SW50ZXJhY3Rpb25GaW5pc2goU3NoTWFzdGVy
Q29ubmVjdGlvbiogY29ubmVjdGlvbikKK3ZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNz
aFByb3h5SW50ZXJhY3Rpb25GaW5pc2goU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29ubmVjdGlvbikK
IHsKLSAgICB4MmdvRGVidWc8PCJTU0ggcHJveHkgaW50ZXJhY3Rpb24gZmluaXNoZWQiOworICAg
IHgyZ29EZWJ1ZyA8PCAiU1NIIHByb3h5IGludGVyYWN0aW9uIGZpbmlzaGVkIjsKICAgICBzbG90
U3NoUHJveHlVc2VyQXV0aEVycm9yKCJOT19FUlJPUiIpOwogfQogCi12b2lkIFNzaE1hc3RlckNv
bm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uU3RhcnQoU3NoTWFzdGVyQ29ubmVjdGlv
biogY29ubmVjdGlvbiwgUVN0cmluZyBwcm9tcHQpCit2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246
OnNsb3RTc2hQcm94eUludGVyYWN0aW9uU3RhcnQoU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29ubmVj
dGlvbiwgUVN0cmluZyBwcm9tcHQpCiB7CiAgICAgZW1pdCBzdGFydEludGVyYWN0aW9uKHRoaXMs
IHByb21wdCk7CiB9CiAKLXZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5SW50
ZXJhY3Rpb25VcGRhdGUoU3NoTWFzdGVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgUVN0cmluZyBv
dXRwdXQpCit2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9u
VXBkYXRlKFNzaE1hc3RlckNvbm5lY3Rpb24gKmNvbm5lY3Rpb24sIFFTdHJpbmcgb3V0cHV0KQog
ewogICAgIGVtaXQgdXBkYXRlSW50ZXJhY3Rpb24odGhpcywgb3V0cHV0KTsKIH0KIAotCiB2b2lk
IFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUNvbm5lY3Rpb25FcnJvcihRU3RyaW5n
IGVycjEsIFFTdHJpbmcgZXJyMikKIHsKLSAgICBicmVha0xvb3A9dHJ1ZTsKLSAgICBlbWl0IGNv
bm5lY3Rpb25FcnJvcih0cigiU1NIIHByb3h5IGNvbm5lY3Rpb24gZXJyb3IuIiksZXJyMSsiICIr
ZXJyMik7CisgICAgYnJlYWtMb29wID0gdHJ1ZTsKKyAgICBlbWl0IGNvbm5lY3Rpb25FcnJvcih0
cigiU1NIIHByb3h5IGNvbm5lY3Rpb24gZXJyb3IuIiksIGVycjEgKyAiICIgKyBlcnIyKTsKIH0K
IAotdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlTZXJ2ZXJBdXRoRXJyb3Io
aW50IGVyckNvZGUsIFFTdHJpbmcgZXJyLCBTc2hNYXN0ZXJDb25uZWN0aW9uKiBjb24pCit2b2lk
IFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eVNlcnZlckF1dGhFcnJvcihpbnQgZXJy
Q29kZSwgUVN0cmluZyBlcnIsIFNzaE1hc3RlckNvbm5lY3Rpb24gKmNvbikKIHsKLSAgICBlbWl0
IHNlcnZlckF1dGhFcnJvcihlcnJDb2RlLCB0cigiU1NIIHByb3h5IGNvbm5lY3Rpb24gZXJyb3I6
ICIpK2VyciwgY29uKTsKKyAgICBlbWl0IHNlcnZlckF1dGhFcnJvcihlcnJDb2RlLCB0cigiU1NI
IHByb3h5IGNvbm5lY3Rpb24gZXJyb3I6ICIpICsgZXJyLCBjb24pOwogfQogCiB2b2lkIFNzaE1h
c3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eVVzZXJBdXRoRXJyb3IoUVN0cmluZyBlcnIpCiB7
Ci0gICAgYnJlYWtMb29wPXRydWU7Ci0gICAgaWYoZXJyPT0iTk9fRVJST1IiIHx8IGVycj09Ik5P
X1BST1hZX0VSUk9SIikKLSAgICAgIGVtaXQgdXNlckF1dGhFcnJvcihlcnIpOworICAgIGJyZWFr
TG9vcCA9IHRydWU7CisgICAgaWYgKGVyciA9PSAiTk9fRVJST1IiIHx8IGVyciA9PSAiTk9fUFJP
WFlfRVJST1IiKQorICAgICAgICBlbWl0IHVzZXJBdXRoRXJyb3IoZXJyKTsKICAgICBlbHNlCi0g
ICAgICBlbWl0IHVzZXJBdXRoRXJyb3IodHIoIlNTSCBwcm94eSBjb25uZWN0aW9uIGVycm9yOiAi
KStlcnIpOworICAgICAgICBlbWl0IHVzZXJBdXRoRXJyb3IodHIoIlNTSCBwcm94eSBjb25uZWN0
aW9uIGVycm9yOiAiKSArIGVycik7CiB9CiAKLQogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpz
bG90U3NoUHJveHlUdW5uZWxPayhpbnQpCiB7Ci0gICAgeDJnb0RlYnVnPDwiU1NIIHByb3h5IHR1
bm5lbCBlc3RhYmxpc2hlZC4iOwotICAgIHNzaFByb3h5UmVhZHk9dHJ1ZTsKKyAgICB4MmdvRGVi
dWcgPDwgIlNTSCBwcm94eSB0dW5uZWwgZXN0YWJsaXNoZWQuIjsKKyAgICBzc2hQcm94eVJlYWR5
ID0gdHJ1ZTsKIH0KIAotdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlUdW5u
ZWxGYWlsZWQoYm9vbCAsICBRU3RyaW5nIG91dHB1dCwKLSAgICAgICAgaW50KQordm9pZCBTc2hN
YXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlUdW5uZWxGYWlsZWQoYm9vbCwgUVN0cmluZyBv
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQpCiB7Ci0gICAgYnJlYWtMb29wPXRydWU7CisgICAgYnJlYWtMb29wID0gdHJ1ZTsKICAg
ICBlbWl0IGNvbm5lY3Rpb25FcnJvcih0cigiRmFpbGVkIHRvIGNyZWF0ZSBTU0ggcHJveHkgdHVu
bmVsLiIpLCBvdXRwdXQpOwogfQogCi0KLQogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90
U3NoUHJveHlTZXJ2ZXJBdXRoQWJvcnRlZCgpCiB7Ci0gICAgYnJlYWtMb29wPXRydWU7CisgICAg
YnJlYWtMb29wID0gdHJ1ZTsKIH0KIAogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpydW4oKQog
ewotICAgIHgyZ29EZWJ1Zzw8IlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICI8PHRoaXM8
PCIgZW50ZXJpbmcgdGhyZWFkLiI7Ci0gICAgaWYodXNlcHJveHkgJiYgcHJveHl0eXBlPT1QUk9Y
WVNTSCkKKyAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICIg
PDwgdGhpcyA8PCAiIGVudGVyaW5nIHRocmVhZC4iOworICAgIGlmICh1c2Vwcm94eSAmJiBwcm94
eXR5cGUgPT0gUFJPWFlTU0gpCiAgICAgewogICAgICAgICB4MmdvRGVidWcgPDwgInByb3h5c2Vy
dmVyOiAiIDw8IHByb3h5c2VydmVyIDw8ICI7IHByb3h5cG9ydDogIiA8PCBwcm94eXBvcnQgPDwg
IjsgcHJveHlsb2dpbjogIiA8PCBwcm94eWxvZ2luOwotICAgICAgICBzc2hQcm94eT1uZXcgU3No
TWFzdGVyQ29ubmVjdGlvbiAoMCwgcHJveHlzZXJ2ZXIsIHByb3h5cG9ydCxhY2NlcHRVbmtub3du
U2VydmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5
bG9naW4sIHByb3h5cGFzc3dvcmQsIHByb3h5a2V5LCBwcm94eWF1dG9sb2dpbiwgcHJveHlLcmJM
b2dpbiwgZmFsc2UpOwotCi0gICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFNzaE1hc3RlckNvbm5l
Y3Rpb246OnBhc3NwaHJhc2VfdHlwZXM+ICgiU3NoTWFzdGVyQ29ubmVjdGlvbjo6cGFzc3BocmFz
ZV90eXBlcyIpOwotCi0gICAgICAgIGNvbm5lY3QgKCBzc2hQcm94eSwgU0lHTkFMICggY29ubmVj
dGlvbk9rKFFTdHJpbmcpICksIHRoaXMsIFNMT1QgKCBzbG90U3NoUHJveHlDb25uZWN0aW9uT2so
KSApICk7Ci0KLSAgICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwgKCBzZXJ2ZXJBdXRo
RXJyb3IgKCBpbnQsUVN0cmluZyxTc2hNYXN0ZXJDb25uZWN0aW9uKiApICksdGhpcywKLSAgICAg
ICAgICAgICAgICAgIFNMT1QgKCBzbG90U3NoUHJveHlTZXJ2ZXJBdXRoRXJyb3IgKCBpbnQsUVN0
cmluZywgU3NoTWFzdGVyQ29ubmVjdGlvbiogKSApICk7Ci0gICAgICAgIGNvbm5lY3QgKCBzc2hQ
cm94eSwgU0lHTkFMICggbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiosIFNzaE1h
c3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpKSx0aGlzLAotICAgICAgICAgICAgICAg
ICAgU0lHTkFMICggbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiosIFNzaE1hc3Rl
ckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpKSApOwotICAgICAgICBjb25uZWN0ICggc3No
UHJveHksIFNJR05BTCAoIHNlcnZlckF1dGhBYm9ydGVkKCkpLHRoaXMsCi0gICAgICAgICAgICAg
ICAgICBTTE9UICggc2xvdFNzaFByb3h5U2VydmVyQXV0aEFib3J0ZWQoKSkgKTsKLSAgICAgICAg
Y29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwgKCB1c2VyQXV0aEVycm9yICggUVN0cmluZyApICks
dGhpcyxTTE9UICggc2xvdFNzaFByb3h5VXNlckF1dGhFcnJvciAoIFFTdHJpbmcgKSApICk7Ci0g
ICAgICAgIGNvbm5lY3QgKCBzc2hQcm94eSwgU0lHTkFMICggY29ubmVjdGlvbkVycm9yICggUVN0
cmluZyxRU3RyaW5nICkgKSwgdGhpcywKLSAgICAgICAgICAgICAgICAgIFNMT1QgKCBzbG90U3No
UHJveHlDb25uZWN0aW9uRXJyb3IgKCBRU3RyaW5nLFFTdHJpbmcgKSApICk7Ci0KLSAgICAgICAg
Y29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwoc3RhcnRJbnRlcmFjdGlvbihTc2hNYXN0ZXJDb25u
ZWN0aW9uKixRU3RyaW5nKSksdGhpcywKLSAgICAgICAgICAgICAgICAgIFNMT1Qoc2xvdFNzaFBy
b3h5SW50ZXJhY3Rpb25TdGFydChTc2hNYXN0ZXJDb25uZWN0aW9uKixRU3RyaW5nKSkgKTsKLSAg
ICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwodXBkYXRlSW50ZXJhY3Rpb24oU3NoTWFz
dGVyQ29ubmVjdGlvbiosUVN0cmluZykpLHRoaXMsCi0gICAgICAgICAgICAgICAgICBTTE9UKHNs
b3RTc2hQcm94eUludGVyYWN0aW9uVXBkYXRlKFNzaE1hc3RlckNvbm5lY3Rpb24qLFFTdHJpbmcp
KSApOwotICAgICAgICBjb25uZWN0ICggc3NoUHJveHksIFNJR05BTChmaW5pc2hJbnRlcmFjdGlv
bihTc2hNYXN0ZXJDb25uZWN0aW9uKikpLHRoaXMsCi0JCSAgU0xPVChzbG90U3NoUHJveHlJbnRl
cmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uKikpKTsKLS8vICAgICAgICAgY29ubmVj
dCAoIGludGVyRGxnLCBTSUdOQUwodGV4dEVudGVyZWQoUVN0cmluZykpLCBjb24sIFNMT1QoaW50
ZXJhY3Rpb25UZXh0RW50ZXIoUVN0cmluZykpKTsKLS8vICAgICAgICAgY29ubmVjdCAoIGludGVy
RGxnLCBTSUdOQUwoaW50ZXJydXB0KCkpLCBjb24sIFNMT1QoaW50ZXJhY3Rpb25JbnRlcnJ1cHRT
bG90KCkpKTsKLQotICAgICAgICBzc2hQcm94eVJlYWR5PWZhbHNlOworICAgICAgICBzc2hQcm94
eSA9IG5ldyBTc2hNYXN0ZXJDb25uZWN0aW9uKDAsIHByb3h5c2VydmVyLCBwcm94eXBvcnQsIGFj
Y2VwdFVua25vd25TZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3h5bG9naW4sIHByb3h5cGFzc3dvcmQsIHByb3h5a2V5LCBwcm94eWF1dG9sb2dp
biwgcHJveHlLcmJMb2dpbiwgZmFsc2UpOworCisgICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFNz
aE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXM+KCJTc2hNYXN0ZXJDb25uZWN0aW9u
OjpwYXNzcGhyYXNlX3R5cGVzIik7CisKKyAgICAgICAgY29ubmVjdChzc2hQcm94eSwgU0lHTkFM
KGNvbm5lY3Rpb25PayhRU3RyaW5nKSksIHRoaXMsIFNMT1Qoc2xvdFNzaFByb3h5Q29ubmVjdGlv
bk9rKCkpKTsKKworICAgICAgICBjb25uZWN0KHNzaFByb3h5LCBTSUdOQUwoc2VydmVyQXV0aEVy
cm9yKGludCwgUVN0cmluZywgU3NoTWFzdGVyQ29ubmVjdGlvbiAqKSksIHRoaXMsCisgICAgICAg
ICAgICAgICAgU0xPVChzbG90U3NoUHJveHlTZXJ2ZXJBdXRoRXJyb3IoaW50LCBRU3RyaW5nLCBT
c2hNYXN0ZXJDb25uZWN0aW9uICopKSk7CisgICAgICAgIGNvbm5lY3Qoc3NoUHJveHksIFNJR05B
TChuZWVkUGFzc1BocmFzZShTc2hNYXN0ZXJDb25uZWN0aW9uICosIFNzaE1hc3RlckNvbm5lY3Rp
b246OnBhc3NwaHJhc2VfdHlwZXMpKSwgdGhpcywKKyAgICAgICAgICAgICAgICBTSUdOQUwobmVl
ZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpw
YXNzcGhyYXNlX3R5cGVzKSkpOworICAgICAgICBjb25uZWN0KHNzaFByb3h5LCBTSUdOQUwoc2Vy
dmVyQXV0aEFib3J0ZWQoKSksIHRoaXMsCisgICAgICAgICAgICAgICAgU0xPVChzbG90U3NoUHJv
eHlTZXJ2ZXJBdXRoQWJvcnRlZCgpKSk7CisgICAgICAgIGNvbm5lY3Qoc3NoUHJveHksIFNJR05B
TCh1c2VyQXV0aEVycm9yKFFTdHJpbmcpKSwgdGhpcywgU0xPVChzbG90U3NoUHJveHlVc2VyQXV0
aEVycm9yKFFTdHJpbmcpKSk7CisgICAgICAgIGNvbm5lY3Qoc3NoUHJveHksIFNJR05BTChjb25u
ZWN0aW9uRXJyb3IoUVN0cmluZywgUVN0cmluZykpLCB0aGlzLAorICAgICAgICAgICAgICAgIFNM
T1Qoc2xvdFNzaFByb3h5Q29ubmVjdGlvbkVycm9yKFFTdHJpbmcsIFFTdHJpbmcpKSk7CisKKyAg
ICAgICAgY29ubmVjdChzc2hQcm94eSwgU0lHTkFMKHN0YXJ0SW50ZXJhY3Rpb24oU3NoTWFzdGVy
Q29ubmVjdGlvbiAqLCBRU3RyaW5nKSksIHRoaXMsCisgICAgICAgICAgICAgICAgU0xPVChzbG90
U3NoUHJveHlJbnRlcmFjdGlvblN0YXJ0KFNzaE1hc3RlckNvbm5lY3Rpb24gKiwgUVN0cmluZykp
KTsKKyAgICAgICAgY29ubmVjdChzc2hQcm94eSwgU0lHTkFMKHVwZGF0ZUludGVyYWN0aW9uKFNz
aE1hc3RlckNvbm5lY3Rpb24gKiwgUVN0cmluZykpLCB0aGlzLAorICAgICAgICAgICAgICAgIFNM
T1Qoc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25VcGRhdGUoU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBR
U3RyaW5nKSkpOworICAgICAgICBjb25uZWN0KHNzaFByb3h5LCBTSUdOQUwoZmluaXNoSW50ZXJh
Y3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiAqKSksIHRoaXMsCisgICAgICAgICAgICAgICAgU0xP
VChzbG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uICopKSk7
CisgICAgICAgIC8vICAgICAgICAgY29ubmVjdCAoIGludGVyRGxnLCBTSUdOQUwodGV4dEVudGVy
ZWQoUVN0cmluZykpLCBjb24sIFNMT1QoaW50ZXJhY3Rpb25UZXh0RW50ZXIoUVN0cmluZykpKTsK
KyAgICAgICAgLy8gICAgICAgICBjb25uZWN0ICggaW50ZXJEbGcsIFNJR05BTChpbnRlcnJ1cHQo
KSksIGNvbiwgU0xPVChpbnRlcmFjdGlvbkludGVycnVwdFNsb3QoKSkpOworCisgICAgICAgIHNz
aFByb3h5UmVhZHkgPSBmYWxzZTsKICAgICAgICAgc3NoUHJveHktPnN0YXJ0KCk7CiAKLSAgICAg
ICAgd2hpbGUoISBzc2hQcm94eVJlYWR5KQorICAgICAgICB3aGlsZSAoIXNzaFByb3h5UmVhZHkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKGJyZWFrTG9vcCkKKyAgICAgICAgICAgIGlmIChi
cmVha0xvb3ApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcXVpdCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTUzNSw0NCArNTIyLDQ2IEBAIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6cnVuKCkKICAgICAgICAgICAgIHRoaXMtPnVzbGVlcCgyMDApOwogICAgICAgICB9
CiAgICAgfQotICAgIGRpc2Nvbm5lY3RTZXNzaW9uRmxhZz1mYWxzZTsKKyAgICBkaXNjb25uZWN0
U2Vzc2lvbkZsYWcgPSBmYWxzZTsKIAogICAgIGludCB2ZXJib3NpdHkgPSBTU0hfTE9HX05PTE9H
OwogCi0gICAgaWYgKE9OTWFpbldpbmRvdzo6bGlic3NoX2RlYnVnZ2luZykgewotI2lmIExJQlNT
SF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDApCi0gICAgICB2ZXJib3Np
dHkgPSBTU0hfTE9HX0lORk87CisgICAgaWYgKE9OTWFpbldpbmRvdzo6bGlic3NoX2RlYnVnZ2lu
ZykKKyAgICB7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2
LCAwKQorICAgICAgICB2ZXJib3NpdHkgPSBTU0hfTE9HX0lORk87CiAjZWxzZQotICAgICAgdmVy
Ym9zaXR5ID0gU1NIX0xPR19QUk9UT0NPTDsKKyAgICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19Q
Uk9UT0NPTDsKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChPTk1haW5XaW5kb3c6OmxpYnNzaF9w
YWNrZXRsb2cpIHsKLSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgw
LCA2LCAwKQotICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19ERUJVRzsKKyAgICBpZiAoT05NYWlu
V2luZG93OjpsaWJzc2hfcGFja2V0bG9nKQorICAgIHsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQg
Pj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCisgICAgICAgIHZlcmJvc2l0eSA9IFNTSF9MT0df
REVCVUc7CiAjZWxzZQotICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19QQUNLRVQ7CisgICAgICAg
IHZlcmJvc2l0eSA9IFNTSF9MT0dfUEFDS0VUOwogI2VuZGlmCiAgICAgfQogCiAgICAgbG9uZyB0
aW1lb3V0ID0gNjA7CiAKICAgICBteV9zc2hfc2Vzc2lvbiA9IHNzaF9uZXcoKTsKLSAgICBpZiAo
IG15X3NzaF9zZXNzaW9uID09IE5VTEwgKQorICAgIGlmIChteV9zc2hfc2Vzc2lvbiA9PSBOVUxM
KQogICAgIHsKLSAgICAgICAgUVN0cmluZyBlcnI9dHIgKCAiQ2Fubm90IGNyZWF0ZSBTU0ggc2Vz
c2lvbi4iICk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8ZXJyPDxlbmRsOwotICAgICAgICBlbWl0IGNv
bm5lY3Rpb25FcnJvciAoIGVyciwiIiApOworICAgICAgICBRU3RyaW5nIGVyciA9IHRyKCJDYW5u
b3QgY3JlYXRlIFNTSCBzZXNzaW9uLiIpOworICAgICAgICB4MmdvRGVidWcgPDwgZXJyIDw8IGVu
ZGw7CisgICAgICAgIGVtaXQgY29ubmVjdGlvbkVycm9yKGVyciwgIiIpOwogICAgICAgICBxdWl0
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZmRlZiBRX09TX1dJTgogICAgIHsKLSAg
ICAgICAgUUJ5dGVBcnJheSB0bXBfQkEgPSAobWFpblduZC0+Z2V0SG9tZURpcmVjdG9yeSAoKSAr
ICIvc3NoIikudG9Mb2NhbDhCaXQgKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBID0gKG1h
aW5XbmQtPmdldEhvbWVEaXJlY3RvcnkoKSArICIvc3NoIikudG9Mb2NhbDhCaXQoKTsKIAotICAg
ICAgICBzc2hfb3B0aW9uc19zZXQgKCBteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfU1NIX0RJ
UiwgdG1wX0JBLmRhdGEgKCkpOwotICAgICAgICB4MmdvRGVidWcgPDwgIlNldHRpbmcgU1NIIGRp
cmVjdG9yeSB0byAiIDw8IHRtcF9CQS5kYXRhICgpOworICAgICAgICBzc2hfb3B0aW9uc19zZXQo
bXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1NTSF9ESVIsIHRtcF9CQS5kYXRhKCkpOworICAg
ICAgICB4MmdvRGVidWcgPDwgIlNldHRpbmcgU1NIIGRpcmVjdG9yeSB0byAiIDw8IHRtcF9CQS5k
YXRhKCk7CiAgICAgICAgIGlmIChrZXJiZXJvcykKICAgICAgICAgewogICAgICAgICAgICAgcGFy
c2VLbm93bkhvc3RzKCk7CkBAIC01ODgsMTI5ICs1NzcsMTI5IEBAIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6cnVuKCkKICAgICB7CiAgICAgICAgIHNvY2tldF90IHByb3h5c29ja2V0ID0gU1NI
X0lOVkFMSURfU09DS0VUOwogCi0gICAgICAgIHRjcE5ldHdvcmtQcm94eSA9IG5ldyBRTmV0d29y
a1Byb3h5KCBRTmV0d29ya1Byb3h5OjpIdHRwUHJveHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm94eXNlcnZlciwgcHJveHlwb3J0LCBwcm94eWxvZ2lu
LCBwcm94eXBhc3N3b3JkKTsKKyAgICAgICAgdGNwTmV0d29ya1Byb3h5ID0gbmV3IFFOZXR3b3Jr
UHJveHkoUU5ldHdvcmtQcm94eTo6SHR0cFByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm94eXNlcnZlciwgcHJveHlwb3J0LCBwcm94eWxvZ2luLCBw
cm94eXBhc3N3b3JkKTsKICAgICAgICAgdGNwUHJveHlTb2NrZXQgPSBuZXcgUVRjcFNvY2tldCgp
OwotICAgICAgICB0Y3BQcm94eVNvY2tldC0+c2V0UHJveHkoICp0Y3BOZXR3b3JrUHJveHkgKTsK
KyAgICAgICAgdGNwUHJveHlTb2NrZXQtPnNldFByb3h5KCp0Y3BOZXR3b3JrUHJveHkpOwogICAg
ICAgICB0Y3BQcm94eVNvY2tldC0+Y29ubmVjdFRvSG9zdChob3N0LCBwb3J0KTsKICAgICAgICAg
aWYgKCF0Y3BQcm94eVNvY2tldC0+d2FpdEZvckNvbm5lY3RlZCgzMDAwMCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZT10ciAoICJDYW5ub3QgY29ubmVjdCB0byBwcm94
eSBzZXJ2ZXIuIiApOwotICAgICAgICAgICAgeDJnb0RlYnVnPDxtZXNzYWdlPDxlbmRsOwotICAg
ICAgICAgICAgZW1pdCBjb25uZWN0aW9uRXJyb3IgKCAiUHJveHkiLCBtZXNzYWdlICk7Ci0gICAg
ICAgICAgICBzc2hfZnJlZSAoIG15X3NzaF9zZXNzaW9uICk7CisgICAgICAgICAgICBRU3RyaW5n
IG1lc3NhZ2UgPSB0cigiQ2Fubm90IGNvbm5lY3QgdG8gcHJveHkgc2VydmVyLiIpOworICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8IG1lc3NhZ2UgPDwgZW5kbDsKKyAgICAgICAgICAgIGVtaXQgY29u
bmVjdGlvbkVycm9yKCJQcm94eSIsIG1lc3NhZ2UpOworICAgICAgICAgICAgc3NoX2ZyZWUobXlf
c3NoX3Nlc3Npb24pOwogICAgICAgICAgICAgcXVpdCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIHByb3h5c29ja2V0ID0gdGNwUHJveHlTb2NrZXQtPnNvY2tldERl
c2NyaXB0b3IoKTsKICAgICAgICAgeDJnb0RlYnVnIDw8ICJDcmVhdGVkIEhUVFAgcHJveHkgc29j
a2V0OiAiIDw8IHByb3h5c29ja2V0IDw8IGVuZGw7Ci0gICAgICAgIHNzaF9vcHRpb25zX3NldCgg
bXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0ZELCAmcHJveHlzb2NrZXQpOwotICAgICAgICBz
c2hfc2V0X2ZkX3RvcmVhZCggbXlfc3NoX3Nlc3Npb24pOwotICAgICAgICB4MmdvRGVidWc8PCJD
b25uZWN0ZWQgdG8gSFRUUCBwcm94eSBzZXJ2ZXI6ICIgPDwgcHJveHlzZXJ2ZXIgPDwgIjoiCi0g
ICAgICAgICAgICAgICAgIDw8IHByb3h5cG9ydCA8PGVuZGw7CisgICAgICAgIHNzaF9vcHRpb25z
X3NldChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfRkQsICZwcm94eXNvY2tldCk7CisgICAg
ICAgIHNzaF9zZXRfZmRfdG9yZWFkKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgeDJnb0RlYnVn
IDw8ICJDb25uZWN0ZWQgdG8gSFRUUCBwcm94eSBzZXJ2ZXI6ICIgPDwgcHJveHlzZXJ2ZXIgPDwg
IjoiCisgICAgICAgICAgICAgICAgICA8PCBwcm94eXBvcnQgPDwgZW5kbDsKICAgICB9CiAKLSAg
ICBpZiAoICFzc2hDb25uZWN0KCkgKQorICAgIGlmICghc3NoQ29ubmVjdCgpKQogICAgIHsKLSAg
ICAgICAgaWYoZGlzY29ubmVjdFNlc3Npb25GbGFnKQorICAgICAgICBpZiAoZGlzY29ubmVjdFNl
c3Npb25GbGFnKQogICAgICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJTZXNzaW9uIGlz
IGFscmVhZHkgZGlzY29ubmVjdGVkLCBleGl0aW5nLiI8PGVuZGw7CisgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIlNlc3Npb24gaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIiA8PCBl
bmRsOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFFTdHJpbmcgZXJy
PXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICBRU3RyaW5nIG1lc3Nh
Z2U9dHIgKCAiQ2Fubm90IGNvbm5lY3QgdG8gIiApICtob3N0KyI6IitRU3RyaW5nOjpudW1iZXIg
KCBwb3J0ICk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8bWVzc2FnZTw8IiAtICI8PGVycjsKLSAgICAg
ICAgZW1pdCBjb25uZWN0aW9uRXJyb3IgKCBtZXNzYWdlLCBlcnIgKTsKLSAgICAgICAgc3NoX2Zy
ZWUgKCBteV9zc2hfc2Vzc2lvbiApOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJy
b3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSB0cigiQ2Fubm90
IGNvbm5lY3QgdG8gIikgKyBob3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHBvcnQpOworICAg
ICAgICB4MmdvRGVidWcgPDwgbWVzc2FnZSA8PCAiIC0gIiA8PCBlcnI7CisgICAgICAgIGVtaXQg
Y29ubmVjdGlvbkVycm9yKG1lc3NhZ2UsIGVycik7CisgICAgICAgIHNzaF9mcmVlKG15X3NzaF9z
ZXNzaW9uKTsKICAgICAgICAgcXVpdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
KGRpc2Nvbm5lY3RTZXNzaW9uRmxhZykKKyAgICBpZiAoZGlzY29ubmVjdFNlc3Npb25GbGFnKQog
ICAgIHsKLSAgICAgICAgeDJnb0RlYnVnPDwiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nvbm5lY3Rl
ZCwgZXhpdGluZy4iPDxlbmRsOworICAgICAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24gaXMgYWxy
ZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIiA8PCBlbmRsOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIFFTdHJpbmcgZXJyTXNnOwotICAgIGludCBzdGF0ZT1zZXJ2ZXJBdXRoICggZXJy
TXNnICk7Ci0gICAgaWYgKCBzdGF0ZSAhPSBTU0hfU0VSVkVSX0tOT1dOX09LICkKKyAgICBpbnQg
c3RhdGUgPSBzZXJ2ZXJBdXRoKGVyck1zZyk7CisgICAgaWYgKHN0YXRlICE9IFNTSF9TRVJWRVJf
S05PV05fT0spCiAgICAgewotICAgICAgICBpZihkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCisgICAg
ICAgIGlmIChkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHgy
Z29EZWJ1Zzw8IlNlc3Npb24gaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIjw8ZW5k
bDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nvbm5l
Y3RlZCwgZXhpdGluZy4iIDw8IGVuZGw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgd3JpdGVIb3N0S2V5PXdyaXRlSG9zdEtleVJlYWR5PWZhbHNlOwotICAgICAgICBl
bWl0IHNlcnZlckF1dGhFcnJvciAoIHN0YXRlLGVyck1zZywgdGhpcyApOwotICAgICAgICBmb3Io
OzspCisgICAgICAgIHdyaXRlSG9zdEtleSA9IHdyaXRlSG9zdEtleVJlYWR5ID0gZmFsc2U7Cisg
ICAgICAgIGVtaXQgc2VydmVyQXV0aEVycm9yKHN0YXRlLCBlcnJNc2csIHRoaXMpOworICAgICAg
ICBmb3IgKDs7KQogICAgICAgICB7CiAgICAgICAgICAgICB0aGlzLT51c2xlZXAoMTAwKTsKICAg
ICAgICAgICAgIHdyaXRlSG9zdEtleU11dGV4LmxvY2soKTsKLSAgICAgICAgICAgIGlmKHdyaXRl
SG9zdEtleVJlYWR5KQorICAgICAgICAgICAgaWYgKHdyaXRlSG9zdEtleVJlYWR5KQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmKHdyaXRlSG9zdEtleSkKKyAgICAgICAgICAgICAg
ICBpZiAod3JpdGVIb3N0S2V5KQogICAgICAgICAgICAgICAgICAgICBzc2hfd3JpdGVfa25vd25o
b3N0KG15X3NzaF9zZXNzaW9uKTsKICAgICAgICAgICAgICAgICB3cml0ZUhvc3RLZXlNdXRleC51
bmxvY2soKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHdyaXRlSG9zdEtleU11dGV4LnVubG9jaygpOwogICAgICAgICB9Ci0gICAgICAgIHNzaF9k
aXNjb25uZWN0ICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgc3NoX2ZyZWUgKCBteV9zc2hf
c2Vzc2lvbiApOworICAgICAgICBzc2hfZGlzY29ubmVjdChteV9zc2hfc2Vzc2lvbik7CisgICAg
ICAgIHNzaF9mcmVlKG15X3NzaF9zZXNzaW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmKGRpc2Nvbm5lY3RTZXNzaW9uRmxhZykKKyAgICBpZiAoZGlzY29ubmVjdFNlc3Npb25G
bGFnKQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnPDwiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nv
bm5lY3RlZCwgZXhpdGluZy4iPDxlbmRsOworICAgICAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24g
aXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIiA8PCBlbmRsOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUUJ5dGVBcnJheSB0bXBfQkEgPSB1c2VyLnRvTG9jYWw4Qml0ICgp
OwotICAgIHNzaF9vcHRpb25zX3NldCAoIG15X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VS
LCB0bXBfQkEuZGF0YSAoKSApOworICAgIFFCeXRlQXJyYXkgdG1wX0JBID0gdXNlci50b0xvY2Fs
OEJpdCgpOworICAgIHNzaF9vcHRpb25zX3NldChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNf
VVNFUiwgdG1wX0JBLmRhdGEoKSk7CiAKICNpZmRlZiBRX09TX1dJTgogICAgIHsKLSAgICAgICAg
UUJ5dGVBcnJheSB0bXBfQkEgPSAobWFpblduZC0+Z2V0SG9tZURpcmVjdG9yeSAoKSArICIvc3No
IikudG9Mb2NhbDhCaXQgKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBID0gKG1haW5XbmQt
PmdldEhvbWVEaXJlY3RvcnkoKSArICIvc3NoIikudG9Mb2NhbDhCaXQoKTsKIAotICAgICAgICBz
c2hfb3B0aW9uc19zZXQgKCBteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfU1NIX0RJUiwgdG1w
X0JBLmRhdGEgKCkgKTsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJTZXR0aW5nIFNTSCBkaXJlY3Rv
cnkgdG8gIiA8PCB0bXBfQkEuZGF0YSAoKTsKKyAgICAgICAgc3NoX29wdGlvbnNfc2V0KG15X3Nz
aF9zZXNzaW9uLCBTU0hfT1BUSU9OU19TU0hfRElSLCB0bXBfQkEuZGF0YSgpKTsKKyAgICAgICAg
eDJnb0RlYnVnIDw8ICJTZXR0aW5nIFNTSCBkaXJlY3RvcnkgdG8gIiA8PCB0bXBfQkEuZGF0YSgp
OwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKCB1c2VyQXV0aCgpICkKKyAgICBpZiAodXNlckF1
dGgoKSkKICAgICB7Ci0gICAgICAgIGlmKGRpc2Nvbm5lY3RTZXNzaW9uRmxhZykKKyAgICAgICAg
aWYgKGRpc2Nvbm5lY3RTZXNzaW9uRmxhZykKICAgICAgICAgewotICAgICAgICAgICAgeDJnb0Rl
YnVnPDwiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nvbm5lY3RlZCwgZXhpdGluZy4iPDxlbmRsOwor
ICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIGlzIGFscmVhZHkgZGlzY29ubmVjdGVk
LCBleGl0aW5nLiIgPDwgZW5kbDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICB4MmdvRGVidWc8PCJVc2VyIGF1dGhlbnRpY2F0aW9uIE9LLiI7CisgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiVXNlciBhdXRoZW50aWNhdGlvbiBPSy4iOwogICAgICAgICAvLyBjaGVja0xvZ2lu
KCkgaXMgY3VycmVudGx5IHNwZWNpZmljIHRvIGxpYnNzaC4KLSAgICAgICAgaWYoa2VyYmVyb3Mp
CisgICAgICAgIGlmIChrZXJiZXJvcykKICAgICAgICAgewogICAgICAgICAgICAgZW1pdCBjb25u
ZWN0aW9uT2soaG9zdCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZih0aGlzLT5sb2dpbkNo
ZWNrID09IGZhbHNlKQorICAgICAgICBlbHNlIGlmICh0aGlzLT5sb2dpbkNoZWNrID09IGZhbHNl
KQogICAgICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJTa2lwcGluZyBMb2dpbiBDaGVj
ayBhcyByZXF1ZXN0ZWQgYnkgY29uZmlndXJhdGlvbiI7CisgICAgICAgICAgICB4MmdvRGVidWcg
PDwgIlNraXBwaW5nIExvZ2luIENoZWNrIGFzIHJlcXVlc3RlZCBieSBjb25maWd1cmF0aW9uIjsK
ICAgICAgICAgICAgIGVtaXQgY29ubmVjdGlvbk9rKGhvc3QpOwogICAgICAgICB9CiAgICAgICAg
IGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYoY2hlY2tMb2dpbigpKQorICAgICAgICAg
ICAgaWYgKGNoZWNrTG9naW4oKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4Mmdv
RGVidWc8PCJMb2dpbiBDaGVjayAtIE9LIjsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IkxvZ2luIENoZWNrIC0gT0siOwogICAgICAgICAgICAgICAgIGVtaXQgY29ubmVjdGlvbk9rKGhv
c3QpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IkxvZ2luIENoZWNrIC0gRmFpbGVkIjsKLS8vICAgICAg
ICAgIGlmKCFpbnRlcmFjdGlvbkludGVycnVwdCkKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcg
PDwgIkxvZ2luIENoZWNrIC0gRmFpbGVkIjsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICBp
ZighaW50ZXJhY3Rpb25JbnRlcnJ1cHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgZW1pdCBmaW5pc2hJbnRlcmFjdGlvbih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdCBmaW5pc2hJbnRlcmFjdGlvbih0aGlzKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3NoX2Rpc2Nvbm5lY3QgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAg
ICAgIHNzaF9mcmVlICggbXlfc3NoX3Nlc3Npb24gKTsKKyAgICAgICAgICAgICAgICBzc2hfZGlz
Y29ubmVjdChteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAgICAgc3NoX2ZyZWUobXlfc3No
X3Nlc3Npb24pOwogICAgICAgICAgICAgICAgIHF1aXQoKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC03MTgsMTA1ICs3MDcsMTA0IEBAIHZvaWQgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6cnVuKCkKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYoZGlz
Y29ubmVjdFNlc3Npb25GbGFnKQorICAgICAgICBpZiAoZGlzY29ubmVjdFNlc3Npb25GbGFnKQog
ICAgICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJTZXNzaW9uIGlzIGFscmVhZHkgZGlz
Y29ubmVjdGVkLCBleGl0aW5nLiI8PGVuZGw7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlNl
c3Npb24gaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIiA8PCBlbmRsOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFFTdHJpbmcgZXJyOwogICAgICAgICBp
ZiAoIWtlcmJlcm9zKQogICAgICAgICB7Ci0gICAgICAgICAgICBlcnI9c3NoX2dldF9lcnJvciAo
IG15X3NzaF9zZXNzaW9uICk7CisgICAgICAgICAgICBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3Nz
aF9zZXNzaW9uKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGVycj1zc2hQcm9jRXJyU3RyaW5nOworICAgICAgICAgICAgZXJyID0gc3NoUHJvY0VyclN0
cmluZzsKICAgICAgICAgfQotICAgICAgICBRU3RyaW5nIG1lc3NhZ2U9dHIgKCAiQXV0aGVudGlj
YXRpb24gZmFpbGVkLiIgKTsKLSAgICAgICAgeDJnb0RlYnVnPDxtZXNzYWdlPDwiIC0gIjw8ZXJy
OwotICAgICAgICBlbWl0IHVzZXJBdXRoRXJyb3IgKCBhdXRoRXJyb3JzLmpvaW4gKCAiXG4iICkg
KTsKLSAgICAgICAgc3NoX2Rpc2Nvbm5lY3QgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICBz
c2hfZnJlZSAoIG15X3NzaF9zZXNzaW9uICk7CisgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IHRy
KCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBtZXNzYWdl
IDw8ICIgLSAiIDw8IGVycjsKKyAgICAgICAgZW1pdCB1c2VyQXV0aEVycm9yKGF1dGhFcnJvcnMu
am9pbigiXG4iKSk7CisgICAgICAgIHNzaF9kaXNjb25uZWN0KG15X3NzaF9zZXNzaW9uKTsKKyAg
ICAgICAgc3NoX2ZyZWUobXlfc3NoX3Nlc3Npb24pOwogICAgICAgICBxdWl0KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLQogI2lmbmRlZiBRX09TX1dJTgotICAgIGNvbnN0IGludCB5PTE7
CisgICAgY29uc3QgaW50IHkgPSAxOwogI2Vsc2UKLSAgICBjb25zdCBjaGFyIHk9MTsKKyAgICBj
b25zdCBjaGFyIHkgPSAxOwogI2VuZGlmCi0gICAgc29ja2V0X3Qgc2Vzc2lvbl9zb2NrPXNzaF9n
ZXRfZmQobXlfc3NoX3Nlc3Npb24pOwotICAgIHNldHNvY2tvcHQoc2Vzc2lvbl9zb2NrLCBJUFBS
T1RPX1RDUCwgVENQX05PREVMQVksJnksIHNpemVvZihpbnQpKTsKLQorICAgIHNvY2tldF90IHNl
c3Npb25fc29jayA9IHNzaF9nZXRfZmQobXlfc3NoX3Nlc3Npb24pOworICAgIHNldHNvY2tvcHQo
c2Vzc2lvbl9zb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZ5LCBzaXplb2YoaW50KSk7
CiAKICAgICBjaGFubmVsTG9vcCgpOwogfQogCi0KIFNzaE1hc3RlckNvbm5lY3Rpb246On5Tc2hN
YXN0ZXJDb25uZWN0aW9uKCkKIHsKIAogICAgIGRpc2Nvbm5lY3RGbGFnTXV0ZXgubG9jaygpOwot
ICAgIGRpc2Nvbm5lY3RTZXNzaW9uRmxhZz10cnVlOworICAgIGRpc2Nvbm5lY3RTZXNzaW9uRmxh
ZyA9IHRydWU7CiAgICAgZGlzY29ubmVjdEZsYWdNdXRleC51bmxvY2soKTsKLSAgICB4MmdvRGVi
dWc8PCJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAiPDx0aGlzPDwiIHdhaXRpbmcgZm9y
IHRocmVhZCB0byBmaW5pc2guIjsKKyAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rp
b24sIGluc3RhbmNlICIgPDwgdGhpcyA8PCAiIHdhaXRpbmcgZm9yIHRocmVhZCB0byBmaW5pc2gu
IjsKICAgICB3YWl0KDE1MDAwKTsKLSAgICB4MmdvRGVidWc8PCJTc2hNYXN0ZXJDb25uZWN0aW9u
LCBpbnN0YW5jZSAiPDx0aGlzPDwiIHRocmVhZCBmaW5pc2hlZC4iOwotICAgIGZvcihpbnQgaT1w
cm9jZXNzZXMuY291bnQoKS0xOyBpPj0wOyAtLWkpCisgICAgeDJnb0RlYnVnIDw8ICJTc2hNYXN0
ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAiIDw8IHRoaXMgPDwgIiB0aHJlYWQgZmluaXNoZWQuIjsK
KyAgICBmb3IgKGludCBpID0gcHJvY2Vzc2VzLmNvdW50KCkgLSAxOyBpID49IDA7IC0taSkKICAg
ICB7CiAgICAgICAgIGRlbGV0ZSBwcm9jZXNzZXNbaV07CiAgICAgfQotICAgIHgyZ29EZWJ1Zzw8
IlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICI8PHRoaXM8PCIgZmluaXNoZWQgZGVzdHJ1
Y3Rvci4iOworICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5zdGFuY2Ug
IiA8PCB0aGlzIDw8ICIgZmluaXNoZWQgZGVzdHJ1Y3Rvci4iOwogfQogCi0KIGJvb2wgU3NoTWFz
dGVyQ29ubmVjdGlvbjo6c3NoQ29ubmVjdCgpCiB7CiAgICAgaW50IHJjOwogICAgIFFCeXRlQXJy
YXkgdG1wQkEgPSBob3N0LnRvTG9jYWw4Qml0KCk7Ci0gICAgaWYodXNlcHJveHkgJiYgcHJveHl0
eXBlPT1QUk9YWVNTSCkKKyAgICBpZiAodXNlcHJveHkgJiYgcHJveHl0eXBlID09IFBST1hZU1NI
KQogICAgIHsKLSAgICAgICAgc3NoX29wdGlvbnNfc2V0ICggbXlfc3NoX3Nlc3Npb24sIFNTSF9P
UFRJT05TX0hPU1QsICIxMjcuMC4wLjEiICk7Ci0gICAgICAgIGlmIChsb2NhbFByb3h5UG9ydCkg
ewotICAgICAgICAgICAgc3NoX29wdGlvbnNfc2V0ICggbXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJ
T05TX1BPUlQsICZsb2NhbFByb3h5UG9ydCApOworICAgICAgICBzc2hfb3B0aW9uc19zZXQobXlf
c3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsICIxMjcuMC4wLjEiKTsKKyAgICAgICAgaWYg
KGxvY2FsUHJveHlQb3J0KQorICAgICAgICB7CisgICAgICAgICAgICBzc2hfb3B0aW9uc19zZXQo
bXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1BPUlQsICZsb2NhbFByb3h5UG9ydCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgc3NoX29wdGlvbnNfc2V0ICgg
bXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIHRtcEJBLmRhdGEoKSApOwotICAgICAg
ICBpZiAocG9ydCkgewotICAgICAgICAgICAgc3NoX29wdGlvbnNfc2V0ICggbXlfc3NoX3Nlc3Np
b24sIFNTSF9PUFRJT05TX1BPUlQsICZwb3J0ICk7CisgICAgICAgIHNzaF9vcHRpb25zX3NldCht
eV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wQkEuZGF0YSgpKTsKKyAgICAgICAg
aWYgKHBvcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldChteV9zc2hf
c2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwgJnBvcnQpOwogICAgICAgICB9CiAgICAgfQogCi0j
aWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKKyNpZiBM
SUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCiAgICAgdW5zaWdu
ZWQgaW50IGN1cl9wb3J0ID0gMDsKLSAgICBzc2hfb3B0aW9uc19nZXRfcG9ydCAobXlfc3NoX3Nl
c3Npb24sICZjdXJfcG9ydCk7CisgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQobXlfc3NoX3Nlc3Np
b24sICZjdXJfcG9ydCk7CiAgICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIHBvcnQgYmVmb3JlIGNv
bmZpZyBmaWxlIHBhcnNlOiAiIDw8IGN1cl9wb3J0OwogI2VuZGlmCiAKICAgICAvKiBQYXJzZSB+
Ly5zc2gvY29uZmlnLiAqLwotICAgIGlmIChzc2hfb3B0aW9uc19wYXJzZV9jb25maWcgKG15X3Nz
aF9zZXNzaW9uLCBOVUxMKSA8IDApIHsKKyAgICBpZiAoc3NoX29wdGlvbnNfcGFyc2VfY29uZmln
KG15X3NzaF9zZXNzaW9uLCBOVUxMKSA8IDApCisgICAgewogICAgICAgICB4MmdvRGVidWcgPDwg
Ildhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7CiAgICAgfQog
Ci0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAg
ICBzc2hfb3B0aW9uc19nZXRfcG9ydCAobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7CisjaWYg
TElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQorICAgIHNzaF9v
cHRpb25zX2dldF9wb3J0KG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOwogICAgIHgyZ29EZWJ1
ZyA8PCAiU2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGN1cl9wb3J0
OwogI2VuZGlmCiAKLSAgICByYyA9IHNzaF9jb25uZWN0ICggbXlfc3NoX3Nlc3Npb24gKTsKLSAg
ICBpZiAoIHJjICE9IFNTSF9PSyApCisgICAgcmMgPSBzc2hfY29ubmVjdChteV9zc2hfc2Vzc2lv
bik7CisgICAgaWYgKHJjICE9IFNTSF9PSykKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0vL3NldCB2YWx1ZXMgZm9yIHJlbW90ZSBob3N0IGZvciBwcm9wZXIgc2VydmVyIGF1
dGhlbnRpY2F0aW9uCi0gICAgaWYodXNlcHJveHkgJiYgcHJveHl0eXBlPT1QUk9YWVNTSCkKKyAg
ICAvL3NldCB2YWx1ZXMgZm9yIHJlbW90ZSBob3N0IGZvciBwcm9wZXIgc2VydmVyIGF1dGhlbnRp
Y2F0aW9uCisgICAgaWYgKHVzZXByb3h5ICYmIHByb3h5dHlwZSA9PSBQUk9YWVNTSCkKICAgICB7
CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ29ubmVjdGVkIHZpYSBwcm94eSwgcmVzZXR0aW5nIGNv
bm5lY3Rpb24gdmFsdWVzIG9uIHNlc3Npb24gdG8gIiA8PCB0bXBCQS5kYXRhKCkgPDwgIjoiIDw8
IHBvcnQ7Ci0gICAgICAgIHNzaF9vcHRpb25zX3NldCAoIG15X3NzaF9zZXNzaW9uLCBTU0hfT1BU
SU9OU19IT1NULCB0bXBCQS5kYXRhKCkgKTsKKyAgICAgICAgc3NoX29wdGlvbnNfc2V0KG15X3Nz
aF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBCQS5kYXRhKCkpOwogCiAgICAgICAgIC8q
CiAgICAgICAgICAqIFRoZSBTU0ggcG9ydCBtaWdodCBiZSAwLCB3aGljaCBpbmRpY2F0ZXMgdG8g
dXNlIHRoZSBkZWZhdWx0IHBvcnQKQEAgLTgzNCwyMDUgKzgyMiwyMDcgQEAgYm9vbCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpzc2hDb25uZWN0KCkKICAgICAgICAgaW50IHdvcmtfcG9ydCA9IHBvcnQ7
CiAKICAgICAgICAgLyogT2gsIHllYWgsIGFuZCB3ZSBkb24ndCByZWFsbHkgc3VwcG9ydCBwb3J0
IHZhbHVlcyBvZiAwIGZvciBwcmUtMC42LjAgbGlic3NoLiBTb3JyeS4gKi8KLSNpZiBMSUJTU0hf
VkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQotICAgICAgICBpZiAoIXdv
cmtfcG9ydCkgewotICAgICAgICAgICAgc3NoX3Nlc3Npb24gdG1wX3Nlc3Npb24gPSBzc2hfbmV3
ICgpOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkK
KyAgICAgICAgaWYgKCF3b3JrX3BvcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzaF9zZXNz
aW9uIHRtcF9zZXNzaW9uID0gc3NoX25ldygpOwogCi0gICAgICAgICAgICBpZiAoIXRtcF9zZXNz
aW9uKSB7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvcl9tc2cgPSB0ciAoIkNhbm5vdCBj
cmVhdGUgU1NIIHNlc3Npb24uIik7CisgICAgICAgICAgICBpZiAoIXRtcF9zZXNzaW9uKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIkNhbm5v
dCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CiAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVy
cm9yX21zZzsKICAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCAodG1w
X3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIHRtcEJBLmRhdGEgKCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCh0bXBf
c2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wQkEuZGF0YSgpKTsKIAogICAgICAgICAgICAg
ICAgIC8qIFBhcnNlIH4vLnNzaC9jb25maWcuICovCi0gICAgICAgICAgICAgICAgaWYgKHNzaF9v
cHRpb25zX3BhcnNlX2NvbmZpZyAodG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkgeworICAgICAgICAg
ICAgICAgIGlmIChzc2hfb3B0aW9uc19wYXJzZV9jb25maWcodG1wX3Nlc3Npb24sIE5VTEwpIDwg
MCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
V2FybmluZzogdW5hYmxlIHRvIHBhcnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIjsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5mZXJyZWRfcG9ydCA9
IDA7Ci0gICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQgKHRtcF9zZXNzaW9uLCAm
aW5mZXJyZWRfcG9ydCk7CisgICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQodG1w
X3Nlc3Npb24sICZpbmZlcnJlZF9wb3J0KTsKICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IkZldGNoZWQgaW5mZXJyZWQgc2Vzc2lvbiBwb3J0OiAiIDw8IGluZmVycmVkX3BvcnQ7CiAKICAg
ICAgICAgICAgICAgICB3b3JrX3BvcnQgPSBpbmZlcnJlZF9wb3J0ICYgMHhGRkZGOwogCi0gICAg
ICAgICAgICAgICAgc3NoX2ZyZWUgKHRtcF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBzc2hf
ZnJlZSh0bXBfc2Vzc2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgogCi0g
ICAgICAgIHNzaF9vcHRpb25zX3NldCAoIG15X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19QT1JU
LCAmd29ya19wb3J0ICk7CisgICAgICAgIHNzaF9vcHRpb25zX3NldChteV9zc2hfc2Vzc2lvbiwg
U1NIX09QVElPTlNfUE9SVCwgJndvcmtfcG9ydCk7CiAgICAgfQogCi0jaWYgTElCU1NIX1ZFUlNJ
T05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hfb3B0aW9uc19nZXRf
cG9ydCAobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5U
ID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQorICAgIHNzaF9vcHRpb25zX2dldF9wb3J0KG15
X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOwogICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0
IGJlZm9yZSBjb25maWcgZmlsZSBwYXJzZSAocGFydCAyKTogIiA8PCBjdXJfcG9ydDsKICNlbmRp
ZgogCiAgICAgLyogUGFyc2Ugfi8uc3NoL2NvbmZpZy4gKi8KLSAgICBpZiAoc3NoX29wdGlvbnNf
cGFyc2VfY29uZmlnIChteV9zc2hfc2Vzc2lvbiwgTlVMTCkgPCAwKSB7CisgICAgaWYgKHNzaF9v
cHRpb25zX3BhcnNlX2NvbmZpZyhteV9zc2hfc2Vzc2lvbiwgTlVMTCkgPCAwKQorICAgIHsKICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8gcGFyc2UgdGhlIFNTSCBjb25m
aWcgZmlsZS4iOwogICAgIH0KIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lP
Tl9JTlQgKDAsIDYsIDApCi0gICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQgKG15X3NzaF9zZXNzaW9u
LCAmY3VyX3BvcnQpOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQo
MCwgNiwgMCkKKyAgICBzc2hfb3B0aW9uc19nZXRfcG9ydChteV9zc2hfc2Vzc2lvbiwgJmN1cl9w
b3J0KTsKICAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24gcG9ydCBhZnRlciBjb25maWcgZmlsZSBw
YXJzZSAocGFydCAyKTogIiA8PCBjdXJfcG9ydDsKICNlbmRpZgogCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLQogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp3cml0ZUtub3duSG9zdHMoYm9vbCB3
cml0ZSkKIHsKICAgICB3cml0ZUhvc3RLZXlNdXRleC5sb2NrKCk7Ci0gICAgd3JpdGVIb3N0S2V5
UmVhZHk9dHJ1ZTsKLSAgICB3cml0ZUhvc3RLZXk9d3JpdGU7Ci0gICAgaWYoIXdyaXRlKQorICAg
IHdyaXRlSG9zdEtleVJlYWR5ID0gdHJ1ZTsKKyAgICB3cml0ZUhvc3RLZXkgPSB3cml0ZTsKKyAg
ICBpZiAoIXdyaXRlKQogICAgIHsKLSAgICAgICAgYnJlYWtMb29wPXRydWU7CisgICAgICAgIGJy
ZWFrTG9vcCA9IHRydWU7CiAgICAgICAgIGVtaXQgc2VydmVyQXV0aEFib3J0ZWQoKTsKICAgICB9
CiAgICAgd3JpdGVIb3N0S2V5TXV0ZXgudW5sb2NrKCk7Ci0KIH0KIAotCi1pbnQgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6c2VydmVyQXV0aCAoIFFTdHJpbmcmIGVycm9yTXNnICkKK2ludCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpzZXJ2ZXJBdXRoKFFTdHJpbmcgJmVycm9yTXNnKQogewotICAgIHgyZ29E
ZWJ1Zzw8ImNzZXJ2ZXJBdXRoIjsKKyAgICB4MmdvRGVidWcgPDwgImNzZXJ2ZXJBdXRoIjsKIAog
ICAgIGludCBzdGF0ZSA9IFNTSF9TRVJWRVJfRVJST1I7CiAgICAgdW5zaWduZWQgY2hhciAqaGFz
aCA9IE5VTEw7CiAgICAgY2hhciAqaGV4YSA9IE5VTEw7Ci0jaWYgTElCU1NIX1ZFUlNJT05fSU5U
ID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hfa2V5IHNydl9wdWJrZXkgPSB7
IDAgfTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDAp
CisgICAgc3NoX2tleSBzcnZfcHVia2V5ID0gezB9OwogICAgIGludCByYyA9IFNTSF9FUlJPUjsK
ICAgICBzaXplX3QgaGxlbiA9IDA7CiAjZWxzZQogICAgIGludCBobGVuID0gMDsKICNlbmRpZgog
Ci0gICAgc3RhdGUgPSBzc2hfaXNfc2VydmVyX2tub3duICggbXlfc3NoX3Nlc3Npb24gKTsKKyAg
ICBzdGF0ZSA9IHNzaF9pc19zZXJ2ZXJfa25vd24obXlfc3NoX3Nlc3Npb24pOwogCi0jaWYgTElC
U1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSNpZiBMSUJTU0hf
VkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA4LCAwKQotICAgIHJjID0gc3NoX2dl
dF9zZXJ2ZXJfcHVibGlja2V5IChteV9zc2hfc2Vzc2lvbiwgJnNydl9wdWJrZXkpOwotI2Vsc2Ug
LyogTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgOCwgMCkgKi8KLSAg
ICByYyA9IHNzaF9nZXRfcHVibGlja2V5IChteV9zc2hfc2Vzc2lvbiwgJnNydl9wdWJrZXkpOwor
I2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyNpZiBM
SUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDgsIDApCisgICAgcmMgPSBz
c2hfZ2V0X3NlcnZlcl9wdWJsaWNrZXkobXlfc3NoX3Nlc3Npb24sICZzcnZfcHVia2V5KTsKKyNl
bHNlICAvKiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA4LCAwKSAq
LworICAgIHJjID0gc3NoX2dldF9wdWJsaWNrZXkobXlfc3NoX3Nlc3Npb24sICZzcnZfcHVia2V5
KTsKICNlbmRpZiAvKiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA4
LCAwKSAqLwogCi0gICAgaWYgKFNTSF9PSyAhPSByYykgeworICAgIGlmIChTU0hfT0sgIT0gcmMp
CisgICAgewogICAgICAgICByZXR1cm4gKFNTSF9TRVJWRVJfRVJST1IpOwogICAgIH0KIAotICAg
IHJjID0gc3NoX2dldF9wdWJsaWNrZXlfaGFzaCAoc3J2X3B1YmtleSwgU1NIX1BVQkxJQ0tFWV9I
QVNIX1NIQTEsICZoYXNoLCAmaGxlbik7Ci0gICAgc3NoX2tleV9mcmVlIChzcnZfcHVia2V5KTsK
KyAgICByYyA9IHNzaF9nZXRfcHVibGlja2V5X2hhc2goc3J2X3B1YmtleSwgU1NIX1BVQkxJQ0tF
WV9IQVNIX1NIQTEsICZoYXNoLCAmaGxlbik7CisgICAgc3NoX2tleV9mcmVlKHNydl9wdWJrZXkp
OwogCi0gICAgaWYgKDAgIT0gcmMpIHsKKyAgICBpZiAoMCAhPSByYykKKyAgICB7CiAgICAgICAg
IHJldHVybiAoU1NIX1NFUlZFUl9FUlJPUik7CiAgICAgfQogI2Vsc2UKLSAgICBobGVuID0gc3No
X2dldF9wdWJrZXlfaGFzaCAoIG15X3NzaF9zZXNzaW9uLCAmaGFzaCApOworICAgIGhsZW4gPSBz
c2hfZ2V0X3B1YmtleV9oYXNoKG15X3NzaF9zZXNzaW9uLCAmaGFzaCk7CiAjZW5kaWYKIAotICAg
IGlmICggMCA+PSBobGVuICkKKyAgICBpZiAoMCA+PSBobGVuKQogICAgICAgICByZXR1cm4gU1NI
X1NFUlZFUl9FUlJPUjsKIAotICAgIHgyZ29EZWJ1Zzw8InN0YXRlOiAiPDxzdGF0ZTw8ZW5kbDsK
KyAgICB4MmdvRGVidWcgPDwgInN0YXRlOiAiIDw8IHN0YXRlIDw8IGVuZGw7CiAKLSAgICBzd2l0
Y2ggKCBzdGF0ZSApCisgICAgc3dpdGNoIChzdGF0ZSkKICAgICB7CiAgICAgY2FzZSBTU0hfU0VS
VkVSX0tOT1dOX09LOgogICAgICAgICBicmVhazsgLyogb2sgKi8KIAogICAgIGNhc2UgU1NIX1NF
UlZFUl9LTk9XTl9DSEFOR0VEOgotICAgICAgICBoZXhhID0gc3NoX2dldF9oZXhhICggaGFzaCwg
aGxlbiApOwotICAgICAgICBlcnJvck1zZz1ob3N0KyI6IitRU3RyaW5nOjpudW1iZXIocG9ydCkr
IiAtICIraGV4YTsKLSAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIgKCBoZXhhICk7CisgICAg
ICAgIGhleGEgPSBzc2hfZ2V0X2hleGEoaGFzaCwgaGxlbik7CisgICAgICAgIGVycm9yTXNnID0g
aG9zdCArICI6IiArIFFTdHJpbmc6Om51bWJlcihwb3J0KSArICIgLSAiICsgaGV4YTsKKyAgICAg
ICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaGV4YSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U1NIX1NFUlZFUl9GT1VORF9PVEhFUjoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTU0hfU0VS
VkVSX0ZJTEVfTk9UX0ZPVU5EOgogICAgIGNhc2UgU1NIX1NFUlZFUl9OT1RfS05PV046Ci0gICAg
ICAgIGlmICggIWFjY2VwdFVua25vd25TZXJ2ZXJzICkKKyAgICAgICAgaWYgKCFhY2NlcHRVbmtu
b3duU2VydmVycykKICAgICAgICAgewotICAgICAgICAgICAgaGV4YSA9IHNzaF9nZXRfaGV4YSAo
IGhhc2gsIGhsZW4gKTsKLSAgICAgICAgICAgIGVycm9yTXNnPWhvc3QrIjoiK1FTdHJpbmc6Om51
bWJlcihwb3J0KSsiIC0gIitoZXhhOwotICAgICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIg
KCBoZXhhICk7CisgICAgICAgICAgICBoZXhhID0gc3NoX2dldF9oZXhhKGhhc2gsIGhsZW4pOwor
ICAgICAgICAgICAgZXJyb3JNc2cgPSBob3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHBvcnQp
ICsgIiAtICIgKyBoZXhhOworICAgICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaGV4YSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzc2hfd3JpdGVfa25vd25o
b3N0ICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgc3RhdGU9U1NIX1NFUlZFUl9LTk9XTl9P
SzsKKyAgICAgICAgc3NoX3dyaXRlX2tub3duaG9zdChteV9zc2hfc2Vzc2lvbik7CisgICAgICAg
IHN0YXRlID0gU1NIX1NFUlZFUl9LTk9XTl9PSzsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFNTSF9TRVJWRVJfRVJST1I6Ci0gICAgICAgIGVycm9yTXNnPWhvc3QrIjoiK1FTdHJpbmc6Om51
bWJlcihwb3J0KSsiIC0gIitzc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKKyAgICAg
ICAgZXJyb3JNc2cgPSBob3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHBvcnQpICsgIiAtICIg
KyBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIHNzaF9jbGVhbl9wdWJrZXlfaGFzaCAoICZoYXNoICk7CisgICAgc3NoX2NsZWFuX3B1Ymtl
eV9oYXNoKCZoYXNoKTsKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6c2V0VmVyZmljYXRpb25Db2RlKFFTdHJpbmcgY29kZSkKIHsKLSAgICBjaGFsbGVu
Z2VBdXRoVmVyaWZpY2F0aW9uQ29kZT1jb2RlOworICAgIGNoYWxsZW5nZUF1dGhWZXJpZmljYXRp
b25Db2RlID0gY29kZTsKIH0KIAotCi0KIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1
dGhLZXlib2FyZEludGVyYWN0aXZlKFFTdHJpbmcgcHJvbXB0KQogewotICAgIHgyZ29EZWJ1Zzw8
Ik9wZW4gSW50ZXJhY3Rpb24gZGlhbG9nIHRvIGNvbXBsZXRlIGF1dGhlbnRpY2F0aW9uIjsKKyAg
ICB4MmdvRGVidWcgPDwgIk9wZW4gSW50ZXJhY3Rpb24gZGlhbG9nIHRvIGNvbXBsZXRlIGF1dGhl
bnRpY2F0aW9uIjsKICAgICBlbWl0IHN0YXJ0SW50ZXJhY3Rpb24odGhpcywgcHJvbXB0KTsKLSAg
ICBpbnRlcmFjdGlvbkludGVycnVwdD1mYWxzZTsKLSAgICBpbnRlcmFjdGlvbklucHV0VGV4dD1R
U3RyaW5nOjpudWxsOwotICAgIGludCByZXo9U1NIX0FVVEhfSU5GTzsKLSAgICBib29sIGZpcnN0
TG9vcD10cnVlOwotICAgIGludCBwcm9tcHRzPTE7CisgICAgaW50ZXJhY3Rpb25JbnRlcnJ1cHQg
PSBmYWxzZTsKKyAgICBpbnRlcmFjdGlvbklucHV0VGV4dCA9IFFTdHJpbmc6Om51bGw7CisgICAg
aW50IHJleiA9IFNTSF9BVVRIX0lORk87CisgICAgYm9vbCBmaXJzdExvb3AgPSB0cnVlOworICAg
IGludCBwcm9tcHRzID0gMTsKICAgICBRU3RyaW5nIGluc3RydWN0aW9uOwotICAgIHdoaWxlIChy
ZXo9PVNTSF9BVVRIX0lORk8pCisgICAgd2hpbGUgKHJleiA9PSBTU0hfQVVUSF9JTkZPKQogICAg
IHsKIAotICAgICAgICBpZihmaXJzdExvb3ApCisgICAgICAgIGlmIChmaXJzdExvb3ApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGZpcnN0TG9vcD1mYWxzZTsKKyAgICAgICAgICAgIGZpcnN0TG9v
cCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAg
ICAgcHJvbXB0cz1zc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKG15X3NzaF9zZXNzaW9u
KTsKLSAgICAgICAgICAgIGlmKHByb21wdHM+MCkKLSAgICAgICAgICAgICAgICBlbWl0IHVwZGF0
ZUludGVyYWN0aW9uKHRoaXMsIHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0cHJvbXB0KG15X3NzaF9z
ZXNzaW9uLDAsTlVMTCkpOworICAgICAgICAgICAgcHJvbXB0cyA9IHNzaF91c2VyYXV0aF9rYmRp
bnRfZ2V0bnByb21wdHMobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgaWYgKHByb21wdHMg
PiAwKQorICAgICAgICAgICAgICAgIGVtaXQgdXBkYXRlSW50ZXJhY3Rpb24odGhpcywgc3NoX3Vz
ZXJhdXRoX2tiZGludF9nZXRwcm9tcHQobXlfc3NoX3Nlc3Npb24sIDAsIE5VTEwpKTsKIAotICAg
ICAgICAgICAgUVN0cmluZyBuYW1lPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldG5hbWUobXlfc3No
X3Nlc3Npb24pOworICAgICAgICAgICAgUVN0cmluZyBuYW1lID0gc3NoX3VzZXJhdXRoX2tiZGlu
dF9nZXRuYW1lKG15X3NzaF9zZXNzaW9uKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uID0gc3No
X3VzZXJhdXRoX2tiZGludF9nZXRpbnN0cnVjdGlvbihteV9zc2hfc2Vzc2lvbik7Ci0gICAgICAg
ICAgICB4MmdvRGVidWc8PCJIYXZlIHByb21wdHM6ICI8PHByb21wdHM8PGVuZGw7Ci0gICAgICAg
ICAgICB4MmdvRGVidWc8PCJOYW1lOiAiPDxuYW1lPDxlbmRsOwotICAgICAgICAgICAgeDJnb0Rl
YnVnPDwiSW5zdHJ1Y3Rpb246ICI8PGluc3RydWN0aW9uPDxlbmRsOworICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJIYXZlIHByb21wdHM6ICIgPDwgcHJvbXB0cyA8PCBlbmRsOworICAgICAgICAg
ICAgeDJnb0RlYnVnIDw8ICJOYW1lOiAiIDw8IG5hbWUgPDwgZW5kbDsKKyAgICAgICAgICAgIHgy
Z29EZWJ1ZyA8PCAiSW5zdHJ1Y3Rpb246ICIgPDwgaW5zdHJ1Y3Rpb24gPDwgZW5kbDsKICAgICAg
ICAgfQotICAgICAgICBpZihwcm9tcHRzPjApCisgICAgICAgIGlmIChwcm9tcHRzID4gMCkKICAg
ICAgICAgewotICAgICAgICAgICAgd2hpbGUodHJ1ZSkKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGJvb2wgaW50ZXJydXB0OwogICAgICAg
ICAgICAgICAgIGludGVyYWN0aW9uSW5wdXRNdXRleC5sb2NrKCk7Ci0gICAgICAgICAgICAgICAg
aW50ZXJydXB0PWludGVyYWN0aW9uSW50ZXJydXB0OwotICAgICAgICAgICAgICAgIFFTdHJpbmcg
dGV4dFRvU2VuZD1pbnRlcmFjdGlvbklucHV0VGV4dDsKLSAgICAgICAgICAgICAgICBpbnRlcmFj
dGlvbklucHV0VGV4dD1RU3RyaW5nOjpudWxsOworICAgICAgICAgICAgICAgIGludGVycnVwdCA9
IGludGVyYWN0aW9uSW50ZXJydXB0OworICAgICAgICAgICAgICAgIFFTdHJpbmcgdGV4dFRvU2Vu
ZCA9IGludGVyYWN0aW9uSW5wdXRUZXh0OworICAgICAgICAgICAgICAgIGludGVyYWN0aW9uSW5w
dXRUZXh0ID0gUVN0cmluZzo6bnVsbDsKICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbklucHV0
TXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgaWYodGV4dFRvU2VuZC5sZW5ndGgoKT4w
KQorICAgICAgICAgICAgICAgIGlmICh0ZXh0VG9TZW5kLmxlbmd0aCgpID4gMCkKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IlNFTkQgSW5wdXQgdG8g
U0VSVkVSIjsKLSAgICAgICAgICAgICAgICAgICAgdGV4dFRvU2VuZC5yZXBsYWNlKCJcbiIsIiIp
OwotICAgICAgICAgICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihteV9z
c2hfc2Vzc2lvbiwwLHRleHRUb1NlbmQudG9Mb2NhbDhCaXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHgyZ29EZWJ1ZyA8PCAiU0VORCBJbnB1dCB0byBTRVJWRVIiOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0VG9TZW5kLnJlcGxhY2UoIlxuIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBz
c2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihteV9zc2hfc2Vzc2lvbiwgMCwgdGV4dFRvU2Vu
ZC50b0xvY2FsOEJpdCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmKGludGVycnVwdCkKKyAgICAgICAgICAgICAgICBp
ZiAoaW50ZXJydXB0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeDJn
b0RlYnVnPDwiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKLS8vICAgICAgICAgUVN0
cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dGhFcnJvcnM8PCJOT19FUlJPUiI7CisgICAgICAgICAgICAgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Np
b24gKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0aEVycm9ycyA8PCAiTk9fRVJST1IiOwogICAg
ICAgICAgICAgICAgICAgICBlbWl0IGZpbmlzaEludGVyYWN0aW9uKHRoaXMpOwogCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNDEsMTU5ICsxMDMxLDE2MyBAQCBib29s
IFNzaE1hc3RlckNvbm5lY3Rpb246OnVzZXJBdXRoS2V5Ym9hcmRJbnRlcmFjdGl2ZShRU3RyaW5n
IHByb21wdCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlej1zc2hfdXNl
cmF1dGhfa2JkaW50KG15X3NzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKLQorICAgICAgICByZXog
PSBzc2hfdXNlcmF1dGhfa2JkaW50KG15X3NzaF9zZXNzaW9uLCBOVUxMLCBOVUxMKTsKICAgICB9
Ci0gICAgaWYocmV6PT1TU0hfQVVUSF9TVUNDRVNTKQorICAgIGlmIChyZXogPT0gU1NIX0FVVEhf
U1VDQ0VTUykKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IktleWJvYXJkIGF1dGhlbnRpY2F0
aW9uIHN1Y2Nlc3NmdWwiOworICAgICAgICB4MmdvRGVidWcgPDwgIktleWJvYXJkIGF1dGhlbnRp
Y2F0aW9uIHN1Y2Nlc3NmdWwiOwogICAgICAgICBlbWl0IGZpbmlzaEludGVyYWN0aW9uKHRoaXMp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYocmV6PT1TU0hfQVVUSF9ERU5J
RUQpCisgICAgaWYgKHJleiA9PSBTU0hfQVVUSF9ERU5JRUQpCiAgICAgewotICAgICAgICB4Mmdv
RGVidWc8PCJLZXlib2FyZCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiOwotICAgICAgICBRU3RyaW5n
IGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgaWYoaW5zdHJ1
Y3Rpb24ubGVuZ3RoKCk+MCkKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJLZXlib2FyZCBhdXRoZW50
aWNhdGlvbiBmYWlsZWQiOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlf
c3NoX3Nlc3Npb24pOworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ubGVuZ3RoKCkgPiAwKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRoRXJyb3JzPDxpbnN0cnVjdGlvbjsKKyAgICAgICAgICAg
IGF1dGhFcnJvcnMgPDwgaW5zdHJ1Y3Rpb247CiAgICAgICAgIH0KLSAgICAgICAgYXV0aEVycm9y
czw8ZXJyOworICAgICAgICBhdXRoRXJyb3JzIDw8IGVycjsKICAgICAgICAgZW1pdCBmaW5pc2hJ
bnRlcmFjdGlvbih0aGlzKTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
UVN0cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgYXV0aEVy
cm9yczw8ZXJyOworICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lv
bik7CisgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAKICAgICByZXR1cm4gZmFsc2U7Ci0KIH0KIAot
Ci0KIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckNoYWxsZW5nZUF1dGgoKQogewotICAg
IGludCByZXo9c3NoX3VzZXJhdXRoX2tiZGludChteV9zc2hfc2Vzc2lvbiwgTlVMTCwgTlVMTCk7
CisgICAgaW50IHJleiA9IHNzaF91c2VyYXV0aF9rYmRpbnQobXlfc3NoX3Nlc3Npb24sIE5VTEws
IE5VTEwpOwogICAgIGludCBwcm9tcHRzOwogCi0gICAgc3dpdGNoKCByZXopCisgICAgc3dpdGNo
IChyZXopCiAgICAgewogICAgIGNhc2UgU1NIX0FVVEhfSU5GTzoKLSAgICAgICAgcHJvbXB0cz1z
c2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKG15X3NzaF9zZXNzaW9uKTsKLSAgICAgICAg
eDJnb0RlYnVnPDwiSGF2ZSBwcm9tcHRzOiAiPDxwcm9tcHRzPDxlbmRsOwotICAgICAgICBpZihw
cm9tcHRzKQorICAgICAgICBwcm9tcHRzID0gc3NoX3VzZXJhdXRoX2tiZGludF9nZXRucHJvbXB0
cyhteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiSGF2ZSBwcm9tcHRzOiAi
IDw8IHByb21wdHMgPDwgZW5kbDsKKyAgICAgICAgaWYgKHByb21wdHMpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnByb21wdD0gc3NoX3VzZXJhdXRoX2tiZGludF9nZXRwcm9t
cHQobXlfc3NoX3Nlc3Npb24sMCxOVUxMKTsKLSAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IlByb21w
dFswXTogfCI8PHByb21wdDw8InwiPDxlbmRsOwotICAgICAgICAgICAgUVN0cmluZyBwcj1wcm9t
cHQ7Ci0gICAgICAgICAgICBpZihwci5zdGFydHNXaXRoICgiUGFzc3dvcmQ6IikpCisgICAgICAg
ICAgICBjb25zdCBjaGFyICpwcm9tcHQgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldHByb21wdCht
eV9zc2hfc2Vzc2lvbiwgMCwgTlVMTCk7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlByb21w
dFswXTogfCIgPDwgcHJvbXB0IDw8ICJ8IiA8PCBlbmRsOworICAgICAgICAgICAgUVN0cmluZyBw
ciA9IHByb21wdDsKKyAgICAgICAgICAgIGlmIChwci5zdGFydHNXaXRoKCJQYXNzd29yZDoiKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJQYXNzd29yZCByZXF1
ZXN0Ijw8ZW5kbDsKLSAgICAgICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dl
cihteV9zc2hfc2Vzc2lvbiwwLHBhc3MudG9MYXRpbjEoKSk7CisgICAgICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJQYXNzd29yZCByZXF1ZXN0IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIHNz
aF91c2VyYXV0aF9rYmRpbnRfc2V0YW5zd2VyKG15X3NzaF9zZXNzaW9uLCAwLCBwYXNzLnRvTGF0
aW4xKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB1c2VyQ2hhbGxlbmdlQXV0aCgpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3By
b21wdCA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBuZWVkX3RvX2Rpc3BsYXlfYXV0aF9jb2Rl
X3Byb21wdCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgY2hhbGxlbmdl
X2F1dGhfY29kZV9wcm9tcHRzX3NpemUgPSAoc2l6ZW9mIChjaGFsbGVuZ2VfYXV0aF9jb2RlX3By
b21wdHNfKS9zaXplb2YgKCpjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfKSk7CisgICAgICAg
ICAgICBjb25zdCBzdGQ6OnNpemVfdCBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfc2l6ZSA9
IChzaXplb2YoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzXykgLyBzaXplb2YoKmNoYWxsZW5n
ZV9hdXRoX2NvZGVfcHJvbXB0c18pKTsKIAotICAgICAgICAgICAgaWYgKHByLmNvbnRhaW5zICgi
Y2hhbGxlbmdlIiwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAgICAgICAgICAgeDJnb0Rl
YnVnIDw8ICJwcm9tcHQgY29udGFpbnMgJ2NoYWxsZW5nZSc6ICIgPDwgcHIgPDwgZW5kbDsKLSAg
ICAgICAgICAgICAgaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgbmVlZF90b19kaXNwbGF5X2F1dGhfY29kZV9wcm9tcHQgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKHByLmNvbnRhaW5zKCJjaGFsbGVuZ2UiLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgInByb21wdCBjb250
YWlucyAnY2hhbGxlbmdlJzogIiA8PCBwciA8PCBlbmRsOworICAgICAgICAgICAgICAgIGhhc19j
aGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdCA9IHRydWU7CisgICAgICAgICAgICAgICAgbmVlZF90
b19kaXNwbGF5X2F1dGhfY29kZV9wcm9tcHQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBj
aGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
eDJnb0RlYnVnIDw8ICJDaGVja2luZyBhZ2FpbnN0IGtub3duIHByb21wdCAjIiA8PCBpIDw8ICI6
ICIgPDwgY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tpXSA8PCBlbmRsOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3Qg
aSA9IDA7IGkgPCBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfc2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJDaGVja2luZyBh
Z2FpbnN0IGtub3duIHByb21wdCAjIiA8PCBpIDw8ICI6ICIgPDwgY2hhbGxlbmdlX2F1dGhfY29k
ZV9wcm9tcHRzX1tpXSA8PCBlbmRsOwogCi0gICAgICAgICAgICAgICAgLyogSWdub3JlICJnYXJi
YWdlIiBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZywgYnV0IHJlcXVpcmUgYXQgbGVhc3Qgb25l
IGxpbmUgdG8gc3RhcnQgd2l0aCBhIGtub3duIHByb21wdC4gKi8KLSAgICAgICAgICAgICAgICBR
U3RyaW5nTGlzdCB0bXBfc3RyX2xpc3QgPSBwci5zcGxpdCAoIlxuIiwgUVN0cmluZzo6U2tpcEVt
cHR5UGFydHMpOworICAgICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgImdhcmJhZ2UiIGF0IHRo
ZSBzdGFydCBvZiB0aGUgc3RyaW5nLCBidXQgcmVxdWlyZSBhdCBsZWFzdCBvbmUgbGluZSB0byBz
dGFydCB3aXRoIGEga25vd24gcHJvbXB0LiAqLworICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
TGlzdCB0bXBfc3RyX2xpc3QgPSBwci5zcGxpdCgiXG4iLCBRU3RyaW5nOjpTa2lwRW1wdHlQYXJ0
cyk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKFFTdHJpbmdMaXN0Ojpjb25zdF9pdGVyYXRvciBj
aXQgPSB0bXBfc3RyX2xpc3QuY29uc3RCZWdpbiAoKTsgY2l0ICE9IHRtcF9zdHJfbGlzdC5jb25z
dEVuZCAoKTsgKytjaXQpIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKmNpdCkuc3RhcnRzV2l0
aCAoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tpXSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBmb3IgKFFTdHJpbmdMaXN0Ojpjb25zdF9pdGVyYXRvciBjaXQgPSB0
bXBfc3RyX2xpc3QuY29uc3RCZWdpbigpOyBjaXQgIT0gdG1wX3N0cl9saXN0LmNvbnN0RW5kKCk7
ICsrY2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoKCpjaXQpLnN0YXJ0c1dpdGgoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tpXSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFz
X2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIG90aGVyIGNoYWxsZW5nZSBh
dXRoIGNvZGUgcHJvbXB0cyBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeS4gKi8KLSAgICAgICAgICAg
ICAgICBpZiAoaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0KSB7Ci0gICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIG90aGVyIGNoYWxs
ZW5nZSBhdXRoIGNvZGUgcHJvbXB0cyBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeS4gKi8KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21w
dCkgewotICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IlZlcmlmaWNhdGlvbiBjb2RlIHJlcXVl
c3QiPDxlbmRsOworICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21w
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlZlcmlmaWNh
dGlvbiBjb2RlIHJlcXVlc3QiIDw8IGVuZGw7CiAKLSAgICAgICAgICAgICAgICBjaGFsbGVuZ2VB
dXRoUGFzc3dvcmRBY2NlcHRlZD10cnVlOwotICAgICAgICAgICAgICAgIGlmKGNoYWxsZW5nZUF1
dGhWZXJpZmljYXRpb25Db2RlID09IFFTdHJpbmc6Om51bGwpCisgICAgICAgICAgICAgICAgY2hh
bGxlbmdlQXV0aFBhc3N3b3JkQWNjZXB0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChj
aGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZSA9PSBRU3RyaW5nOjpudWxsKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAga2V5UGhyYXNlUmVhZHk9ZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChuZWVkX3RvX2Rpc3BsYXlfYXV0aF9jb2RlX3Byb21wdCkgewot
ICAgICAgICAgICAgICAgICAgICAgIGVtaXQgbmVlZENoYWxsZW5nZVJlc3BvbnNlKHRoaXMsIHBy
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICBl
bWl0IG5lZWRQYXNzUGhyYXNlKHRoaXMsIFBBU1NQSFJBU0VfQ0hBTExFTkdFKTsKKyAgICAgICAg
ICAgICAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5lZWRfdG9fZGlzcGxheV9hdXRoX2NvZGVfcHJvbXB0KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IG5lZWRDaGFsbGVuZ2VSZXNwb25zZSh0
aGlzLCBwcik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZm9y
KDs7KQorICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVhZHk9ZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbWl0IG5lZWRQYXNzUGhyYXNlKHRoaXMsIFBBU1NQSFJBU0VfQ0hBTExFTkdFKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlYWR5ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT51c2xlZXAoMjAwKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LmxvY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmKGtleVBocmFzZVJlYWR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWR5PXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5UGhyYXNlUmVhZHkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZihyZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZT1rZXlQaHJhc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGNoYWxsZW5nZUF1dGhWZXJpZmljYXRpb25Db2RlPT1R
U3RyaW5nOjpudWxsKQorICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0
aW9uQ29kZSA9IGtleVBocmFzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYWxsZW5nZUF1
dGhWZXJpZmljYXRpb25Db2RlID09IFFTdHJpbmc6Om51bGwpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhFcnJvcnM8PHRyKCJBdXRoZW50aWNhdGlv
biBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRoRXJyb3JzIDw8IHRyKCJB
dXRoZW50aWNhdGlvbiBmYWlsZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3NoX3VzZXJhdXRoX2tiZGludF9zZXRhbnN3ZXIobXlfc3NoX3Nlc3Npb24sMCxj
aGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZS50b0xhdGluMSgpKTsKKyAgICAgICAgICAgICAg
ICBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihteV9zc2hfc2Vzc2lvbiwgMCwgY2hhbGxl
bmdlQXV0aFZlcmlmaWNhdGlvbkNvZGUudG9MYXRpbjEoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHVzZXJDaGFsbGVuZ2VBdXRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
Ci0JICAgIHsKLQkgICAgICAgIHJldHVybiB1c2VyQXV0aEtleWJvYXJkSW50ZXJhY3RpdmUocHJv
bXB0KTsKLQkgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB1c2Vy
QXV0aEtleWJvYXJkSW50ZXJhY3RpdmUocHJvbXB0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB1c2VyQ2hhbGxl
bmdlQXV0aCgpOwogICAgICAgICB9CiAgICAgY2FzZSBTU0hfQVVUSF9TVUNDRVNTOgotICAgICAg
ICB4MmdvRGVidWc8PCJDaGFsbGVuZ2UgYXV0aGVudGljYXRpb24gT0suIjw8ZW5kbDsKKyAgICAg
ICAgeDJnb0RlYnVnIDw8ICJDaGFsbGVuZ2UgYXV0aGVudGljYXRpb24gT0suIiA8PCBlbmRsOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNTSF9BVVRIX0RFTklFRDoKLSAgICAgICAg
aWYoIWNoYWxsZW5nZUF1dGhQYXNzd29yZEFjY2VwdGVkICkKKyAgICAgICAgaWYgKCFjaGFsbGVu
Z2VBdXRoUGFzc3dvcmRBY2NlcHRlZCkKICAgICAgICAgewotICAgICAgICAgICAgUVN0cmluZyBl
cnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICBhdXRoRXJy
b3JzPDxlcnI7CisgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3No
X3Nlc3Npb24pOworICAgICAgICAgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZT1RU3RyaW5nOjpudWxsOworICAgICAg
ICAgICAgY2hhbGxlbmdlQXV0aFZlcmlmaWNhdGlvbkNvZGUgPSBRU3RyaW5nOjpudWxsOwogICAg
ICAgICAgICAgLy90cnkgd2l0aCBhbm90aGVyIHZlcmlmaWNhdGlvbiBjb2RlCiAgICAgICAgICAg
ICByZXR1cm4gdXNlckNoYWxsZW5nZUF1dGgoKTsKICAgICAgICAgfQogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAg
ICAgICBhdXRoRXJyb3JzPDxlcnI7CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJv
cihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIGF1dGhFcnJvcnMgPDwgZXJyOwogCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwotCiB9CiAKLQogYm9vbCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aFdpdGhQYXNzKCkKIHsKICAgICBib29sIHJldCA9
IGZhbHNlOwpAQCAtMTIwMyw2MSArMTE5Nyw3MSBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246
OnVzZXJBdXRoV2l0aFBhc3MoKQogCiAgICAgaW50IG1ldGhvZCA9IHNzaF91c2VyYXV0aF9saXN0
KG15X3NzaF9zZXNzaW9uLCBOVUxMKTsKIAotICAgIGlmIChtZXRob2QgJiBTU0hfQVVUSF9NRVRI
T0RfSU5URVJBQ1RJVkUpIHsKKyAgICBpZiAobWV0aG9kICYgU1NIX0FVVEhfTUVUSE9EX0lOVEVS
QUNUSVZFKQorICAgIHsKICAgICAgICAgeDJnb0RlYnVnIDw8ICJDaGFsbGVuZ2UgYXV0aGVudGlj
YXRpb24gcmVxdWVzdGVkLiIgPDwgZW5kbDsKIAogICAgICAgICBjaGFsbGVuZ2VBdXRoUGFzc3dv
cmRBY2NlcHRlZCA9IGZhbHNlOwotICAgICAgICByZXQgPSB1c2VyQ2hhbGxlbmdlQXV0aCAoKTsK
KyAgICAgICAgcmV0ID0gdXNlckNoYWxsZW5nZUF1dGgoKTsKIAotICAgICAgICBpZiAoIXJldCkg
eworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgewogICAgICAgICAgICAgeDJnb0RlYnVnIDw8
ICJDaGFsbGVuZ2UgYXV0aGVudGljYXRpb24gZmFpbGVkLiIgPDwgZW5kbDsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmICghcmV0KSB7CisgICAgaWYgKCFyZXQpCisgICAgewogICAgICAgICB4
MmdvRGVidWcgPDwgIlRyeWluZyBwYXNzd29yZCBtZWNoYW5pc20gaWYgYXZhaWxhYmxlLiIgPDwg
ZW5kbDsKICAgICB9CiAKLSAgICBpZiAoKCFyZXQpICYmIChtZXRob2QgJiBTU0hfQVVUSF9NRVRI
T0RfUEFTU1dPUkQpKSB7CisgICAgaWYgKCghcmV0KSAmJiAobWV0aG9kICYgU1NIX0FVVEhfTUVU
SE9EX1BBU1NXT1JEKSkKKyAgICB7CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiUGFzc3dvcmQgbWVj
aGFuaXNtIGF2YWlsYWJsZS4gQ29udGludWluZy4iIDw8IGVuZGw7CiAKICAgICAgICAgUVN0cmlu
ZyBhdXRoX3Bhc3N3b3JkID0gcGFzczsKIAotICAgICAgICBpZiAoYXV0aF9wYXNzd29yZC5pc0Vt
cHR5ICgpKSB7CisgICAgICAgIGlmIChhdXRoX3Bhc3N3b3JkLmlzRW1wdHkoKSkKKyAgICAgICAg
ewogICAgICAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGVtaXQg
bmVlZFBhc3NQaHJhc2UgKHRoaXMsIFBBU1NQSFJBU0VfUEFTU1dPUkQpOworICAgICAgICAgICAg
ZW1pdCBuZWVkUGFzc1BocmFzZSh0aGlzLCBQQVNTUEhSQVNFX1BBU1NXT1JEKTsKIAotICAgICAg
ICAgICAgZm9yIChib29sIHJlYWR5ID0gZmFsc2U7ICFyZWFkeTspIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLT51c2xlZXAgKDIwMCk7CisgICAgICAgICAgICBmb3IgKGJvb2wgcmVhZHkgPSBmYWxz
ZTsgIXJlYWR5OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLT51c2xlZXAo
MjAwKTsKIAotICAgICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LmxvY2sgKCk7CisgICAgICAg
ICAgICAgICAga2V5UGhyYXNlTXV0ZXgubG9jaygpOwogICAgICAgICAgICAgICAgIHJlYWR5ID0g
a2V5UGhyYXNlUmVhZHk7Ci0gICAgICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrICgp
OworICAgICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LnVubG9jaygpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoa2V5UGhyYXNlLmlzTnVsbCAoKSkgeworICAgICAgICAgICAg
aWYgKGtleVBocmFzZS5pc051bGwoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBh
dXRoRXJyb3JzIDw8ICJObyBwYXNzd29yZCBwcm92aWRlZC4iOwogICAgICAgICAgICAgICAgIHJl
dHVybiAocmV0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGF1dGhfcGFzc3dvcmQgPSBr
ZXlQaHJhc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaW50IHJjID0gc3No
X3VzZXJhdXRoX3Bhc3N3b3JkIChteV9zc2hfc2Vzc2lvbiwgTlVMTCwgYXV0aF9wYXNzd29yZC50
b0xhdGluMSAoKSk7Ci0gICAgICAgIGlmICggcmMgIT0gU1NIX0FVVEhfU1VDQ0VTUyApCisgICAg
ICAgIGludCByYyA9IHNzaF91c2VyYXV0aF9wYXNzd29yZChteV9zc2hfc2Vzc2lvbiwgTlVMTCwg
YXV0aF9wYXNzd29yZC50b0xhdGluMSgpKTsKKyAgICAgICAgaWYgKHJjICE9IFNTSF9BVVRIX1NV
Q0NFU1MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3Ig
KCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAgYXV0aEVycm9yczw8ZXJyOworICAgICAg
ICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAg
ICAgICAgIGF1dGhFcnJvcnMgPDwgZXJyOwogICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJQYXNz
d29yZCBhdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSB7CisgICAgICAgIGVsc2UKKyAgICAgICAgewogICAgICAgICAgICAgcmV0
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgoIXJldCkgJiYgKG1ldGhvZCAm
IH5TU0hfQVVUSF9NRVRIT0RfUEFTU1dPUkQpKSB7CisgICAgaWYgKCghcmV0KSAmJiAobWV0aG9k
ICYgflNTSF9BVVRIX01FVEhPRF9QQVNTV09SRCkpCisgICAgewogICAgICAgICAvKiBJbiBjYXNl
IHBhc3N3b3JkIGF1dGggaXMgZGlzYWJsZWQsIG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZSBp
cyBub3QgZW1wdHkuICovCi0gICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvciAobXlf
c3NoX3Nlc3Npb24pOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3No
X3Nlc3Npb24pOwogICAgICAgICBhdXRoRXJyb3JzIDw8IGVycjsKICAgICAgICAgeDJnb0RlYnVn
IDw8ICJQYXNzd29yZCBhdXRoZW50aWNhdGlvbiBub3QgYXZhaWxhYmxlOiAiIDw8IGVyciA8PCBl
bmRsOwogICAgIH0KQEAgLTEyNjUsNDUgKzEyNjksNDUgQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0
aW9uOjp1c2VyQXV0aFdpdGhQYXNzKCkKICAgICByZXR1cm4gKHJldCk7CiB9CiAKLQogYm9vbCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEF1dG8oKQogewotICAgIGludCByYyA9IHNzaF91
c2VyYXV0aF9hdXRvcHVia2V5ICggbXlfc3NoX3Nlc3Npb24sICIiICk7Ci0gICAgaW50IGk9MDsK
LSAgICB3aGlsZShyYyAhPSBTU0hfQVVUSF9TVUNDRVNTKQorICAgIGludCByYyA9IHNzaF91c2Vy
YXV0aF9hdXRvcHVia2V5KG15X3NzaF9zZXNzaW9uLCAiIik7CisgICAgaW50IGkgPSAwOworICAg
IHdoaWxlIChyYyAhPSBTU0hfQVVUSF9TVUNDRVNTKQogICAgIHsKLSAgICAgICAgaWYgKFNTSF9B
VVRIX0RFTklFRCA9PSByYykgewotICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY29udGludWUsIGFs
bCBrZXlzIGhhdmUgYmVlbiByZWplY3RlZCBieSB0aGUgc2VydmVyLiAqLwotICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAoU1NIX0FVVEhfREVOSUVEID09IHJjKQorICAgICAgICB7CisgICAg
ICAgICAgICAvKiBObyBuZWVkIHRvIGNvbnRpbnVlLCBhbGwga2V5cyBoYXZlIGJlZW4gcmVqZWN0
ZWQgYnkgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgLyogVGhpcyBzZWN0aW9uIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGlmIHJjIGlzIFNT
SF9BVVRIX0VSUk9SLiAqLwotICAgICAgICBrZXlQaHJhc2VSZWFkeT1mYWxzZTsKKyAgICAgICAg
a2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKICAgICAgICAgZW1pdCBuZWVkUGFzc1BocmFzZSh0aGlz
LCBQQVNTUEhSQVNFX1BSSVZLRVkpOwotICAgICAgICBmb3IoOzspCisgICAgICAgIGZvciAoOzsp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgcmVhZHk9ZmFsc2U7CisgICAgICAgICAgICBi
b29sIHJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLT51c2xlZXAoMjAwKTsKICAgICAg
ICAgICAgIGtleVBocmFzZU11dGV4LmxvY2soKTsKLSAgICAgICAgICAgIGlmKGtleVBocmFzZVJl
YWR5KQotICAgICAgICAgICAgICAgIHJlYWR5PXRydWU7CisgICAgICAgICAgICBpZiAoa2V5UGhy
YXNlUmVhZHkpCisgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgICAgICAgICAga2V5
UGhyYXNlTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICBpZihyZWFkeSkKKyAgICAgICAgICAg
IGlmIChyZWFkeSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBp
ZihrZXlQaHJhc2U9PVFTdHJpbmc6Om51bGwpCisgICAgICAgIGlmIChrZXlQaHJhc2UgPT0gUVN0
cmluZzo6bnVsbCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByYyA9IHNzaF91c2VyYXV0
aF9hdXRvcHVia2V5ICggbXlfc3NoX3Nlc3Npb24sIGtleVBocmFzZS50b0xhdGluMSgpICk7Ci0g
ICAgICAgIGlmKGkrKz09MikKKyAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfYXV0b3B1YmtleSht
eV9zc2hfc2Vzc2lvbiwga2V5UGhyYXNlLnRvTGF0aW4xKCkpOworICAgICAgICBpZiAoaSsrID09
IDIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKCByYyAhPSBTU0hfQVVUSF9TVUNDRVNTICkKKyAgICBpZiAocmMgIT0gU1NIX0FVVEhf
U1VDQ0VTUykKICAgICB7Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9z
c2hfc2Vzc2lvbiApOwotICAgICAgICBhdXRoRXJyb3JzPDxlcnI7CisgICAgICAgIFFTdHJpbmcg
ZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIGF1dGhFcnJvcnMg
PDwgZXJyOwogICAgICAgICB4MmdvRGVidWcgPDwgInVzZXJBdXRoQXV0byBmYWlsZWQ6IiA8PCBl
cnIgPDwgIiAoY29kZSAiIDw8IHJjIDw8ICIpIiA8PCBlbmRsOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtMTMxMywzNyArMTMxNywzNiBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rp
b246OnVzZXJBdXRoQXV0bygpCiB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNldEtleVBocmFz
ZShRU3RyaW5nIHBocmFzZSkKIHsKICAgICBrZXlQaHJhc2VNdXRleC5sb2NrKCk7Ci0gICAga2V5
UGhyYXNlPXBocmFzZTsKLSAgICBrZXlQaHJhc2VSZWFkeT10cnVlOworICAgIGtleVBocmFzZSA9
IHBocmFzZTsKKyAgICBrZXlQaHJhc2VSZWFkeSA9IHRydWU7CiAgICAga2V5UGhyYXNlTXV0ZXgu
dW5sb2NrKCk7CiB9CiAKLQogYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aFdpdGhL
ZXkoKQogewotICAgIHgyZ29EZWJ1Zzw8IlRyeWluZyB0byBhdXRoZW50aWNhdGUgdXNlciB3aXRo
IHByaXZhdGUga2V5LiI7Ci0gICAgUVN0cmluZyBrZXlOYW1lPWtleTsKLSAgICBib29sIGF1dG9S
ZW1vdmU9ZmFsc2U7Ci0gICAgaWYgKCBrZXkuaW5kZXhPZiAoICJQUklWQVRFIEtFWSIgKSAhPS0x
ICkKKyAgICB4MmdvRGVidWcgPDwgIlRyeWluZyB0byBhdXRoZW50aWNhdGUgdXNlciB3aXRoIHBy
aXZhdGUga2V5LiI7CisgICAgUVN0cmluZyBrZXlOYW1lID0ga2V5OworICAgIGJvb2wgYXV0b1Jl
bW92ZSA9IGZhbHNlOworICAgIGlmIChrZXkuaW5kZXhPZigiUFJJVkFURSBLRVkiKSAhPSAtMSkK
ICAgICB7CiAgICAgICAgIFFEaXIgZHI7Ci0gICAgICAgIFFTdHJpbmcga2V5UGF0aD1tYWluV25k
LT5nZXRIb21lRGlyZWN0b3J5KCkgKyIvLngyZ28vc3NoL2dlbiI7Ci0gICAgICAgIGRyLm1rcGF0
aCAoIGtleVBhdGggKTsKLSAgICAgICAgUVRlbXBvcmFyeUZpbGUgZmwgKCBrZXlQYXRoKyIva2V5
IiApOworICAgICAgICBRU3RyaW5nIGtleVBhdGggPSBtYWluV25kLT5nZXRIb21lRGlyZWN0b3J5
KCkgKyAiLy54MmdvL3NzaC9nZW4iOworICAgICAgICBkci5ta3BhdGgoa2V5UGF0aCk7CisgICAg
ICAgIFFUZW1wb3JhcnlGaWxlIGZsKGtleVBhdGggKyAiL2tleSIpOwogICAgICAgICBmbC5vcGVu
KCk7Ci0gICAgICAgIGtleU5hbWU9ZmwuZmlsZU5hbWUoKTsKLSAgICAgICAgZmwuc2V0QXV0b1Jl
bW92ZSAoIGZhbHNlICk7Ci0gICAgICAgIFFUZXh0U3RyZWFtIG91dCAoICZmbCApOwotICAgICAg
ICBvdXQ8PGtleTsKKyAgICAgICAga2V5TmFtZSA9IGZsLmZpbGVOYW1lKCk7CisgICAgICAgIGZs
LnNldEF1dG9SZW1vdmUoZmFsc2UpOworICAgICAgICBRVGV4dFN0cmVhbSBvdXQoJmZsKTsKKyAg
ICAgICAgb3V0IDw8IGtleTsKICAgICAgICAgZmwuY2xvc2UoKTsKLSAgICAgICAgYXV0b1JlbW92
ZT10cnVlOwotICAgICAgICB4MmdvRGVidWc8PCJUZW1wb3JhcmlseSBzYXZlZCBrZXkgaW4gIjw8
a2V5TmFtZTsKKyAgICAgICAgYXV0b1JlbW92ZSA9IHRydWU7CisgICAgICAgIHgyZ29EZWJ1ZyA8
PCAiVGVtcG9yYXJpbHkgc2F2ZWQga2V5IGluICIgPDwga2V5TmFtZTsKICAgICB9CiAKLSAgICBR
Qnl0ZUFycmF5IHRtcF9iYSA9IGtleU5hbWUudG9Mb2NhbDhCaXQgKCk7CisgICAgUUJ5dGVBcnJh
eSB0bXBfYmEgPSBrZXlOYW1lLnRvTG9jYWw4Qml0KCk7CiAKLSNpZiBMSUJTU0hfVkVSU0lPTl9J
TlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQotICAgIHNzaF9rZXkgcHJpdl9rZXkgPSB7
IDAgfTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDAp
CisgICAgc3NoX2tleSBwcml2X2tleSA9IHswfTsKIAogICAgIC8qCiAgICAgICogUGFzc2luZyBh
biBlbXB0eSBzdHJpbmcgYXMgYSBwYXNzcGhyYXNlIHBhcmFtZXRlciBpcyBhIHdvcmthcm91bmQg
Zm9yIGluY29uc2lzdGVudApAQCAtMTM1NiwxNjYgKzEzNTksMTc1IEBAIGJvb2wgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6dXNlckF1dGhXaXRoS2V5KCkKICAgICAgKiBwYXNzcGhyYXNlIG9uIGEgdGVy
bWluYWwgKGFuZCB0aGUgY2xpZW50IG5vdCByZWFjdGluZyB0byBhbnkgaW5wdXQgd2hpbGUgdGhp
cwogICAgICAqIGhhcHBlbnMpLCBzbyB3b3JrIGFyb3VuZCB0aGlzIGluY29uc2lzdGVuY3kgYnkg
cHJvdmlkaW5nIGFuIGVtcHR5IHBhc3NwaHJhc2UuCiAgICAgICovCi0gICAgaW50IHJjID0gc3No
X3BraV9pbXBvcnRfcHJpdmtleV9maWxlICh0bXBfYmEuZGF0YSAoKSwgIiIsIE5VTEwsIE5VTEws
ICZwcml2X2tleSk7CisgICAgaW50IHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlKHRt
cF9iYS5kYXRhKCksICIiLCBOVUxMLCBOVUxMLCAmcHJpdl9rZXkpOwogCi0gICAgaWYgKFNTSF9F
T0YgPT0gcmMpIHsKKyAgICBpZiAoU1NIX0VPRiA9PSByYykKKyAgICB7CiAgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiRmFpbGVkIHRvIGdldCBwcml2YXRlIGtleSBmcm9tICIgPDwga2V5TmFtZSA8PCAi
OyBmaWxlIGRvZXMgbm90IGV4aXN0LiI7CiAKLSAgICAgICAgc3NoX2tleV9mcmVlIChwcml2X2tl
eSk7CisgICAgICAgIHNzaF9rZXlfZnJlZShwcml2X2tleSk7CiAKICAgICAgICAgcmV0dXJuIChm
YWxzZSk7CiAgICAgfQotICAgIGVsc2UgaWYgKFNTSF9PSyAhPSByYykgeworICAgIGVsc2UgaWYg
KFNTSF9PSyAhPSByYykKKyAgICB7CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdl
dCBwcml2YXRlIGtleSBmcm9tICIgPDwga2V5TmFtZSA8PCAiOyB0cnlpbmcgdG8gcXVlcnkgcGFz
c3BocmFzZS4iOwogCi0gICAgICAgIHNzaF9rZXlfZnJlZSAocHJpdl9rZXkpOworICAgICAgICBz
c2hfa2V5X2ZyZWUocHJpdl9rZXkpOwogICAgICAgICBwcml2X2tleSA9IE5VTEw7CiAgICAgfQog
I2Vsc2UKICAgICAvKiBUaGlzIGlzIFRPQ1RVLCBidXQgZm9yY2VkIHVwb24gdXMgYnkgbGlic3No
J3MgbGVnYWN5IGZ1bmN0aW9uLiAqLwogICAgIHsKLSAgICAgIFFGaWxlIHRtcF9maWxlIChrZXlO
YW1lKTsKLSAgICAgIGlmICh0bXBfZmlsZS5vcGVuIChRSU9EZXZpY2U6OlJlYWRPbmx5KSkgewot
ICAgICAgICB0bXBfZmlsZS5jbG9zZSAoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAg
ICAvKiBEb24ndCBwYXNzIGludmFsaWQgZmlsZXMgdG8gcHJpdmF0ZWtleV9mcm9tX2ZpbGUgKCkg
LSBpdCBjcmFzaGVzIGluIHRoaXMgY2FzZS4gKi8KLSAgICAgICAgcmV0dXJuIChmYWxzZSk7Ci0g
ICAgICB9CisgICAgICAgIFFGaWxlIHRtcF9maWxlKGtleU5hbWUpOworICAgICAgICBpZiAodG1w
X2ZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkKKyAgICAgICAgeworICAgICAgICAgICAg
dG1wX2ZpbGUuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8qIERvbid0IHBhc3MgaW52YWxpZCBmaWxlcyB0byBwcml2YXRla2V5X2Zyb21f
ZmlsZSAoKSAtIGl0IGNyYXNoZXMgaW4gdGhpcyBjYXNlLiAqLworICAgICAgICAgICAgcmV0dXJu
IChmYWxzZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3NoX3ByaXZhdGVfa2V5IHByaXZfa2V5
ID0gcHJpdmF0ZWtleV9mcm9tX2ZpbGUgKG15X3NzaF9zZXNzaW9uLCB0bXBfYmEuZGF0YSAoKSwg
MCwgTlVMTCk7CisgICAgc3NoX3ByaXZhdGVfa2V5IHByaXZfa2V5ID0gcHJpdmF0ZWtleV9mcm9t
X2ZpbGUobXlfc3NoX3Nlc3Npb24sIHRtcF9iYS5kYXRhKCksIDAsIE5VTEwpOwogI2VuZGlmCiAK
LSAgICBpbnQgaT0wOwotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQg
KDAsIDYsIDApCisgICAgaW50IGkgPSAwOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hf
VkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICB3aGlsZSAoU1NIX09LICE9IHJjKQogI2Vsc2UKICAg
ICB3aGlsZSAoIXByaXZfa2V5KQogI2VuZGlmCiAgICAgewotICAgICAgICBrZXlQaHJhc2VSZWFk
eT1mYWxzZTsKKyAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKICAgICAgICAgZW1pdCBu
ZWVkUGFzc1BocmFzZSh0aGlzLCBQQVNTUEhSQVNFX1BSSVZLRVkpOwotICAgICAgICBmb3IoOzsp
CisgICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgcmVhZHk9ZmFs
c2U7CisgICAgICAgICAgICBib29sIHJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLT51
c2xlZXAoMjAwKTsKICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LmxvY2soKTsKLSAgICAgICAg
ICAgIGlmKGtleVBocmFzZVJlYWR5KQotICAgICAgICAgICAgICAgIHJlYWR5PXRydWU7CisgICAg
ICAgICAgICBpZiAoa2V5UGhyYXNlUmVhZHkpCisgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVl
OwogICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICBpZihy
ZWFkeSkKKyAgICAgICAgICAgIGlmIChyZWFkeSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZihrZXlQaHJhc2U9PVFTdHJpbmc6Om51bGwpCisgICAgICAgIGlm
IChrZXlQaHJhc2UgPT0gUVN0cmluZzo6bnVsbCkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIFFCeXRlQXJyYXkgdG1wX2JhX3Bhc3NwaHJhc2UgPSBrZXlQaHJhc2UudG9Mb2NhbDhCaXQg
KCk7CisgICAgICAgIFFCeXRlQXJyYXkgdG1wX2JhX3Bhc3NwaHJhc2UgPSBrZXlQaHJhc2UudG9M
b2NhbDhCaXQoKTsKIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQg
KDAsIDYsIDApCi0gICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlICh0bXBf
YmEuZGF0YSAoKSwgdG1wX2JhX3Bhc3NwaHJhc2UuZGF0YSAoKSwgTlVMTCwgTlVMTCwgJnByaXZf
a2V5KTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDAp
CisgICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlKHRtcF9iYS5kYXRhKCks
IHRtcF9iYV9wYXNzcGhyYXNlLmRhdGEoKSwgTlVMTCwgTlVMTCwgJnByaXZfa2V5KTsKIAotICAg
ICAgICBpZiAoU1NIX09LICE9IHJjKSB7Ci0gICAgICAgICAgICBzc2hfa2V5X2ZyZWUgKHByaXZf
a2V5KTsKKyAgICAgICAgaWYgKFNTSF9PSyAhPSByYykKKyAgICAgICAgeworICAgICAgICAgICAg
c3NoX2tleV9mcmVlKHByaXZfa2V5KTsKICAgICAgICAgICAgIHByaXZfa2V5ID0gTlVMTDsKICAg
ICAgICAgfQogI2Vsc2UKLSAgICAgICAgcHJpdl9rZXkgPSBwcml2YXRla2V5X2Zyb21fZmlsZSAo
bXlfc3NoX3Nlc3Npb24sIHRtcF9iYS5kYXRhICgpLCAwLCB0bXBfYmFfcGFzc3BocmFzZS5kYXRh
ICgpKTsKKyAgICAgICAgcHJpdl9rZXkgPSBwcml2YXRla2V5X2Zyb21fZmlsZShteV9zc2hfc2Vz
c2lvbiwgdG1wX2JhLmRhdGEoKSwgMCwgdG1wX2JhX3Bhc3NwaHJhc2UuZGF0YSgpKTsKICNlbmRp
ZgogCi0gICAgICAgIGlmKGkrKz09MikKKyAgICAgICAgaWYgKGkrKyA9PSAyKQogICAgICAgICB7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSNpZiBMSUJTU0hfVkVSU0lP
Tl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQorI2lmIExJQlNTSF9WRVJTSU9OX0lO
VCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICBpZiAoU1NIX09LICE9IHJjKQogI2Vs
c2UKICAgICBpZiAoIXByaXZfa2V5KQogI2VuZGlmCiAgICAgewotICAgICAgICB4MmdvRGVidWc8
PCJGYWlsZWQgdG8gZ2V0IHByaXZhdGUga2V5IGZyb20gIjw8a2V5TmFtZTsKLSAgICAgICAgaWYg
KCBhdXRvUmVtb3ZlICkKLSAgICAgICAgICAgIFFGaWxlOjpyZW1vdmUgKCBrZXlOYW1lICk7Cisg
ICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdldCBwcml2YXRlIGtleSBmcm9tICIgPDwg
a2V5TmFtZTsKKyAgICAgICAgaWYgKGF1dG9SZW1vdmUpCisgICAgICAgICAgICBRRmlsZTo6cmVt
b3ZlKGtleU5hbWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0jaWYgTElCU1NI
X1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hfa2V5IHB1
Yl9rZXkgPSB7IDAgfTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5U
KDAsIDYsIDApCisgICAgc3NoX2tleSBwdWJfa2V5ID0gezB9OwogCi0gICAgcmMgPSBzc2hfcGtp
X2V4cG9ydF9wcml2a2V5X3RvX3B1YmtleSAocHJpdl9rZXksICZwdWJfa2V5KTsKKyAgICByYyA9
IHNzaF9wa2lfZXhwb3J0X3ByaXZrZXlfdG9fcHVia2V5KHByaXZfa2V5LCAmcHViX2tleSk7CiAj
ZWxzZQotICAgIHNzaF9wdWJsaWNfa2V5IHB1Yl9rZXkgPSBwdWJsaWNrZXlfZnJvbV9wcml2YXRl
a2V5IChwcml2X2tleSk7CisgICAgc3NoX3B1YmxpY19rZXkgcHViX2tleSA9IHB1YmxpY2tleV9m
cm9tX3ByaXZhdGVrZXkocHJpdl9rZXkpOwogI2VuZGlmCiAKLSNpZiBMSUJTU0hfVkVSU0lPTl9J
TlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQorI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+
PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICBpZiAoU1NIX09LICE9IHJjKQogI2Vsc2UK
ICAgICBpZiAoIXB1Yl9rZXkpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IkZh
aWxlZCB0byBnZXQgcHVibGljIGtleSBmcm9tIHByaXZhdGUga2V5LiI7Ci0jaWYgTElCU1NIX1ZF
UlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICAgICAgc3NoX2tleV9m
cmVlIChwcml2X2tleSk7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdldCBwdWJs
aWMga2V5IGZyb20gcHJpdmF0ZSBrZXkuIjsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NI
X1ZFUlNJT05fSU5UKDAsIDYsIDApCisgICAgICAgIHNzaF9rZXlfZnJlZShwcml2X2tleSk7CiAg
ICAgICAgIHByaXZfa2V5ID0gTlVMTDsKIAotICAgICAgICBzc2hfa2V5X2ZyZWUgKHB1Yl9rZXkp
OworICAgICAgICBzc2hfa2V5X2ZyZWUocHViX2tleSk7CiAgICAgICAgIHB1Yl9rZXkgPSBOVUxM
OwogI2Vsc2UKICAgICAgICAgcHJpdmF0ZWtleV9mcmVlKHByaXZfa2V5KTsKICNlbmRpZgotICAg
ICAgICBpZiAoIGF1dG9SZW1vdmUgKQotICAgICAgICAgICAgUUZpbGU6OnJlbW92ZSAoIGtleU5h
bWUgKTsKKyAgICAgICAgaWYgKGF1dG9SZW1vdmUpCisgICAgICAgICAgICBRRmlsZTo6cmVtb3Zl
KGtleU5hbWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0jaWYgTElCU1NIX1ZF
UlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBkbyB7Ci0gICAgICAg
IHJjID0gc3NoX3VzZXJhdXRoX3RyeV9wdWJsaWNrZXkgKG15X3NzaF9zZXNzaW9uLCBOVUxMLCBw
dWJfa2V5KTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYs
IDApCisgICAgZG8KKyAgICB7CisgICAgICAgIHJjID0gc3NoX3VzZXJhdXRoX3RyeV9wdWJsaWNr
ZXkobXlfc3NoX3Nlc3Npb24sIE5VTEwsIHB1Yl9rZXkpOwogICAgIH0gd2hpbGUgKFNTSF9BVVRI
X0FHQUlOID09IHJjKTsKIAotICAgIHNzaF9rZXlfZnJlZSAocHViX2tleSk7CisgICAgc3NoX2tl
eV9mcmVlKHB1Yl9rZXkpOwogICAgIHB1Yl9rZXkgPSBOVUxMOwogCiAgICAgLyogRklYTUU6IGhh
bmRsZSBTU0hfQVVUSF9QQVJUSUFMIGNvcnJlY3RseSEgKi8KLSAgICBpZiAoU1NIX0FVVEhfU1VD
Q0VTUyAhPSByYykgeworICAgIGlmIChTU0hfQVVUSF9TVUNDRVNTICE9IHJjKQorICAgIHsKICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJVbmFibGUgdG8gYXV0aGVudGljYXRlIHdpdGggcHVibGljIGtl
eS4iOwogCi0gICAgICAgIHNzaF9rZXlfZnJlZSAocHJpdl9rZXkpOworICAgICAgICBzc2hfa2V5
X2ZyZWUocHJpdl9rZXkpOwogICAgICAgICBwcml2X2tleSA9IE5VTEw7CiAKLSAgICAgICAgaWYg
KGF1dG9SZW1vdmUpIHsKLSAgICAgICAgICAgIFFGaWxlOjpyZW1vdmUgKGtleU5hbWUpOworICAg
ICAgICBpZiAoYXV0b1JlbW92ZSkKKyAgICAgICAgeworICAgICAgICAgICAgUUZpbGU6OnJlbW92
ZShrZXlOYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0K
IAotICAgIGRvIHsKLSAgICAgICAgcmMgPSBzc2hfdXNlcmF1dGhfcHVibGlja2V5IChteV9zc2hf
c2Vzc2lvbiwgTlVMTCwgcHJpdl9rZXkpOworICAgIGRvCisgICAgeworICAgICAgICByYyA9IHNz
aF91c2VyYXV0aF9wdWJsaWNrZXkobXlfc3NoX3Nlc3Npb24sIE5VTEwsIHByaXZfa2V5KTsKICAg
ICB9IHdoaWxlIChTU0hfQVVUSF9BR0FJTiA9PSByYyk7CiAKLSAgICBzc2hfa2V5X2ZyZWUgKHBy
aXZfa2V5KTsKKyAgICBzc2hfa2V5X2ZyZWUocHJpdl9rZXkpOwogICAgIHByaXZfa2V5ID0gTlVM
TDsKICNlbHNlCi0gICAgc3NoX3N0cmluZyBwdWJrZXlTdHI9cHVibGlja2V5X3RvX3N0cmluZyhw
dWJfa2V5KTsKKyAgICBzc2hfc3RyaW5nIHB1YmtleVN0ciA9IHB1YmxpY2tleV90b19zdHJpbmco
cHViX2tleSk7CiAgICAgcHVibGlja2V5X2ZyZWUocHViX2tleSk7Ci0gICAgaW50IHJjPXNzaF91
c2VyYXV0aF9wdWJrZXkobXlfc3NoX3Nlc3Npb24sIE5VTEwsIHB1YmtleVN0ciwgcHJpdl9rZXkp
OworICAgIGludCByYyA9IHNzaF91c2VyYXV0aF9wdWJrZXkobXlfc3NoX3Nlc3Npb24sIE5VTEws
IHB1YmtleVN0ciwgcHJpdl9rZXkpOwogICAgIHByaXZhdGVrZXlfZnJlZShwcml2X2tleSk7CiAg
ICAgc3NoX3N0cmluZ19mcmVlKHB1YmtleVN0cik7CiAjZW5kaWYKIAotICAgIHgyZ29EZWJ1Zzw8
IkF1dGhlbnRpY2F0aW5nIHdpdGgga2V5OiAiPDxyYzw8ZW5kbDsKKyAgICB4MmdvRGVidWcgPDwg
IkF1dGhlbnRpY2F0aW5nIHdpdGgga2V5OiAiIDw8IHJjIDw8IGVuZGw7CiAKLSAgICBpZiAoIGF1
dG9SZW1vdmUgKQotICAgICAgICBRRmlsZTo6cmVtb3ZlICgga2V5TmFtZSApOworICAgIGlmIChh
dXRvUmVtb3ZlKQorICAgICAgICBRRmlsZTo6cmVtb3ZlKGtleU5hbWUpOwogCiAgICAgLyogRklY
TUU6IGhhbmRsZSBTU0hfQVVUSF9QQVJUSUFMIGNvcnJlY3RseSEgKi8KLSAgICBpZiAoIHJjICE9
IFNTSF9BVVRIX1NVQ0NFU1MgKQorICAgIGlmIChyYyAhPSBTU0hfQVVUSF9TVUNDRVNTKQogICAg
IHsKLSAgICAgICAgUVN0cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7
Ci0gICAgICAgIGF1dGhFcnJvcnM8PGVycjsKKyAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0
X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAKLSAg
ICAgICAgeDJnb0RlYnVnPDwidXNlckF1dGhXaXRoS2V5IGZhaWxlZDoiIDw8ZXJyPDxlbmRsOwor
ICAgICAgICB4MmdvRGVidWcgPDwgInVzZXJBdXRoV2l0aEtleSBmYWlsZWQ6IiA8PCBlcnIgPDwg
ZW5kbDsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTU1NiwxNCArMTU2OCwx
NyBAQCBib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OnVzZXJBdXRoS3JiKCkKICAgICBsb2NhbF9j
bWQgPSAic3NoIjsKIAogICAgIC8qIEtlcmJlcm9zIG9wdGlvbnMuICovCi0gICAgbG9jYWxfYXJn
cyA8PCAiLW8iIDw8ICJHU1NBcGlBdXRoZW50aWNhdGlvbj15ZXMiCi0gICAgICAgICAgICAgICA8
PCAiLW8iIDw8ICJQYXNzd29yZEF1dGhlbnRpY2F0aW9uPW5vIgotICAgICAgICAgICAgICAgPDwg
Ii1vIiA8PCAiUHVia2V5QXV0aGVudGljYXRpb249bm8iOworICAgIGxvY2FsX2FyZ3MgPDwgIi1v
IgorICAgICAgICAgICAgICAgPDwgIkdTU0FwaUF1dGhlbnRpY2F0aW9uPXllcyIKKyAgICAgICAg
ICAgICAgIDw8ICItbyIKKyAgICAgICAgICAgICAgIDw8ICJQYXNzd29yZEF1dGhlbnRpY2F0aW9u
PW5vIgorICAgICAgICAgICAgICAgPDwgIi1vIgorICAgICAgICAgICAgICAgPDwgIlB1YmtleUF1
dGhlbnRpY2F0aW9uPW5vIjsKIAogICAgIC8qIFBvcnQgb3B0aW9uLiBNdXN0IGJlIHRoZSBsYXN0
IG9uZSBhZGRlZCEgKi8KICAgICBsb2NhbF9hcmdzIDw8ICItcCI7CiAjZW5kaWYKLSAgICBsb2Nh
bF9hcmdzIDw8IFFTdHJpbmc6Om51bWJlciAocG9ydCkKKyAgICBsb2NhbF9hcmdzIDw8IFFTdHJp
bmc6Om51bWJlcihwb3J0KQogICAgICAgICAgICAgICAgPDwgIi1sIiA8PCB1c2VyCiAgICAgICAg
ICAgICAgICA8PCBob3N0OwogCkBAIC0xNTc2LDEyNSArMTU5MSwxMjMgQEAgYm9vbCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEtyYigpCiAgICAgICovCiAgICAgbG9jYWxfYXJncyA8PCBz
aGNtZDsKIAotICAgIHgyZ29EZWJ1ZyA8PCAiU3RhcnRpbmcgc3NoOiIgPDwgbG9jYWxfY21kIDw8
ICIgIiA8PCBsb2NhbF9hcmdzLmpvaW4gKCIgIikgPDwgZW5kbDsKLSAgICBzc2guc3RhcnQgKGxv
Y2FsX2NtZCwgbG9jYWxfYXJncyk7Ci0KKyAgICB4MmdvRGVidWcgPDwgIlN0YXJ0aW5nIHNzaDoi
IDw8IGxvY2FsX2NtZCA8PCAiICIgPDwgbG9jYWxfYXJncy5qb2luKCIgIikgPDwgZW5kbDsKKyAg
ICBzc2guc3RhcnQobG9jYWxfY21kLCBsb2NhbF9hcmdzKTsKIAogICAgIGlmICghc3NoLndhaXRG
b3JTdGFydGVkKDUwMDApKQogICAgIHsKLSAgICAgICAgc3NoUHJvY0VyclN0cmluZz1zc2guZXJy
b3JTdHJpbmcoKTsKLSAgICAgICAgYXV0aEVycm9yczw8c3NoUHJvY0VyclN0cmluZzsKLSAgICAg
ICAgeDJnb0RlYnVnPDwiU1NIIHN0YXJ0IGZhaWxlZDoiIDw8c3NoUHJvY0VyclN0cmluZzw8ZW5k
bDsKKyAgICAgICAgc3NoUHJvY0VyclN0cmluZyA9IHNzaC5lcnJvclN0cmluZygpOworICAgICAg
ICBhdXRoRXJyb3JzIDw8IHNzaFByb2NFcnJTdHJpbmc7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
U1NIIHN0YXJ0IGZhaWxlZDoiIDw8IHNzaFByb2NFcnJTdHJpbmcgPDwgZW5kbDsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIXNzaC53YWl0Rm9yRmluaXNoZWQoMjAwMDAp
KQogICAgIHsKLSAgICAgICAgc3NoUHJvY0VyclN0cmluZz1zc2guZXJyb3JTdHJpbmcoKTsKLSAg
ICAgICAgYXV0aEVycm9yczw8dHIoIkZhaWxlZCB0byBzdGFydCBTU0ggY2xpZW50LiBQbGVhc2Ug
Y2hlY2sgeW91ciBpbnN0YWxsYXRpb24gYW5kIEdTU0FwaSBjb25maWd1cmF0aW9uLiIpOwotICAg
ICAgICBhdXRoRXJyb3JzPDxzc2hQcm9jRXJyU3RyaW5nOwotICAgICAgICB4MmdvRGVidWc8PCJT
U0ggZGlkIG5vdCBmaW5pc2g6IiA8PHNzaFByb2NFcnJTdHJpbmc8PGVuZGw7CisgICAgICAgIHNz
aFByb2NFcnJTdHJpbmcgPSBzc2guZXJyb3JTdHJpbmcoKTsKKyAgICAgICAgYXV0aEVycm9ycyA8
PCB0cigiRmFpbGVkIHRvIHN0YXJ0IFNTSCBjbGllbnQuIFBsZWFzZSBjaGVjayB5b3VyIGluc3Rh
bGxhdGlvbiBhbmQgR1NTQXBpIGNvbmZpZ3VyYXRpb24uIik7CisgICAgICAgIGF1dGhFcnJvcnMg
PDwgc3NoUHJvY0VyclN0cmluZzsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJTU0ggZGlkIG5vdCBm
aW5pc2g6IiA8PCBzc2hQcm9jRXJyU3RyaW5nIDw8IGVuZGw7CiAKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICBRU3RyaW5nIG91dHA9c3NoLnJlYWRBbGxTdGFuZGFyZE91dHB1dCgp
OwotICAgIFFTdHJpbmcgZXJyPXNzaC5yZWFkQWxsU3RhbmRhcmRFcnJvcigpOwotICAgIHgyZ29E
ZWJ1Zzw8IlNTSCBleGl0ZWQuIjsKLSAgICB4MmdvRGVidWc8PCJzdGRvdXQ6ICI8PG91dHA8PGVu
ZGw7Ci0gICAgeDJnb0RlYnVnPDwic3RkZXJyOiAiPDxlcnI8PGVuZGw7Ci0gICAgeDJnb0RlYnVn
PDwiRXhpdCBjb2RlOiAiPDxzc2guZXhpdENvZGUoKTw8Ijsgc3RhdHVzOiAiPDxzc2guZXhpdFN0
YXR1cygpPDxlbmRsOwotCi0gICAgUVN0cmluZyBiZWdpbl9tYXJrZXIgPSAiWDJHT0RBVEFCRUdJ
TjoiK3V1aWRTdHIrIlxuIjsKLSAgICBRU3RyaW5nIGVuZF9tYXJrZXIgPSAiWDJHT0RBVEFFTkQ6
Iit1dWlkU3RyKyJcbiI7Ci0gICAgaW50IG91dHB1dF9iZWdpbj1vdXRwLmluZGV4T2YoYmVnaW5f
bWFya2VyKSArIGJlZ2luX21hcmtlci5sZW5ndGgoKTsKLSAgICBpbnQgb3V0cHV0X2VuZD1vdXRw
LmluZGV4T2YoZW5kX21hcmtlcik7Ci0gICAgb3V0cCA9IG91dHAubWlkKG91dHB1dF9iZWdpbiwg
b3V0cHV0X2VuZC1vdXRwdXRfYmVnaW4pOwotICAgIG91dHAucmVwbGFjZSgiXG4iLCIiKTsKLQot
ICAgIGlmIChzc2guZXhpdENvZGUoKSA9PSAwICYmIHNzaC5leGl0U3RhdHVzKCkgPT0gMCAmJiBv
dXRwPT0gdXNlcikKKyAgICBRU3RyaW5nIG91dHAgPSBzc2gucmVhZEFsbFN0YW5kYXJkT3V0cHV0
KCk7CisgICAgUVN0cmluZyBlcnIgPSBzc2gucmVhZEFsbFN0YW5kYXJkRXJyb3IoKTsKKyAgICB4
MmdvRGVidWcgPDwgIlNTSCBleGl0ZWQuIjsKKyAgICB4MmdvRGVidWcgPDwgInN0ZG91dDogIiA8
PCBvdXRwIDw8IGVuZGw7CisgICAgeDJnb0RlYnVnIDw8ICJzdGRlcnI6ICIgPDwgZXJyIDw8IGVu
ZGw7CisgICAgeDJnb0RlYnVnIDw8ICJFeGl0IGNvZGU6ICIgPDwgc3NoLmV4aXRDb2RlKCkgPDwg
Ijsgc3RhdHVzOiAiIDw8IHNzaC5leGl0U3RhdHVzKCkgPDwgZW5kbDsKKworICAgIFFTdHJpbmcg
YmVnaW5fbWFya2VyID0gIlgyR09EQVRBQkVHSU46IiArIHV1aWRTdHIgKyAiXG4iOworICAgIFFT
dHJpbmcgZW5kX21hcmtlciA9ICJYMkdPREFUQUVORDoiICsgdXVpZFN0ciArICJcbiI7CisgICAg
aW50IG91dHB1dF9iZWdpbiA9IG91dHAuaW5kZXhPZihiZWdpbl9tYXJrZXIpICsgYmVnaW5fbWFy
a2VyLmxlbmd0aCgpOworICAgIGludCBvdXRwdXRfZW5kID0gb3V0cC5pbmRleE9mKGVuZF9tYXJr
ZXIpOworICAgIG91dHAgPSBvdXRwLm1pZChvdXRwdXRfYmVnaW4sIG91dHB1dF9lbmQgLSBvdXRw
dXRfYmVnaW4pOworICAgIG91dHAucmVwbGFjZSgiXG4iLCAiIik7CisKKyAgICBpZiAoc3NoLmV4
aXRDb2RlKCkgPT0gMCAmJiBzc2guZXhpdFN0YXR1cygpID09IDAgJiYgb3V0cCA9PSB1c2VyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBhdXRoRXJyb3JzPDx0cigiQ2hlY2sgeW91ciBHU1NB
cGkgY29uZmlndXJhdGlvbiBvciBjaG9vc2UgYW5vdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2Qu
Iik7CisgICAgYXV0aEVycm9ycyA8PCB0cigiQ2hlY2sgeW91ciBHU1NBcGkgY29uZmlndXJhdGlv
biBvciBjaG9vc2UgYW5vdGhlciBhdXRoZW50aWNhdGlvbiBtZXRob2QuIik7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi0KIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6aW50ZXJhY3Rpb25UZXh0
RW50ZXIoUVN0cmluZyB0ZXh0KQogewotICAgIGlmKHNzaFByb3h5ICYmICEgc3NoUHJveHlSZWFk
eSkKKyAgICBpZiAoc3NoUHJveHkgJiYgIXNzaFByb3h5UmVhZHkpCiAgICAgewogICAgICAgICBz
c2hQcm94eS0+aW50ZXJhY3Rpb25UZXh0RW50ZXIodGV4dCk7Ci0JcmV0dXJuOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGludGVyYWN0aW9uSW5wdXRNdXRleC5sb2NrKCk7Ci0gICAgaW50
ZXJhY3Rpb25JbnB1dFRleHQ9dGV4dDsKKyAgICBpbnRlcmFjdGlvbklucHV0VGV4dCA9IHRleHQ7
CiAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LnVubG9jaygpOwogfQogCiB2b2lkIFNzaE1hc3Rl
ckNvbm5lY3Rpb246OmludGVyYWN0aW9uSW50ZXJydXB0U2xvdCgpCiB7Ci0gICAgaWYoc3NoUHJv
eHkgJiYgISBzc2hQcm94eVJlYWR5KQorICAgIGlmIChzc2hQcm94eSAmJiAhc3NoUHJveHlSZWFk
eSkKICAgICB7CiAgICAgICAgIHNzaFByb3h5LT5pbnRlcmFjdGlvbkludGVycnVwdFNsb3QoKTsK
LQlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaW50ZXJhY3Rpb25JbnB1dE11
dGV4LmxvY2soKTsKLSAgICBpbnRlcmFjdGlvbkludGVycnVwdD10cnVlOworICAgIGludGVyYWN0
aW9uSW50ZXJydXB0ID0gdHJ1ZTsKICAgICBpbnRlcmFjdGlvbklucHV0TXV0ZXgudW5sb2NrKCk7
CiB9CiAKIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y2hlY2tMb2dpbigpCiB7Ci0gICAgaW50
ZXJhY3Rpb25JbnRlcnJ1cHQ9ZmFsc2U7Ci0gICAgaW50ZXJhY3Rpb25JbnB1dFRleHQ9UVN0cmlu
Zzo6bnVsbDsKKyAgICBpbnRlcmFjdGlvbkludGVycnVwdCA9IGZhbHNlOworICAgIGludGVyYWN0
aW9uSW5wdXRUZXh0ID0gUVN0cmluZzo6bnVsbDsKIAorICAgIHNzaF9jaGFubmVsIGNoYW5uZWwg
PSBzc2hfY2hhbm5lbF9uZXcobXlfc3NoX3Nlc3Npb24pOwogCi0gICAgc3NoX2NoYW5uZWwgY2hh
bm5lbCA9IHNzaF9jaGFubmVsX25ldyAoIG15X3NzaF9zZXNzaW9uICk7Ci0KLSAgICBpZiAoIWNo
YW5uZWwpIHsKLSAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yIChteV9zc2hfc2Vz
c2lvbik7Ci0gICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIgKCIlMSBmYWlsZWQuIikuYXJn
ICgic3NoX2NoYW5uZWxfbmV3Iik7CisgICAgaWYgKCFjaGFubmVsKQorICAgIHsKKyAgICAgICAg
UVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgUVN0
cmluZyBlcnJvcl9tc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3NoX2NoYW5uZWxfbmV3Iik7
CiAKLSAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZy5sZWZ0IChlcnJvcl9tc2cuc2l6ZSAo
KSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJv
cl9tc2cubGVmdChlcnJvcl9tc2cuc2l6ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIHNzaF9jaGFubmVsX29wZW5f
c2Vzc2lvbiAoIGNoYW5uZWwgKSAhPVNTSF9PSyApCisgICAgaWYgKHNzaF9jaGFubmVsX29wZW5f
c2Vzc2lvbihjaGFubmVsKSAhPSBTU0hfT0spCiAgICAgewotICAgICAgICBRU3RyaW5nIGVycj1z
c2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgUVN0cmluZyBlcnJvck1z
Zz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVsX29wZW5fc2Vzc2lvbiIpOwot
ICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxlZnQgKGVycm9yTXNnLnNpemUgKCkgLSAxKTw8
IjogIjw8ZXJyPDxlbmRsOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlf
c3NoX3Nlc3Npb24pOworICAgICAgICBRU3RyaW5nIGVycm9yTXNnID0gdHIoIiUxIGZhaWxlZC4i
KS5hcmcoInNzaF9jaGFubmVsX29wZW5fc2Vzc2lvbiIpOworICAgICAgICB4MmdvRGVidWcgPDwg
ZXJyb3JNc2cubGVmdChlcnJvck1zZy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRs
OwogICAgICAgICBzc2hfY2hhbm5lbF9mcmVlKGNoYW5uZWwpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmIChzc2hfY2hhbm5lbF9yZXF1ZXN0X3B0eShjaGFubmVsKSE9U1NI
X09LKQorICAgIGlmIChzc2hfY2hhbm5lbF9yZXF1ZXN0X3B0eShjaGFubmVsKSAhPSBTU0hfT0sp
CiAgICAgewotICAgICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Np
b24gKTsKLSAgICAgICAgUVN0cmluZyBlcnJvck1zZz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAo
InNzaF9jaGFubmVsX3JlcXVlc3RfcHR5Iik7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8ZXJyb3JNc2cu
bGVmdCAoZXJyb3JNc2cuc2l6ZSAoKSAtIDEpPDwiOiAiPDxlcnI8PGVuZGw7CisgICAgICAgIFFT
dHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIFFTdHJp
bmcgZXJyb3JNc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3NoX2NoYW5uZWxfcmVxdWVzdF9w
dHkiKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgp
IC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsKICAgICAgICAgc3NoX2NoYW5uZWxfZnJlZShj
aGFubmVsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZihzc2hfY2hhbm5l
bF9jaGFuZ2VfcHR5X3NpemUoY2hhbm5lbCwgODAsIDI0KSE9U1NIX09LKQorICAgIGlmIChzc2hf
Y2hhbm5lbF9jaGFuZ2VfcHR5X3NpemUoY2hhbm5lbCwgODAsIDI0KSAhPSBTU0hfT0spCiAgICAg
ewotICAgICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsK
LSAgICAgICAgUVN0cmluZyBlcnJvck1zZz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9j
aGFubmVsX2NoYW5nZV9wdHlfc2l6ZSIpOwotICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxl
ZnQgKGVycm9yTXNnLnNpemUgKCkgLSAxKTw8IjogIjw8ZXJyPDxlbmRsOworICAgICAgICBRU3Ry
aW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICBRU3RyaW5n
IGVycm9yTXNnID0gdHIoIiUxIGZhaWxlZC4iKS5hcmcoInNzaF9jaGFubmVsX2NoYW5nZV9wdHlf
c2l6ZSIpOworICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JNc2cubGVmdChlcnJvck1zZy5zaXpl
KCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOwogICAgICAgICBzc2hfY2hhbm5lbF9mcmVl
KGNoYW5uZWwpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmICggc3NoX2No
YW5uZWxfcmVxdWVzdF9leGVjICggY2hhbm5lbCwgImVjaG8gXCJMT0dJTiBPS1wiIiApICE9IFNT
SF9PSyApCisgICAgaWYgKHNzaF9jaGFubmVsX3JlcXVlc3RfZXhlYyhjaGFubmVsLCAiZWNobyBc
IkxPR0lOIE9LXCIiKSAhPSBTU0hfT0spCiAgICAgewotICAgICAgICBRU3RyaW5nIGVycj1zc2hf
Z2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgUVN0cmluZyBlcnJvck1zZz10
ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVsX3JlcXVlc3RfZXhlYyIpOwotICAg
ICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxlZnQgKGVycm9yTXNnLnNpemUgKCkgLSAxKTw8Ijog
Ijw8ZXJyPDxlbmRsOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3No
X3Nlc3Npb24pOworICAgICAgICBRU3RyaW5nIGVycm9yTXNnID0gdHIoIiUxIGZhaWxlZC4iKS5h
cmcoInNzaF9jaGFubmVsX3JlcXVlc3RfZXhlYyIpOworICAgICAgICB4MmdvRGVidWcgPDwgZXJy
b3JNc2cubGVmdChlcnJvck1zZy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOwog
ICAgICAgICBzc2hfY2hhbm5lbF9mcmVlKGNoYW5uZWwpOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewotICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0KjUxMl07IC8vNTEySyBidWZmZXIKLSAgICAgICAg
Ym9vbCBoYXNJbnRlcnJhY3Rpb249dHJ1ZTsKLQlib29sIGludGVyYWN0aW9uU3RhcnRlZD1mYWxz
ZTsKLS8vICAgICAgICAgeDJnb0RlYnVnPDwiQ0hFQ0sgTE9HSU4gY2hhbm5lbCBjcmVhdGVkLiI8
PGVuZGw7CisgICAgICAgIGNoYXIgYnVmZmVyWzEwMjQgKiA1MTJdOyAvLzUxMksgYnVmZmVyCisg
ICAgICAgIGJvb2wgaGFzSW50ZXJyYWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBpbnRlcmFj
dGlvblN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgICAgICB4MmdvRGVidWc8PCJDSEVD
SyBMT0dJTiBjaGFubmVsIGNyZWF0ZWQuIjw8ZW5kbDsKICAgICAgICAgd2hpbGUgKHNzaF9jaGFu
bmVsX2lzX29wZW4oY2hhbm5lbCkgJiYKLSAgICAgICAgICAgICAgICAhc3NoX2NoYW5uZWxfaXNf
ZW9mKGNoYW5uZWwpKQorICAgICAgICAgICAgICAgIXNzaF9jaGFubmVsX2lzX2VvZihjaGFubmVs
KSkKICAgICAgICAgewogICAgICAgICAgICAgaW50IG5ieXRlcyA9IHNzaF9jaGFubmVsX3JlYWRf
bm9uYmxvY2tpbmcoY2hhbm5lbCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgMCk7CiAgICAgICAg
ICAgICBpZiAobmJ5dGVzIDwgMCkKQEAgLTE3MDQsMTk0ICsxNzE3LDE4OCBAQCBib29sIFNzaE1h
c3RlckNvbm5lY3Rpb246OmNoZWNrTG9naW4oKQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKG5ieXRlcyA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBp
bmY9UUJ5dGVBcnJheSAoIGJ1ZmZlcixuYnl0ZXMgKTsKLSAgICAgICAgICAgICAgICB4MmdvRGVi
dWc8PCJMT0dJTiBDSEVDSzoiPDxpbmY7Ci0gICAgICAgICAgICAgICAgaWYoaW5mLmluZGV4T2Yo
IkxPR0lOIE9LIikhPS0xKQorICAgICAgICAgICAgICAgIFFTdHJpbmcgaW5mID0gUUJ5dGVBcnJh
eShidWZmZXIsIG5ieXRlcyk7CisgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJMT0dJTiBD
SEVDSzoiIDw8IGluZjsKKyAgICAgICAgICAgICAgICBpZiAoaW5mLmluZGV4T2YoIkxPR0lOIE9L
IikgIT0gLTEpCiAgICAgICAgICAgICAgICAgewotCQkgICAgeDJnb0RlYnVnPDwiZG9uJ3QgaGF2
ZSBpbnRlcmFjdGlvbiI7Ci0gICAgICAgICAgICAgICAgICAgIGhhc0ludGVycmFjdGlvbj1mYWxz
ZTsKLQkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgImRvbid0
IGhhdmUgaW50ZXJhY3Rpb24iOworICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcnJhY3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGVsc2UKLQkJewotCQkgIGlmKCFpbnRlcmFjdGlvblN0YXJ0ZWQpCi0J
CSAgewotCQkgICAgIGludGVyYWN0aW9uU3RhcnRlZD10cnVlOwotCQkgICAgIGVtaXQgc3RhcnRJ
bnRlcmFjdGlvbih0aGlzLCBpbmYpOwotCQkgIH0KLQkJICBlbHNlCi0JCSAgICAgZW1pdCB1cGRh
dGVJbnRlcmFjdGlvbih0aGlzLGluZik7Ci0JCX0KKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaW50ZXJhY3Rpb25TdGFydGVkKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvblN0YXJ0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBzdGFydEludGVyYWN0aW9uKHRoaXMsIGluZik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZW1pdCB1cGRhdGVJbnRlcmFjdGlvbih0aGlzLCBpbmYpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaW50ZXJydXB0
OwogICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LmxvY2soKTsKLQkgICAgaW50ZXJy
dXB0PWludGVyYWN0aW9uSW50ZXJydXB0OwotCSAgICBRU3RyaW5nIHRleHRUb1NlbmQ9aW50ZXJh
Y3Rpb25JbnB1dFRleHQ7Ci0JICAgIGludGVyYWN0aW9uSW5wdXRUZXh0PVFTdHJpbmc6Om51bGw7
Ci0JICAgIGludGVyYWN0aW9uSW5wdXRNdXRleC51bmxvY2soKTsKLQkgICAgaWYodGV4dFRvU2Vu
ZC5sZW5ndGgoKT4wKQotCSAgICB7Ci0vLyAJICAgICAgICB4MmdvRGVidWc8PCJTRU5EIElucHV0
IHRvIFNFUlZFUiI7Ci0JICAgICAgICBzc2hfY2hhbm5lbF93cml0ZShjaGFubmVsLCB0ZXh0VG9T
ZW5kLnRvTG9jYWw4Qml0KCkuY29uc3REYXRhKCksIHRleHRUb1NlbmQubGVuZ3RoKCkpOwotCSAg
ICB9Ci0JICAgIGlmKGludGVycnVwdCkKLQkgICAgewotCSAgICAgICAgYnJlYWs7Ci0JICAgIH0K
KyAgICAgICAgICAgIGludGVycnVwdCA9IGludGVyYWN0aW9uSW50ZXJydXB0OworICAgICAgICAg
ICAgUVN0cmluZyB0ZXh0VG9TZW5kID0gaW50ZXJhY3Rpb25JbnB1dFRleHQ7CisgICAgICAgICAg
ICBpbnRlcmFjdGlvbklucHV0VGV4dCA9IFFTdHJpbmc6Om51bGw7CisgICAgICAgICAgICBpbnRl
cmFjdGlvbklucHV0TXV0ZXgudW5sb2NrKCk7CisgICAgICAgICAgICBpZiAodGV4dFRvU2VuZC5s
ZW5ndGgoKSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gCSAgICAgICAg
eDJnb0RlYnVnPDwiU0VORCBJbnB1dCB0byBTRVJWRVIiOworICAgICAgICAgICAgICAgIHNzaF9j
aGFubmVsX3dyaXRlKGNoYW5uZWwsIHRleHRUb1NlbmQudG9Mb2NhbDhCaXQoKS5jb25zdERhdGEo
KSwgdGV4dFRvU2VuZC5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aW50ZXJydXB0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGhpcy0+dXNsZWVwKDMwKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHgyZ29EZWJ1Zzw8IkxPT1AgRklOSVNIRUQiOwotCWJvb2wgcmV0VmFsPWZhbHNlOwotICAg
ICAgICBpZighaGFzSW50ZXJyYWN0aW9uKQotCXsKLQkgICAgeDJnb0RlYnVnPDwiTm8gaW50ZXJh
Y3Rpb24gbmVlZGVkLCBjb250aW51ZSBzZXNzaW9uIjsKLSAgICAgICAgICAgIHJldFZhbD10cnVl
OwotCX0KLQllbHNlCisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTE9PUCBGSU5JU0hFRCI7CisgICAg
ICAgIGJvb2wgcmV0VmFsID0gZmFsc2U7CisgICAgICAgIGlmICghaGFzSW50ZXJyYWN0aW9uKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBzc2hQcm9jRXJyU3RyaW5nPXRyKCJSZWNvbm5lY3Qgc2Vz
c2lvbiIpOwotICAgICAgICAgICAgeDJnb0RlYnVnPDwiUmVjb25uZWN0IHNlc3Npb24iOworICAg
ICAgICAgICAgeDJnb0RlYnVnIDw8ICJObyBpbnRlcmFjdGlvbiBuZWVkZWQsIGNvbnRpbnVlIHNl
c3Npb24iOworICAgICAgICAgICAgcmV0VmFsID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzaFByb2NFcnJTdHJpbmcgPSB0cigiUmVjb25u
ZWN0IHNlc3Npb24iKTsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiUmVjb25uZWN0IHNlc3Np
b24iOwogICAgICAgICB9CiAgICAgICAgIHNzaF9jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOwogICAg
ICAgICBzc2hfY2hhbm5lbF9zZW5kX2VvZihjaGFubmVsKTsKICAgICAgICAgc3NoX2NoYW5uZWxf
ZnJlZShjaGFubmVsKTsKLQlyZXR1cm4gcmV0VmFsOwotCisgICAgICAgIHJldHVybiByZXRWYWw7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKLQogfQogCiBib29sIFNzaE1hc3RlckNvbm5lY3Rp
b246OnVzZXJBdXRoKCkKIHsKICAgICBpZiAoa2VyYmVyb3MpCiAgICAgICAgIHJldHVybiB1c2Vy
QXV0aEtyYigpOwotICAgIGlmICggYXV0b2xvZ2luICYmIGtleT09IiIgKQotICAgICAgICBpZiAo
IHVzZXJBdXRoQXV0bygpICkKKyAgICBpZiAoYXV0b2xvZ2luICYmIGtleSA9PSAiIikKKyAgICAg
ICAgaWYgKHVzZXJBdXRoQXV0bygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KCBrZXkhPSIiICkKKyAgICBpZiAoa2V5ICE9ICIiKQogICAgIHsKLSAgICAgICAgaWYgKCB1c2Vy
QXV0aFdpdGhLZXkoKSApCisgICAgICAgIGlmICh1c2VyQXV0aFdpdGhLZXkoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gdXNlckF1dGhXaXRoUGFzcygpOwog
fQogCi0KLXZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6YWRkQ2hhbm5lbENvbm5lY3Rpb24gKCBT
c2hQcm9jZXNzKiBjcmVhdG9yLCBpbnQgc29jaywgUVN0cmluZyBmb3J3YXJkSG9zdCwgaW50IGZv
cndhcmRQb3J0LAotICAgICAgICBRU3RyaW5nIGxvY2FsSG9zdCwgaW50IGxvY2FsUG9ydCwgdm9p
ZCogY2hhbm5lbCApCit2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZENoYW5uZWxDb25uZWN0
aW9uKFNzaFByb2Nlc3MgKmNyZWF0b3IsIGludCBzb2NrLCBRU3RyaW5nIGZvcndhcmRIb3N0LCBp
bnQgZm9yd2FyZFBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgbG9jYWxIb3N0LCBpbnQgbG9jYWxQb3J0LCB2b2lkICpjaGFubmVsKQog
ewogICAgIENoYW5uZWxDb25uZWN0aW9uIGNvbjsKLSAgICBjb24uY2hhbm5lbD0gKCBzc2hfY2hh
bm5lbCApIGNoYW5uZWw7Ci0gICAgY29uLnNvY2s9c29jazsKLSAgICBjb24uY3JlYXRvcj1jcmVh
dG9yOwotICAgIGNvbi5mb3J3YXJkSG9zdD1mb3J3YXJkSG9zdDsKLSAgICBjb24uZm9yd2FyZFBv
cnQ9Zm9yd2FyZFBvcnQ7Ci0gICAgY29uLmxvY2FsSG9zdD1sb2NhbEhvc3Q7Ci0gICAgY29uLmxv
Y2FsUG9ydD1sb2NhbFBvcnQ7CisgICAgY29uLmNoYW5uZWwgPSAoc3NoX2NoYW5uZWwpY2hhbm5l
bDsKKyAgICBjb24uc29jayA9IHNvY2s7CisgICAgY29uLmNyZWF0b3IgPSBjcmVhdG9yOworICAg
IGNvbi5mb3J3YXJkSG9zdCA9IGZvcndhcmRIb3N0OworICAgIGNvbi5mb3J3YXJkUG9ydCA9IGZv
cndhcmRQb3J0OworICAgIGNvbi5sb2NhbEhvc3QgPSBsb2NhbEhvc3Q7CisgICAgY29uLmxvY2Fs
UG9ydCA9IGxvY2FsUG9ydDsKIAogICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LmxvY2soKTsK
LSAgICBjaGFubmVsQ29ubmVjdGlvbnM8PGNvbjsKKyAgICBjaGFubmVsQ29ubmVjdGlvbnMgPDwg
Y29uOwogICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LnVubG9jaygpOwogfQogCi0KLXZvaWQg
U3NoTWFzdGVyQ29ubmVjdGlvbjo6YWRkQ2hhbm5lbENvbm5lY3Rpb24gKCBTc2hQcm9jZXNzKiBj
cmVhdG9yLCBRU3RyaW5nIHV1aWQsIFFTdHJpbmcgY21kICkKK3ZvaWQgU3NoTWFzdGVyQ29ubmVj
dGlvbjo6YWRkQ2hhbm5lbENvbm5lY3Rpb24oU3NoUHJvY2VzcyAqY3JlYXRvciwgUVN0cmluZyB1
dWlkLCBRU3RyaW5nIGNtZCkKIHsKIAogICAgIENoYW5uZWxDb25uZWN0aW9uIGNvbjsKLSAgICBj
b24uY2hhbm5lbD1OVUxMOwotICAgIGNvbi5zb2NrPS0xOwotICAgIGNvbi5jcmVhdG9yPWNyZWF0
b3I7Ci0gICAgY29uLmNvbW1hbmQ9Y21kOwotICAgIGNvbi51dWlkPXV1aWQ7CisgICAgY29uLmNo
YW5uZWwgPSBOVUxMOworICAgIGNvbi5zb2NrID0gLTE7CisgICAgY29uLmNyZWF0b3IgPSBjcmVh
dG9yOworICAgIGNvbi5jb21tYW5kID0gY21kOworICAgIGNvbi51dWlkID0gdXVpZDsKIAogICAg
IHgyZ29EZWJ1ZyA8PCAiTG9ja2luZyBTU0ggY2hhbm5lbCBjb25uZWN0aW9uIE1VVEVYLiI7CiAg
ICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgubG9jaygpOwogICAgIHgyZ29EZWJ1ZyA8PCAiUGFz
c2luZyBuZXcgY2hhbm5lbCBjb25uZWN0aW9uIG9iamVjdCB0byBjaGFubmVsQ29ubmVjdGlvbnMu
IjsKLSAgICBjaGFubmVsQ29ubmVjdGlvbnM8PGNvbjsKKyAgICBjaGFubmVsQ29ubmVjdGlvbnMg
PDwgY29uOwogICAgIHgyZ29EZWJ1ZyA8PCAiVW5sb2NraW5nIFNTSCBjaGFubmVsIGNvbm5lY3Rp
b24gTVVURVguIjsKICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2soKTsKIH0KIAot
Ci12b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmFkZENvcHlSZXF1ZXN0ICggU3NoUHJvY2Vzcyog
Y3JlYXRvciwgUVN0cmluZyBzcmMsIFFTdHJpbmcgZHN0ICkKK3ZvaWQgU3NoTWFzdGVyQ29ubmVj
dGlvbjo6YWRkQ29weVJlcXVlc3QoU3NoUHJvY2VzcyAqY3JlYXRvciwgUVN0cmluZyBzcmMsIFFT
dHJpbmcgZHN0KQogewogICAgIENvcHlSZXF1ZXN0IHJlcTsKLSAgICByZXEuc3JjPXNyYzsKLSAg
ICByZXEuZHN0PWRzdDsKLSAgICByZXEuY3JlYXRvcj1jcmVhdG9yOworICAgIHJlcS5zcmMgPSBz
cmM7CisgICAgcmVxLmRzdCA9IGRzdDsKKyAgICByZXEuY3JlYXRvciA9IGNyZWF0b3I7CiAgICAg
Y29weVJlcXVlc3RNdXRleC5sb2NrKCk7Ci0gICAgY29weVJlcXVlc3RzPDxyZXE7CisgICAgY29w
eVJlcXVlc3RzIDw8IHJlcTsKICAgICBjb3B5UmVxdWVzdE11dGV4LnVubG9jaygpOwogfQogCi0K
IHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y29weSgpCiB7CiAKLSAgICBmb3IgKCBpbnQgaT1j
b3B5UmVxdWVzdHMuc2l6ZSgpLTE7IGk+PTA7IC0taSApCisgICAgZm9yIChpbnQgaSA9IGNvcHlS
ZXF1ZXN0cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKICAgICB7Ci0gICAgICAgIFFTdHJpbmdM
aXN0IGxzdD1jb3B5UmVxdWVzdHNbaV0uZHN0LnNwbGl0ICggIi8iICk7Ci0gICAgICAgIFFTdHJp
bmcgZHN0RmlsZT1sc3QubGFzdCgpOworICAgICAgICBRU3RyaW5nTGlzdCBsc3QgPSBjb3B5UmVx
dWVzdHNbaV0uZHN0LnNwbGl0KCIvIik7CisgICAgICAgIFFTdHJpbmcgZHN0RmlsZSA9IGxzdC5s
YXN0KCk7CiAgICAgICAgIGxzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIFFTdHJpbmcgZHN0UGF0
aD1sc3Quam9pbiAoICIvIiApOwotICAgICAgICB4MmdvRGVidWc8PCJTU0ggTWFzdGVyIENvbm5l
Y3Rpb24gY29weSAtIGRzdCBwYXRoOiI8PGRzdFBhdGg8PCIgZmlsZToiPDxkc3RGaWxlPDxlbmRs
OwotICAgICAgICBzc2hfc2NwIHNjcD1zc2hfc2NwX25ldyAoIG15X3NzaF9zZXNzaW9uLCBTU0hf
U0NQX1dSSVRFfFNTSF9TQ1BfUkVDVVJTSVZFLCBkc3RQYXRoLnRvTGF0aW4xKCkgKTsKLSAgICAg
ICAgaWYgKCBzY3AgPT0gTlVMTCApCisgICAgICAgIFFTdHJpbmcgZHN0UGF0aCA9IGxzdC5qb2lu
KCIvIik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU1NIIE1hc3RlciBDb25uZWN0aW9uIGNvcHkg
LSBkc3QgcGF0aDoiIDw8IGRzdFBhdGggPDwgIiBmaWxlOiIgPDwgZHN0RmlsZSA8PCBlbmRsOwor
ICAgICAgICBzc2hfc2NwIHNjcCA9IHNzaF9zY3BfbmV3KG15X3NzaF9zZXNzaW9uLCBTU0hfU0NQ
X1dSSVRFIHwgU1NIX1NDUF9SRUNVUlNJVkUsIGRzdFBhdGgudG9MYXRpbjEoKSk7CisgICAgICAg
IGlmIChzY3AgPT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAgICAgeDJnb0RlYnVnPDwiRXJy
b3IgYWxsb2NhdGluZyBTQ1Agc2Vzc2lvbjogIjw8IHNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vz
c2lvbiApIDw8ZW5kbDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRXJyb3IgYWxsb2NhdGlu
ZyBTQ1Agc2Vzc2lvbjogIiA8PCBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKSA8PCBlbmRs
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGludCByYyA9IHNzaF9z
Y3BfaW5pdCAoIHNjcCApOwotICAgICAgICBpZiAoIHJjICE9IFNTSF9PSyApCisgICAgICAgIGlu
dCByYyA9IHNzaF9zY3BfaW5pdChzY3ApOworICAgICAgICBpZiAocmMgIT0gU1NIX09LKQogICAg
ICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJFcnJvciBpbml0aWFsaXppbmcgU0NQIHNl
c3Npb246ICI8PCBzc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKSA8PGVuZGw7Ci0gICAg
ICAgICAgICBzc2hfc2NwX2ZyZWUgKCBzY3AgKTsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
RXJyb3IgaW5pdGlhbGl6aW5nIFNDUCBzZXNzaW9uOiAiIDw8IHNzaF9nZXRfZXJyb3IobXlfc3No
X3Nlc3Npb24pIDw8IGVuZGw7CisgICAgICAgICAgICBzc2hfc2NwX2ZyZWUoc2NwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBRRmlsZSBmaWxlICggY29weVJlcXVl
c3RzW2ldLnNyYyApOwotICAgICAgICBpZiAoICFmaWxlLm9wZW4gKCBRSU9EZXZpY2U6OlJlYWRP
bmx5ICkgKQorICAgICAgICBRRmlsZSBmaWxlKGNvcHlSZXF1ZXN0c1tpXS5zcmMpOworICAgICAg
ICBpZiAoIWZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkKICAgICAgICAgewotICAgICAg
ICAgICAgUVN0cmluZyBlcnJNc2c9dHIgKCAiQ2Fubm90IG9wZW4gZmlsZSAiICkgK2NvcHlSZXF1
ZXN0c1tpXS5zcmM7Ci0gICAgICAgICAgICBlbWl0IGNvcHlFcnIgKCBjb3B5UmVxdWVzdHNbaV0u
Y3JlYXRvciwgZXJyTXNnLCAiIiApOwotICAgICAgICAgICAgY29weVJlcXVlc3RzLnJlbW92ZUF0
ICggaSApOwotICAgICAgICAgICAgc3NoX3NjcF9jbG9zZSAoIHNjcCApOwotICAgICAgICAgICAg
c3NoX3NjcF9mcmVlICggc2NwICk7CisgICAgICAgICAgICBRU3RyaW5nIGVyck1zZyA9IHRyKCJD
YW5ub3Qgb3BlbiBmaWxlICIpICsgY29weVJlcXVlc3RzW2ldLnNyYzsKKyAgICAgICAgICAgIGVt
aXQgY29weUVycihjb3B5UmVxdWVzdHNbaV0uY3JlYXRvciwgZXJyTXNnLCAiIik7CisgICAgICAg
ICAgICBjb3B5UmVxdWVzdHMucmVtb3ZlQXQoaSk7CisgICAgICAgICAgICBzc2hfc2NwX2Nsb3Nl
KHNjcCk7CisgICAgICAgICAgICBzc2hfc2NwX2ZyZWUoc2NwKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIFFCeXRlQXJyYXkgYXJyPWZpbGUucmVhZEFsbCgpOwor
ICAgICAgICBRQnl0ZUFycmF5IGFyciA9IGZpbGUucmVhZEFsbCgpOwogICAgICAgICBmaWxlLmNs
b3NlKCk7Ci0gICAgICAgIHJjPXNzaF9zY3BfcHVzaF9maWxlICggc2NwLGRzdEZpbGUudG9MYXRp
bjEoKSxhcnIuc2l6ZSgpLCAwNjAwICk7Ci0gICAgICAgIGlmICggcmMgIT0gU1NIX09LICkKKyAg
ICAgICAgcmMgPSBzc2hfc2NwX3B1c2hfZmlsZShzY3AsIGRzdEZpbGUudG9MYXRpbjEoKSwgYXJy
LnNpemUoKSwgMDYwMCk7CisgICAgICAgIGlmIChyYyAhPSBTU0hfT0spCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFFTdHJpbmcgZXJyTXNnPXRyICggIkNhbm5vdCBjcmVhdGUgcmVtb3RlIGZpbGUg
IiApICtjb3B5UmVxdWVzdHNbaV0uZHN0OwotICAgICAgICAgICAgUVN0cmluZyBzZXJyPXNzaF9n
ZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAgeDJnb0RlYnVnPDxlcnJN
c2c8PCIgLSAiPDxzZXJyPDxlbmRsOwotICAgICAgICAgICAgZW1pdCBjb3B5RXJyICggY29weVJl
cXVlc3RzW2ldLmNyZWF0b3IsIGVyck1zZywgc2VyciApOwotICAgICAgICAgICAgY29weVJlcXVl
c3RzLnJlbW92ZUF0ICggaSApOwotICAgICAgICAgICAgc3NoX3NjcF9jbG9zZSAoIHNjcCApOwot
ICAgICAgICAgICAgc3NoX3NjcF9mcmVlICggc2NwICk7CisgICAgICAgICAgICBRU3RyaW5nIGVy
ck1zZyA9IHRyKCJDYW5ub3QgY3JlYXRlIHJlbW90ZSBmaWxlICIpICsgY29weVJlcXVlc3RzW2ld
LmRzdDsKKyAgICAgICAgICAgIFFTdHJpbmcgc2VyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nl
c3Npb24pOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVyck1zZyA8PCAiIC0gIiA8PCBzZXJy
IDw8IGVuZGw7CisgICAgICAgICAgICBlbWl0IGNvcHlFcnIoY29weVJlcXVlc3RzW2ldLmNyZWF0
b3IsIGVyck1zZywgc2Vycik7CisgICAgICAgICAgICBjb3B5UmVxdWVzdHMucmVtb3ZlQXQoaSk7
CisgICAgICAgICAgICBzc2hfc2NwX2Nsb3NlKHNjcCk7CisgICAgICAgICAgICBzc2hfc2NwX2Zy
ZWUoc2NwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHJjPXNz
aF9zY3Bfd3JpdGUgKCBzY3AsYXJyLmRhdGEoKSxhcnIuc2l6ZSgpICk7Ci0gICAgICAgIGlmICgg
cmMgIT0gU1NIX09LICkKKyAgICAgICAgcmMgPSBzc2hfc2NwX3dyaXRlKHNjcCwgYXJyLmRhdGEo
KSwgYXJyLnNpemUoKSk7CisgICAgICAgIGlmIChyYyAhPSBTU0hfT0spCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFFTdHJpbmcgc2Vycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsK
LSAgICAgICAgICAgIFFTdHJpbmcgZXJyTXNnPXRyICggIkNhbm5vdCB3cml0ZSB0byByZW1vdGUg
ZmlsZSAiICkgK2NvcHlSZXF1ZXN0c1tpXS5kc3Q7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PGVy
ck1zZzw8IiAtICI8PHNlcnI8PGVuZGw7Ci0gICAgICAgICAgICBlbWl0IGNvcHlFcnIgKCBjb3B5
UmVxdWVzdHNbaV0uY3JlYXRvciwgZXJyTXNnLCBzZXJyICk7Ci0gICAgICAgICAgICBjb3B5UmVx
dWVzdHMucmVtb3ZlQXQgKCBpICk7Ci0gICAgICAgICAgICBzc2hfc2NwX2Nsb3NlICggc2NwICk7
Ci0gICAgICAgICAgICBzc2hfc2NwX2ZyZWUgKCBzY3AgKTsKKyAgICAgICAgICAgIFFTdHJpbmcg
c2VyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgUVN0cmlu
ZyBlcnJNc2cgPSB0cigiQ2Fubm90IHdyaXRlIHRvIHJlbW90ZSBmaWxlICIpICsgY29weVJlcXVl
c3RzW2ldLmRzdDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJNc2cgPDwgIiAtICIgPDwg
c2VyciA8PCBlbmRsOworICAgICAgICAgICAgZW1pdCBjb3B5RXJyKGNvcHlSZXF1ZXN0c1tpXS5j
cmVhdG9yLCBlcnJNc2csIHNlcnIpOworICAgICAgICAgICAgY29weVJlcXVlc3RzLnJlbW92ZUF0
KGkpOworICAgICAgICAgICAgc3NoX3NjcF9jbG9zZShzY3ApOworICAgICAgICAgICAgc3NoX3Nj
cF9mcmVlKHNjcCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBl
bWl0IGNvcHlPayAoIGNvcHlSZXF1ZXN0c1tpXS5jcmVhdG9yICk7Ci0gICAgICAgIHgyZ29EZWJ1
Zzw8InNjcCBvazogIjw8Y29weVJlcXVlc3RzW2ldLnNyYzw8IiAtPiAiPDx1c2VyPDwiQCI8PGhv
c3Q8PCI6Ijw8Y29weVJlcXVlc3RzW2ldLmRzdDw8ZW5kbDsKLSAgICAgICAgY29weVJlcXVlc3Rz
LnJlbW92ZUF0ICggaSApOwotICAgICAgICBzc2hfc2NwX2Nsb3NlICggc2NwICk7Ci0gICAgICAg
IHNzaF9zY3BfZnJlZSAoIHNjcCApOworICAgICAgICBlbWl0IGNvcHlPayhjb3B5UmVxdWVzdHNb
aV0uY3JlYXRvcik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAic2NwIG9rOiAiIDw8IGNvcHlSZXF1
ZXN0c1tpXS5zcmMgPDwgIiAtPiAiIDw8IHVzZXIgPDwgIkAiIDw8IGhvc3QgPDwgIjoiIDw8IGNv
cHlSZXF1ZXN0c1tpXS5kc3QgPDwgZW5kbDsKKyAgICAgICAgY29weVJlcXVlc3RzLnJlbW92ZUF0
KGkpOworICAgICAgICBzc2hfc2NwX2Nsb3NlKHNjcCk7CisgICAgICAgIHNzaF9zY3BfZnJlZShz
Y3ApOwogICAgIH0KIH0KIApAQCAtMTkwMCw0NyArMTkwNyw0NyBAQCB2b2lkIFNzaE1hc3RlckNv
bm5lY3Rpb246OmNoYW5uZWxMb29wKCkKICAgICBmb3JldmVyCiAgICAgewogICAgICAgICBkaXNj
b25uZWN0RmxhZ011dGV4LmxvY2soKTsKLSAgICAgICAgYm9vbCBkaXNjb25uZWN0PWRpc2Nvbm5l
Y3RTZXNzaW9uRmxhZzsKKyAgICAgICAgYm9vbCBkaXNjb25uZWN0ID0gZGlzY29ubmVjdFNlc3Np
b25GbGFnOwogICAgICAgICBkaXNjb25uZWN0RmxhZ011dGV4LnVubG9jaygpOwogCi0gICAgICAg
IGlmICggZGlzY29ubmVjdCApCisgICAgICAgIGlmIChkaXNjb25uZWN0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICB4MmdvRGVidWc8PCJEaXNjb25uZWN0aW5nIC4uLiI8PGVuZGw7CisgICAgICAg
ICAgICB4MmdvRGVidWcgPDwgIkRpc2Nvbm5lY3RpbmcgLi4uIiA8PCBlbmRsOwogCi0gICAgICAg
ICAgICBpZiAodXNlcHJveHkgJiYgcHJveHl0eXBlPT1QUk9YWVNTSCYmc3NoUHJveHkpCisgICAg
ICAgICAgICBpZiAodXNlcHJveHkgJiYgcHJveHl0eXBlID09IFBST1hZU1NIICYmIHNzaFByb3h5
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGRlbGV0ZSBzc2hQcm94eTsKLSAgICAg
ICAgICAgICAgICBzc2hQcm94eT0wOworICAgICAgICAgICAgICAgIHNzaFByb3h5ID0gMDsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgubG9jaygp
OwotICAgICAgICAgICAgeDJnb0RlYnVnPDwiRGVsZXRpbmcgY2hhbm5lbCBjb25uZWN0aW9ucy4i
PDxlbmRsOwotICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxjaGFubmVsQ29ubmVjdGlvbnMu
c2l6ZSgpOyArK2kgKQorICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJEZWxldGluZyBjaGFubmVs
IGNvbm5lY3Rpb25zLiIgPDwgZW5kbDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKTsgKytpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZpbmFsaXplICggaSApOworICAgICAgICAgICAgICAgIGZpbmFsaXplKGkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgudW5sb2NrKCk7
Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJEaXNjb25uZWN0aW5nIHNlc3Npb24uIjw8ZW5kbDsK
LSAgICAgICAgICAgIHNzaF9kaXNjb25uZWN0ICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAg
ICAgIHNzaF9mcmVlICggbXlfc3NoX3Nlc3Npb24gKTsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8
PCAiRGlzY29ubmVjdGluZyBzZXNzaW9uLiIgPDwgZW5kbDsKKyAgICAgICAgICAgIHNzaF9kaXNj
b25uZWN0KG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgIHNzaF9mcmVlKG15X3NzaF9zZXNz
aW9uKTsKIAotICAgICAgICAgICAgeDJnb0RlYnVnPDwiRGVsZXRpbmcgc29ja2V0cy4iPDxlbmRs
OworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJEZWxldGluZyBzb2NrZXRzLiIgPDwgZW5kbDsK
ICAgICAgICAgICAgIGlmICh0Y3BQcm94eVNvY2tldCAhPSBOVUxMKQogICAgICAgICAgICAgICAg
IGRlbGV0ZSB0Y3BQcm94eVNvY2tldDsKICAgICAgICAgICAgIGlmICh0Y3BOZXR3b3JrUHJveHkg
IT0gTlVMTCkKICAgICAgICAgICAgICAgICBkZWxldGUgdGNwTmV0d29ya1Byb3h5OwotICAgICAg
ICAgICAgeDJnb0RlYnVnPDwiQWxsIGNoYW5uZWxzIGNsb3NlZCBhbmQgc2Vzc2lvbiBkaXNjb25u
ZWN0ZWQuIFF1aXR0aW5nIHNlc3Npb24gbG9vcC4iPDxlbmRsOworICAgICAgICAgICAgeDJnb0Rl
YnVnIDw8ICJBbGwgY2hhbm5lbHMgY2xvc2VkIGFuZCBzZXNzaW9uIGRpc2Nvbm5lY3RlZC4gUXVp
dHRpbmcgc2Vzc2lvbiBsb29wLiIgPDwgZW5kbDsKICAgICAgICAgICAgIHF1aXQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhZGRSZXZlcnNlVHVubmVsQ29ubmVj
dGlvbnMoKTsKICAgICAgICAgY2hlY2tSZXZlcnNlVHVubmVsQ29ubmVjdGlvbnMoKTsKICAgICAg
ICAgY29weVJlcXVlc3RNdXRleC5sb2NrKCk7Ci0gICAgICAgIGlmICggY29weVJlcXVlc3RzLnNp
emUoKSA+MCApCisgICAgICAgIGlmIChjb3B5UmVxdWVzdHMuc2l6ZSgpID4gMCkKICAgICAgICAg
ICAgIGNvcHkoKTsKICAgICAgICAgY29weVJlcXVlc3RNdXRleC51bmxvY2soKTsKIAotICAgICAg
ICBjaGFyIGJ1ZmZlclsxMDI0KjUxMl07IC8vNTEySyBidWZmZXIKKyAgICAgICAgY2hhciBidWZm
ZXJbMTAyNCAqIDUxMl07IC8vNTEySyBidWZmZXIKICAgICAgICAgaW50IG5ieXRlczsKICAgICAg
ICAgZmRfc2V0IHJmZHM7CiAKQEAgLTE5NTAsMjYwICsxOTU3LDI2MyBAQCB2b2lkIFNzaE1hc3Rl
ckNvbm5lY3Rpb246OmNoYW5uZWxMb29wKCkKICAgICAgICAgdHYudHZfdXNlYyA9IDUwMDAwMDsK
IAogICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICBpbnQgbWF4c29jaz0tMTsKLQorICAgICAg
ICBpbnQgbWF4c29jayA9IC0xOwogCiAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4Lmxv
Y2soKTsKLSAgICAgICAgaWYgKCBjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpIDw9MCApCisgICAg
ICAgIGlmIChjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpIDw9IDApCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8Im5vIGNoYW5uZWwgY29ubmVjdGlvbnMs
IHdhaXRpbmdcbiI7CiAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2so
KTsKLSAgICAgICAgICAgIHVzbGVlcCAoIDUwMCApOworICAgICAgICAgICAgdXNsZWVwKDUwMCk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBzc2hfY2hhbm5lbCog
cmVhZF9jaGFuPW5ldyBzc2hfY2hhbm5lbFtjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpICsxXTsK
LSAgICAgICAgc3NoX2NoYW5uZWwqIG91dF9jaGFuPW5ldyBzc2hfY2hhbm5lbFtjaGFubmVsQ29u
bmVjdGlvbnMuc2l6ZSgpICsxXTsKLSAgICAgICAgcmVhZF9jaGFuW2NoYW5uZWxDb25uZWN0aW9u
cy5zaXplKCkgXT1OVUxMOworICAgICAgICBzc2hfY2hhbm5lbCAqcmVhZF9jaGFuID0gbmV3IHNz
aF9jaGFubmVsW2NoYW5uZWxDb25uZWN0aW9ucy5zaXplKCkgKyAxXTsKKyAgICAgICAgc3NoX2No
YW5uZWwgKm91dF9jaGFuID0gbmV3IHNzaF9jaGFubmVsW2NoYW5uZWxDb25uZWN0aW9ucy5zaXpl
KCkgKyAxXTsKKyAgICAgICAgcmVhZF9jaGFuW2NoYW5uZWxDb25uZWN0aW9ucy5zaXplKCldID0g
TlVMTDsKIAotICAgICAgICBGRF9aRVJPICggJnJmZHMgKTsKKyAgICAgICAgRkRfWkVSTygmcmZk
cyk7CiAKLSAgICAgICAgZm9yICggaW50IGk9MDsgaTxjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgp
OyArK2kgKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYW5uZWxDb25uZWN0aW9ucy5z
aXplKCk7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHRjcFNvY2tldD1jaGFubmVs
Q29ubmVjdGlvbnMuYXQgKCBpICkuc29jazsKLSAgICAgICAgICAgIGlmICggdGNwU29ja2V0PjAg
KQotICAgICAgICAgICAgICAgIEZEX1NFVCAoIHRjcFNvY2tldCwgJnJmZHMgKTsKLSAgICAgICAg
ICAgIGlmICggY2hhbm5lbENvbm5lY3Rpb25zLmF0ICggaSApLmNoYW5uZWw9PTBsICkKKyAgICAg
ICAgICAgIGludCB0Y3BTb2NrZXQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuc29jazsKKyAg
ICAgICAgICAgIGlmICh0Y3BTb2NrZXQgPiAwKQorICAgICAgICAgICAgICAgIEZEX1NFVCh0Y3BT
b2NrZXQsICZyZmRzKTsKKyAgICAgICAgICAgIGlmIChjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSku
Y2hhbm5lbCA9PSAwbCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8
PCJDcmVhdGluZyBuZXcgY2hhbm5lbC4iPDxlbmRsOwotICAgICAgICAgICAgICAgIHNzaF9jaGFu
bmVsIGNoYW5uZWwgPSBzc2hfY2hhbm5lbF9uZXcgKCBteV9zc2hfc2Vzc2lvbiApOworICAgICAg
ICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ3JlYXRpbmcgbmV3IGNoYW5uZWwuIiA8PCBlbmRsOwor
ICAgICAgICAgICAgICAgIHNzaF9jaGFubmVsIGNoYW5uZWwgPSBzc2hfY2hhbm5lbF9uZXcobXlf
c3NoX3Nlc3Npb24pOwogCi0gICAgICAgICAgICAgICAgaWYgKCFjaGFubmVsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvciAobXlfc3NoX3Nlc3Npb24p
OworICAgICAgICAgICAgICAgIGlmICghY2hhbm5lbCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lv
bik7CiAgICAgICAgICAgICAgICAgICAgIC8qOiBBcmd1bWVudCBpbiB0aGlzIGNvbnRleHQgd2ls
bCBiZSBhIGZ1bmN0aW9uIG5hbWUuICovCi0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJy
b3JfbXNnID0gdHIgKCIlMSBmYWlsZWQuIikuYXJnICgic3NoX2NoYW5uZWxfbmV3Iik7Ci0gICAg
ICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIgKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9y
LCBlcnJvcl9tc2csIGVycik7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNn
ID0gdHIoIiUxIGZhaWxlZC4iKS5hcmcoInNzaF9jaGFubmVsX25ldyIpOworICAgICAgICAgICAg
ICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvcl9t
c2csIGVycik7CiAKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZy5s
ZWZ0IChlcnJvcl9tc2cuc2l6ZSAoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CisgICAg
ICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2cubGVmdChlcnJvcl9tc2cuc2l6
ZSgpIC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsKIAogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwi
TmV3IGNoYW5uZWw6Ijw8Y2hhbm5lbDw8ZW5kbDsKLSAgICAgICAgICAgICAgICBjaGFubmVsQ29u
bmVjdGlvbnNbaV0uY2hhbm5lbD1jaGFubmVsOwotICAgICAgICAgICAgICAgIGlmICggdGNwU29j
a2V0PjAgKQorICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTmV3IGNoYW5uZWw6IiA8PCBj
aGFubmVsIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNo
YW5uZWwgPSBjaGFubmVsOworICAgICAgICAgICAgICAgIGlmICh0Y3BTb2NrZXQgPiAwKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJk
aW5nIHBhcmFtZXRlcnM6IGZyb20gcmVtb3RlICgiIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdCAo
aSkuZm9yd2FyZEhvc3QgPDwgIjoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBj
aGFubmVsQ29ubmVjdGlvbnMuYXQgKGkpLmZvcndhcmRQb3J0IDw8ICIpIHRvIGxvY2FsICgiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkp
LmxvY2FsSG9zdCA8PCAiOiIgPDwgY2hhbm5lbENvbm5lY3Rpb25zLmF0IChpKS5sb2NhbFBvcnQK
KyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJkaW5nIHBhcmFtZXRlcnM6
IGZyb20gcmVtb3RlICgiIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5mb3J3YXJkSG9zdCA8
PCAiOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNoYW5uZWxDb25uZWN0aW9u
cy5hdChpKS5mb3J3YXJkUG9ydCA8PCAiKSB0byBsb2NhbCAoIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmxvY2FsSG9zdCA8PCAiOiIg
PDwgY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmxvY2FsUG9ydAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgIikiOwogCiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAg
ICAgICAgICAgICAqIENhbm5vdCBzdXBwb3J0IGNvbmZpZyBmaWxlIHBhcnNpbmcgaGVyZSB3aXRo
IHByZS0wLjYuMCBsaWJzc2ggdmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgICAgICAqIFRoZXJl
J3MganVzdCBubyB3YXkgdG8gZ2V0IHRoZSBpbmZlcnJlZCBob3N0IGFuZCBwb3J0IHZhbHVlcy4K
ICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9W
RVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICAgICAgICAgICAgICAgICAgc3NoX3Nlc3Npb24gdG1w
X3Nlc3Npb24gPSBzc2hfbmV3ICgpOworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVS
U0lPTl9JTlQoMCwgNiwgMCkKKyAgICAgICAgICAgICAgICAgICAgc3NoX3Nlc3Npb24gdG1wX3Nl
c3Npb24gPSBzc2hfbmV3KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0bXBfc2Vzc2lv
bikgewotICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvcl9tc2cgPSB0ciAoIkNh
bm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CisgICAgICAgICAgICAgICAgICAgIGlmICghdG1w
X3Nlc3Npb24pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JfbXNnOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZW1pdCBpb0VyciAoY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3Is
IGVycm9yX21zZywgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VycihjaGFu
bmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JfbXNnLCAiIik7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBRQnl0ZUFycmF5IHRtcF9CQSA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdCAoaSkuZm9yd2Fy
ZEhvc3QudG9Mb2NhbDhCaXQgKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQg
dG1wX3BvcnQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkpLmZvcndhcmRQb3J0OworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZv
cndhcmRIb3N0LnRvTG9jYWw4Qml0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBp
bnQgdG1wX3BvcnQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQ7CiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCAodG1wX3Nlc3Npb24sIFNTSF9P
UFRJT05TX0hPU1QsIHRtcF9CQS5kYXRhICgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNz
aF9vcHRpb25zX3NldCh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wX0JBLmRhdGEo
KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBfcG9ydCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCAodG1wX3Nlc3Npb24sIFNTSF9PUFRJ
T05TX1BPUlQsICZ0bXBfcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3Bv
cnQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3NoX29wdGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19QT1JULCAmdG1wX3Bv
cnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiBUaGUgaG9zdCBhbmQgcG9ydCBtaWdodCBiZSBhIHNob3J0aGFuZCBhbmQgemVybywgc28g
ZmV0Y2ggdGhlIGFjdHVhbCBkYXRhLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNz
aF9vcHRpb25zX3BhcnNlX2NvbmZpZyAodG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNzaF9vcHRpb25zX3BhcnNlX2NvbmZpZyh0bXBfc2Vzc2lv
biwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzogdW5hYmxlIHRvIHBhcnNlIHRoZSBT
U0ggY29uZmlnIGZpbGUuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZmVycmVkX3BvcnQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQgKHRtcF9zZXNzaW9uLCAmaW5mZXJy
ZWRfcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzc2hfb3B0aW9uc19nZXRfcG9ydCh0
bXBfc2Vzc2lvbiwgJmluZmVycmVkX3BvcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJUZW1wb3Jhcnkgc2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNl
OiAiIDw8IGluZmVycmVkX3BvcnQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlu
ZmVycmVkX2hvc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgc3NoX29wdGlvbnNf
Z2V0ICh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgJmluZmVycmVkX2hvc3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BU
SU9OU19IT1NULCAmaW5mZXJyZWRfaG9zdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIlRlbXBvcmFyeSBzZXNzaW9uIGhvc3QgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6
ICIgPDwgaW5mZXJyZWRfaG9zdDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENv
bm5lY3Rpb25zW2ldLmZvcndhcmRIb3N0ID0gUVN0cmluZyAoaW5mZXJyZWRfaG9zdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNbaV0uZm9yd2FyZFBvcnQgPSBz
dGF0aWNfY2FzdDxpbnQ+IChpbmZlcnJlZF9wb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5uZWxDb25uZWN0aW9uc1tpXS5mb3J3YXJkSG9zdCA9IFFTdHJpbmcoaW5mZXJyZWRfaG9z
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNbaV0uZm9yd2Fy
ZFBvcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZmVycmVkX3BvcnQpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzc2hfc3RyaW5nX2ZyZWVfY2hhciAoaW5mZXJyZWRfaG9zdCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzc2hfZnJlZSAodG1wX3Nlc3Npb24pOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaW5mZXJyZWRfaG9zdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzc2hfZnJlZSh0bXBfc2Vzc2lvbik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICNlbmRpZgogCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFFCeXRlQXJyYXkgdG1wX0JBX2ZvcndhcmQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkp
LmZvcndhcmRIb3N0LnRvTG9jYWw4Qml0ICgpOwotICAgICAgICAgICAgICAgICAgICAgICAgUUJ5
dGVBcnJheSB0bXBfQkFfbG9jYWwgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkpLmxvY2FsSG9z
dC50b0xvY2FsOEJpdCAoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzc2hfY2hh
bm5lbF9vcGVuX2ZvcndhcmQgKCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQkFfZm9yd2FyZC5kYXRhICgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFu
bmVsQ29ubmVjdGlvbnMuYXQgKCBpICkuZm9yd2FyZFBvcnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9CQV9sb2NhbC5kYXRhICgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKCBpICkubG9jYWxQb3J0ICkgIT0gU1NIX09LICkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBX2ZvcndhcmQgPSBjaGFubmVs
Q29ubmVjdGlvbnMuYXQoaSkuZm9yd2FyZEhvc3QudG9Mb2NhbDhCaXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBX2xvY2FsID0gY2hhbm5lbENvbm5lY3Rpb25z
LmF0KGkpLmxvY2FsSG9zdC50b0xvY2FsOEJpdCgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3NoX2NoYW5uZWxfb3Blbl9mb3J3YXJkKGNoYW5uZWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9CQV9mb3J3YXJkLmRhdGEo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRQb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQkFfbG9jYWwuZGF0YSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFu
bmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxQb3J0KSAhPSBTU0hfT0spCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnI9c3No
X2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUVN0cmluZyBlcnJvck1zZz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVs
X29wZW5fZm9yd2FyZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIg
KCBjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVyciApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8ZXJyb3JNc2cubGVmdCAoZXJyb3JNc2cu
c2l6ZSAoKSAtIDEpPDwiOiAiPDxlcnI8PGVuZGw7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycm9yTXNnID0gdHIoIiUxIGZhaWxlZC4iKS5h
cmcoInNzaF9jaGFubmVsX29wZW5fZm9yd2FyZCIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVtaXQgaW9FcnIoY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yTXNnLCBl
cnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5s
ZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVn
PDwiTmV3IGNoYW5uZWwgZm9yd2FyZGVkLiI8PGVuZGw7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJOZXcgY2hhbm5lbCBmb3J3YXJkZWQuIiA8PCBlbmRsOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IkV4ZWN1dGluZyByZW1vdGU6ICI8PGNoYW5uZWxDb25u
ZWN0aW9ucy5hdCAoIGkgKS5jb21tYW5kPDxlbmRsOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IHNzaF9jaGFubmVsX29wZW5fc2Vzc2lvbiAoIGNoYW5uZWwgKSAhPVNTSF9PSyApCisgICAgICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRXhlY3V0aW5nIHJlbW90ZTogIiA8PCBjaGFubmVs
Q29ubmVjdGlvbnMuYXQoaSkuY29tbWFuZCA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICBp
ZiAoc3NoX2NoYW5uZWxfb3Blbl9zZXNzaW9uKGNoYW5uZWwpICE9IFNTSF9PSykKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnI9c3NoX2dl
dF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRU3Ry
aW5nIGVycm9yTXNnPXRyICggIiUxIGZhaWxlZC4iICkuYXJnICgic3NoX2NoYW5uZWxfb3Blbl9z
ZXNzaW9uIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5lbENv
bm5lY3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yTXNnLCBlcnIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHgyZ29EZWJ1Zzw8ZXJyb3JNc2cubGVmdCAoZXJyb3JNc2cuc2l6ZSAoKSAtIDEpPDwi
OiAiPDxlcnI8PGVuZGw7CisgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNz
aF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9vcGVuX3Nl
c3Npb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIoY2hhbm5lbENvbm5l
Y3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yTXNnLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgpIC0gMSkgPDwgIjog
IiA8PCBlcnIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICggc3NoX2NoYW5uZWxfcmVxdWVzdF9leGVjICggY2hhbm5lbCwgY2hhbm5l
bENvbm5lY3Rpb25zW2ldLmNvbW1hbmQudG9MYXRpbjEoKSApICE9IFNTSF9PSyApCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHNzaF9jaGFubmVsX3JlcXVlc3RfZXhlYyhjaGFubmVsLCBj
aGFubmVsQ29ubmVjdGlvbnNbaV0uY29tbWFuZC50b0xhdGluMSgpKSAhPSBTU0hfT0spCiAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyPXNz
aF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBlcnJvck1zZz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVsX3Jl
cXVlc3RfZXhlYyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VyciAoIGNoYW5u
ZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxlZnQgKGVycm9yTXNnLnNpemUgKCkgLSAx
KTw8IjogIjw8ZXJyPDxlbmRsOworICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnIg
PSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgZXJyb3JNc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3NoX2NoYW5uZWxfcmVx
dWVzdF9leGVjIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxD
b25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8
ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB4MmdvRGVidWc8PCJOZXcgZXhlYyBjaGFubmVsIGNyZWF0ZWQuIjw8ZW5kbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTmV3IGV4ZWMgY2hhbm5lbCBjcmVhdGVk
LiIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVhZF9jaGFuW2ldPWNoYW5uZWxDb25uZWN0aW9u
cy5hdCAoIGkgKS5jaGFubmVsOwotICAgICAgICAgICAgaWYgKCB0Y3BTb2NrZXQ+bWF4c29jayAp
Ci0gICAgICAgICAgICAgICAgbWF4c29jaz10Y3BTb2NrZXQ7CisgICAgICAgICAgICByZWFkX2No
YW5baV0gPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkuY2hhbm5lbDsKKyAgICAgICAgICAgIGlm
ICh0Y3BTb2NrZXQgPiBtYXhzb2NrKQorICAgICAgICAgICAgICAgIG1heHNvY2sgPSB0Y3BTb2Nr
ZXQ7CiAgICAgICAgIH0KICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgudW5sb2NrKCk7
Ci0gICAgICAgIHJldHZhbD1zc2hfc2VsZWN0ICggcmVhZF9jaGFuLG91dF9jaGFuLG1heHNvY2sr
MSwmcmZkcywmdHYgKTsKLSAgICAgICAgZGVsZXRlIFtdIHJlYWRfY2hhbjsKLSAgICAgICAgZGVs
ZXRlIFtdIG91dF9jaGFuOworICAgICAgICByZXR2YWwgPSBzc2hfc2VsZWN0KHJlYWRfY2hhbiwg
b3V0X2NoYW4sIG1heHNvY2sgKyAxLCAmcmZkcywgJnR2KTsKKyAgICAgICAgZGVsZXRlW10gcmVh
ZF9jaGFuOworICAgICAgICBkZWxldGVbXSBvdXRfY2hhbjsKIAotICAgICAgICBpZiAoIHJldHZh
bCA9PSAtMSApCisgICAgICAgIGlmIChyZXR2YWwgPT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHgyZ29EZWJ1Zzw8InNlbGVjdCgpIGVycm9yLiI7CisgICAgICAgICAgICB4MmdvRGVidWcg
PDwgInNlbGVjdCgpIGVycm9yLiI7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vICAgICAgICAgeDJnb0RlYnVnPDwic2VsZWN0IGV4aXRlZCI8PGVuZGw7CiAK
ICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgubG9jaygpOwotICAgICAgICBmb3IgKCBp
bnQgaT1jaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpLTE7IGk+PTA7IC0taSApCisgICAgICAgIGZv
ciAoaW50IGkgPSBjaGFubmVsQ29ubmVjdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGludCB0Y3BTb2NrZXQ9Y2hhbm5lbENvbm5lY3Rpb25zLmF0
ICggaSApLnNvY2s7Ci0gICAgICAgICAgICBzc2hfY2hhbm5lbCBjaGFubmVsPWNoYW5uZWxDb25u
ZWN0aW9ucy5hdCAoIGkgKS5jaGFubmVsOwotICAgICAgICAgICAgaWYgKCBjaGFubmVsPT0wbCAp
CisgICAgICAgICAgICBpbnQgdGNwU29ja2V0ID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLnNv
Y2s7CisgICAgICAgICAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gY2hhbm5lbENvbm5lY3Rpb25z
LmF0KGkpLmNoYW5uZWw7CisgICAgICAgICAgICBpZiAoY2hhbm5lbCA9PSAwbCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICggc3NoX2NoYW5uZWxfcG9sbCAoIGNo
YW5uZWwsMSApID4gMCApCisgICAgICAgICAgICBpZiAoc3NoX2NoYW5uZWxfcG9sbChjaGFubmVs
LCAxKSA+IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAg
IHgyZ29EZWJ1Zzw8InJlYWQgZXJyIGRhdGEgZnJvbSBjaGFubmVsXG4iOwotICAgICAgICAgICAg
ICAgIG5ieXRlcyA9IHNzaF9jaGFubmVsX3JlYWQgKCBjaGFubmVsLCBidWZmZXIsIHNpemVvZiAo
IGJ1ZmZlciApLTEsIDEgKTsKLSAgICAgICAgICAgICAgICBlbWl0IHN0ZEVyciAoIGNoYW5uZWxD
b25uZWN0aW9uc1tpXS5jcmVhdG9yLCBRQnl0ZUFycmF5ICggYnVmZmVyLG5ieXRlcyApICk7Cisg
ICAgICAgICAgICAgICAgbmJ5dGVzID0gc3NoX2NoYW5uZWxfcmVhZChjaGFubmVsLCBidWZmZXIs
IHNpemVvZihidWZmZXIpIC0gMSwgMSk7CisgICAgICAgICAgICAgICAgZW1pdCBzdGRFcnIoY2hh
bm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3IsIFFCeXRlQXJyYXkoYnVmZmVyLCBuYnl0ZXMpKTsK
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgeDJnb0RlYnVnPDxuYnl0ZXM8PCIgZXJy
IGZyb20gY2hhbm5lbCI8PGVuZGw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgcmV6
ID0gc3NoX2NoYW5uZWxfcG9sbCAoIGNoYW5uZWwsIDAgKTsKLSAgICAgICAgICAgIGlmICggcmV6
PT1TU0hfRU9GICkKKyAgICAgICAgICAgIGludCByZXogPSBzc2hfY2hhbm5lbF9wb2xsKGNoYW5u
ZWwsIDApOworICAgICAgICAgICAgaWYgKHJleiA9PSBTU0hfRU9GKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IkVPRiBvbiBjaGFubmVsICI8PGNoYW5uZWw8PCI7
IFNzaFByb2Nlc3Mgb2JqZWN0OiAiPDxjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvci0+cGlk
OworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRU9GIG9uIGNoYW5uZWwgIiA8PCBjaGFu
bmVsIDw8ICI7IFNzaFByb2Nlc3Mgb2JqZWN0OiAiIDw8IGNoYW5uZWxDb25uZWN0aW9uc1tpXS5j
cmVhdG9yLT5waWQ7CiAKICAgICAgICAgICAgICAgICAvLy8vLy9GaW5pc2hlZC8vLy8vLy8vCi0g
ICAgICAgICAgICAgICAgZmluYWxpemUgKCBpICk7CisgICAgICAgICAgICAgICAgZmluYWxpemUo
aSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIHJlej4wICkKKyAgICAgICAgICAgIGlmIChyZXogPiAwKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwicmVhZCBkYXRh
IGZyb20gY2hhbm5lbCAiPDxjaGFubmVsPDxlbmRsOwotICAgICAgICAgICAgICAgIG5ieXRlcyA9
IHNzaF9jaGFubmVsX3JlYWQgKCBjaGFubmVsLCBidWZmZXIsIHNpemVvZiAoIGJ1ZmZlciApLTEs
IDAgKTsKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBzc2hfY2hhbm5lbF9yZWFkKGNoYW5uZWws
IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCAwKTsKICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8bmJ5dGVzPDwiIGZyb20gY2hhbm5lbCAiPDxjaGFubmVs
PDxlbmRsOwotICAgICAgICAgICAgICAgIGlmICggbmJ5dGVzID4gMCApCisgICAgICAgICAgICAg
ICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHRjcFNvY2tldD4wICkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRjcFNvY2tldCA+
IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c2VuZCAoIHRjcFNvY2tldCxidWZmZXIsIG5ieXRlcywwICkgIT0gbmJ5dGVzICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzZW5kKHRjcFNvY2tldCwgYnVmZmVyLCBuYnl0ZXMsIDApICE9
IG5ieXRlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nIGVyck1zZz10ciAoICJFcnJvciB3cml0aW5nIHRvIHNvY2tldC4iICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwiRXJyb3Igd3JpdGluZyAi
PDxuYnl0ZXM8PCIgdG8gVENQIHNvY2tldCI8PHRjcFNvY2tldDw8ZW5kbDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0
b3IsZXJyTXNnLCIiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUgKCBp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJNc2cgPSB0cigiRXJy
b3Igd3JpdGluZyB0byBzb2NrZXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJFcnJvciB3cml0aW5nICIgPDwgbmJ5dGVzIDw8ICIgdG8gVENQIHNvY2tldCIg
PDwgdGNwU29ja2V0IDw8IGVuZGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBp
b0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyTXNnLCAiIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJ3cm90ZSAiPDxu
Ynl0ZXM8PCIgdG8gdGNwIHNvY2tldCAiPDx0Y3BTb2NrZXQ8PGVuZGw7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0IHN0ZE91dCAoIGNoYW5uZWxDb25uZWN0aW9u
c1tpXS5jcmVhdG9yLCBRQnl0ZUFycmF5ICggYnVmZmVyLG5ieXRlcyApICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbWl0IHN0ZE91dChjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwg
UUJ5dGVBcnJheShidWZmZXIsIG5ieXRlcykpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBuYnl0ZXMgPCAwICkKKyAgICAg
ICAgICAgICAgICBpZiAobmJ5dGVzIDwgMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vLy8vL0VSUk9SISEhISEvLy8vLy8vLwotICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBlcnJvck1zZz10ciAoICJFcnJvciByZWFkaW5nIGNoYW5uZWwuIiAp
OwotICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5lbENvbm5lY3Rpb25zW2ld
LmNyZWF0b3IsIGVycm9yTXNnLCBlcnIgKTsKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVn
PDxlcnJvck1zZzw8IiAtICI8PGVycjw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgZmluYWxp
emUgKCBpICk7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJv
cihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JNc2cg
PSB0cigiRXJyb3IgcmVhZGluZyBjaGFubmVsLiIpOworICAgICAgICAgICAgICAgICAgICBlbWl0
IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyKTsKKyAg
ICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnIDw8ICIgLSAiIDw8IGVyciA8
PCBlbmRsOworICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZShpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KCBzc2hfY2hhbm5lbF9pc19lb2YgKCBjaGFubmVsICkgKQorICAgICAgICAgICAgICAgIGlmIChz
c2hfY2hhbm5lbF9pc19lb2YoY2hhbm5lbCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB4MmdvRGVidWc8PCJFT0Ygb24gY2hhbm5lbCAiPDxjaGFubmVsPDwiOyBTc2hQ
cm9jZXNzIG9iamVjdDogIjw8Y2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3ItPnBpZDsKKyAg
ICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygb24gY2hhbm5lbCAiIDw8IGNoYW5u
ZWwgPDwgIjsgU3NoUHJvY2VzcyBvYmplY3Q6ICIgPDwgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNy
ZWF0b3ItPnBpZDsKIAogICAgICAgICAgICAgICAgICAgICAvLy8vLy9GaW5pc2hlZC8vLy8vLy8v
Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplICggaSApOworICAgICAgICAgICAgICAgICAg
ICBmaW5hbGl6ZShpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCB0Y3BTb2NrZXQ8PTAgKQor
ICAgICAgICAgICAgaWYgKHRjcFNvY2tldCA8PSAwKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCBGRF9JU1NF
VCAoIHRjcFNvY2tldCwmcmZkcyApICkKKyAgICAgICAgICAgIGlmIChGRF9JU1NFVCh0Y3BTb2Nr
ZXQsICZyZmRzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYnl0ZXMgPSByZWN2
ICggdGNwU29ja2V0LCBidWZmZXIsIHNpemVvZiAoIGJ1ZmZlciApLTEsMCApOworICAgICAgICAg
ICAgICAgIG5ieXRlcyA9IHJlY3YodGNwU29ja2V0LCBidWZmZXIsIHNpemVvZihidWZmZXIpIC0g
MSwgMCk7CiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PG5i
eXRlczw8IiBieXRlcyBmcm9tIHRjcCBzb2NrZXQgIjw8dGNwU29ja2V0PDxlbmRsOwotICAgICAg
ICAgICAgICAgIGlmICggbmJ5dGVzID4gMCApCisgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA+
IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHNzaF9jaGFu
bmVsX3dyaXRlICggY2hhbm5lbCwgYnVmZmVyLCBuYnl0ZXMgKSAhPW5ieXRlcyApCisgICAgICAg
ICAgICAgICAgICAgIGlmIChzc2hfY2hhbm5lbF93cml0ZShjaGFubmVsLCBidWZmZXIsIG5ieXRl
cykgIT0gbmJ5dGVzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JNc2c9dHIgKCAiJTEgZmFpbGVkLiIgKS5h
cmcgKCJzc2hfY2hhbm5lbF93cml0ZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBp
b0VyciAoIGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxlZnQgKGVycm9yTXNn
LnNpemUgKCkgLSAxKTw8IjogIjw8ZXJyPDxlbmRsOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZmluYWxpemUgKCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNz
aF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF93cml0ZSIp
OworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNb
aV0uY3JlYXRvciwgZXJyb3JNc2csIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgZXJyb3JNc2cubGVmdChlcnJvck1zZy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVy
ciA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PG5ieXRlczw8
IiBieXRlcyB3cm90ZSB0byBjaGFubmVsIjw8Y2hhbm5lbDw8ZW5kbDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBuYnl0ZXMgPCAwICkKKyAgICAgICAgICAgICAgICBp
ZiAobmJ5dGVzIDwgMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8v
Ly8vL0VSUk9SISEhISEvLy8vLy8vLwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycj0i
IjsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvck1zZz10ciAoICJFcnJvciByZWFk
aW5nIGZyb20gVENQIHNvY2tldC4iICk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIg
KCBjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVyciApOwotICAgICAg
ICAgICAgICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnPDwiIC0gIjw8ZXJyPDxlbmRsOwotICAg
ICAgICAgICAgICAgICAgICBmaW5hbGl6ZSAoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBlcnIgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvck1zZyA9IHRy
KCJFcnJvciByZWFkaW5nIGZyb20gVENQIHNvY2tldC4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVycik7
CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZyA8PCAiIC0gIiA8PCBl
cnIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoIG5ieXRlcz09MCApCisgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA9PSAwKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwiU29ja2V0ICI8PHRj
cFNvY2tldDw8IiBjbG9zZWQuIjw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgZmluYWxpemUg
KCBpICk7CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU29ja2V0ICIgPDwgdGNw
U29ja2V0IDw8ICIgY2xvc2VkLiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxp
emUoaSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTIyMTIsMzQgKzIyMjIsMzAgQEAgdm9pZCBTc2hNYXN0ZXJDb25u
ZWN0aW9uOjpjaGFubmVsTG9vcCgpCiAgICAgfQogfQogCi12b2lkIFNzaE1hc3RlckNvbm5lY3Rp
b246OmZpbmFsaXplICggaW50IGl0ZW0gKQordm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpmaW5h
bGl6ZShpbnQgaXRlbSkKIHsKLSAgICBpbnQgdGNwU29ja2V0PWNoYW5uZWxDb25uZWN0aW9ucy5h
dCAoIGl0ZW0gKS5zb2NrOwotICAgIHNzaF9jaGFubmVsIGNoYW5uZWw9Y2hhbm5lbENvbm5lY3Rp
b25zLmF0ICggaXRlbSApLmNoYW5uZWw7Ci0gICAgaWYgKCBjaGFubmVsICkKKyAgICBpbnQgdGNw
U29ja2V0ID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGl0ZW0pLnNvY2s7CisgICAgc3NoX2NoYW5u
ZWwgY2hhbm5lbCA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpdGVtKS5jaGFubmVsOworICAgIGlm
IChjaGFubmVsKQogICAgIHsKLSAgICAgICAgc3NoX2NoYW5uZWxfc2VuZF9lb2YgKCBjaGFubmVs
ICk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IkVPRiBzZW50LiI7Ci0gICAgICAgIHNzaF9jaGFubmVs
X2Nsb3NlICggY2hhbm5lbCApOwotICAgICAgICB4MmdvRGVidWc8PCJDaGFubmVsIGNsb3NlZC4i
OwotICAgICAgICBzc2hfY2hhbm5lbF9mcmVlICggY2hhbm5lbCApOworICAgICAgICBzc2hfY2hh
bm5lbF9zZW5kX2VvZihjaGFubmVsKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygc2VudC4i
OworICAgICAgICBzc2hfY2hhbm5lbF9jbG9zZShjaGFubmVsKTsKKyAgICAgICAgeDJnb0RlYnVn
IDw8ICJDaGFubmVsIGNsb3NlZC4iOworICAgICAgICBzc2hfY2hhbm5lbF9mcmVlKGNoYW5uZWwp
OwogICAgIH0KLSAgICBpZiAoIHRjcFNvY2tldD4wICkKKyAgICBpZiAodGNwU29ja2V0ID4gMCkK
ICAgICB7CiAjaWZuZGVmIFFfT1NfV0lOCiAgICAgICAgIHNodXRkb3duKHRjcFNvY2tldCwgU0hV
VF9SRFdSKTsKLSAgICAgICAgY2xvc2UgKCB0Y3BTb2NrZXQgKTsKKyAgICAgICAgY2xvc2UodGNw
U29ja2V0KTsKICNlbHNlCiAgICAgICAgIHNodXRkb3duKHRjcFNvY2tldCwgU0RfQk9USCk7Ci0g
ICAgICAgIGNsb3Nlc29ja2V0ICggdGNwU29ja2V0ICk7CisgICAgICAgIGNsb3Nlc29ja2V0KHRj
cFNvY2tldCk7CiAjZW5kaWYKICAgICB9Ci0gICAgU3NoUHJvY2VzcyogcHJvYz1jaGFubmVsQ29u
bmVjdGlvbnNbaXRlbV0uY3JlYXRvcjsKLSAgICBRU3RyaW5nIHV1aWQ9Y2hhbm5lbENvbm5lY3Rp
b25zW2l0ZW1dLnV1aWQ7Ci0gICAgY2hhbm5lbENvbm5lY3Rpb25zLnJlbW92ZUF0ICggaXRlbSAp
OwotICAgIGVtaXQgY2hhbm5lbENsb3NlZCAoIHByb2MsIHV1aWQgKTsKKyAgICBTc2hQcm9jZXNz
ICpwcm9jID0gY2hhbm5lbENvbm5lY3Rpb25zW2l0ZW1dLmNyZWF0b3I7CisgICAgUVN0cmluZyB1
dWlkID0gY2hhbm5lbENvbm5lY3Rpb25zW2l0ZW1dLnV1aWQ7CisgICAgY2hhbm5lbENvbm5lY3Rp
b25zLnJlbW92ZUF0KGl0ZW0pOworICAgIGVtaXQgY2hhbm5lbENsb3NlZChwcm9jLCB1dWlkKTsK
IH0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uaCBiL3NyYy9z
c2htYXN0ZXJjb25uZWN0aW9uLmgKaW5kZXggZmZiODUzYi4uYzc4ODNiZSAxMDA2NDQKLS0tIGEv
c3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uaAorKysgYi9zcmMvc3NobWFzdGVyY29ubmVjdGlvbi5o
CkBAIC0yNywxMSArMjcsMTMgQEAKICNpbmNsdWRlIDxRVGNwU29ja2V0PgogI2luY2x1ZGUgPFFO
ZXR3b3JrUHJveHk+CiAKLQotI2RlZmluZSBQUk9QRVJUWShUWVBFLE5BTUUpICBwcml2YXRlOiBU
WVBFIE5BTUU7IFwKLXB1YmxpYzogVFlQRSBnZXRfIyNOQU1FKCl7cmV0dXJuIE5BTUU7fSBcCi12
b2lkIHNldF8jI05BTUUoVFlQRSBWQUwpe05BTUU9VkFMO30KLQorI2RlZmluZSBQUk9QRVJUWShU
WVBFLCBOQU1FKSAgICAgICAgICAgXAorcHJpdmF0ZTogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIFRZUEUgTkFNRTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcHVibGljOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIFRZUEUgZ2V0XyMjTkFNRSgpIHsgcmV0dXJuIE5BTUU7
IH0gXAorICAgIHZvaWQgc2V0XyMjTkFNRShUWVBFIFZBTCkgeyBOQU1FID0gVkFMOyB9CiAKIGNs
YXNzIE9OTWFpbldpbmRvdzsKIGNsYXNzIFNzaFByb2Nlc3M7CkBAIC0zOSwxNiArNDEsMTYgQEAg
c3RydWN0IENoYW5uZWxDb25uZWN0aW9uCiB7CiAgICAgc3NoX2NoYW5uZWwgY2hhbm5lbDsKICAg
ICBpbnQgc29jazsKLSAgICBTc2hQcm9jZXNzKiBjcmVhdG9yOworICAgIFNzaFByb2Nlc3MgKmNy
ZWF0b3I7CiAgICAgaW50IGZvcndhcmRQb3J0OwogICAgIGludCBsb2NhbFBvcnQ7CiAgICAgUVN0
cmluZyBmb3J3YXJkSG9zdDsKICAgICBRU3RyaW5nIGxvY2FsSG9zdDsKICAgICBRU3RyaW5nIGNv
bW1hbmQ7CiAgICAgUVN0cmluZyB1dWlkOwotICAgIGJvb2wgb3BlcmF0b3I9PShDaGFubmVsQ29u
bmVjdGlvbiYgdCkKKyAgICBib29sIG9wZXJhdG9yPT0oQ2hhbm5lbENvbm5lY3Rpb24gJnQpCiAg
ICAgewotICAgICAgICByZXR1cm4gKGNoYW5uZWw9PXQuY2hhbm5lbCk7CisgICAgICAgIHJldHVy
biAoY2hhbm5lbCA9PSB0LmNoYW5uZWwpOwogICAgIH0KIH07CiAKQEAgLTU3LDI1ICs1OSwzMCBA
QCBzdHJ1Y3QgUmV2ZXJzZVR1bm5lbFJlcXVlc3QKICAgICB1aW50IGxvY2FsUG9ydDsKICAgICB1
aW50IGZvcndhcmRQb3J0OwogICAgIFFTdHJpbmcgbG9jYWxIb3N0OwotICAgIFNzaFByb2Nlc3Mq
IGNyZWF0b3I7CisgICAgU3NoUHJvY2VzcyAqY3JlYXRvcjsKICAgICBib29sIGxpc3RlbjsKIH07
CiAKIHN0cnVjdCBDb3B5UmVxdWVzdAogewotICAgIFNzaFByb2Nlc3MqIGNyZWF0b3I7CisgICAg
U3NoUHJvY2VzcyAqY3JlYXRvcjsKICAgICBRU3RyaW5nIHNyYzsKICAgICBRU3RyaW5nIGRzdDsK
IH07CiAKLWNsYXNzIFNzaE1hc3RlckNvbm5lY3Rpb246IHB1YmxpYyBRVGhyZWFkCitjbGFzcyBT
c2hNYXN0ZXJDb25uZWN0aW9uIDogcHVibGljIFFUaHJlYWQKIHsKICAgICBRX09CSkVDVAogICAg
IFBST1BFUlRZKGJvb2wsIGtlcmJlcm9zRGVsZWdhdGlvbikKIHB1YmxpYzoKLSAgICBlbnVtIFBy
b3h5VHlwZSB7UFJPWFlTU0gsIFBST1hZSFRUUH07CisgICAgZW51bSBQcm94eVR5cGUKKyAgICB7
CisgICAgICAgIFBST1hZU1NILAorICAgICAgICBQUk9YWUhUVFAKKyAgICB9OwogCi0gICAgZW51
bSBwYXNzcGhyYXNlX3R5cGVzIHsKKyAgICBlbnVtIHBhc3NwaHJhc2VfdHlwZXMKKyAgICB7CiAg
ICAgICAgIFBBU1NQSFJBU0VfUFJJVktFWSwKICAgICAgICAgUEFTU1BIUkFTRV9DSEFMTEVOR0Us
CiAgICAgICAgIFBBU1NQSFJBU0VfUEFTU1dPUkQsCkBAIC04MywyOCArOTAsMjggQEAgcHVibGlj
OgogICAgIH07CiAKICAgICB2b2lkIHJ1bigpOwotICAgIFNzaE1hc3RlckNvbm5lY3Rpb24oUU9i
amVjdCogcGFyZW50LCBRU3RyaW5nIGhvc3QsIGludCBwb3J0LCBib29sIGFjY2VwdFVua25vd25T
ZXJ2ZXJzLCBRU3RyaW5nIHVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHBh
c3MsIFFTdHJpbmcga2V5LCBib29sIGF1dG9sb2dpbiwgYm9vbCBrcmJsb2dpbj1mYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlcHJveHk9ZmFsc2UsIFByb3h5VHlwZSB0eXBl
PVBST1hZU1NILCBRU3RyaW5nIHByb3h5c2VydmVyPVFTdHJpbmc6Om51bGwsIHF1aW50MTYgcHJv
eHlwb3J0PTAsCi0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHByb3h5bG9naW49UVN0
cmluZzo6bnVsbCwgUVN0cmluZyBwcm94eXBhc3N3b3JkPVFTdHJpbmc6Om51bGwsIFFTdHJpbmcg
cHJveHlLZXk9UVN0cmluZzo6bnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJv
eHlBdXRvbG9naW49ZmFsc2UsIGJvb2wgcHJveHlLcmJMb2dpbj1mYWxzZSk7CisgICAgU3NoTWFz
dGVyQ29ubmVjdGlvbihRT2JqZWN0ICpwYXJlbnQsIFFTdHJpbmcgaG9zdCwgaW50IHBvcnQsIGJv
b2wgYWNjZXB0VW5rbm93blNlcnZlcnMsIFFTdHJpbmcgdXNlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgcGFzcywgUVN0cmluZyBrZXksIGJvb2wgYXV0b2xvZ2luLCBib29sIGty
YmxvZ2luID0gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZXByb3h5ID0g
ZmFsc2UsIFByb3h5VHlwZSB0eXBlID0gUFJPWFlTU0gsIFFTdHJpbmcgcHJveHlzZXJ2ZXIgPSBR
U3RyaW5nOjpudWxsLCBxdWludDE2IHByb3h5cG9ydCA9IDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHByb3h5bG9naW4gPSBRU3RyaW5nOjpudWxsLCBRU3RyaW5nIHByb3h5cGFz
c3dvcmQgPSBRU3RyaW5nOjpudWxsLCBRU3RyaW5nIHByb3h5S2V5ID0gUVN0cmluZzo6bnVsbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJveHlBdXRvbG9naW4gPSBmYWxzZSwgYm9v
bCBwcm94eUtyYkxvZ2luID0gZmFsc2UpOwogICAgIH5Tc2hNYXN0ZXJDb25uZWN0aW9uKCk7Ci0g
ICAgdm9pZCBhZGRDaGFubmVsQ29ubmVjdGlvbihTc2hQcm9jZXNzKiBjcmVhdG9yLCBpbnQgc29j
aywgUVN0cmluZyBmb3J3YXJkSG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmb3J3YXJkUG9ydCwgUVN0cmluZyBsb2NhbEhvc3QsIGludCBsb2NhbFBvcnQsIHZvaWQqIGNo
YW5uZWw9MGwpOwotICAgIHZvaWQgYWRkQ2hhbm5lbENvbm5lY3Rpb24oU3NoUHJvY2VzcyogY3Jl
YXRvciwgUVN0cmluZyB1dWlkLCBRU3RyaW5nIGNtZCk7Ci0gICAgdm9pZCBhZGRDb3B5UmVxdWVz
dChTc2hQcm9jZXNzKiBjcmVhdG9yLCBRU3RyaW5nIHNyYywgUVN0cmluZyBkc3QpOworICAgIHZv
aWQgYWRkQ2hhbm5lbENvbm5lY3Rpb24oU3NoUHJvY2VzcyAqY3JlYXRvciwgaW50IHNvY2ssIFFT
dHJpbmcgZm9yd2FyZEhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9y
d2FyZFBvcnQsIFFTdHJpbmcgbG9jYWxIb3N0LCBpbnQgbG9jYWxQb3J0LCB2b2lkICpjaGFubmVs
ID0gMGwpOworICAgIHZvaWQgYWRkQ2hhbm5lbENvbm5lY3Rpb24oU3NoUHJvY2VzcyAqY3JlYXRv
ciwgUVN0cmluZyB1dWlkLCBRU3RyaW5nIGNtZCk7CisgICAgdm9pZCBhZGRDb3B5UmVxdWVzdChT
c2hQcm9jZXNzICpjcmVhdG9yLCBRU3RyaW5nIHNyYywgUVN0cmluZyBkc3QpOwogICAgIHZvaWQg
d3JpdGVLbm93bkhvc3RzKGJvb2wpOwogICAgIHZvaWQgc2V0S2V5UGhyYXNlKFFTdHJpbmcpOwog
Ci0gICAgaW50IGV4ZWN1dGVDb21tYW5kKGNvbnN0IFFTdHJpbmcmIGNvbW1hbmQsIFFPYmplY3Qq
IHJlY2VpdmVyPTAsIGNvbnN0IGNoYXIqIHNsb3RGaW5pc2hlZD0wLCBib29sIG92ZXJyaWRlUGF0
aD10cnVlKTsKLSAgICBpbnQgc3RhcnRUdW5uZWwoY29uc3QgUVN0cmluZyYgZm9yd2FyZEhvc3Qs
IHVpbnQgZm9yd2FyZFBvcnQsIGNvbnN0IFFTdHJpbmcmIGxvY2FsSG9zdCwKLSAgICAgICAgICAg
ICAgICAgICAgdWludCBsb2NhbFBvcnQsIGJvb2wgcmV2ZXJzZT1mYWxzZSwgUU9iamVjdCogcmVj
ZWl2ZXI9MCwgY29uc3QgY2hhciogc2xvdFR1bm5lbE9rPTAsIGNvbnN0IGNoYXIqIHNsb3RGaW5p
c2hlZD0wKTsKLSAgICBpbnQgY29weUZpbGUoY29uc3QgUVN0cmluZyYgc3JjLCBjb25zdCBRU3Ry
aW5nIGRzdCwgUU9iamVjdCogcmVjZWl2ZXI9MCwgY29uc3QgY2hhciogc2xvdEZpbmlzaGVkPTAp
OworICAgIGludCBleGVjdXRlQ29tbWFuZChjb25zdCBRU3RyaW5nICZjb21tYW5kLCBRT2JqZWN0
ICpyZWNlaXZlciA9IDAsIGNvbnN0IGNoYXIgKnNsb3RGaW5pc2hlZCA9IDAsIGJvb2wgb3ZlcnJp
ZGVQYXRoID0gdHJ1ZSk7CisgICAgaW50IHN0YXJ0VHVubmVsKGNvbnN0IFFTdHJpbmcgJmZvcndh
cmRIb3N0LCB1aW50IGZvcndhcmRQb3J0LCBjb25zdCBRU3RyaW5nICZsb2NhbEhvc3QsCisgICAg
ICAgICAgICAgICAgICAgIHVpbnQgbG9jYWxQb3J0LCBib29sIHJldmVyc2UgPSBmYWxzZSwgUU9i
amVjdCAqcmVjZWl2ZXIgPSAwLCBjb25zdCBjaGFyICpzbG90VHVubmVsT2sgPSAwLCBjb25zdCBj
aGFyICpzbG90RmluaXNoZWQgPSAwKTsKKyAgICBpbnQgY29weUZpbGUoY29uc3QgUVN0cmluZyAm
c3JjLCBjb25zdCBRU3RyaW5nIGRzdCwgUU9iamVjdCAqcmVjZWl2ZXIgPSAwLCBjb25zdCBjaGFy
ICpzbG90RmluaXNoZWQgPSAwKTsKICAgICBRU3RyaW5nIGdldFNvdXJjZUZpbGUoaW50IHBpZCk7
CiAKICAgICB2b2lkIHNldEFjY2VwdFVua25vd25TZXJ2ZXJzKGJvb2wgYWNjZXB0KQogICAgIHsK
LSAgICAgICAgYWNjZXB0VW5rbm93blNlcnZlcnM9YWNjZXB0OworICAgICAgICBhY2NlcHRVbmtu
b3duU2VydmVycyA9IGFjY2VwdDsKICAgICB9CiAgICAgUVN0cmluZyBnZXRIb3N0KCkKICAgICB7
CkBAIC0xMzYsNyArMTQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoYW5uZWxMb29wKCk7CiAg
ICAgdm9pZCBmaW5hbGl6ZShpbnQgYXJnMSk7CiAgICAgdm9pZCBjb3B5KCk7Ci0gICAgaW50IHNl
cnZlckF1dGgoUVN0cmluZyYgZXJyb3JNc2cpOworICAgIGludCBzZXJ2ZXJBdXRoKFFTdHJpbmcg
JmVycm9yTXNnKTsKICAgICB2b2lkIHNldFZlcmZpY2F0aW9uQ29kZShRU3RyaW5nIGNvZGUpOwog
ICAgIHZvaWQgY2hlY2tSZXZlcnNlVHVubmVsQ29ubmVjdGlvbnMoKTsKICAgICB2b2lkIGFkZFJl
dmVyc2VUdW5uZWxDb25uZWN0aW9ucygpOwpAQCAtMTQ2LDE5ICsxNTMsMTggQEAgcHJpdmF0ZToK
IAogcHJpdmF0ZSBzbG90czoKIAotICAgIHZvaWQgc2xvdFNzaFByb3h5U2VydmVyQXV0aEVycm9y
ICggaW50LFFTdHJpbmcsIFNzaE1hc3RlckNvbm5lY3Rpb24qICk7Ci0gICAgdm9pZCBzbG90U3No
UHJveHlTZXJ2ZXJBdXRoQWJvcnRlZCAoKTsKLSAgICB2b2lkIHNsb3RTc2hQcm94eVVzZXJBdXRo
RXJyb3IgKCBRU3RyaW5nICk7Ci0gICAgdm9pZCBzbG90U3NoUHJveHlDb25uZWN0aW9uRXJyb3Ig
KCBRU3RyaW5nLFFTdHJpbmcgKTsKLQorICAgIHZvaWQgc2xvdFNzaFByb3h5U2VydmVyQXV0aEVy
cm9yKGludCwgUVN0cmluZywgU3NoTWFzdGVyQ29ubmVjdGlvbiAqKTsKKyAgICB2b2lkIHNsb3RT
c2hQcm94eVNlcnZlckF1dGhBYm9ydGVkKCk7CisgICAgdm9pZCBzbG90U3NoUHJveHlVc2VyQXV0
aEVycm9yKFFTdHJpbmcpOworICAgIHZvaWQgc2xvdFNzaFByb3h5Q29ubmVjdGlvbkVycm9yKFFT
dHJpbmcsIFFTdHJpbmcpOwogCiAgICAgdm9pZCBzbG90U3NoUHJveHlDb25uZWN0aW9uT2soKTsK
ICAgICB2b2lkIHNsb3RTc2hQcm94eVR1bm5lbE9rKGludCk7Ci0gICAgdm9pZCBzbG90U3NoUHJv
eHlUdW5uZWxGYWlsZWQoYm9vbCByZXN1bHQsICBRU3RyaW5nIG91dHB1dCwKKyAgICB2b2lkIHNs
b3RTc2hQcm94eVR1bm5lbEZhaWxlZChib29sIHJlc3VsdCwgUVN0cmluZyBvdXRwdXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKLSAgICB2b2lkIHNsb3RTc2hQcm94
eUludGVyYWN0aW9uU3RhcnQgKCBTc2hNYXN0ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBRU3Ry
aW5nIHByb21wdCApOwotICAgIHZvaWQgc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25VcGRhdGUgKCBT
c2hNYXN0ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBRU3RyaW5nIG91dHB1dCApOwotICAgIHZv
aWQgc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25GaW5pc2ggKCBTc2hNYXN0ZXJDb25uZWN0aW9uKiBj
b25uZWN0aW9uKTsKKyAgICB2b2lkIHNsb3RTc2hQcm94eUludGVyYWN0aW9uU3RhcnQoU3NoTWFz
dGVyQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwgUVN0cmluZyBwcm9tcHQpOworICAgIHZvaWQgc2xv
dFNzaFByb3h5SW50ZXJhY3Rpb25VcGRhdGUoU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29ubmVjdGlv
biwgUVN0cmluZyBvdXRwdXQpOworICAgIHZvaWQgc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25GaW5p
c2goU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29ubmVjdGlvbik7CiAKIHB1YmxpYyBzbG90czoKICAg
ICB2b2lkIGludGVyYWN0aW9uVGV4dEVudGVyKFFTdHJpbmcgdGV4dCk7CkBAIC0xODAsNyArMTg2
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHdyaXRlSG9zdEtleTsKICAgICBib29sIHdyaXRlSG9z
dEtleVJlYWR5OwogICAgIGludCBuZXh0UGlkOwotICAgIFFMaXN0PFNzaFByb2Nlc3MqPiBwcm9j
ZXNzZXM7CisgICAgUUxpc3Q8U3NoUHJvY2VzcyAqPiBwcm9jZXNzZXM7CiAKICAgICBRU3RyaW5n
IGtleVBocmFzZTsKICAgICBib29sIGtleVBocmFzZVJlYWR5OwpAQCAtMjA1LDEyICsyMTEsMTIg
QEAgcHJpdmF0ZToKICAgICBib29sIGRpc2Nvbm5lY3RTZXNzaW9uRmxhZzsKICAgICBpbnQgbG9j
YWxQcm94eVBvcnQ7CiAgICAgYm9vbCBhY2NlcHRVbmtub3duU2VydmVyczsKLSAgICBPTk1haW5X
aW5kb3cqIG1haW5XbmQ7CisgICAgT05NYWluV2luZG93ICptYWluV25kOwogICAgIGJvb2wga2Vy
YmVyb3M7CiAgICAgUVN0cmluZyBzc2hQcm9jRXJyU3RyaW5nOwogICAgIFFUY3BTb2NrZXQgKnRj
cFByb3h5U29ja2V0OwogICAgIFFOZXR3b3JrUHJveHkgKnRjcE5ldHdvcmtQcm94eTsKLSAgICBT
c2hNYXN0ZXJDb25uZWN0aW9uKiBzc2hQcm94eTsKKyAgICBTc2hNYXN0ZXJDb25uZWN0aW9uICpz
c2hQcm94eTsKICAgICBib29sIHNzaFByb3h5UmVhZHk7CiAgICAgYm9vbCBicmVha0xvb3A7CiAg
ICAgYm9vbCBsb2dpbkNoZWNrOwpAQCAtMjIxLDMwICsyMjcsMjkgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgY29uc3QgUVN0cmluZyBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfW107CiAKIHNp
Z25hbHM6Ci0gICAgdm9pZCBzdGRFcnIoU3NoUHJvY2VzcyogY2FsbGVyLCBRQnl0ZUFycmF5IGRh
dGEpOwotICAgIHZvaWQgc3RkT3V0KFNzaFByb2Nlc3MqIGNhbGxlciwgUUJ5dGVBcnJheSBkYXRh
KTsKLSAgICB2b2lkIGlvRXJyKFNzaFByb2Nlc3MqIGNhbGxlciwgUVN0cmluZyBlcnJvciwgUVN0
cmluZyBsYXN0U2Vzc2lvbkVycm9yKTsKLSAgICB2b2lkIGNvcHlFcnIoU3NoUHJvY2VzcyogY2Fs
bGVyLCBRU3RyaW5nIGVycm9yLCBRU3RyaW5nIGxhc3RTZXNzaW9uRXJyb3IpOwotICAgIHZvaWQg
Y29weU9rKFNzaFByb2Nlc3MqIGNhbGxlcik7Ci0gICAgdm9pZCBjaGFubmVsQ2xvc2VkKFNzaFBy
b2Nlc3MqIGNhbGxlciwgUVN0cmluZyB1dWlkKTsKLSAgICB2b2lkIHJldmVyc2VUdW5uZWxPayhT
c2hQcm9jZXNzKiBjYWxsZXIpOwotICAgIHZvaWQgcmV2ZXJzZVR1bm5lbEZhaWxlZChTc2hQcm9j
ZXNzKiBjYWxsZXIsIFFTdHJpbmcgZXJyb3IpOworICAgIHZvaWQgc3RkRXJyKFNzaFByb2Nlc3Mg
KmNhbGxlciwgUUJ5dGVBcnJheSBkYXRhKTsKKyAgICB2b2lkIHN0ZE91dChTc2hQcm9jZXNzICpj
YWxsZXIsIFFCeXRlQXJyYXkgZGF0YSk7CisgICAgdm9pZCBpb0VycihTc2hQcm9jZXNzICpjYWxs
ZXIsIFFTdHJpbmcgZXJyb3IsIFFTdHJpbmcgbGFzdFNlc3Npb25FcnJvcik7CisgICAgdm9pZCBj
b3B5RXJyKFNzaFByb2Nlc3MgKmNhbGxlciwgUVN0cmluZyBlcnJvciwgUVN0cmluZyBsYXN0U2Vz
c2lvbkVycm9yKTsKKyAgICB2b2lkIGNvcHlPayhTc2hQcm9jZXNzICpjYWxsZXIpOworICAgIHZv
aWQgY2hhbm5lbENsb3NlZChTc2hQcm9jZXNzICpjYWxsZXIsIFFTdHJpbmcgdXVpZCk7CisgICAg
dm9pZCByZXZlcnNlVHVubmVsT2soU3NoUHJvY2VzcyAqY2FsbGVyKTsKKyAgICB2b2lkIHJldmVy
c2VUdW5uZWxGYWlsZWQoU3NoUHJvY2VzcyAqY2FsbGVyLCBRU3RyaW5nIGVycm9yKTsKIAogICAg
IHZvaWQgY29ubmVjdGlvbkVycm9yKFFTdHJpbmcgbWVzc2FnZSwgUVN0cmluZyBsYXN0U2Vzc2lv
bkVycm9yKTsKLSAgICB2b2lkIHNlcnZlckF1dGhFcnJvcihpbnQgZXJyQ29kZSwgUVN0cmluZyBs
YXN0U2Vzc2lvbkVycm9yLCBTc2hNYXN0ZXJDb25uZWN0aW9uKik7CisgICAgdm9pZCBzZXJ2ZXJB
dXRoRXJyb3IoaW50IGVyckNvZGUsIFFTdHJpbmcgbGFzdFNlc3Npb25FcnJvciwgU3NoTWFzdGVy
Q29ubmVjdGlvbiAqKTsKICAgICB2b2lkIHNlcnZlckF1dGhBYm9ydGVkKCk7CiAgICAgdm9pZCB1
c2VyQXV0aEVycm9yKFFTdHJpbmcgZXJyb3IpOwogCi0gICAgdm9pZCBjb25uZWN0aW9uT2soIFFT
dHJpbmcgaG9zdCk7CisgICAgdm9pZCBjb25uZWN0aW9uT2soUVN0cmluZyBob3N0KTsKIAotICAg
IHZvaWQgbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiosIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpOwotICAgIHZvaWQgbmVlZENoYWxsZW5nZVJlc3BvbnNl
KFNzaE1hc3RlckNvbm5lY3Rpb24qLCBRU3RyaW5nIENoYWxsZW5nZSk7Ci0gICAgdm9pZCBzdGFy
dEludGVyYWN0aW9uKFNzaE1hc3RlckNvbm5lY3Rpb24qLCBRU3RyaW5nIHByb21wdCk7Ci0gICAg
dm9pZCBmaW5pc2hJbnRlcmFjdGlvbihTc2hNYXN0ZXJDb25uZWN0aW9uKik7Ci0gICAgdm9pZCB1
cGRhdGVJbnRlcmFjdGlvbihTc2hNYXN0ZXJDb25uZWN0aW9uKiwgUVN0cmluZyBvdXRwdXQpOwor
ICAgIHZvaWQgbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBTc2hNYXN0ZXJD
b25uZWN0aW9uOjpwYXNzcGhyYXNlX3R5cGVzKTsKKyAgICB2b2lkIG5lZWRDaGFsbGVuZ2VSZXNw
b25zZShTc2hNYXN0ZXJDb25uZWN0aW9uICosIFFTdHJpbmcgQ2hhbGxlbmdlKTsKKyAgICB2b2lk
IHN0YXJ0SW50ZXJhY3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBRU3RyaW5nIHByb21wdCk7
CisgICAgdm9pZCBmaW5pc2hJbnRlcmFjdGlvbihTc2hNYXN0ZXJDb25uZWN0aW9uICopOworICAg
IHZvaWQgdXBkYXRlSW50ZXJhY3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBRU3RyaW5nIG91
dHB1dCk7CiB9OwogCi1RX0RFQ0xBUkVfTUVUQVRZUEUgKFNzaE1hc3RlckNvbm5lY3Rpb246OnBh
c3NwaHJhc2VfdHlwZXMpCitRX0RFQ0xBUkVfTUVUQVRZUEUoU3NoTWFzdGVyQ29ubmVjdGlvbjo6
cGFzc3BocmFzZV90eXBlcykKIAogI2VuZGlmIC8vIFNTSE1BU1RFUkNPTk5FQ1RJT05fSAotCi0t
IAoyLjE3LjEKCg==


--b1_f1c3740bfb6ee79fae139d70cf52c605--
