<launchpad-bugs>
<bug id="51304">
<datecreated>2006-06-29T14:29:46Z</datecreated>
<title>Improvements to Python bindings</title>
<description>The attached patch fixes a bunch of issues with the Python bindings to Subversion. These changes are required for the Subversion integration into Bazaar (http://bazaar-vcs.org/BzrSvn). 

Tested with 1.3.1-3ubuntu1.

The changes are all pulled from Subversion trunk (which will become 1.5).

Also available as a Bazaar branch from http://people.samba.org/bzr/jelmer/svn-1.3.1-python.</description>
<reporter name="jelmer">Jelmer Vernooij</reporter>
<status>FIXCOMMITTED</status>
<importance>CRITICAL</importance>
<subscriptions>
<subscriber name="jelmer">Jelmer Vernooij</subscriber>
<subscriber name="adeodato">Adeodato Sim&#243;</subscriber>
</subscriptions>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-06-29T14:29:46Z</date>
<text>The attached patch fixes a bunch of issues with the Python bindings to Subversion. These changes are required for the Subversion integration into Bazaar (http://bazaar-vcs.org/BzrSvn). 

Tested with 1.3.1-3ubuntu1.

The changes are all pulled from Subversion trunk (which will become 1.5).

Also available as a Bazaar branch from http://people.samba.org/bzr/jelmer/svn-1.3.1-python.</text>
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-06-29T14:30:27Z</date>
<text>See bug report.</text>
<attachment href="http://librarian.demo.launchpad.net/3181804/python-fixes.patch" />
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-06-29T15:02:01Z</date>
<text>I missed a patch. Included now.</text>
<attachment href="http://librarian.demo.launchpad.net/3181883/python-fixes.patch" />
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-07-04T16:17:30Z</date>
<text>Here's a short summary of the changes:

Fix svn_client_info()

Add some tests for the python ra bindings.

Make the SWIG bindings throw an exception whenever a svn_ra_callbacks2_t argument is NULL, and allow the user to pass in a Python object for the callbacks.

Make svn_ra_get_dir2 work in the python bindings by adding some typemaps.

Fix for partial logs requested from old servers.

Create typemaps for the input arguments of svn.ra.get_commit_editor2().

Add tests for Python bindings to svn_ra_get_commit_editor2() and svn_ra_do_update().

Add testsuite for the Python bindings to svn.wc.

Don't crash when NULL revisions are passed to the python bindings.

More test coverage for the svn.wc Python bindings.

Improve test coverage of the Python bindings for svn.client.

Fix Python bindings for svn.ra.get_file_revs().

Fix Python bindings for svn.wc.crawl_revisions2().

Allow the text_checksum argument to svn.delta.editor_invoke_close_file() to be None (as the API allows).

Fix Python bindings to svn.wc.get_ignores().

Add test for Python bindings to svn.ra.get_locations().

Fix tests, wrap svn_commit_info.
</text>
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-07-04T16:19:28Z</date>
<text>Updated version of the patch (passes the testsuite now)</text>
<attachment href="http://librarian.demo.launchpad.net/3255644/python-fixes.patch" />
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-07-04T16:20:18Z</date>
<text>Updated rpath patch to match changes by python-fixes patch.</text>
<attachment href="http://librarian.demo.launchpad.net/3255643/rpath.patch" />
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-07-04T18:57:53Z</date>
<text>Also includes fixes for missing python reference counter increment on svn_stream_t.

With this patch, the bzr-svn testsuite now passes on ubuntu.
</text>
<attachment href="http://librarian.demo.launchpad.net/3257726/python-fixes.patch" />
</comment>
<comment>
<sender name="jelmer">Jelmer Vernooij</sender>
<date>2006-07-05T01:29:33Z</date>
<text>Another update of the patch, this time updated to allow callbacks for opening temporary files as used by Subversions webdav ra implementation.</text>
<attachment href="http://librarian.demo.launchpad.net/3263702/python-fixes.patch" />
</comment>
<attachment href="http://librarian.demo.launchpad.net/3181804/python-fixes.patch">
<type>PATCH</type>
<title>Fix bunch of Python binding bugs.</title>
<mimetype>text/plain</mimetype>
<contents>VGhpcyBwYXRjaCBmaXhlcyBhIGJ1bmNoIG9mIGlzc3VlcyB3aXRoIHRoZSBQeXRob24gYmluZGlu
Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIApyZXF1aXJlZCBmb3IgdGhlIFN1YnZlcnNpb24gaW50ZWdy
YXRpb24gaW50byBCYXphYXIsIHNlZSAKaHR0cDovL2JhemFhci12Y3Mub3JnL0J6clN2bi4gCgpU
aGUgY2hhbmdlcyBhcmUgYWxsIHB1bGxlZCBmcm9tIFN1YnZlcnNpb24gdHJ1bmsgKHdoaWNoIHdp
bGwgYmVjb21lIDEuNSkuCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln
L3B5dGhvbi90ZXN0cy9jbGllbnQucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkKQEAgLTAsMCArMSwxMTEgQEAKK2lt
cG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29y
ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy
b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor
ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1
YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0
IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBz
ZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAg
ICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92
aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigp
LAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0
aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhu
YW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGlu
Zm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5m
bycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAg
ICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2No
ZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAg
ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2
bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n
ZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9z
X3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3Vy
bCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRf
Y3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRf
bG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5f
b3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9o
ZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp
CisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hl
Y2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0
aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgp
KQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJl
cG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNl
bGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBV
UkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xp
ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAg
ICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9w
YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZp
bGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgo
c2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29w
dF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFk
CisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9m
cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg
cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf
Y3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCks
IHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAg
ICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2
bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25f
aGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1
dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBw
YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs
aWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2Us
IDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgo
cGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBj
bGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKwor
ICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3
Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5
cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6Cisg
ICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGll
bnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2Rl
ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp
dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg
cnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IGFkZGVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9weXRob24vdGVzdHMvcmEucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5CQpAQCAtMCwwICsxLDEyNyBAQAoraW1wb3J0
IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwg
Y2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9y
dCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVy
bGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVz
dENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVy
c2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxv
YWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQorCisg
ICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkK
KyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tpbmcK
KyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMgPSBy
ZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90KCkK
KworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNrcywg
Tm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICByb290
ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy
b290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAgIHJh
X3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0X3V1
aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKworICBk
ZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEuZ2V0
X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdlc3Rf
cmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVtKQor
CisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSByYS5n
ZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5o
YXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ2Jy
YW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycpKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9ub2Rl
X2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwgY29y
ZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10ua2lu
ZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXko
Y29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMuaGFz
X2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRzLF8s
XykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5hc3Nl
cnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNl
bGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhh
c19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydSRUFE
TUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1pdChz
ZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0b24p
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jl
dihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRp
dG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAg
IHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24s
IDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9y
LCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2Vk
aXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBk
ZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRv
ciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFy
IiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52
b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5l
ZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDAp
CisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikK
KworICBkZWYgdGVzdF9nZXRfbG9jYXRpb25zKHNlbGYpOgorICAgIGxvY2F0aW9ucyA9IHJhLmdl
dF9sb2NhdGlvbnMoc2VsZi5yYV9jdHgsICIvdHJ1bmsvUkVBRE1FLnR4dCIsIDIsIHJhbmdlKDEs
NSkpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhdGlvbnMsIHsKKyAgICAgICAgMjogJy90cnVu
ay9SRUFETUUudHh0JywgCisgICAgICAgIDM6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAg
ICA0OiAnL3RydW5rL1JFQURNRS50eHQnfSkKKworICBkZWYgdGVzdF9nZXRfZmlsZV9yZXZzKHNl
bGYpOgorICAgIGRlZiByZXZfaGFuZGxlcihwYXRoLCByZXYsIHJldl9wcm9wcywgcHJvcF9kaWZm
cywgcG9vbCk6CisgICAgICAgIHNlbGYuYXNzZXJ0XyhyZXYgPT0gMiBvciByZXYgPT0gMykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCAiL3RydW5rL1JFQURNRS50eHQiKQorICAgICAg
ICBpZiByZXYgPT0gMjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7
CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0FkZGVkIFJFQURNRS4nLAorICAgICAgICAgICAg
ICAnc3ZuOmF1dGhvcic6ICdqb2huJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUt
MDQtMDFUMTM6MTI6MTguMjE2MjY3WicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHt9KQorICAgICAgICBlbGlmIHJldiA9PSAzOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2
bjpsb2cnOiAnRml4ZWQgUkVBRE1FLlxuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAn
a2F0ZScsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjI0OjU4LjIz
NDY0M1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9w
X2RpZmZzLCB7J3N2bjptaW1lLXR5cGUnOiAndGV4dC9wbGFpbicsICdzdm46ZW9sLXN0eWxlJzog
J25hdGl2ZSd9KQorCisgICAgcmEuZ2V0X2ZpbGVfcmV2cyhzZWxmLnJhX2N0eCwgInRydW5rL1JF
QURNRS50eHQiLCAwLCAxMCwgcmV2X2hhbmRsZXIpCisKKyAgZGVmIHRlc3RfdXBkYXRlKHNlbGYp
OgorICAgIGNsYXNzIFRlc3RFZGl0b3IoZGVsdGEuRWRpdG9yKToKKyAgICAgICAgcGFzcworCisg
ICAgZWRpdG9yID0gVGVzdEVkaXRvcigpCisKKyAgICBlX3B0ciwgZV9iYXRvbiA9IGRlbHRhLm1h
a2VfZWRpdG9yKGVkaXRvcikKKyAgICAKKyAgICByZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24gPSBy
YS5kb191cGRhdGUoc2VsZi5yYV9jdHgsIDEwLCAiIiwgVHJ1ZSwgZV9wdHIsIGVfYmF0b24pCisK
KyAgICByYS5yZXBvcnRlcjJfaW52b2tlX3NldF9wYXRoKHJlcG9ydGVyLCByZXBvcnRlcl9iYXRv
biwgIiIsIDAsIFRydWUsIE5vbmUpCisKKyAgICByYS5yZXBvcnRlcjJfaW52b2tlX2ZpbmlzaF9y
ZXBvcnQocmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uKQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1
cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJl
cG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVu
bmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkK
Cj09PSBhZGRlZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3dj
LnB5JwotLS0gL2Rldi9udWxsCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90
ZXN0cy93Yy5weQkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBm
aWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgd2MsIGNs
aWVudAorZnJvbSBsaWJzdm4uY29yZSBpbXBvcnQgU3VidmVyc2lvbkV4Y2VwdGlvbgorCitmcm9t
IHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3Np
dG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5h
bWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVz
dENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiB3b3JraW5nIGNvcHkg
bGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgIiIiTG9hZCBhIFN1YnZlcnNpb24g
cmVwb3NpdG9yeSIiIgorCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFt
ZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBm
b3IgY3Jvc3MtY2hlY2tpbmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRI
KQorICAgIHNlbGYuZnMgPSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgc2VsZi5wYXRoID0g
dGVtcGZpbGUubWt0ZW1wKCkKKworICAgIGNsaWVudF9jdHggPSBjbGllbnQuY3JlYXRlX2NvbnRl
eHQoKQorICAgIAorICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYu
a2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBjbGllbnQuY2hlY2tvdXQy
KHNlbGYucmVwb3NfdXJsLCBzZWxmLnBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAg
ICAgICAgIGNsaWVudF9jdHgpCisKKyAgICBzZWxmLndjID0gd2MuYWRtX29wZW4zKE5vbmUsIHNl
bGYucGF0aCwgVHJ1ZSwgLTEsIE5vbmUpCisKKyAgZGVmIHRlc3RfZW50cnkoc2VsZik6CisgICAg
ICB3Y19lbnRyeSA9IHdjLmVudHJ5KHNlbGYucGF0aCwgc2VsZi53YywgVHJ1ZSkKKworICBkZWYg
dGVzdF9sb2NrKHNlbGYpOgorICAgICAgbG9jayA9IHdjLmFkZF9sb2NrKHNlbGYucGF0aCwgY29y
ZS5zdm5fbG9ja19jcmVhdGUoY29yZS5Qb29sKCkpLCBzZWxmLndjKQorICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChUcnVlLCB3Yy5hZG1fbG9ja2VkKHNlbGYud2MpKQorICAgICAgc2VsZi5hc3NlcnRF
cXVhbChUcnVlLCB3Yy5sb2NrZWQoc2VsZi5wYXRoKSkKKyAgICAgIHdjLnJlbW92ZV9sb2NrKHNl
bGYucGF0aCwgc2VsZi53YykKKworICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgorICAgICAgd2Mu
dmVyc2lvbigpCisKKyAgZGVmIHRlc3RfYWNjZXNzX3BhdGgoc2VsZik6CisgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYucGF0aCwgd2MuYWRtX2FjY2Vzc19wYXRoKHNlbGYud2MpKQorCisgIGRl
ZiB0ZXN0X2lzX2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRt
X2RpcigiLnN2biIpKQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9v
c3ZuIikpCisKKyAgZGVmIHRlc3RfZ2V0X2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxmLmFzc2Vy
dFRydWUoaXNpbnN0YW5jZSh3Yy5nZXRfYWRtX2RpcigpLCBiYXNlc3RyaW5nKSkKKworICBkZWYg
dGVzdF9zZXRfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1YnZlcnNp
b25FeGNlcHRpb24sIHdjLnNldF9hZG1fZGlyLCAiLmZvb2JhciIpCisgICAgICBzZWxmLmFzc2Vy
dFRydWUod2MuaXNfYWRtX2RpcigiLnN2biIpKQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5p
c19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo
Ii5mb29iYXIiKSkKKyAgICAgIHdjLnNldF9hZG1fZGlyKCJfc3ZuIikKKyAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSh3Yy5pc19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKCJf
c3ZuIiwgd2MuZ2V0X2FkbV9kaXIoKSkKKyAgICAgIHdjLnNldF9hZG1fZGlyKCIuc3ZuIikKKyAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgiLnN2biIsIHdjLmdldF9hZG1fZGlyKCkpCisKKyAgZGVmIHRlc3RfaW5pdF90
cmF2ZXJzYWxfaW5mbyhzZWxmKToKKyAgICAgIHdjLmluaXRfdHJhdmVyc2FsX2luZm8oKQorCisg
IGRlZiB0ZXN0X2NyYXdsX3JldmlzaW9uczIoc2VsZik6CisgICAgICBpbmZvcyA9IFtdCisgICAg
ICBzZXRfcGF0aHMgPSBbXQorCisgICAgICBkZWYgbm90aWZ5KGluZm8sIHBvb2wpOgorICAgICAg
ICAgIGluZm9zLmFwcGVuZChpbmZvKQorCisgICAgICBjbGFzcyBNeVJlcG9ydGVyOgorICAgICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgc2VsZi5fZmluaXNoZWRfcmVw
b3J0ID0gRmFsc2UKKworICAgICAgICAgIGRlZiBhYm9ydF9yZXBvcnQoc2VsZiwgcG9vbCk6Cisg
ICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgIGRlZiBmaW5pc2hfcmVwb3J0KHNlbGYsIHBv
b2wpOgorICAgICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9yZXBvcnQgPSBUcnVlCisKKyAgICAg
ICAgICBkZWYgc2V0X3BhdGgoc2VsZiwgcGF0aCwgcmV2aXNpb24sIHN0YXJ0X2VtcHR5LCBsb2Nr
X3Rva2VuLCBwb29sKToKKyAgICAgICAgICAgICAgc2V0X3BhdGhzLmFwcGVuZChwYXRoKQorCisg
ICAgICAgICAgZGVmIGxpbmtfcGF0aChzZWxmLCBwYXRoLCB1cmwsIHJldmlzaW9uLCBzdGFydF9l
bXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wpOgorICAgICAg
ICAgICAgICBwYXNzCisKKyAgICAgICAgICBkZWYgZGVsZXRlX3BhdGgoc2VsZiwgcGF0aCwgcG9v
bCk6CisgICAgICAgICAgICAgIHBhc3MKKworICAgICAgIyBSZW1vdmUgdHJ1bmsvUkVBRE1FLnR4
dAorICAgICAgcmVhZG1lX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAidHJ1bmsiLCAi
UkVBRE1FLnR4dCIpCisgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMocmVhZG1lX3Bh
dGgpKQorICAgICAgb3MucmVtb3ZlKHJlYWRtZV9wYXRoKQorCisgICAgICAjIFJlc3RvcmUgdHJ1
bmsvUkVBRE1FLnR4dCB1c2luZyBjcmF3bF9yZXZpc2lvbjIKKyAgICAgIGluZm8gPSB3Yy5pbml0
X3RyYXZlcnNhbF9pbmZvKCkKKyAgICAgIHJlcG9ydGVyID0gTXlSZXBvcnRlcigpCisgICAgICB3
Yy5jcmF3bF9yZXZpc2lvbnMyKHNlbGYucGF0aCwgc2VsZi53YywgcmVwb3J0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUsIEZhbHNlLCBub3RpZnksIGluZm8pCisKKyAg
ICAgICMgQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGZpbmlzaGVkCisgICAgICBzZWxmLmFzc2VydF8o
cmVwb3J0ZXIuX2ZpbmlzaGVkX3JlcG9ydCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycnXSwg
c2V0X3BhdGhzKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oaW5mb3MpKQorCisgICAg
ICAjIENoZWNrIGNvbnRlbnQgb2YgaW5mb3Mgb2JqZWN0CisgICAgICBbaW5mb10gPSBpbmZvcwor
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbWVfcGF0aCwgaW5mby5wYXRoKQorICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjb3JlLnN2bl9ub2RlX2ZpbGUsIGluZm8ua2luZCkKKyAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoLTEsIGluZm8ucmV2aXNpb24pCisKKyAgZGVmIHRlc3RfY3JlYXRlX25vdGlm
eShzZWxmKToKKyAgICAgIHdjLmNyZWF0ZV9ub3RpZnkoc2VsZi5wYXRoLCB3Yy5ub3RpZnlfYWRk
KQorCisgIGRlZiB0ZXN0X2NoZWNrX3djKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdj
LmNoZWNrX3djKHNlbGYucGF0aCkgPiAwKQorCisgIGRlZiB0ZXN0X2dldF9hbmNlc3RyeShzZWxm
KToKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NlbGYucmVwb3NfdXJsLCAxMl0sIAorICAgICAg
ICAgICAgICAgICAgICAgICB3Yy5nZXRfYW5jZXN0cnkoc2VsZi5wYXRoLCBzZWxmLndjKSkKKwor
ICBkZWYgdGVzdF9zdGF0dXMoc2VsZik6CisgICAgICB3Yy5zdGF0dXMyKHNlbGYucGF0aCwgc2Vs
Zi53YykKKworICBkZWYgdGVzdF9pc19ub3JtYWxfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuZmFp
bElmKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWls
SWYod2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjplbnRyeTpmb286YmFyJykpCisgICAgICBzZWxmLmFz
c2VydF8od2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjpmb286YmFyJykpCisgICAgICBzZWxmLmFzc2Vy
dF8od2MuaXNfbm9ybWFsX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lz
X3djX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfd2NfcHJvcCgnc3ZuOndj
OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3AoJ3N2bjplbnRyeTpm
b286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46Zm9vOmJhcicp
KQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisK
KyAgZGVmIHRlc3RfaXNfZW50cnlfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyh3Yy5p
c19lbnRyeV9wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2Mu
aXNfZW50cnlfcHJvcCgnc3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlz
X2VudHJ5X3Byb3AoJ3N2bjpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRy
eV9wcm9wKCdmb3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9nZXRfcHJpc3RpbmVfY29w
eV9wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgd2MuZ2V0X3By
aXN0aW5lX2NvcHlfcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAnZm9vJykpLAorICAgICAg
ICBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCB3Yy5nZXRfYWRtX2RpcigpLCAndGV4dC1iYXNlJywg
J2Zvby5zdm4tYmFzZScpKQorCisgIGRlZiB0ZXN0X2dldF9pZ25vcmVzKHNlbGYpOgorICAgICAg
c2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uod2MuZ2V0X2lnbm9yZXMoTm9uZSwgc2VsZi53YyksIGxp
c3QpKQorCisgIGRlZiB0ZXN0X2VudHJpZXNfcmVhZChzZWxmKToKKyAgICAgIGVudHJpZXMgPSB3
Yy5lbnRyaWVzX3JlYWQoc2VsZi53YywgVHJ1ZSkKKyAgICAgICAgCisgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKFsnJywgJ3RhZ3MnLCAnYnJhbmNoZXMnLCAndHJ1bmsnXSwgZW50cmllcy5rZXlzKCkp
CisKKyAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgd2MuYWRtX2Nsb3NlKHNlbGYud2MpCisg
ICAgICBzaHV0aWwucm10cmVlKHNlbGYucGF0aCkKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu
IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv
c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l
ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCgo9
PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3
ZycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cJCisrKyBzdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCQpAQCAtMTQ2LDE0ICsxNDYsMjQg
QEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGNyZWF0ZSBhbiBPVVRQVVQgYXJndW1lbnQgZGVm
biBmb3IgYW4gYXByX2hhc2hfdCAqKiB3aGljaCBpcyBzdG9yaW5nCisgICBkaXJlbnQgdmFsdWVz
CisqLworJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqRElSRU5U
SEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdt
ZW50PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqRElSRU5USEFTSCB7CisgICAgJHJl
c3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dJR1RZUEVfcF9zdm5fZGlyZW50
X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgY3JlYXRlIGFuIE9VVFBVVCBh
cmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNoIGlzIHN0b3JpbmcKICAgIHBy
b3BlcnR5IHZhbHVlcwogKi8KIAogJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJf
aGFzaF90ICoqUFJPUEhBU0ggPSBhcHJfaGFzaF90ICoqT1VUUFVUOwotJXR5cGVtYXAocHl0aG9u
LGFyZ291dCkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsKLSAgICAvKiB0b3NzIHByaW9yIHJlc3Vs
dCwgZ2V0IG5ldyByZXN1bHQgZnJvbSB0aGUgaGFzaCAqLwotICAgIFB5X0RFQ1JFRigkcmVzdWx0
KTsKLSAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgqJDEpOworJXR5
cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikgYXByX2hhc2hf
dCAqKlBST1BIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsIHN2
bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoKiQxKSk7CiB9CiAKICV0eXBlbWFwKHBlcmw1LGlu
LG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggPSBhcHJfaGFzaF90ICoqT1VUUFVU
OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3By
b3h5X2Fwci5zd2cnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h
cHIuc3dnCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3
ZwkKQEAgLTExMiw2ICsxMTIsMjggQEAKICAgICAgICAgICBkZWwgc2VsZi5fcGFyZW50X3Bvb2wK
ICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX2lzX3ZhbGlkIik6CiAgICAgICAgICAgZGVsIHNl
bGYuX2lzX3ZhbGlkCisgICAgICAgIAorICAgICAgICAjIENsZWFyIG91dCBhbnkgcG9vbC1vd25l
ZCByZWZlcmVuY2VzIGluc2VydGVkIGJ5IHR5cGVtYXBzCisgICAgICAgIGlmIGhhc2F0dHIoc2Vs
ZiwgIl9vd25lZF9yZWZzIik6CisgICAgICAgICAgZGVsIHNlbGYuX293bmVkX3JlZnMKKworICAg
ICAgZGVmIF9hZGRfb3duZWRfcmVmKHNlbGYsIHJlZik6CisgICAgICAgICIiIkFkZCBhIG5ldyAn
b3duZWQnIHJlZmVyZW5jZSAtLSBpLmUuIGEgUHl0aG9uIG9iamVjdCBjb250YWluZWQgaW4gYSBD
CisgICAgICAgICAgIHN0cnVjdHVyZSBhbGxvY2F0ZWQgaW4gdGhpcyBwb29sLiAgVXNlZCBieSB0
aGUgdHlwZW1hcHMgdG8gbWFuYWdlCisgICAgICAgICAgIHJlZmVyZW5jZSBjb3VudGluZyBzZW1h
bnRpY3MuIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgor
ICAgICAgICAgIHNlbGYuX293bmVkX3JlZnMgPSB7fQorICAgICAgICBpZiBzZWxmLl9vd25lZF9y
ZWZzLmhhc19rZXkocmVmKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gKz0gMQor
ICAgICAgICBlbHNlOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSA9IDEKKyAgICAg
IAorICAgICAgZGVmIF9yZW1vdmVfb3duZWRfcmVmKHNlbGYsIHJlZik6CisgICAgICAgICIiIlJl
bW92ZSBhbiBleGlzdGluZyAnb3duZWQnIHJlZmVyZW5jZS4gIEFsc28gdXNlZCBieSB0eXBlbWFw
cy4iIiIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKSBhbmQgc2VsZi5f
b3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZd
IC09IDEKKyAgICAgICAgICBpZiBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPT0gMDoKKyAgICAgICAg
ICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzW3JlZl0KICAgCiAgICAgICBkZWYgX19kZWxfXyhzZWxm
KToKICAgICAgICAgIiIiQXV0b21hdGljYWxseSBkZXN0cm95IG1lbW9yeSBwb29scywgaWYgbmVj
ZXNzYXJ5IiIiCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2lu
Y2x1ZGUvc3ZuX3R5cGVzLnN3ZycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRl
L3N2bl90eXBlcy5zd2cJCisrKyBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5f
dHlwZXMuc3dnCQpAQCAtNDMwLDYgKzQzMCwxMiBAQAogICAkMiA9ICh2b2lkICopc3ZuX3N3aWdf
cmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7CiB9OwogCisl
dHlwZW1hcChweXRob24sIGluKSAoc3ZuX2NvbW1pdF9jYWxsYmFjazJfdCBjYWxsYmFjaywgdm9p
ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr
MjsKKyAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIENh
bGxiYWNrOiBzdm5fY2FuY2VsX2Z1bmNfdAogKi8KQEAgLTQ5Myw2ICs0OTksMzMgQEAKICAgJDEg
PSBzdm5fc3dpZ19yYl9tYWtlX3N0cmVhbSgkaW5wdXQpOwogfQogCisjaWZkZWYgU1dJR1BZVEhP
TgorJXR5cGVtYXAoaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNh
bGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazsKKyAg
JDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
TWFwcGVyIHRvIGF1dG9tYXRpY2FsbHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJh
dG9ucyBvbiBhc3NpZ25tZW50CisqLworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4p
IHZvaWQgKlBZX0FTX1ZPSUQgKFB5T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0
OworICBpZiAoJGlucHV0ID09IFB5X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7Cisg
IH0gZWxzZSB7CisgICAgbmV3UmVmID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7
CisgIH0KKyAgaWYgKHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmpl
Y3QgKilhcmcxLT4kMV9uYW1lLCBuZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9Cisj
ZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9y
IGZ1bmN0aW9ucyBwb3B1bGF0aW5nIGRpZ2VzdHMuCiAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHku
YycKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dp
Z3V0aWxfcHkuYwkKKysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3
aWdfcHkvc3dpZ3V0aWxfcHkuYwkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9y
dGFibGUuaD4KICNpbmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9j
bGllbnQuaCIKICNpbmNsdWRlICJzdm5fc3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgog
I2luY2x1ZGUgInN2bl9kZWx0YS5oIgpAQCAtNDg1LDYgKzQ4Niw1MSBAQAogICByZXR1cm4gY29u
dmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBOVUxMKTsKIH0KIAor
c3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJfYXJyYXlfaGVhZGVy
X3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05ldygpOworICAgIGlu
dCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBOVUxMOworCisgICAg
Zm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBzdm5f
cHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92YWx1ZTsKKworICAg
ICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3BfdCk7CisKKyAgICAg
ICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOworICAgICAgICBpZiAo
cHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAocHJv
cC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1ZSA9IFB5
X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1ZSA9IFB5U3RyaW5n
X0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AudmFsdWUtPmxlbik7
CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQ
eV9ERUNSRUYocHlfa2V5KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5
LCBweV92YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAg
UHlfREVDUkVGKGRpY3QpOworICAgIHJldHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2
bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC01
NTAsNiArNTk2LDkgQEAKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2NrLCBzdm5fbG9ja19k
dXApCiBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywK
ICAgICBzdm5fYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O
U1RSVUNUT1IoaW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGNv
bW1pdF9pbmZvLCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9S
KHdjX25vdGlmeSwgc3ZuX3djX2R1cF9ub3RpZnkpCiAKIHN0YXRpYyBQeU9iamVjdCAqY29udmVy
dF9sb2dfY2hhbmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKQEAgLTE1MDYs
NiArMTU1NSw0MSBAQAogfQogCiAKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQg
KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlm
eV90ICpub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3Vs
dDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24g
PT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dp
Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxG
dW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNoYXIgKikiKE8mTyYpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFrZV9vYl93Y19ub3RpZnksIG5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg
ICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8KKyAg
ICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3Jl
dHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0K
KworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVycikK
KyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv
Y2soKTsKK30KKwogdm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMpCkBAIC0xODE0LDYgKzE4
OTgsMzggQEAKICAgcmV0dXJuIGVycjsKIH0KIAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2lu
Zm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK
KyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2
bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgCisgIGlmICgocmVjZWl2ZXIgPT0gTlVM
TCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisK
KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i
amVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSJzTyZPJiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8sIGluZm8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor
ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisg
ICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFj
a19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7
CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl
cnI7Cit9CiAKIHN2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJf
ZnVuYyh2b2lkICpiYXRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLApAQCAtMjEwOCwzICsyMjI0LDI5MSBA
QAogICAqY3JlZCA9IGNyZWRzOwogICByZXR1cm4gZXJyOwogfQorCit2b2lkCitzdm5fc3dpZ19w
eV9zZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJy
ID0gc3ZuX3JhX2NyZWF0ZV9jYWxsYmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJy
KQorICAgIHsKKyAgICAgIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisgIAorICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9CisKK3N2bl9lcnJv
cl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190
ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5
T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgCisg
IGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJl
dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJk8mIiwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2luZm8sIGNvbW1p
dF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv
b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlf
Tm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUi
KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxl
YXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3
aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAgICB2b2lk
ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2hh
c2hfdCAqcmV2X3Byb3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3df
aGFuZGxlcl90ICpkZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGVs
dGFfYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqcHJvcF9k
aWZmcywKKyAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmpl
Y3QgKmhhbmRsZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Jldl9wcm9wcyA9
IE5VTEwsICpweV9wcm9wX2RpZmZzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O
T19FUlJPUjsKKworICBpZiAoKGhhbmRsZXIgPT0gTlVMTCkgfHwgKGhhbmRsZXIgPT0gUHlfTm9u
ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICBweV9yZXZfcHJvcHMgPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0
KHJldl9wcm9wcyk7CisgIGlmIChweV9yZXZfcHJvcHMgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9oYXNoX3QgKiIpOworICAgICAgZ290byBl
cnJvcjsKKyAgICB9CisKKyAgcHlfcHJvcF9kaWZmcyA9IHByb3BhcnJheV90b19kaWN0KHByb3Bf
ZGlmZnMpOworCisgIGlmIChweV9wcm9wX2RpZmZzID09IE5VTEwpCisgICAgeworICAgICAgZXJy
ID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJhcHJfYXJyYXlfaGVhZGVyX3QgKiIpOworICAgICAg
Z290byBlcnJvcjsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rp
b24oaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
Kikic2xPT08mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg
cmV2LCBweV9yZXZfcHJvcHMsIHB5X3Byb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAg
ICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAg
eworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19i
YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworCisgICAgICAvKiBGSVhNRTogU3VwcG9ydCBy
ZXR1cm5lZCBUeERlbHRhV2luZG93IG9iamVjdCBhbmQKKyAgICAgICAqIHNldCBkZWx0YV9oYW5k
bGVyIGFuZCBkZWx0YV9iYXRvbiAqLworICAgICAgKmRlbHRhX2hhbmRsZXIgPSBOVUxMOworICAg
ICAgKmRlbHRhX2JhdG9uID0gTlVMTDsKKworICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAg
IH0KKworZXJyb3I6CisKKyAgUHlfWERFQ1JFRihweV9yZXZfcHJvcHMpOworICBQeV9YREVDUkVG
KHB5X3Byb3BfZGlmZnMpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisg
IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfc2V0X3BhdGgo
dm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9y
X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0
X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9y
dGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRo
b2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzZXRfcGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg
cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0
eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf
b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAg
ICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOwor
ICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w
eV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBv
cnRlcl9kZWxldGVfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2Jq
ZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVw
b3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5f
Tk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChy
ZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiZGVsZXRlX3BhdGgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj
YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQ
eV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5v
dCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19w
eV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorICAgIAorc3RhdGljIHN2
bl9lcnJvcl90ICpyZXBvcnRlcl9saW5rX3BhdGgodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5f
Ym9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf
dCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmpl
Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv
cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O
T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl
c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsaW5rX3BhdGgiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsYnNPJiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRoLCB1cmwsIHJldmlzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf
YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1
bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7
Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCh2b2lkICpy
ZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3Qg
KnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmpl
Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv
cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O
T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl
c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJmaW5pc2hfcmVwb3J0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor
ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlm
IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0
dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisK
KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKwor
c3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9hYm9ydF9yZXBvcnQodm9pZCAqcmVwb3J0X2Jh
dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7
CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3Jl
cG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBO
VUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsK
KworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5
T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSJhYm9ydF9yZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAh
PSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3Io
Ik5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dp
Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitjb25zdCBzdm5f
cmFfcmVwb3J0ZXIyX3Qgc3dpZ19weV9yYV9yZXBvcnRlcjIgPSB7CisgICAgcmVwb3J0ZXJfc2V0
X3BhdGgsCisgICAgcmVwb3J0ZXJfZGVsZXRlX3BhdGgsCisgICAgcmVwb3J0ZXJfbGlua19wYXRo
LAorICAgIHJlcG9ydGVyX2ZpbmlzaF9yZXBvcnQsCisgICAgcmVwb3J0ZXJfYWJvcnRfcmVwb3J0
Cit9OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaCcKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dp
Zy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkKKysrIHN1YnZlcnNpb24vYmlu
ZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkKQEAgLTE5OCw2
ICsxOTgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9z
dGF0ZV90IHByb3Bfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZu
dW1fdCByZXZpc2lvbik7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dp
Z19weV9ub3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCiAvKiBhIHN0YXR1cyBmdW5jdGlvbiB0aGF0
IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGluCiAgICB2aWEgdGhl
IGJhdG9uIGFyZ3VtZW50ICovCiBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKQEAgLTI0OSw2ICsy
NTQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKTsKIAorLyogdGh1bmtlZCBpbmZvIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVy
X2Z1bmModm9pZCAqcHlfcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCiAvKiB0
aHVua2VkIGJsYW1lIHJlY2VpdmVyIGZ1bmN0aW9uICovCiBTVk5fU1dJR19TV0lHVVRJTF9FWFBP
UlQKIHN2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2
b2lkICpiYXRvbiwKQEAgLTMwMyw2ICszMTUsMzEgQEAKICAgICBzdm5fYm9vbGVhbl90IG1heV9z
YXZlLAogICAgIGFwcl9wb29sX3QgKnBvb2wpOwogCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK
K3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90
ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworU1ZO
X1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2Nh
bGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5f
U1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jl
dl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5f
cmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMs
CisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRh
X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAg
ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
CitleHRlcm4gY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOwor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKPT09IG1v
ZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2Fs
bC5weScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5w
eQkKKysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkK
QEAgLTEsNiArMSw2IEBACiBpbXBvcnQgc3lzLCBvcwogYmluZGlyID0gb3MucGF0aC5kaXJuYW1l
KHN5cy5hcmd2WzBdKQotc3lzLnBhdGhbMDowXSA9IFsgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIg
JSBvcy5nZXRjd2QoKSwgXAorc3lzLnBhdGhbMDowXSA9IFsgYmluZGlyLCBvcy5nZXRjd2QoKSwg
IiVzLy5saWJzIiAlIG9zLmdldGN3ZCgpLCBcCiAgICAgICAgICAgICAgICAgICAiJXMvLi4iICUg
YmluZGlyLCAiJXMvLi4vLmxpYnMiICUgYmluZGlyIF0KIAogIyBPU2VzIHdpdGhvdXQgUlBBVEgg
c3VwcG9ydCBhcmUgZ29pbmcgdG8gaGF2ZSB0byBkbyB0aGluZ3MgaGVyZSB0byBtYWtlCkBAIC0x
Nyw2ICsxNyw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwb29sCiBpbXBvcnQgcmVwb3Np
dG9yeQoraW1wb3J0IGNsaWVudAoraW1wb3J0IHJhCitpbXBvcnQgd2MKIGltcG9ydCB0cmFjLnZl
cnNpb25jb250cm9sLnRlc3RzCiAKICMgUnVuIGFsbCB0ZXN0cwpAQCAtMjQsNyArMjcsMTAgQEAK
IGRlZiBzdWl0ZSgpOgogICAiIiJSdW4gYWxsIHRlc3RzIiIiCiAgIHN1aXRlID0gdW5pdHRlc3Qu
VGVzdFN1aXRlKCkKKyAgc3VpdGUuYWRkVGVzdChjbGllbnQuc3VpdGUoKSkKICAgc3VpdGUuYWRk
VGVzdChwb29sLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3QocmEuc3VpdGUoKSkKKyAgc3VpdGUu
YWRkVGVzdCh3Yy5zdWl0ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHJlcG9zaXRvcnkuc3VpdGUoKSkK
ICAgc3VpdGUuYWRkVGVzdCh0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN1aXRlKCkpOwogICBy
ZXR1cm4gc3VpdGUKCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv
c3ZuX2NsaWVudC5pJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkK
KysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJCkBAIC0yNSw2ICsyNSw3
IEBACiAjZW5kaWYKIAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3RyYWludHMu
aQogCiAlaW5jbHVkZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBjb3JlLmkKQEAgLTQ0LDYgKzQ1
LDExIEBACiAgIHN2bl9jbGllbnRfY3R4X3QgKioKIH07CiAKKyVhcHBseSBQb2ludGVyIE5PTk5V
TEwgeyAKKyAgY29uc3Qgc3ZuX29wdF9yZXZpc2lvbl90ICpyZXZpc2lvbiwKKyAgY29uc3Qgc3Zu
X29wdF9yZXZpc2lvbl90ICpwZWdfcmV2aXNpb24KK307CisKICVhcHBseSBjb25zdCBhcHJfYXJy
YXlfaGVhZGVyX3QgKlNUUklOR0xJU1QgewogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAq
dGFyZ2V0cywKICAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmRpZmZfb3B0aW9ucwpAQCAt
NjYsNiArNzIsMTYgQEAKIAogI2lmZGVmIFNXSUdQWVRIT04KICVhcHBseSBzdm5fc3RyZWFtX3Qg
KldSQVBQRURfU1RSRUFNIHsgc3ZuX3N0cmVhbV90ICogfTsKKworLyogbWVtYmVycyBvZiBzdm5f
Y2xpZW50X2N0eF90ICovCislYXBwbHkgdm9pZCAqUFlfQVNfVk9JRCB7CisgICAgdm9pZCAqbm90
aWZ5X2JhdG9uLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24sCisgICAgdm9pZCAqY2FuY2VsX2Jh
dG9uLAorICAgIHZvaWQgKm5vdGlmeV9iYXRvbjIsCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIs
CisgICAgdm9pZCAqcHJvZ3Jlc3NfYmF0b24KK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTIwMCw2ICsyMTYsMTggQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxi
YWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisgICBzdm5fY2xpZW50X2luZm8oKQorKi8KKworJXR5
cGVtYXAocHl0aG9uLCBpbikgKHN2bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dp
Z19weV9pbmZvX3JlY2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwor
CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgV2UgdXNlICdzdm5fd2Nfc3RhdHVzX3QgKicgaW4gc29t
ZSBjdXN0b20gY29kZSwgYnV0IGl0IGlzbid0IGluIHRoZQogICAgQVBJIGFueXdoZXJlLiBUaHVz
LCBTV0lHIGRvZXNuJ3QgZ2VuZXJhdGUgYSB0eXBlbWFwIGVudHJ5IGZvciBpdC4gYnkKICAgIGFk
ZGluZyBhIHNpbXBsZSBkZWNsYXJhdGlvbiBoZXJlLCBTV0lHIHdpbGwgaW5zZXJ0IGEgbmFtZSBm
b3IgaXQuCkBAIC00ODMsNiArNTExLDE1IEBACiAlaW5jbHVkZSBzdm5fdGltZV9oLnN3ZwogJWlu
Y2x1ZGUgc3ZuX2NsaWVudF9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRl
IFB5dGhvbiB3aXRoIGFjY2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2Fu
Y2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50
X2dldF9jb21taXRfbG9nMl90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29u
c3RhbnQgc3ZuX3djX25vdGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisj
ZW5kaWYKKwogI2lmZGVmIFNXSUdSVUJZCiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKCj09PSBt
b2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmknCi0tLSBz
dWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJCisrKyBzdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvc3ZuX2RlbHRhLmkJCkBAIC00Nyw3ICs0Nyw4IEBACiAgICAgY29uc3QgY2hhciAq
ZXJyb3JfaW5mbywKICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAogICAgIGNvbnN0IGNo
YXIgKmNvcHlfcGF0aCwKLSAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtCisgICAgY29uc3Qg
Y2hhciAqYmFzZV9jaGVja3N1bSwKKyAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtCiB9Owog
CiAjaWZkZWYgU1dJR1BZVEhPTgoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGlu
Z3Mvc3dpZy9zdm5fcmEuaScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkK
KysrIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNlbmRpZgogCiAlaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAK
ICVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTM5LDYgKzQwLDgg
QEAKICVpZ25vcmUgc3ZuX3JhX2xvY2FsX2luaXQ7CiAlaWdub3JlIHN2bl9yYV9kYXZfaW5pdDsK
IAorJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNr
cyB9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZp
bmVkIGVsc2V3aGVyZQogKi8KQEAgLTQ4LDEzICs1MSwxNiBAQAogICAgIGNvbnN0IHN2bl9yYV9y
ZXBvcnRlcjJfdCAqKnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCiAgICAgc3Zu
X2RpcmVudF90ICoqZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisgICAgc3ZuX2xvY2tf
dCAqKmxvY2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9OwogCiAlYXBwbHkg
YXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXBy
X2hhc2hfdCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OwogCiAlYXBwbHkg
Y29uc3QgY2hhciAqTUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQKKyAgICBj
b25zdCBjaGFyICpjb21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KIH07CiAKICVh
cHBseSBhcHJfaGFzaF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2ICsxMTgsMTEgQEAK
ICAgc3ZuX3N3aWdfcmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9i
YWxfcG9vbCk7CiB9CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fcmFfY2FsbGJhY2tzMl90
ICpjYWxsYmFja3MsIAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9u
KSB7CisgIHN2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBf
Z2xvYmFsX3Bvb2wpOworfQorCiAldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3QgKmNvbmZp
ZyB7CiAgICAgJDEgPSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAi
c3ZuX2NvbmZpZ190ICoiLAogCQkJCQkgICBfZ2xvYmFsX3Bvb2wpOwpAQCAtMTM0LDYgKzE0NSwy
MiBAQAogICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwg
X2dsb2JhbF9wb29sKTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3Zu
X3JhX2ZpbGVfcmV2X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQorewor
ICAgJDEgPSBzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2
b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp
bikgKGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRv
bikKK3sKKyAgJDEgPSAoc3ZuX3JhX3JlcG9ydGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIy
OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCiAKICV7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2
bl93Yy5pJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQorKysgc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQpAQCAtMTkxLDYgKzE5MSwyMCBAQAogICAkMSA9
IHN2bl9zd2lnX3JiX2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwgcG9vbCk7CiB9CiAK
KyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApCisgICAgIGFwcl9h
cnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApCit7Cisg
ICQxID0gJnRlbXA7Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0X291dHB1dF9oZWxw
ZXIiKQorICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworeworICAkcmVzdWx0ID0g
dF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9z
d2lnX3B5X2FycmF5X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3ZuX2NsaWVudF9jdHhf
dApAQCAtMjM3LDYgKzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlz
IHRoZSBiYXRvbi4gKi8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3ZuX3djX25vdGlmeV9m
dW5jMl90IG5vdGlmeV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAgICQxID0gc3ZuX3N3
aWdfcHlfbm90aWZ5X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0
aGUgYmF0b24uICovCit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3djX3N0YXR1c19mdW5j
X3Qgc3RhdHVzX2Z1bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9IHN2bl9zd2lnX3Bs
X3N0YXR1c19mdW5jOwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRv
bi4gKi8KCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50
LmMnCi0tLSBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCisrKyBzdWJ2ZXJzaW9u
L2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAg
IGFwcl9wb29sX2Rlc3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkK
LSAgICB7Ci0gICAgICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3Zu
X3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyog
UmVhZCB0aGUgcmVzcG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNw
b25zZShjb25uLCBwb29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9Cgo=
</contents>
</attachment>
<attachment href="http://librarian.demo.launchpad.net/3181883/python-fixes.patch">
<type>PATCH</type>
<title>Python fixes (updated)</title>
<mimetype>text/plain</mimetype>
<contents>VGhpcyBwYXRjaCBmaXhlcyBhIGJ1bmNoIG9mIGlzc3VlcyB3aXRoIHRoZSBQeXRob24gYmluZGlu
Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIApyZXF1aXJlZCBmb3IgdGhlIFN1YnZlcnNpb24gaW50ZWdy
YXRpb24gaW50byBCYXphYXIsIHNlZSAKaHR0cDovL2JhemFhci12Y3Mub3JnL0J6clN2bi4gCgpU
aGUgY2hhbmdlcyBhcmUgYWxsIHB1bGxlZCBmcm9tIFN1YnZlcnNpb24gdHJ1bmsgKHdoaWNoIHdp
bGwgYmVjb21lIDEuNSkuCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln
L3B5dGhvbi90ZXN0cy9jbGllbnQucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkKQEAgLTAsMCArMSwxMTEgQEAKK2lt
cG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29y
ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy
b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor
ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1
YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0
IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBz
ZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAg
ICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92
aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigp
LAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0
aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhu
YW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGlu
Zm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5m
bycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAg
ICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2No
ZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAg
ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2
bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n
ZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9z
X3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3Vy
bCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRf
Y3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRf
bG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5f
b3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9o
ZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp
CisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hl
Y2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0
aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgp
KQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJl
cG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNl
bGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBV
UkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xp
ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAg
ICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9w
YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZp
bGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgo
c2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29w
dF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFk
CisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9m
cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg
cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf
Y3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCks
IHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAg
ICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2
bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25f
aGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1
dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBw
YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs
aWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2Us
IDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgo
cGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBj
bGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKwor
ICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3
Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5
cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6Cisg
ICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGll
bnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2Rl
ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp
dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg
cnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IGFkZGVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9weXRob24vdGVzdHMvcmEucHknCi0tLSAvZGV2L251bGwJCisrKyBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5CQpAQCAtMCwwICsxLDEzNiBAQAoraW1wb3J0
IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwg
Y2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9y
dCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVy
bGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVz
dENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVy
c2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxv
YWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQorCisg
ICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkK
KyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tpbmcK
KyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMgPSBy
ZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90KCkK
KworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNrcywg
Tm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICByb290
ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy
b290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAgIHJh
X3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0X3V1
aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKworICBk
ZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEuZ2V0
X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdlc3Rf
cmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVtKQor
CisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSByYS5n
ZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5o
YXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ2Jy
YW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycpKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9ub2Rl
X2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwgY29y
ZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10ua2lu
ZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXko
Y29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMuaGFz
X2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRzLF8s
XykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5hc3Nl
cnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNl
bGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhh
c19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydSRUFE
TUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1pdChz
ZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0b24p
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jl
dihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRp
dG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAg
IHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24s
IDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9y
LCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2Vk
aXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBk
ZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRv
ciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFy
IiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52
b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5l
ZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDAp
CisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikK
KworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlzaW9u
LCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBmcy55
b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRf
Y29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBG
YWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBl
ZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0
b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZv
a2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfZ2V0X2xvY2F0
aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRfbG9jYXRpb25zKHNlbGYucmFfY3R4
LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUpKQorICAgIHNlbGYuYXNzZXJ0RXF1
YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAg
ICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgNDogJy90cnVuay9SRUFETUUudHh0
J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxmKToKKyAgICBkZWYgcmV2X2hhbmRs
ZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMsIHBvb2wpOgorICAgICAgICBzZWxm
LmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAgaWYgcmV2ID09IDI6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAnc3ZuOmxv
Zyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAnam9obics
CisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjEyOjE4LjIxNjI2N1on
CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2RpZmZz
LCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0ZpeGVkIFJFQURNRS5c
bicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2thdGUnLAorICAgICAgICAgICAgICAn
c3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2NDNaJworICAgICAgICAgICAgfSkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywgeydzdm46bWltZS10eXBl
JzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICduYXRpdmUnfSkKKworICAgIHJhLmdl
dF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFETUUudHh0IiwgMCwgMTAsIHJldl9o
YW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICBjbGFzcyBUZXN0RWRpdG9y
KGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAgIGVkaXRvciA9IFRlc3RFZGl0b3Io
KQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtlX2VkaXRvcihlZGl0b3IpCisgICAg
CisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEuZG9fdXBkYXRlKHNlbGYucmFfY3R4
LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9r
ZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24sICIiLCAwLCBUcnVlLCBOb25lKQor
CisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVwb3J0KHJlcG9ydGVyLCByZXBvcnRl
cl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShT
dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwKQorCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0
UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCgo9PT0gYWRkZWQgZmlsZSAnc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weScKLS0tIC9kZXYvbnVsbAkKKysr
IHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkJCkBAIC0wLDAgKzEs
MTc1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitm
cm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3ZuLmNvcmUg
aW1wb3J0IFN1YnZlcnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRl
c3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQ
T1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJz
aW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNl
cyBmb3IgdGhlIFN1YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVmIHNldFVw
KHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHNl
bGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAg
CisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAg
c2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3Mu
ZnMoc2VsZi5yZXBvcykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgpCisKKyAg
ICBjbGllbnRfY3R4ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICByZXYgPSBj
b3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2
aXNpb25faGVhZAorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgc2VsZi5w
YXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4KQorCisg
ICAgc2VsZi53YyA9IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0xLCBOb25l
KQorCisgIGRlZiB0ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5lbnRyeShz
ZWxmLnBhdGgsIHNlbGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAg
IGxvY2sgPSB3Yy5hZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRlKGNvcmUu
UG9vbCgpKSwgc2VsZi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MuYWRtX2xv
Y2tlZChzZWxmLndjKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9ja2VkKHNl
bGYucGF0aCkpCisgICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAg
ZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRlZiB0ZXN0
X2FjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGgsIHdj
LmFkbV9hY2Nlc3NfcGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGlyKHNlbGYp
OgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAgIHNl
bGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0ZXN0X2dl
dF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uod2MuZ2V0
X2FkbV9kaXIoKSwgYmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIoc2VsZik6
CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5zZXRfYWRt
X2RpciwgIi5mb29iYXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5z
dm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAg
ICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAgICB3Yy5z
ZXRfYWRtX2RpcigiX3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRtX2Rpcigi
X3N2biIpKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1fZGlyKCkp
CisgICAgICB3Yy5zZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdj
LmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4iLCB3Yy5n
ZXRfYWRtX2RpcigpKQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2VsZik6Cisg
ICAgICB3Yy5pbml0X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9yZXZpc2lv
bnMyKHNlbGYpOgorICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10KKworICAg
ICAgZGVmIG5vdGlmeShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQoaW5mbykK
KworICAgICAgY2xhc3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6
CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAgICAgICAg
ICBkZWYgYWJvcnRfcmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAg
ICAgICAgICBkZWYgZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAgICAgc2Vs
Zi5fZmluaXNoZWRfcmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRoKHNlbGYs
IHBhdGgsIHJldmlzaW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6CisgICAgICAg
ICAgICAgIHNldF9wYXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5rX3BhdGgo
c2VsZiwgcGF0aCwgdXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAg
ICAgZGVmIGRlbGV0ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNz
CisKKyAgICAgICMgUmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAgICAgc2Vs
Zi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJlbW92ZShy
ZWFkbWVfcGF0aCkKKworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNpbmcgY3Jh
d2xfcmV2aXNpb24yCisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygpCisgICAg
ICByZXBvcnRlciA9IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25zMihzZWxm
LnBhdGgsIHNlbGYud2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVl
LCBUcnVlLCBGYWxzZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQgdGhlIHJl
cG9ydCBmaW5pc2hlZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hlZF9yZXBv
cnQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50IG9mIGlu
Zm9zIG9iamVjdAorICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cmVhZG1lX3BhdGgsIGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29yZS5zdm5f
bm9kZV9maWxlLCBpbmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBpbmZvLnJl
dmlzaW9uKQorCisgIGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3Yy5jcmVh
dGVfbm90aWZ5KHNlbGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9jaGVja193
YyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBhdGgpID4g
MCkKKworICBkZWYgdGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVx
dWFsKFtzZWxmLnJlcG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgd2MuZ2V0
X2FuY2VzdHJ5KHNlbGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVzKHNlbGYp
OgorICAgICAgd2Muc3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfaXNf
bm9ybWFsX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgn
c3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9wcm9wKCdz
dm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9w
KCdzdm46Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdm
b3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgorICAgICAg
c2VsZi5hc3NlcnRfKHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxm
LmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5m
YWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdj
LmlzX3djX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2VudHJ5X3By
b3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3ZuOmVudHJ5
OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjp3Yzpm
b286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46Zm9vOmJh
cicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpmb286YmFy
JykpCisKKyAgZGVmIHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgob3MucGF0
aC5qb2luKHNlbGYucGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0
aCwgd2MuZ2V0X2FkbV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkKKworICBk
ZWYgdGVzdF9nZXRfaWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNl
KHdjLmdldF9pZ25vcmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVzdF9lbnRy
aWVzX3JlYWQoc2VsZik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNlbGYud2Ms
IFRydWUpCisgICAgICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdzJywgJ2Jy
YW5jaGVzJywgJ3RydW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93bihzZWxm
KToKKyAgICAgIHdjLmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJlZShzZWxm
LnBhdGgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3Vi
dmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1
bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCQorKysgc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2lu
Y2x1ZGUvYXByLnN3ZwkKQEAgLTE0NiwxNCArMTQ2LDI0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNoX3QgKiog
d2hpY2ggaXMgc3RvcmluZworICAgZGlyZW50IHZhbHVlcworKi8KKyV0eXBlbWFwKHB5dGhvbixp
bixudW1pbnB1dHM9MCkgYXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggPSBhcHJfaGFzaF90ICoqT1VU
UFVUOworJXR5cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVudD0idF9vdXRwdXRfaGVscGVyIikg
YXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggeworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIo
JHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9zd2lnX3B5X2NvbnZl
cnRfaGFzaCgqJDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNXSUdUWVBFX3Bfc3ZuX2RpcmVudF90LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsKK30KKworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgIGNyZWF0ZSBhbiBPVVRQVVQgYXJndW1lbnQgZGVmbiBmb3IgYW4gYXBy
X2hhc2hfdCAqKiB3aGljaCBpcyBzdG9yaW5nCiAgICBwcm9wZXJ0eSB2YWx1ZXMKICovCiAKICV0
eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgYXByX2hhc2hfdCAqKlBST1BIQVNIID0gYXBy
X2hhc2hfdCAqKk9VVFBVVDsKLSV0eXBlbWFwKHB5dGhvbixhcmdvdXQpIGFwcl9oYXNoX3QgKipQ
Uk9QSEFTSCB7Ci0gICAgLyogdG9zcyBwcmlvciByZXN1bHQsIGdldCBuZXcgcmVzdWx0IGZyb20g
dGhlIGhhc2ggKi8KLSAgICBQeV9ERUNSRUYoJHJlc3VsdCk7Ci0gICAgJHJlc3VsdCA9IHN2bl9z
d2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoKiQxKTsKKyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJh
Z21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7CisgICAgJHJl
c3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBzdm5fc3dpZ19weV9wcm9waGFzaF90b19k
aWN0KCokMSkpOwogfQogCiAldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgYXByX2hhc2hf
dCAqKlBST1BIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKCj09PSBtb2RpZmllZCBmaWxlICdz
dWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9hcHIuc3dnJwotLS0gc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3ZwkKKysrIHN1YnZlcnNpb24v
YmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cJCkBAIC0xMTIsNiArMTEyLDI4IEBA
CiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0dHIoc2Vs
ZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAK
KyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBi
eSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAg
ICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihz
ZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5l
LiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUg
YWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQor
ICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBu
b3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9y
ZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAg
ICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293
bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVk
JyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0
dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYp
OgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2Vs
Zi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVm
c1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1dG9tYXRp
Y2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgoKPT09IG1vZGlmaWVk
IGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cnCi0t
LSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCQorKysgc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwkKQEAgLTQzMCw2ICs0
MzAsMTIgQEAKICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBf
Z2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwogfTsKIAorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2
bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQorewor
ICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQyID0gKHZvaWQgKikkaW5w
dXQ7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBDYWxsYmFjazogc3ZuX2NhbmNlbF9mdW5j
X3QKICovCkBAIC00OTMsNiArNDk5LDQxIEBACiAgICQxID0gc3ZuX3N3aWdfcmJfbWFrZV9zdHJl
YW0oJGlucHV0KTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX2Nv
bW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEg
PSBzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2s7CisgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9
CisjZW5kaWYKKworI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX2NvbW1pdF9j
YWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5f
c3dpZ19weV9jb21taXRfY2FsbGJhY2s7CisgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisjZW5k
aWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE1hcHBlciB0byBhdXRvbWF0aWNhbGx5IHR1cm4g
UHl0aG9uIG9iamVjdHMgaW50byB2b2lkKiBiYXRvbnMgb24gYXNzaWdubWVudAorKi8KKworI2lm
ZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSB2b2lkICpQWV9BU19WT0lEIChQeU9iamVjdCAq
bmV3UmVmKSB7CisgIG5ld1JlZiA9ICRpbnB1dDsKKyAgaWYgKCRpbnB1dCA9PSBQeV9Ob25lKSB7
CisgICAgJDEgPSBuZXdSZWYgPSBOVUxMOworICB9IGVsc2UgeworICAgIG5ld1JlZiA9ICRpbnB1
dDsKKyAgICAkMSA9ICh2b2lkICopJGlucHV0OworICB9CisgIGlmIChzdm5fc3dpZ19weV9wb29s
X3NldF9vd25lZF9yZWYob2JqMCwgKFB5T2JqZWN0ICopYXJnMS0+JDFfbmFtZSwgbmV3UmVmKSkg
eworICAgIFNXSUdfZmFpbDsKKyAgfQorfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg
ICBXcmFwIHRoZSBkaWdlc3Qgb3V0cHV0IGZvciBmdW5jdGlvbnMgcG9wdWxhdGluZyBkaWdlc3Rz
LgogKi8KCj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u
L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMnCi0tLSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3
aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMJCisrKyBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMJCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSA8YXByX3BvcnRhYmxlLmg+CiAjaW5jbHVkZSA8YXByX3RocmVh
ZF9wcm9jLmg+CiAKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCiAjaW5jbHVkZSAic3ZuX3N0cmlu
Zy5oIgogI2luY2x1ZGUgInN2bl9vcHQuaCIKICNpbmNsdWRlICJzdm5fZGVsdGEuaCIKQEAgLTQ4
NSw2ICs0ODYsNTEgQEAKICAgcmV0dXJuIGNvbnZlcnRfaGFzaChoYXNoLCBjb252ZXJ0X3N2bl9z
dHJpbmdfdCwgTlVMTCwgTlVMTCk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqcHJvcGFycmF5X3Rv
X2RpY3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICphcnJheSkKK3sKKyAgICBQeU9iamVjdCAq
ZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICBpbnQgaTsKKworICAgIGlmIChkaWN0ID09IE5VTEwp
CisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7
ICsraSkKKyAgICAgIHsKKyAgICAgICAgc3ZuX3Byb3BfdCBwcm9wOworICAgICAgICBQeU9iamVj
dCAqcHlfa2V5LCAqcHlfdmFsdWU7CisKKyAgICAgICAgcHJvcCA9IEFQUl9BUlJBWV9JRFgoYXJy
YXksIGksIHN2bl9wcm9wX3QpOworCisgICAgICAgIHB5X2tleSA9IFB5U3RyaW5nX0Zyb21TdHJp
bmcocHJvcC5uYW1lKTsKKyAgICAgICAgaWYgKHB5X2tleSA9PSBOVUxMKQorICAgICAgICAgIGdv
dG8gZXJyb3I7CisKKyAgICAgICAgaWYgKHByb3AudmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7
CisgICAgICAgICAgICAgcHlfdmFsdWUgPSBQeV9Ob25lOworICAgICAgICAgICAgIFB5X0lOQ1JF
RihQeV9Ob25lKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAg
ICAgICAgICAgcHlfdmFsdWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgodm9pZCAqKXBy
b3AudmFsdWUtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wLnZhbHVlLT5sZW4pOworICAgICAgICAgICAgIGlmIChweV92YWx1ZSA9
PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAg
ICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAg
IFB5RGljdF9TZXRJdGVtKGRpY3QsIHB5X2tleSwgcHlfdmFsdWUpOworICAgIH0KKworICAgIHJl
dHVybiBkaWN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4g
TlVMTDsKKworfQorCiAKIFB5T2JqZWN0ICpzdm5fc3dpZ19weV9sb2NhdGlvbmhhc2hfdG9fZGlj
dChhcHJfaGFzaF90ICpoYXNoKQogewpAQCAtNTUwLDYgKzU5Niw5IEBACiBERUNMQVJFX1NXSUdf
Q09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9S
KGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0
X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGluZm8sIHN2bl9pbmZvX2R1cCkK
K0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRfaW5mbywgc3ZuX2NvbW1pdF9pbmZvX2R1
cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19ub3RpZnksIHN2bl93Y19kdXBfbm90aWZ5
KQogCiBzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9nX2NoYW5nZWRfcGF0aCh2b2lkICp2YWx1
ZSwgdm9pZCAqY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UHlPYmplY3QgKnB5X3Bvb2wpCkBAIC0xNTA2LDYgKzE1NTUsNDEgQEAKIH0KIAogCit2b2lkIHN2
bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u
ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f
Tk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9u
ZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPJk8mKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jfd2Nfbm90aWZ5LCBub3RpZnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp
ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi
ZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg
ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg
ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFj
ZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisK
KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKIHZvaWQgc3ZuX3N3aWdfcHlf
c3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0
dXNfdCAqc3RhdHVzKQpAQCAtMTgxNCw2ICsxODk4LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAK
K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9u
OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S
OworIAorICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZv
LCBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv
b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlf
Tm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUi
KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxl
YXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3
aWdfcHlfY2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGlu
ZV9ubywKQEAgLTIxMDgsMyArMjIyNCwzMjMgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJu
IGVycjsKIH0KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9j
YWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpw
eV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJhY2tzKGNh
bGxiYWNrcywgcG9vbCk7CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9z
dm5fZXhjZXB0aW9uKGVycik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyAgKmJhdG9uID0g
cHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxi
YWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2Jq
ZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3Jf
dCAqZXJyID0gU1ZOX05PX0VSUk9SOworIAorICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChy
ZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z
d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs
bEZ1bmN0aW9uKHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNoYXIgKikiTyZPJiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg
ICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNr
X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK
KyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVy
cjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5fcmV2
bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRv
bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJP
UjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcmV2aXNpb24sIGRhdGUsIGF1
dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy
cm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25l
KQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOwor
ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf
cHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19w
eV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJh
dG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg
ICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90
ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5k
bGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9i
YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZz
LAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAq
aGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0LCAqcHlfcmV2X3Byb3BzID0gTlVM
TCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VS
Uk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAoaGFuZGxlciA9PSBQeV9Ob25lKSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QocmV2
X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9
IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAqIik7CisgICAgICBnb3RvIGVycm9y
OworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFycmF5X3RvX2RpY3QocHJvcF9kaWZm
cyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSB0
eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFkZXJfdCAqIik7CisgICAgICBnb3Rv
IGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbiho
YW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJz
bE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCByZXYs
IHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg
ICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9y
ZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8qIEZJWE1FOiBTdXBwb3J0IHJldHVy
bmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAgICogc2V0IGRlbHRhX2hhbmRsZXIg
YW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFuZGxlciA9IE5VTEw7CisgICAgICAq
ZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgfQor
CitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9wcyk7CisgIFB5X1hERUNSRUYocHlf
cHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0
dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9zZXRfcGF0aCh2b2lk
ICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAq
ZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0
b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIg
PT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2Fj
cXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw
eV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop
InNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop
InNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCByZXZp
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2VtcHR5LCBs
b2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9w
b29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRp
b25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsK
KyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg
fQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv
Y2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVy
X2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3Qg
KnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRl
ciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19F
UlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3Vs
dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0aCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxi
YWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05v
bmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v
bmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3Jl
bGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisgICAgCitzdGF0aWMgc3ZuX2Vy
cm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu
X3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29s
ZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAq
cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy
ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS
Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAg
eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNl
IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRf
cmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7
CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30K
Kworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5pc2hfcmVwb3J0KHZvaWQgKnJlcG9y
dF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v
bCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAq
cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy
ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS
Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBvcnQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJl
c3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5f
ZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBz
dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0
aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAg
c3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0
ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwg
fHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisg
IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmpl
Y3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh
bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5
X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90
IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5
X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN2bl9yYV9y
ZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsKKyAgICByZXBvcnRlcl9zZXRfcGF0
aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICByZXBvcnRlcl9saW5rX3BhdGgsCisg
ICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBvcnRlcl9hYm9ydF9yZXBvcnQKK307
Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJz
dm5fc3dpZ19weS9zd2lndXRpbF9weS5oJwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5
dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oCQorKysgc3VidmVyc2lvbi9iaW5kaW5n
cy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oCQpAQCAtMTk4LDYgKzE5
OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl
X3QgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90
IHJldmlzaW9uKTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5
X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhl
Y3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KICAgIHZpYSB0aGUgYmF0
b24gYXJndW1lbnQgKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVApAQCAtMjQ5LDYgKzI1NCwx
MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
c2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv
b2wpOwogCisvKiB0aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVu
Yyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIHRodW5r
ZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAog
c3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQg
KmJhdG9uLApAQCAtMzAzLDYgKzMxNSwzOCBAQAogICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs
CiAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9p
ZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipj
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJh
Y2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lH
X1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFj
ayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJ
TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1
bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2
LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAg
ICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBh
cHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29u
c3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKPT09IG1vZGlmaWVkIGZpbGUg
J3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weScKLS0tIHN1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkKKysrIHN1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkKQEAgLTEsNiArMSw2
IEBACiBpbXBvcnQgc3lzLCBvcwogYmluZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBd
KQotc3lzLnBhdGhbMDowXSA9IFsgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5nZXRjd2Qo
KSwgXAorc3lzLnBhdGhbMDowXSA9IFsgYmluZGlyLCBvcy5nZXRjd2QoKSwgIiVzLy5saWJzIiAl
IG9zLmdldGN3ZCgpLCBcCiAgICAgICAgICAgICAgICAgICAiJXMvLi4iICUgYmluZGlyLCAiJXMv
Li4vLmxpYnMiICUgYmluZGlyIF0KIAogIyBPU2VzIHdpdGhvdXQgUlBBVEggc3VwcG9ydCBhcmUg
Z29pbmcgdG8gaGF2ZSB0byBkbyB0aGluZ3MgaGVyZSB0byBtYWtlCkBAIC0xNyw2ICsxNyw5IEBA
CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwb29sCiBpbXBvcnQgcmVwb3NpdG9yeQoraW1wb3J0
IGNsaWVudAoraW1wb3J0IHJhCitpbXBvcnQgd2MKIGltcG9ydCB0cmFjLnZlcnNpb25jb250cm9s
LnRlc3RzCiAKICMgUnVuIGFsbCB0ZXN0cwpAQCAtMjQsNyArMjcsMTAgQEAKIGRlZiBzdWl0ZSgp
OgogICAiIiJSdW4gYWxsIHRlc3RzIiIiCiAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkK
KyAgc3VpdGUuYWRkVGVzdChjbGllbnQuc3VpdGUoKSkKICAgc3VpdGUuYWRkVGVzdChwb29sLnN1
aXRlKCkpCisgIHN1aXRlLmFkZFRlc3QocmEuc3VpdGUoKSkKKyAgc3VpdGUuYWRkVGVzdCh3Yy5z
dWl0ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHJlcG9zaXRvcnkuc3VpdGUoKSkKICAgc3VpdGUuYWRk
VGVzdCh0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN1aXRlKCkpOwogICByZXR1cm4gc3VpdGUK
Cj09PSBtb2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5p
JwotLS0gc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkKKysrIHN1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJCkBAIC0yNSw2ICsyNSw3IEBACiAjZW5kaWYK
IAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3RyYWludHMuaQogCiAlaW5jbHVk
ZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBjb3JlLmkKQEAgLTQ0LDYgKzQ1LDExIEBACiAgIHN2
bl9jbGllbnRfY3R4X3QgKioKIH07CiAKKyVhcHBseSBQb2ludGVyIE5PTk5VTEwgeyAKKyAgY29u
c3Qgc3ZuX29wdF9yZXZpc2lvbl90ICpyZXZpc2lvbiwKKyAgY29uc3Qgc3ZuX29wdF9yZXZpc2lv
bl90ICpwZWdfcmV2aXNpb24KK307CisKICVhcHBseSBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3Qg
KlNUUklOR0xJU1QgewogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqdGFyZ2V0cywKICAg
ICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmRpZmZfb3B0aW9ucwpAQCAtNjYsNiArNzIsMTYg
QEAKIAogI2lmZGVmIFNXSUdQWVRIT04KICVhcHBseSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RS
RUFNIHsgc3ZuX3N0cmVhbV90ICogfTsKKworLyogbWVtYmVycyBvZiBzdm5fY2xpZW50X2N0eF90
ICovCislYXBwbHkgdm9pZCAqUFlfQVNfVk9JRCB7CisgICAgdm9pZCAqbm90aWZ5X2JhdG9uLAor
ICAgIHZvaWQgKmxvZ19tc2dfYmF0b24sCisgICAgdm9pZCAqY2FuY2VsX2JhdG9uLAorICAgIHZv
aWQgKm5vdGlmeV9iYXRvbjIsCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIsCisgICAgdm9pZCAq
cHJvZ3Jlc3NfYmF0b24KK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwMCw2
ICsyMTYsMTggQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5faW5m
b19yZWNlaXZlcl90CisgICBzdm5fY2xpZW50X2luZm8oKQorKi8KKworJXR5cGVtYXAocHl0aG9u
LCBpbikgKHN2bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9pbmZvX3Jl
Y2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKworCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogICAgV2UgdXNlICdzdm5fd2Nfc3RhdHVzX3QgKicgaW4gc29tZSBjdXN0b20gY29k
ZSwgYnV0IGl0IGlzbid0IGluIHRoZQogICAgQVBJIGFueXdoZXJlLiBUaHVzLCBTV0lHIGRvZXNu
J3QgZ2VuZXJhdGUgYSB0eXBlbWFwIGVudHJ5IGZvciBpdC4gYnkKICAgIGFkZGluZyBhIHNpbXBs
ZSBkZWNsYXJhdGlvbiBoZXJlLCBTV0lHIHdpbGwgaW5zZXJ0IGEgbmFtZSBmb3IgaXQuCkBAIC00
ODMsNiArNTExLDE1IEBACiAlaW5jbHVkZSBzdm5fdGltZV9oLnN3ZwogJWluY2x1ZGUgc3ZuX2Ns
aWVudF9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRo
IGFjY2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBz
dm5fc3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRf
bG9nMl90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3dj
X25vdGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKwogI2lm
ZGVmIFNXSUdSVUJZCiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKCj09PSBtb2RpZmllZCBmaWxl
ICdzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmknCi0tLSBzdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJCisrKyBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3Zu
X2RlbHRhLmkJCkBAIC00Nyw3ICs0Nyw4IEBACiAgICAgY29uc3QgY2hhciAqZXJyb3JfaW5mbywK
ICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAogICAgIGNvbnN0IGNoYXIgKmNvcHlfcGF0
aCwKLSAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtCisgICAgY29uc3QgY2hhciAqYmFzZV9j
aGVja3N1bSwKKyAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtCiB9OwogCiAjaWZkZWYgU1dJ
R1BZVEhPTgoKPT09IG1vZGlmaWVkIGZpbGUgJ3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f
cmEuaScKLS0tIHN1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKKysrIHN1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiAl
aW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVpbmNsdWRlIHN2
bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTM5LDYgKzQwLDggQEAKICVpZ25vcmUg
c3ZuX3JhX2xvY2FsX2luaXQ7CiAlaWdub3JlIHN2bl9yYV9kYXZfaW5pdDsKIAorJWFwcGx5IFBv
aW50ZXIgTk9OTlVMTCB7IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNrcyB9OworCiAvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZpbmVkIGVsc2V3aGVy
ZQogKi8KQEAgLTQ4LDEzICs1MSwxNiBAQAogICAgIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAq
KnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCiAgICAgc3ZuX2RpcmVudF90ICoq
ZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisgICAgc3ZuX2xvY2tfdCAqKmxvY2ssCisg
ICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9OwogCiAlYXBwbHkgYXByX2hhc2hfdCAq
KlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXByX2hhc2hfdCAqKkRJ
UkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OwogCiAlYXBwbHkgY29uc3QgY2hhciAq
TUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQKKyAgICBjb25zdCBjaGFyICpj
b21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KIH07CiAKICVhcHBseSBhcHJfaGFz
aF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2ICsxMTgsMTEgQEAKICAgc3ZuX3N3aWdf
cmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9
CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3Ms
IAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9uKSB7CisgIHN2bl9z
d2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wp
OworfQorCiAldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3QgKmNvbmZpZyB7CiAgICAgJDEg
PSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190
ICoiLAogCQkJCQkgICBfZ2xvYmFsX3Bvb2wpOwpAQCAtMTM0LDYgKzE0NSwyMiBAQAogICAkMSA9
IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwgX2dsb2JhbF9wb29s
KTsKIH0KIAorI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX3JhX2ZpbGVfcmV2
X2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAgJDEgPSBzdm5f
c3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2b2lkICopJGlucHV0
OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKGNvbnN0IHN2
bl9yYV9yZXBvcnRlcjJfdCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRvbikKK3sKKyAgJDEg
PSAoc3ZuX3JhX3JlcG9ydGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIyOworICAkMiA9ICh2
b2lkICopJGlucHV0OworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICV7Cgo9
PT0gbW9kaWZpZWQgZmlsZSAnc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pJwotLS0g
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCQorKysgc3VidmVyc2lvbi9iaW5kaW5n
cy9zd2lnL3N2bl93Yy5pCQpAQCAtMTkxLDYgKzE5MSwyMCBAQAogICAkMSA9IHN2bl9zd2lnX3Ji
X2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwgcG9vbCk7CiB9CiAKKyNpZmRlZiBTV0lH
UFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApCisgICAgIGFwcl9hcnJheV9oZWFkZXJf
dCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApCit7CisgICQxID0gJnRlbXA7
Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0X291dHB1dF9oZWxwZXIiKQorICAgICBh
cHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworeworICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVs
cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9zd2lnX3B5X2FycmF5
X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIENhbGxi
YWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3ZuX2NsaWVudF9jdHhfdApAQCAtMjM3LDYg
KzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4g
Ki8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlm
eV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAgICQxID0gc3ZuX3N3aWdfcHlfbm90aWZ5
X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICov
Cit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3djX3N0YXR1c19mdW5jX3Qgc3RhdHVzX2Z1
bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9IHN2bl9zd2lnX3BsX3N0YXR1c19mdW5j
OwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KCj09PSBt
b2RpZmllZCBmaWxlICdzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMnCi0tLSBzdWJ2
ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMJCisrKyBzdWJ2ZXJzaW9uL2xpYnN2bl9yYV9z
dm4vY2xpZW50LmMJCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAgIGFwcl9wb29sX2Rl
c3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkKLSAgICB7Ci0gICAg
ICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFk
X2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyogUmVhZCB0aGUgcmVz
cG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBw
b29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9Cgo=
</contents>
</attachment>
<attachment href="http://librarian.demo.launchpad.net/3255644/python-fixes.patch">
<type>PATCH</type>
<title>Updated</title>
<mimetype>text/plain</mimetype>
<contents>ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l
dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNCAx
MzoyNTo1OS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv
bmYJMjAwNi0wNy0wNCAxMzoyNjozNC4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA
QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2
bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs
aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M
SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv
IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6
MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDQgMTM6MjY6MDQuMDAwMDAw
MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo
IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt
aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK
KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o
YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh
c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo
X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h
cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo
X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB
U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo
YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w
eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50
PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg
PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq
JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ
Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x
L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3
ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w
cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2
ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h
cHIuc3dnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy
LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0
dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg
ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl
cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp
OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk
X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug
LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1
Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h
bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg
ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v
d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6
CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt
b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg
J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl
eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg
aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du
ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1
dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O
dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94
eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDQg
MTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz
c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O
CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl
bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0
IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx
dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0
aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor
YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX
SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl
YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl
ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg
ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz
ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv
ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2
YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g
c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz
ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52
YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm
IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK
KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t
YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv
b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw
b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7
CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy
ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor
ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl
bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm
Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0
aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw
cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh
dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj
YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl
dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp
Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg
ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor
ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh
bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k
IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g
aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs
Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs
aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh
ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi
IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi
CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh
cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl
ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s
LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5
LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg
ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp
ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w
b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k
ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj
ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj
YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs
aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg
ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu
X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg
ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg
YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp
ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l
ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi
IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u
dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v
bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug
Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293
bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg
c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm
c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl
Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor
ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz
ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz
IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293
bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09
IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm
IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg
cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg
ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg
ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg
PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0
IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg
aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg
ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug
ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl
YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr
cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk
ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f
cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw
b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK
KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl
bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz
IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy
KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo
c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor
ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv
ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K
KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv
bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt
MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDQgMTM6
MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg
Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh
bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t
aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2
MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl
ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj
aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh
bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH
UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p
ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr
OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p
ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h
cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk
aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM
TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp
bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ
eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K
K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs
bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq
LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5
T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5
X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm
ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln
X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu
ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n
IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz
dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl
cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy
c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz
LnN3Zy5vcmlnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs
Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu
X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg
Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz
IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg
dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu
b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl
IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh
ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1
bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4
YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu
ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5
cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu
c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl
IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO
b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0
eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs
IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq
Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9
CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk
KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy
dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp
IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h
cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq
T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg
IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f
c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ
dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl
bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu
dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB
UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor
JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ
VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw
cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf
Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh
cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw
IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt
YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor
I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF
X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF
X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz
ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw
KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy
Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K
KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg
c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl
dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g
TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w
dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg
ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB
UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT
dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo
Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK
KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq
KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg
eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds
b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP
X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg
X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf
VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n
KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm
aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg
bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl
ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs
bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt
YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0
KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK
KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl
bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5
IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K
KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM
TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP
Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m
YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v
bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx
KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF
cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu
ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg
IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0
LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl
c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l
d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx
LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp
IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor
ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR
bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw
IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg
YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0
eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz
aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p
bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg
PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf
dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw
KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90
ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx
KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk
MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7
CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G
TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn
bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91
dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo
aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv
IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u
LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry
aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor
ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H
RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ
VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg
JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw
IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg
ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy
b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo
YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l
bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy
ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp
bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg
c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i
amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg
ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U
eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX
SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp
bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo
cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg
ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf
cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp
IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv
YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor
eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf
cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf
cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5
VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm
JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192
YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0
LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy
ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg
ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp
bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg
IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp
ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor
ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi
cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9
IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z
d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0
ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor
ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2
bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7
CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s
ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs
X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h
cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg
ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ
TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK
KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5
X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs
IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w
b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s
ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw
KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg
YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw
cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg
YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w
b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv
b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4
LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn
YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz
dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor
ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm
LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp
OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf
c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf
dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z
d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji
X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK
KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg
ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor
JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg
IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj
ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj
b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5
LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K
KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl
aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f
cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz
c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg
ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l
c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu
X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2
b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh
bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr
OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg
ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu
KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg
eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g
KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh
bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh
bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z
d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf
YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo
cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi
YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy
ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog
c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs
X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3
aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl
IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh
bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu
Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg
X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh
bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2
bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk
MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y
Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq
LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu
Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t
YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf
cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s
KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk
ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv
cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h
cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2
bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl
bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry
ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f
dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh
cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor
ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr
OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z
d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw
ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf
YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2
b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp
bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p
Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop
JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0
b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln
bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf
Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w
dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg
ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo
c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx
X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv
cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu
ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la
RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy
Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO
WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5
U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf
cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl
c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w
b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw
ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs
cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t
ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k
NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs
NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0
cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw
ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz
dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg
c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq
LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl
c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg
QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu
ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7
CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs
eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK
K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld
IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK
KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl
dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8
fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm
IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f
b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p
ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s
aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv
bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg
fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT
dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp
ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg
ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0
cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g
c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu
cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y
ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ
UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2
aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu
X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg
ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp
bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j
cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g
J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp
bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg
KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg
ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH
X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0
ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g
b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1
bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2
bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl
djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp
CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5
cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o
YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1
dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o
ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny
aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor
JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy
X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp
cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok
MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s
IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7
CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh
c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln
X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi
KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2
bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl
dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo
X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs
IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1
bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf
dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor
JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z
Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs
IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq
bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh
X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh
cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1
YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3
aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor
CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7
CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl
YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog
UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh
bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt
YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg
KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm
YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs
b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl
IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz
IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk
ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm
CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl
X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg
Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0
eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7
CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg
ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu
X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg
YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg
PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz
aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi
CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl
bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf
eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk
ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2
ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf
cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t
MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln
dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz
aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln
X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNCAxMzoyNjo0OS4wMDAwMDAwMDAgKzAxMDAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf
dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f
c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA
QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh
ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp
IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg
aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf
cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro
cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90
aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh
IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf
cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk
a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg
dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2
YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs
OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog
c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg
cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd
ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl
bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj
aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g
InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh
cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s
KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf
c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp
CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9
IHB5X3Bvb2w7CkBAIC0xNDcsMjIgKzE1Miw3MSBAQAogewogICBQeU9iamVjdCAqcmVzdWx0Owog
Ci0gIGlmICgqcHJveHkgIT0gTlVMTCkgewotICAgIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAg
IGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKCpwcm94eSwgc2V0UGFyZW50UG9vbCkpIHsKLSAg
ICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2ws
IGVtcHR5VHVwbGUpOwotICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgICAgICBy
ZXR1cm4gMTsKKyAgaWYgKCpwcm94eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygq
cHJveHksIHNldFBhcmVudFBvb2wpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1
bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBs
ZSk7CisgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2Jq
ZWN0VHVwbGUsICpwcm94eSk7Ci0gICAgICBQeV9ERUNSRUYoKnByb3h5KTsKLSAgICAgICpwcm94
eSA9IHJlc3VsdDsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5
T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAg
ICAgICAgUHlfREVDUkVGKCpwcm94eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAg
ICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29s
IG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICog
cG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICov
CitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAg
UHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBh
cmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmco
cHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOwogICAg
IH0KLSAgfQorICByZXR1cm4gcmVzdWx0OworfQogCisvKiBDaGFuZ2UgYW4gJ293bmVkIHJlZmVy
ZW5jZScgYWxsb2NhdGVkIGluIGEgcG9vbCBmcm9tIG9sZFJlZiB0byBuZXdSZWYuCisgKiBJZiBv
bGRSZWYgaXMgbm9uLU5VTEwgYW5kIHByZXNlbnQgaW4gdGhlIHBhcmVudCBwb29sIG9mIHByb3h5
LCBpdCBpcyByZW1vdmVkLgorICovCitpbnQgc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVm
KFB5T2JqZWN0ICpwcm94eSwgUHlPYmplY3QgKm9sZFJlZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ld1JlZikKK3sKKyAgUHlPYmplY3QgKnRlbXA7Cisg
IFB5T2JqZWN0ICpweV9wb29sID0gcHJveHlfZ2V0X3Bvb2wocHJveHkpOworCisgIGlmIChvbGRS
ZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9w
b29sLCByZW1vdmVPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG9sZFJlZik7CisgICAgICBpZiAodGVt
cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVD
UkVGKHRlbXApOworICAgIH0KKyAgaWYgKG5ld1JlZiAhPSBOVUxMKQorICAgIHsKKyAgICAgIHRl
bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3Bvb2wsIGFkZE93bmVkUmVmLCBvYmplY3RUdXBs
ZSwgbmV3UmVmKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOwor
ICAgICAgZWxzZQorICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgfQogICByZXR1cm4gMDsK
IH0KIAwKQEAgLTE3MCwzMiArMjI0LDM0IEBACiAjZGVmaW5lIHN2bl9zd2lnX1R5cGVRdWVyeSh4
KSBTV0lHX1R5cGVRdWVyeSh4KQogCiAvKiogV3JhcHBlciBmb3IgU1dJR19OZXdQb2ludGVyT2Jq
ICovCi1QeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9iaih2b2lkICpvYmosIHN3aWdfdHlw
ZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZvaWQgKm9i
aiwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQeU9iamVjdCAqcG9vbCkKIHsKICAgUHlPYmplY3QgKnByb3h5ID0gU1dJR19OZXdQb2ludGVy
T2JqKG9iaiwgdHlwZSwgMCk7CiAKLSAgaWYgKHByb3h5ID09IE5VTEwpIHsKKyAgaWYgKHByb3h5
ID09IE5VTEwpCiAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmIChwcm94eV9zZXRfcG9v
bCgmcHJveHksIHBvb2wpKSB7Ci0gICAgUHlfREVDUkVGKHByb3h5KTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQorCisgIGlmIChwcm94eV9zZXRfcG9vbCgmcHJveHksIHBvb2wpKQorICAgIHsKKyAg
ICAgIFB5X0RFQ1JFRihwcm94eSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgcmV0
dXJuIHByb3h5OwogfQogCiAvKiogc3ZuX3N3aWdfTmV3UG9pbnRlck9iaiwgZXhjZXB0IGEgc3Ry
aW5nIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgKi8KLXN0YXRpYyBQeU9iamVjdCAqc3Zu
X3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsIAor
c3RhdGljIFB5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKHZvaWQgKnB0ciwg
Y29uc3QgY2hhciAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKIHsKICAgc3dpZ190eXBlX2luZm8gKnR5cGVpbmZv
ID0gc3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpOwotICBpZiAodHlwZWluZm8gPT0gTlVMTCkgewot
ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJl
ZCB0eXBlb2JqZWN0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKHR5cGVpbmZvID09
IE5VTEwpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkNh
bm5vdCBmaW5kIHJlcXVpcmVkIHR5cGVvYmplY3QiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKwogICAvKiAjIyMgY2FjaGUgdGhlIHN3aWdfdHlwZV9pbmZvIGF0IHNvbWUgcG9pbnQ/ICov
CiAgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHB0ciwgdHlwZWluZm8sIHB5X3Bvb2wp
OwogfQpAQCAtMjAzLDIwICsyNTksMjEgQEAKIC8qKiBXcmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQ
dHIgKi8KIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyKFB5T2JqZWN0ICppbnB1dCwgdm9pZCAqKm9i
aiwgc3dpZ190eXBlX2luZm8gKnR5cGUpCiB7Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5n
KGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwotICAgIGlmIChyZXN1
bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihyZXN1
bHQpOwotICB9Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKSB7
Ci0gICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVw
bGUpOwotICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gMTsKKyAgaWYgKFB5
T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQ
eU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQs
IGVtcHR5VHVwbGUpOworICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4g
MTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBQeV9ERUNSRUYoaW5wdXQp
OwotICB9CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAg
IHsKKyAgICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0
eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICAgIFB5X0RFQ1JFRihpbnB1dCk7CisgICAgfQorCiAgIHJldHVybiBTV0lHX0NvbnZlcnRQdHIo
aW5wdXQsIG9iaiwgdHlwZSwgU1dJR19QT0lOVEVSX0VYQ0VQVElPTiB8IDApOwogfQogCkBAIC0y
MzEsMzEgKzI4OCwyOCBAQAogdm9pZCAqc3ZuX3N3aWdfTXVzdEdldFB0cih2b2lkICppbnB1dCwg
c3dpZ190eXBlX2luZm8gKnR5cGUsIGludCBhcmdudW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFB5T2JqZWN0ICoqcHlfcG9vbCkKIHsKLSAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
aW5wdXQsIGFzc2VydFZhbGlkKSkgewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9D
YWxsTWV0aG9kKGlucHV0LCBhc3NlcnRWYWxpZCwgZW1wdHlUdXBsZSk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJT
dHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwor
ICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5
X0RFQ1JFRihyZXN1bHQpOwogICAgIH0KLSAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBp
ZiAocHlfcG9vbCAhPSBOVUxMKSB7Ci0gICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5w
dXQsIHBhcmVudFBvb2wpKSB7Ci0gICAgICAqcHlfcG9vbCA9IFB5T2JqZWN0X0dldEF0dHJTdHJp
bmcoaW5wdXQsIHBhcmVudFBvb2wpOwotICAgICAgUHlfREVDUkVGKCpweV9wb29sKTsKLSAgICB9
IGVsc2UgewotICAgICAgKnB5X3Bvb2wgPSBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2w7Ci0gICAg
fQotICB9Ci0gIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKSB7Ci0g
ICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUp
OwotICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKKworICBpZiAo
cHlfcG9vbCAhPSBOVUxMKQorICAgICpweV9wb29sID0gcHJveHlfZ2V0X3Bvb2woKFB5T2JqZWN0
ICopIGlucHV0KTsKKworICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwgdW53cmFw
KSkKKyAgICB7CisgICAgICBpbnB1dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIHVud3Jh
cCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAoaW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopIGlucHV0KTsKICAgICB9Ci0gICAg
UHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJR19NdXN0
R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAwKTsK
IH0KLSAgCisKIAwKIC8qKiogQ3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gc3R1ZmZzLiAqKiov
CiAKQEAgLTI4Myw3ICszMzcsNyBAQAogfQogCiB2b2lkIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRp
b24oc3ZuX2Vycm9yX3QgKmVycikKLXsgCit7CiAgIFB5T2JqZWN0ICpleGNfb2IsICphcHJfZXJy
X29iOwogCiAgIGlmIChlcnIgPT0gTlVMTCkKQEAgLTI5NSw3ICszNDksNyBAQAogICAgIHJldHVy
bjsKIAogICAvKiBJbnN0YW50aWF0ZSBhIFN1YnZlcnNpb25FeGNlcHRpb24gb2JqZWN0LiAqLwot
ICBleGNfb2IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oU3VidmVyc2lvbkV4Y2VwdGlvbiwgKGNo
YXIgKikic08iLCAKKyAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F
eGNlcHRpb24sIChjaGFyICopInNPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVyci0+bWVzc2FnZSwgYXByX2Vycl9vYik7CiAgIGlmIChleGNfb2IgPT0gTlVMTCkKICAgICB7
CkBAIC0zNDAsNyArMzk0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9mc19yb290KHN2
bl9mc19yb290X3QgKnB0ciwgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHJldHVybiBzdm5fc3dp
Z19OZXdQb2ludGVyT2JqU3RyaW5nKHB0ciwgInN2bl9mc19yb290X3QgKiIsIHB5X3Bvb2wpOwot
fSAKK30KIC8qKiovCiAKIC8qIENvbnZlcnNpb24gZnJvbSBQeXRob24gc2luZ2xlIG9iamVjdHMg
KG5vdCBoYXNoZXMvbGlzdHMvZXRjLikgdG8KQEAgLTM0OSwyMCArNDAzLDIyIEBACiB7CiAgIGlm
IChvYiA9PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwotICBpZiAoISBQeVN0cmluZ19DaGVj
ayhvYikpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3Ry
aW5nIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2Ip
KQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBz
dHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgcmV0dXJuIGFwcl9wc3RyZHVw
KHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhvYikpOwogfQogc3RhdGljIHN2bl9zdHJpbmdfdCAq
bWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQog
ewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEgUHlTdHJp
bmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5v
dCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3RyaW5nX0No
ZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi
bm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVybiBzdm5f
c3RyaW5nX2NyZWF0ZShQeVN0cmluZ19BU19TVFJJTkcob2IpLCBwb29sKTsKIH0KIApAQCAtMzgx
LDI1ICs0MzcsMjggQEAKICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVM
TDsKIAotICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0g
YXByX2hhc2hfbmV4dChoaSkpIHsKKyAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwg
aGFzaCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKQorICAgICAgewogICAgICAgICBjb25z
dCB2b2lkICprZXk7CiAgICAgICAgIHZvaWQgKnZhbDsKICAgICAgICAgUHlPYmplY3QgKnZhbHVl
OwogCiAgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrZXksIE5VTEwsICZ2YWwpOwogICAgICAg
ICB2YWx1ZSA9ICgqY29udmVydGVyX2Z1bmMpKHZhbCwgY3R4LCBweV9wb29sKTsKLSAgICAgICAg
aWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAg
ICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIC8qICMjIyBnb3R0YSBjYXN0IHRo
aXMgdGhpbmcgY3V6IFB5dGhvbiBkb2Vzbid0IHVzZSAiY29uc3QiICovCi0gICAgICAgIGlmIChQ
eURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUpID09IC0xKSB7Cisg
ICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUp
ID09IC0xKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAg
ICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAg
ICAgfQorICAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB9CisgICAg
ICB9CiAKICAgICByZXR1cm4gZGljdDsKIH0KQEAgLTQ0Niw3ICs1MDUsNyBAQAogICAgICAgdXJs
ID0gUHlfTm9uZTsKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9Ci0gICAgICAgIAor
CiAgIGlmIChpdGVtLT5jb3B5ZnJvbV91cmwpCiAgICAgY2ZfdXJsID0gUHlTdHJpbmdfRnJvbVN0
cmluZyhpdGVtLT5jb3B5ZnJvbV91cmwpOwogICBlbHNlCkBAIC00NTQsNyArNTEzLDcgQEAKICAg
ICAgIGNmX3VybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgfQot
ICAgICAgICAKKwogICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+a2luZCk7CiAgIHJldiA9
IFB5SW50X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKICAgc3RhdGUgPSBQeUludF9Gcm9tTG9u
ZyhpdGVtLT5zdGF0ZV9mbGFncyk7CkBAIC00ODUsNiArNTQ0LDUyIEBACiAgIHJldHVybiBjb252
ZXJ0X2hhc2goaGFzaCwgY29udmVydF9zdm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOwogfQogCitz
dGF0aWMgUHlPYmplY3QgKnByb3BhcnJheV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJf
dCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50
IGk7CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBm
b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9w
cm9wX3QgcHJvcDsKKyAgICAgICAgUHlPYmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAg
ICAgIHByb3AgPSBBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAg
ICBweV9rZXkgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChw
eV9rZXkgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9w
LnZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlf
Tm9uZTsKKyAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdf
RnJvbVN0cmluZ0FuZFNpemUoKHZvaWQgKilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsK
KyAgICAgICAgICAgICBpZiAocHlfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3Rv
IGVycm9yOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3Rf
U2V0SXRlbShkaWN0LCBweV9rZXksIHB5X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlj
dDsKKworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisK
K30KKwogCiBQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hh
c2hfdCAqaGFzaCkKIHsKQEAgLTQ5Niw3ICs2MDEsNyBAQAogICAgIGlmIChkaWN0ID09IE5VTEwp
CiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZm9yIChoaSA9IGFwcl9oYXNoX2ZpcnN0KE5V
TEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkgCisgICAgZm9yIChoaSA9IGFw
cl9oYXNoX2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKICAg
ICAgIHsKICAgICAgICAgY29uc3Qgdm9pZCAqazsKICAgICAgICAgdm9pZCAqdjsKQEAgLTUxMCwx
MiArNjE1LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICB9CiAgICAg
ICAgIHZhbHVlID0gUHlTdHJpbmdfRnJvbVN0cmluZygoY2hhciAqKXYpOwotICAgICAgICBpZiAo
dmFsdWUgPT0gTlVMTCkgeworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7
CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0
KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeURp
Y3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSA9PSAtMSkgCisgICAgICAgICAgfQorICAgICAg
ICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgICAg
ewogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihk
aWN0KTsKQEAgLTUyNywxMSArNjMzLDExIEBACiAgICAgcmV0dXJuIGRpY3Q7CiB9CiAKLVB5T2Jq
ZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBl
X2luZm8gKnR5cGUsIAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2NvbnZlcnRfaGFzaChhcHJfaGFz
aF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHJldHVybiBjb252ZXJ0X2hhc2go
aGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwgcHlfcG9vbCk7Ci19ICAKK30KIAogI2Rl
ZmluZSBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IodHlwZSwgZHVwKSBcCiBzdGF0aWMgUHlPYmpl
Y3QgKm1ha2Vfb2JfIyN0eXBlKHZvaWQgKnZhbHVlKSBcCkBAIC01NDMsMTMgKzY0OSwxNiBAQAog
ICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhuZXdfdmFsdWUsICJzdm5fIiAj
dHlwZSAiX3QgKiIsIFwKICAgICAgIG5ld19weV9wb29sKTsgXAogfQotIAorCiBERUNMQVJFX1NX
SUdfQ09OU1RSVUNUT1IodHhkZWx0YV93aW5kb3csIHN2bl90eGRlbHRhX3dpbmRvd19kdXApCiBE
RUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IobG9nX2NoYW5nZWRfcGF0aCwgc3ZuX2xvZ19jaGFuZ2Vk
X3BhdGhfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX3N0YXR1cywgc3ZuX3djX2R1
cF9zdGF0dXMpCiBERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQog
REVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAg
c3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVD
VE9SKGluZm8sIHN2bl9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRf
aW5mbywgc3ZuX2NvbW1pdF9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19u
b3RpZnksIHN2bl93Y19kdXBfbm90aWZ5KQogCiBzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9n
X2NoYW5nZWRfcGF0aCh2b2lkICp2YWx1ZSwgdm9pZCAqY3R4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCkBAIC01NjIsMTQgKzY3
MSwxNSBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBjaGFyICpz
OwogCi0gICAgd2hpbGUgKChzID0gKnN0cmluZ3MrKykgIT0gTlVMTCkgeworICAgIHdoaWxlICgo
cyA9ICpzdHJpbmdzKyspICE9IE5VTEwpCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvYiA9
IFB5U3RyaW5nX0Zyb21TdHJpbmcocyk7CiAKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg
ICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYikg
PT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KKyAgICAgIH0KIAogICAgIHJl
dHVybiBsaXN0OwogCkBAIC01ODQsMTYgKzY5NCwxNyBAQAogICBhcHJfaGFzaF90ICpoYXNoOwog
ICBQeU9iamVjdCAqa2V5czsKICAgaW50IGksIG51bV9rZXlzOwotICAKKwogICBpZiAoZGljdCA9
PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwogCi0gIGlmICghUHlEaWN0X0NoZWNrKGRpY3Qp
KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25h
cnkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkK
KyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGlj
dGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gIGhhc2ggPSBhcHJfaGFz
aF9tYWtlKHBvb2wpOyAgCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOwogICBrZXlzID0g
UHlEaWN0X0tleXMoZGljdCk7CiAgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7CiAgIGZv
ciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQpAQCAtNjA2LDcgKzcxNyw3IEBACiAgICAgICBQ
eV9ERUNSRUYodmFsdWUpOwogICAgICAgaWYgKCEgKHByb3BuYW1lICYmIHByb3B2YWwpKQogICAg
ICAgICB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgCisgICAg
ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKICAgICAg
ICAgICBQeV9ERUNSRUYoa2V5cyk7CiAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02MjgsMTIg
KzczOSwxMyBAQAogICBpZiAoZGljdCA9PSBQeV9Ob25lKQogICAgIHJldHVybiBOVUxMOwogCi0g
IGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5
cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBp
ZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF
eGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQogCi0gIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOyAgCisgIGhhc2ggPSBhcHJfaGFz
aF9tYWtlKHBvb2wpOwogICBrZXlzID0gUHlEaWN0X0tleXMoZGljdCk7CiAgIG51bV9rZXlzID0g
UHlMaXN0X1NpemUoa2V5cyk7CiAgIGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQpAQCAt
NjQ2LDcgKzc1OCw3IEBACiAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgaWYgKCEgKHBy
b3BuYW1lICYmIHByb3B2YWwpKQogICAgICAgICB7Ci0gICAgICAgICAgUHlFcnJfU2V0U3RyaW5n
KFB5RXhjX1R5cGVFcnJvciwgCisgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMg
YXJlbid0IHN0cmluZ3MiKTsKICAgICAgICAgICBQeV9ERUNSRUYoa2V5cyk7CiAgICAgICAgICAg
cmV0dXJuIE5VTEw7CkBAIC02NjQsMjcgKzc3NiwzMCBAQAogICAgIGludCB0YXJnbGVuOwogICAg
IGFwcl9hcnJheV9oZWFkZXJfdCAqdGVtcDsKIAotICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhz
b3VyY2UpKSB7CisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAgICB7CiAg
ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIp
OwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgICB9CiAgICAgdGFyZ2xlbiA9IFB5
U2VxdWVuY2VfTGVuZ3RoKHNvdXJjZSk7CiAgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBvb2ws
IHRhcmdsZW4sIHNpemVvZihjb25zdCBjaGFyICopKTsKICAgICAvKiBBUFJfQVJSQVlfSURYIGRv
ZXNuJ3QgYWN0dWFsbHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CiAgICAgICAgKGxp
a2UsIHNheSwgYXByX2FycmF5X3B1c2ggd291bGQpLiAqLwogICAgIHRlbXAtPm5lbHRzID0gdGFy
Z2xlbjsKLSAgICB3aGlsZSAodGFyZ2xlbi0tKSB7CisgICAgd2hpbGUgKHRhcmdsZW4tLSkKKyAg
ICAgIHsKICAgICAgICAgUHlPYmplY3QgKm8gPSBQeVNlcXVlbmNlX0dldEl0ZW0oc291cmNlLCB0
YXJnbGVuKTsKICAgICAgICAgaWYgKG8gPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxM
OwotICAgICAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKSB7CisgICAgICAgIGlmICghUHlTdHJp
bmdfQ2hlY2sobykpCisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKG8pOwogICAg
ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIp
OwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAg
ICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5U3RyaW5n
X0FTX1NUUklORyhvKTsKICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgIH0KKyAgICAgIH0KICAg
ICByZXR1cm4gdGVtcDsKIH0KIApAQCAtNjk1LDMyICs4MTAsMzcgQEAKICAgICBpbnQgdGFyZ2xl
bjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2VxdWVuY2Vf
Q2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQorICAg
ICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc2Vx
dWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAgIHRhcmds
ZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJyYXlfbWFr
ZShwb29sLCB0YXJnbGVuLCBzaXplb2Yoc3ZuX3Jldm51bV90KSk7CiAgICAgLyogQVBSX0FSUkFZ
X0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3VudAogICAg
ICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1wLT5uZWx0
cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0YXJnbGVu
LS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNv
dXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhvKSkgewotICAgICAgICAgICAgQVBS
X0FSUkFZX0lEWCh0ZW1wLCB0YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgIGlmIChQ
eUxvbmdfQ2hlY2sobykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0
ZW1wLCB0YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0KICAgICAgICAgICAgICAgKHN2bl9yZXZudW1f
dClQeUxvbmdfQXNMb25nKG8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5SW50X0No
ZWNrKG8pKSB7Ci0gICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9y
ZXZudW1fdCkgPSAKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKG8p
KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwg
c3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAgIChzdm5fcmV2bnVtX3QpUHlJbnRfQXNMb25n
KG8pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICAgICAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYW4gaW50ZWdlciB0eXBlIik7CiAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAg
UHlfREVDUkVGKG8pOwogICAgIH0KICAgICByZXR1cm4gdGVtcDsKQEAgLTczNywxMyArODU3LDE0
IEBACiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAg
aW50IGk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAg
ICAgUHlPYmplY3QgKm9iID0gCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytp
KQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPQogICAgICAgICAgIFB5U3RyaW5nX0Zy
b21TdHJpbmcoQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgY29uc3QgY2hhciAqKSk7CiAgICAgICAg
IGlmIChvYiA9PSBOVUxMKQogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5TGlzdF9T
RVRfSVRFTShsaXN0LCBpLCBvYik7Ci0gICAgfQorICAgICAgfQogICAgIHJldHVybiBsaXN0Owog
CiAgIGVycm9yOgpAQCAtNzU3LDEzICs4NzgsMTQgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5
TGlzdF9OZXcoYXJyYXktPm5lbHRzKTsKICAgICBpbnQgaTsKIAotICAgIGZvciAoaSA9IDA7IGkg
PCBhcnJheS0+bmVsdHM7ICsraSkgewotICAgICAgICBQeU9iamVjdCAqb2IgCisgICAgZm9yIChp
ID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAq
b2IKICAgICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2
bl9yZXZudW1fdCkpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVy
cm9yOwogICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAg
IH0KICAgICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc3OCwxMyArOTAwLDE0IEBACiAg
ICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7
CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpv
YiA9IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90CiAgICAgICAgICAgKEFQUl9BUlJB
WV9JRFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCAqKSwgTlVMTCk7CiAgICAg
ICAgIGlmIChvYiA9PSBOVUxMKQogICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5TGlz
dF9TRVRfSVRFTShsaXN0LCBpLCBvYik7Ci0gICAgfQorICAgICAgfQogICAgIHJldHVybiBsaXN0
OwogCiAgIGVycm9yOgpAQCAtODI5LDggKzk1Miw4IEBACiAgIFB5T2JqZWN0ICpiYXRvbjsgICAg
ICAvKiB0aGUgZGlyL2ZpbGUgYmF0b24gKG9yIE5VTEwgZm9yIGVkaXQgYmF0b24pICovCiB9IGl0
ZW1fYmF0b247CiAKLXN0YXRpYyBpdGVtX2JhdG9uICptYWtlX2JhdG9uKGFwcl9wb29sX3QgKnBv
b2wsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwgCitz
dGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFB5T2JqZWN0ICpiYXRvbikKIHsKICAgaXRlbV9iYXRvbiAqbmV3YiA9IGFw
cl9wYWxsb2MocG9vbCwgc2l6ZW9mKCpuZXdiKSk7CkBAIC04NDYsNyArOTY5LDcgQEAKICAgcmV0
dXJuIG5ld2I7CiB9CiAKLXN0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAqYmF0
b24sIAorc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9iYXRvbih2b2lkICpiYXRvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kKQogewogICBpdGVt
X2JhdG9uICppYiA9IGJhdG9uOwpAQCAtOTA3LDcgKzEwMzAsNyBAQAogICAvKiB0aGVyZSBpcyBu
byByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9u
ZSkgKi8KICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisK
ICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBl
cnI7CkBAIC0xMDI4LDcgKzExNTEsNyBAQAogICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVz
dWx0JyByZWZlcmVuY2UgKi8KICAgKmNoaWxkX2JhdG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwg
aWItPmVkaXRvciwgcmVzdWx0KTsKICAgZXJyID0gU1ZOX05PX0VSUk9SOwotICAKKwogIGZpbmlz
aGVkOgogICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKICAgcmV0dXJuIGVycjsKQEAg
LTEwNDgsNyArMTE3MSw3IEBACiAgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcg
b24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAgaWYgKChyZXN1bHQgPSBQeU9iamVj
dF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNoYW5nZV9kaXJfcHJvcCIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPc3MjTyYiLCBpYi0+YmF0
b24sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZh
bHVlLT5kYXRhIDogTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID8gdmFsdWUtPmxlbiA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKQEAgLTExMTMs
NyArMTIzNiw3IEBACiAgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOwogICBQeU9iamVj
dCAqcmVzdWx0OwogICBzdm5fZXJyb3JfdCAqZXJyOwotICAKKwogICBzdm5fc3dpZ19weV9hY3F1
aXJlX3B5X2xvY2soKTsKIAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9u
IHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCkBAIC0xMTU5LDcgKzEyODIsNyBAQAogICAg
IHsKICAgICAgIC8qIGludm9rZSB0aGUgaGFuZGxlciB3aXRoIHRoZSB3aW5kb3cgKi8KICAgICAg
IC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIGZvcm1hdCAqLwotICAg
ICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsIChjaGFyICopIk8mIiwg
CisgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwgKGNoYXIgKiki
TyYiLAogICAgICAgICBtYWtlX29iX3R4ZGVsdGFfd2luZG93LCB3aW5kb3cpOwogICAgIH0KIApA
QCAtMTE3OCw3ICsxMzAxLDcgQEAKICAgcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN2bl9lcnJv
cl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwgCitzdGF0aWMgc3ZuX2Vycm9y
X3QgKmFwcGx5X3RleHRkZWx0YSh2b2lkICpmaWxlX2JhdG9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZV9jaGVja3N1bSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3dfaGFuZGxlcl90ICpoYW5k
bGVyLApAQCAtMTIzOCw3ICsxMzYxLDcgQEAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUg
J2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwogICBpZiAoKHJlc3VsdCA9
IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2hhbmdlX2ZpbGVfcHJv
cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPc3MjTyYi
LCBpYi0+YmF0b24sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA/IHZhbHVlLT5kYXRhIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmxlbiA6IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsK
QEAgLTEyNDksNyArMTM3Miw3IEBACiAgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28g
anVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLwogICBQeV9ERUNSRUYo
cmVzdWx0KTsKICAgZXJyID0gU1ZOX05PX0VSUk9SOwotICAKKwogIGZpbmlzaGVkOgogICBzdm5f
c3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKICAgcmV0dXJuIGVycjsKQEAgLTE0NTIsNyArMTU3
NSw3IEBACiAgIHN2bl9zdHJlYW1fdCAqc3RyZWFtOwogCiAgIC8qIEJvcnJvdyB0aGUgY2FsbGVy
J3MgcmVmZXJlbmNlIHRvIHB5X2lvIC0gdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUKLSAg
ICogY2FsbGVyIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSBpbiBvcmRlciB0byBwYXNzIHRoZSBvYmpl
Y3QgaW50byB0aGUgCisgICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIg
dG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlCiAgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBi
ZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBvYmplY3QgYmVmb3JlIHdlIHJldHVybgogICAgKiB0
byBweXRob24uIEkuZS4gRE8gTk9UIFNUT1JFIEFXQVkgVEhFIFJFU1VMVElORyBzdm5fc3RyZWFt
X3QgKiBmb3IgdXNlCiAgICAqIG92ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3Mu
ICovCkBAIC0xNDgxLDExICsxNjA0LDExIEBACiAgICAgcmV0dXJuOwogCiAgIHN2bl9zd2lnX3B5
X2FjcXVpcmVfcHlfbG9jaygpOwotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy
ICopIihzaWlzaWlpKSIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihm
dW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki
KHNpaXNpaWkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg
YWN0aW9uLCBraW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1l
X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfc3Rh
dGUsIHByb3Bfc3RhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXZpc2lvbikpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tf
ZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNTA2LDYgKzE2MjksNDEgQEAKIH0KIAogCit2b2lkIHN2
bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u
ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f
Tk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9u
ZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPJk8mKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jfd2Nfbm90aWZ5LCBub3RpZnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp
ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7
CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBi
ZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg
ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg
ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFj
ZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisK
KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKIHZvaWQgc3ZuX3N3aWdfcHlf
c3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0
dXNfdCAqc3RhdHVzKQpAQCAtMTUzNCw3ICsxNjkyLDcgQEAKICAgLyogT3VyIGVycm9yIGhhcyBu
byBwbGFjZSB0byBnby4gOi0oICovCiAgIGlmIChlcnIpCiAgICAgc3ZuX2Vycm9yX2NsZWFyKGVy
cik7Ci0gICAgCisKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiB9CiAKQEAgLTE1
ODcsNyArMTc0NSw3IEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxs
RnVuY3Rpb24oZnVuY3Rpb24sIChjaGFyICopIk8mTyYiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYWtlX29iX2xvY2ssIGxvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCkBAIC0xNjM3
LDcgKzE3OTUsNyBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0KIAotICBpZiAo
KHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJPTyYiLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbXRfaXRlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCkBAIC0xNjU1LDcgKzE4MTMsNyBA
QAogICAgICAgKmxvZ19tc2cgPSBOVUxMOwogICAgICAgZXJyID0gU1ZOX05PX0VSUk9SOwogICAg
IH0KLSAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkgCisgIGVsc2UgaWYgKFB5U3Ry
aW5nX0NoZWNrKHJlc3VsdCkpCiAgICAgewogICAgICAgKmxvZ19tc2cgPSBhcHJfcHN0cmR1cChw
b29sLCBQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSk7CiAgICAgICBQeV9ERUNSRUYocmVzdWx0
KTsKQEAgLTE2OTAsMjEgKzE4NDgsMjMgQEAKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAg
IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwotICAKKwogICBweV9wb29sID0gbWFrZV9v
Yl9wb29sKHBvb2wpOwotICBpZiAocHlfcG9vbCA9PSBOVUxMKSB7Ci0gICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7Ci0gICAgZ290byBmaW5pc2hlZDsKLSAgfQorICBpZiAocHlf
cG9vbCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CiAgIHB5X3Jvb3QgPSBtYWtlX29iX2Zz
X3Jvb3Qocm9vdCwgcHlfcG9vbCk7Ci0gIGlmIChweV9yb290ID09IE5VTEwpIHsKLSAgICBQeV9E
RUNSRUYocHlfcG9vbCk7Ci0gICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Ci0g
ICAgZ290byBmaW5pc2hlZDsgCi0gIH0KKyAgaWYgKHB5X3Jvb3QgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBQeV9ERUNSRUYocHlfcG9vbCk7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQogCi0gIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoYXIgKikiT3NPIiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKSJPc08iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBweV9yb290LCBwYXRoLCBweV9wb29sKSkgPT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBj
YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKQEAgLTE3NDAsOSArMTkwMCw5IEBACiAgICAgcmV0
dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKLSAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLCAKKyAgaWYgKChyZXN1
bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CiAgICAg
ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKQEAgLTE3NzAsMTcgKzE5MzAsMTgg
QEAKICAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Bvb2w7CiAgIFB5T2JqZWN0ICpjaHBhdGhzOwog
ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwotIAorCiAgIGlmICgocmVjZWl2ZXIg
PT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQogICAgIHJldHVybiBTVk5fTk9fRVJS
T1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgcHlfcG9vbCA9IG1h
a2Vfb2JfcG9vbChwb29sKTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNh
bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYg
KHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQogCiAgIGlmIChjaGFuZ2VkX3Bh
dGhzKQogICAgIHsKQEAgLTE3OTMsOSArMTk1NCw5IEBACiAgICAgICBQeV9JTkNSRUYoUHlfTm9u
ZSk7CiAgICAgfQogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2Vp
dmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT2xz
c3NPIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJl
diwgYXV0aG9yLCBkYXRlLCBtc2csIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5j
dGlvbihyZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKikiT2xzc3NPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hw
YXRocywgcmV2LCBhdXRob3IsIGRhdGUsIG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xODE0LDYgKzE5NzUsMzggQEAKICAgcmV0dXJuIGVy
cjsKIH0KIAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lk
ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVy
ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5f
Tk9fRVJST1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlf
Tm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJl
X3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNl
aXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08m
TyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29i
X2luZm8sIGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf
b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAh
PSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3Qg
Tm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5
X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CiAKIHN2bl9lcnJvcl90ICpz
dm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRf
dCBsaW5lX25vLApAQCAtMTgyNiwxNiArMjAxOSwxNiBAQAogICBQeU9iamVjdCAqcmVjZWl2ZXIg
PSBiYXRvbjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O
T19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQ
eV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2bl9zd2lnX3B5X2FjcXVp
cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJl
Y2VpdmVyLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJs
c3NzTyYiKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8s
IHJldmlzaW9uLCBhdXRob3IsIGRhdGUsIGxpbmUsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8sIHJldmlzaW9uLCBhdXRob3Is
IGRhdGUsIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf
b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CkBAIC0xODcwLDkgKzIwNjMsOSBAQAogCiAgIHN2bl9zd2lnX3B5X2Fj
cXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u
KGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
Kikic3NsTyYiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0s
IHVzZXJuYW1lLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0
aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxt
LCB1c2VybmFtZSwgbWF5X3NhdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs
bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xODgyLDcgKzIwNzUsNyBAQAogICAgICAgaWYg
KHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9z
aW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKLSAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVy
dFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsIAorICAgICAgICAgIGlmIChz
dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKICAg
ICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqIikpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3Jl
ZF9zaW1wbGVfdCAqIik7CkBAIC0xOTIxLDkgKzIxMTQsOSBAQAogCiAgIHN2bl9zd2lnX3B5X2Fj
cXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u
KGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
Kikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwg
bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s
KSkgPT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io
KTsKQEAgLTE5MzMsNyArMjEyNiw3IEBACiAgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCiAg
ICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKnRtcF9jcmVkcyA9
IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0LCAo
dm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0
cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAgInN2bl9h
dXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVy
ciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICoiKTsK
QEAgLTE5NzQsNyArMjE2Nyw3IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7
CiAKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIChjaGFy
ICopInNsTyZsTyYiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVu
Y3Rpb24sIChjaGFyICopInNsTyZsTyYiLAogICAgICAgICAgICAgICAgICAgcmVhbG0sIGZhaWx1
cmVzLCBtYWtlX29iX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCiAgICAgICAgICAgICAgICAg
ICBjZXJ0X2luZm8sIG1heV9zYXZlLCBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAg
IHsKQEAgLTE5ODYsNyArMjE3OSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9j
cmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqdG1wX2NyZWRzID0gTlVMTDsKICAgICAgICAgICBpZiAo
c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZwotICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAq
KikmdG1wX2NyZWRzLCAKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk
cywKICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqIikp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJv
cgpAQCAtMjAyNCw5ICsyMjE3LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAKKyAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAg
ICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0yMDM3LDcg
KzIyMzAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50
X2NlcnRfdCAqdG1wX2NyZWRzID0gTlVMTDsKICAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVy
dFB0clN0cmluZwotICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAK
KyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKICAgICAgICAgICAg
ICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9jcmVk
X3NzbF9jbGllbnRfY2VydF90ICoiKTsKQEAgLTIwNzUsOSArMjI2OCw5IEBACiAKICAgc3ZuX3N3
aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxs
RnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u
KGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq
KSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1h
eV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv
b2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOwpAQCAtMjA4OCw3ICsyMjgxLDcgQEAKICAgICAgICAgewogICAgICAgICAgIHN2
bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAg
ICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3Vs
dCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq
KSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50X2Nl
cnRfcHdfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29u
dmVyc2lvbl9lcnJvcgpAQCAtMjEwOCwzICsyMzAxLDMyMyBAQAogICAqY3JlZCA9IGNyZWRzOwog
ICByZXR1cm4gZXJyOwogfQorCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3Mo
c3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlP
YmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf
cG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gc3ZuX3JhX2NyZWF0ZV9jYWxs
YmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJyKQorICAgIHsKKyAgICAgIHN2bl9z
d2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgKmJh
dG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0
X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29tbWl0X2luZm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg
IFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5f
ZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkg
fHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAg
c3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVj
dF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7
CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UK
KyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxi
YWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0
KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJu
IGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5f
cmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBi
YXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19F
UlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25l
KSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf
bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsc3MiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcmV2aXNpb24sIGRhdGUs
IGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u
X2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9O
b25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIp
OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVh
c2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dp
Z19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQg
KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg
ICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFz
aF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19o
YW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0
YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2Rp
ZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVj
dCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0LCAqcHlfcmV2X3Byb3BzID0g
TlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P
X0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAoaGFuZGxlciA9PSBQeV9Ob25l
KSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf
bG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3Qo
cmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy
ciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAqIik7CisgICAgICBnb3RvIGVy
cm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFycmF5X3RvX2RpY3QocHJvcF9k
aWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFkZXJfdCAqIik7CisgICAgICBn
b3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq
KSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBy
ZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2Jh
ZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8qIEZJWE1FOiBTdXBwb3J0IHJl
dHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAgICogc2V0IGRlbHRhX2hhbmRs
ZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFuZGxlciA9IE5VTEw7CisgICAg
ICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAg
fQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9wcyk7CisgIFB5X1hERUNSRUYo
cHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAg
cmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9zZXRfcGF0aCh2
b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3Jf
dCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRf
YmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0
ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5
X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhv
ZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy
ICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy
ICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBy
ZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2VtcHR5
LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl
cHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg
ICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9y
dGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf
dCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmpl
Y3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBv
cnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O
T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJl
c3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0aCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh
bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5
X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90
IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5
X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisgICAgCitzdGF0aWMgc3Zu
X2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9i
b29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVj
dCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9y
dGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05P
X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl
bHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19i
YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3Vs
dCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsK
K30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5pc2hfcmVwb3J0KHZvaWQgKnJl
cG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVj
dCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9y
dGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05P
X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBvcnQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYg
KHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1
cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKwor
ICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitz
dGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK
KyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVw
b3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5V
TEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP
YmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9
IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9
IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi
Tm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2ln
X3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN2bl9y
YV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsKKyAgICByZXBvcnRlcl9zZXRf
cGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICByZXBvcnRlcl9saW5rX3BhdGgs
CisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBvcnRlcl9hYm9ydF9yZXBvcnQK
K307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9w
eXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnIHN1YnZlcnNpb24tMS4zLjEu
bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0
aWxfcHkuYy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp
Zy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZwky
MDA2LTA3LTA0IDEzOjI2OjA1LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDI2MjMgQEAKKy8q
CisgKiBzd2lndXRpbF9weS5jOiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIFNXSUcgUHl0aG9u
IGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0
IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBp
cyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywgd2hpY2gKKyAqIHlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl
IHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlz
Lm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZlcnNpb25zIG9mIHRoaXMgbGljZW5z
ZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisgKiBuZXdlciB2ZXJzaW9uIGluc3Rl
YWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9s
dW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscy4gIEZvciBl
eGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbgorICogaGlzdG9yeSBh
bmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvLgorICog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKyAqLworCisvKiBUZWxsIHN3aWd1dGlsX3B5LmggdGhhdCB3ZSdyZSBpbnNp
ZGUgdGhlIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX1BZX0MK
KworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8YXByX3Bvb2xz
Lmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KKyNp
bmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KKworI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKKyNp
bmNsdWRlICJzdm5fc3RyaW5nLmgiCisjaW5jbHVkZSAic3ZuX29wdC5oIgorI2luY2x1ZGUgInN2
bl9kZWx0YS5oIgorI2luY2x1ZGUgInN2bl9hdXRoLmgiCisjaW5jbHVkZSAic3ZuX3Bvb2xzLmgi
CisKKyNpbmNsdWRlICJzdm5fcHJpdmF0ZV9jb25maWcuaCIgLyogZm9yIFNWTl9BUFJfSU5UNjRf
VF9QWUNGTVQgKi8KKworI2luY2x1ZGUgInN3aWdfcHl0aG9uX2V4dGVybmFsX3J1bnRpbWUuc3dn
IgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisKKwwKKworLyoqKiBNYW5hZ2UgdGhlIEdsb2Jh
bCBJbnRlcnByZXRlciBMb2NrICoqKi8KKworLyogSWYgYm90aCBQeXRob24gYW5kIEFQUiBoYXZl
IHRocmVhZHMgYXZhaWxhYmxlLCB3ZSBjYW4gb3B0aW1pemUgb3Vyc2VsdmVzCisgKiBieSByZWxl
YXNpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIHdoZW4gd2UgZHJvcCBpbnRvIG91ciBT
Vk4gY2FsbHMuCisgKgorICogSW4gc3ZuX3R5cGVzLmksIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf
bG9jayBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5CisgKiBmdW5jdGlvbiwgdGhlbiBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2sgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5CisgKiBmdW5jdGlvbi4gIFNv
LCBpZiB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIG5vLW9wcywgdGhlbiBQeXRob24gd2lsbAorICog
c3RhcnQgdG8gYmxvY2suLi4KKyAqCisgKiBUaGUgU3VidmVyc2lvbiBsaWJyYXJpZXMgY2FuIGJl
IGFzc3VtZWQgdG8gYmUgdGhyZWFkLXNhZmUgKm9ubHkqIHdoZW4KKyAqIEFQUl9IQVNfVEhSRUFE
IGlzIDEuICBUaGUgQVBSIHBvb2wgYWxsb2NhdGlvbnMgYXJlbid0IHRocmVhZC1zYWZlIHVubGVz
cworICogQVBSX0hBU19USFJFQUQgaXMgMS4KKyAqLworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVB
RCkgJiYgQVBSX0hBU19USFJFQURTCisjZGVmaW5lIEFDUVVJUkVfUFlUSE9OX0xPQ0sKKyNlbmRp
ZgorCisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworc3RhdGljIGFwcl90aHJlYWRrZXlfdCAq
X3NhdmVkX3RocmVhZF9rZXkgPSBOVUxMOworc3RhdGljIGFwcl9wb29sX3QgKl9zYXZlZF90aHJl
YWRfcG9vbCA9IE5VTEw7CisjZW5kaWYKKwordm9pZCBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv
Y2sodm9pZCkKK3sKKyNpZmRlZiBBQ1FVSVJFX1BZVEhPTl9MT0NLCisgIFB5VGhyZWFkU3RhdGUg
KnRocmVhZF9zdGF0ZTsKKworICBpZiAoX3NhdmVkX3RocmVhZF9rZXkgPT0gTlVMTCkKKyAgICB7
CisgICAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg
aXMgcHJldHR5IHN0dXBpZC4gKi8KKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX3NhdmVkX3RocmVh
ZF9wb29sLCBOVUxMKTsKKyAgICAgIGFwcl90aHJlYWRrZXlfcHJpdmF0ZV9jcmVhdGUoJl9zYXZl
ZF90aHJlYWRfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
c2F2ZWRfdGhyZWFkX3Bvb2wpOworICAgIH0KKworICB0aHJlYWRfc3RhdGUgPSBQeUV2YWxfU2F2
ZVRocmVhZCgpOworICBhcHJfdGhyZWFka2V5X3ByaXZhdGVfc2V0KHRocmVhZF9zdGF0ZSwgX3Nh
dmVkX3RocmVhZF9rZXkpOworI2VuZGlmCit9CisKK3ZvaWQgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKHZvaWQpCit7CisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworICB2b2lkICp2YWw7
CisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKyAgYXByX3RocmVhZGtleV9wcml2YXRl
X2dldCgmdmFsLCBfc2F2ZWRfdGhyZWFkX2tleSk7CisgIHRocmVhZF9zdGF0ZSA9IHZhbDsKKyAg
UHlFdmFsX1Jlc3RvcmVUaHJlYWQodGhyZWFkX3N0YXRlKTsKKyNlbmRpZgorfQorCisKKwwKKy8q
KiogQXV0b21hdGljIFBvb2wgTWFuYWdlbWVudCBGdW5jdGlvbnMgKioqLworCisvKiBUaGUgYXBw
bGljYXRpb24gcG9vbCAqLworc3RhdGljIGFwcl9wb29sX3QgKl9nbG9iYWxfcG9vbCA9IE5VTEw7
CitzdGF0aWMgUHlPYmplY3QgKl9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9IE5VTEw7CitzdGF0
aWMgY2hhciBhc3NlcnRWYWxpZFtdID0gImFzc2VydF92YWxpZCI7CitzdGF0aWMgY2hhciBwYXJl
bnRQb29sW10gPSAiX3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGFkZE93bmVkUmVmW10gPSAi
X2FkZF9vd25lZF9yZWYiOworc3RhdGljIGNoYXIgcmVtb3ZlT3duZWRSZWZbXSA9ICJfcmVtb3Zl
X293bmVkX3JlZiI7CitzdGF0aWMgY2hhciB3cmFwW10gPSAiX3dyYXAiOworc3RhdGljIGNoYXIg
dW53cmFwW10gPSAiX3Vud3JhcCI7CitzdGF0aWMgY2hhciBzZXRQYXJlbnRQb29sW10gPSAic2V0
X3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGVtcHR5VHVwbGVbXSA9ICIoKSI7CitzdGF0aWMg
Y2hhciBvYmplY3RUdXBsZVtdID0gIihPKSI7CisKKworYXByX3N0YXR1c190IHN2bl9zd2lnX3B5
X2luaXRpYWxpemUodm9pZCkKK3sKKyAgYXByX3N0YXR1c190IHN0YXR1czsKKworICBpZiAoKHN0
YXR1cyA9IGFwcl9pbml0aWFsaXplKCkpICE9IEFQUl9TVUNDRVNTKQorICAgIHJldHVybiBzdGF0
dXM7CisgIGlmIChhdGV4aXQoYXByX3Rlcm1pbmF0ZSkgIT0gMCkKKyAgICByZXR1cm4gQVBSX0VH
RU5FUkFMOworICByZXR1cm4gQVBSX1NVQ0NFU1M7Cit9CisKKy8qIFNldCB0aGUgYXBwbGljYXRp
b24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVj
dCAqcHlfcG9vbCwgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgX2dsb2JhbF9wb29sID0gcG9vbDsK
KyAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gcHlfcG9vbDsKK30KKworLyogQ2xlYXIgdGhl
IGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGljYXRpb25f
cG9vbCgpCit7CisgIF9nbG9iYWxfcG9vbCA9IE5VTEw7CisgIF9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCA9IE5VTEw7Cit9CisKKy8qIEdldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLwordm9pZCBz
dm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9wb29s
X3QgKipwb29sKQoreworICAqcG9vbCA9IF9nbG9iYWxfcG9vbDsKKyAgKnB5X3Bvb2wgPSBfZ2xv
YmFsX3N2bl9zd2lnX3B5X3Bvb2w7Cit9CisKKy8qIFNldCB0aGUgcGFyZW50IHBvb2wgb2YgYSBw
cm94eSBvYmplY3QgKi8KK3N0YXRpYyBpbnQgcHJveHlfc2V0X3Bvb2woUHlPYmplY3QgKipwcm94
eSwgUHlPYmplY3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgaWYgKCpwcm94
eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09IE5VTEwpCisgICAgICAgIHsKKyAg
ICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0
aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBsZSk7CisgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAg
ICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocG9v
bCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAgICAgICAgUHlfREVDUkVGKCpwcm94
eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgIHJl
dHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBv
ciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNl
dC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICovCitzdGF0aWMgUHlPYmplY3QgKnBy
b3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg
aWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAg
ICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocHJveHksIHBhcmVudFBvb2wpOwor
ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVz
dWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsK
K30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZlcmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wg
ZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYgb2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVz
ZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50
IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0
ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpu
ZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOworICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5
X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xkUmVmICE9IE5VTEwpCisgICAgeworICAgICAg
dGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVj
dFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChu
ZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw
eV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG5ld1JlZik7CisgICAgICBpZiAodGVt
cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVD
UkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisMCisvKiBXcmFwcGVyIGZvciBTV0lH
X1R5cGVRdWVyeSAqLworI2RlZmluZSBzdm5fc3dpZ19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVl
cnkoeCkKKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfTmV3UG9pbnRlck9iaiAqLworUHlPYmplY3Qg
KnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwb29sKQoreworICBQ
eU9iamVjdCAqcHJveHkgPSBTV0lHX05ld1BvaW50ZXJPYmoob2JqLCB0eXBlLCAwKTsKKworICBp
ZiAocHJveHkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBpZiAocHJveHlfc2V0X3Bv
b2woJnByb3h5LCBwb29sKSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBwcm94eTsKK30KKworLyoqIHN2bl9zd2ln
X05ld1BvaW50ZXJPYmosIGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0
eXBlICovCitzdGF0aWMgUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9p
ZCAqcHRyLCBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICBzd2lnX3R5cGVfaW5mbyAq
dHlwZWluZm8gPSBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSk7CisgIGlmICh0eXBlaW5mbyA9PSBO
VUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJDYW5u
b3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisKKyAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBzb21lIHBvaW50PyAqLwor
ICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVpbmZvLCBweV9wb29sKTsK
K30KKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0ciAqLworaW50IHN2bl9zd2lnX0Nv
bnZlcnRQdHIoUHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlw
ZSkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIGFzc2VydFZhbGlkKSkK
KyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1
dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQor
ICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgaWYg
KFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5w
dXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAg
ICAgaWYgKGlucHV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgICAgUHlfREVDUkVG
KGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfQ29udmVydFB0cihpbnB1dCwgb2JqLCB0
eXBlLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9CisKKy8qKiBzdm5fc3dpZ19Db252
ZXJ0UHRyLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdHlwZSAqLwor
c3RhdGljIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKFB5T2JqZWN0ICppbnB1dCwKKyAg
ICB2b2lkICoqb2JqLCBjb25zdCBjaGFyICp0eXBlKQoreworICByZXR1cm4gc3ZuX3N3aWdfQ29u
dmVydFB0cihpbnB1dCwgb2JqLCBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSkpOworfQorCisvKiog
V3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCit2b2lkICpzdm5fc3dpZ19NdXN0R2V0UHRy
KHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgaW50IGFyZ251bSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipweV9wb29sKQoreworICBpZiAoUHlPYmplY3Rf
SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKQorICAgIHsKKyAgICAgIFB5T2JqZWN0
ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCBhc3NlcnRWYWxpZCwgZW1wdHlU
dXBsZSk7CisgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIGlmIChweV9wb29sICE9IE5VTEwp
CisgICAgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbCgoUHlPYmplY3QgKikgaW5wdXQpOworCisg
IGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAg
IGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsK
KyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5
X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOworICAgIH0KKworICByZXR1cm4gU1dJR19NdXN0
R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAwKTsK
K30KKworDAorLyoqKiBDdXN0b20gU3VidmVyc2lvbkV4Y2VwdGlvbiBzdHVmZnMuICoqKi8KKwor
LyogR2xvYmFsIFN1YnZlcnNpb25FeGNlcHRpb24gY2xhc3Mgb2JqZWN0LiAqLworc3RhdGljIFB5
T2JqZWN0ICpTdWJ2ZXJzaW9uRXhjZXB0aW9uID0gTlVMTDsKKworCitQeU9iamVjdCAqc3ZuX3N3
aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCkKK3sKKyAgUHlfSU5DUkVGKFN1YnZlcnNpb25FeGNl
cHRpb24pOworICByZXR1cm4gU3VidmVyc2lvbkV4Y2VwdGlvbjsKK30KKworUHlPYmplY3QgKnN2
bl9zd2lnX3B5X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKQoreworICAvKiBJZiB3ZSBoYXZlbid0
IGNyZWF0ZWQgb3VyIGV4Y2VwdGlvbiBjbGFzcywgZG8gc28uICovCisgIGlmIChTdWJ2ZXJzaW9u
RXhjZXB0aW9uID09IE5VTEwpCisgICAgeworICAgICAgU3VidmVyc2lvbkV4Y2VwdGlvbiA9IFB5
RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICAoKGNoYXIgKikibGlic3ZuLl9jb3JlLlN1YnZlcnNp
b25FeGNlcHRpb24iLCBOVUxMLCBOVUxMKTsKKyAgICB9CisKKyAgLyogUmVnYXJkbGVzcywgcmV0
dXJuIHRoZSBleGNlcHRpb24gY2xhc3MuICovCisgIHJldHVybiBzdm5fc3dpZ19weV9leGNlcHRp
b25fdHlwZSgpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oc3ZuX2Vycm9y
X3QgKmVycikKK3sKKyAgUHlPYmplY3QgKmV4Y19vYiwgKmFwcl9lcnJfb2I7CisKKyAgaWYgKGVy
ciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBNYWtlIGFuIGludGVnZXIgZm9yIHRoZSBl
cnJvciBjb2RlLiAqLworICBhcHJfZXJyX29iID0gUHlJbnRfRnJvbUxvbmcoZXJyLT5hcHJfZXJy
KTsKKyAgaWYgKGFwcl9lcnJfb2IgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgLyogSW5zdGFu
dGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9uIG9iamVjdC4gKi8KKyAgZXhjX29iID0gUHlPYmpl
Y3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25FeGNlcHRpb24sIChjaGFyICopInNPIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci0+bWVzc2FnZSwgYXByX2Vycl9vYik7Cisg
IGlmIChleGNfb2IgPT0gTlVMTCkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9vYik7
CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFNldCB0aGUgImFwcl9lcnIiIGF0dHJpYnV0
ZSBvZiB0aGUgZXhjZXB0aW9uIHRvIG91ciBlcnJvciBjb2RlLiAqLworICBpZiAoUHlPYmplY3Rf
U2V0QXR0clN0cmluZyhleGNfb2IsIChjaGFyICopImFwcl9lcnIiLCBhcHJfZXJyX29iKSA9PSAt
MSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9vYik7CisgICAgICBQeV9ERUNSRUYo
ZXhjX29iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogRmluaXNoZWQgd2l0aCB0aGUg
YXByX2VyciBvYmplY3QuICovCisgIFB5X0RFQ1JFRihhcHJfZXJyX29iKTsKKworICAvKiBTZXQg
dGhlIGVycm9yIHN0YXRlIHRvIG91ciBleGNlcHRpb24gb2JqZWN0LiAqLworICBQeUVycl9TZXRP
YmplY3QoU3VidmVyc2lvbkV4Y2VwdGlvbiwgZXhjX29iKTsKKworICAvKiBGaW5pc2hlZCB3aXRo
IHRoZSBleGNfb2Igb2JqZWN0LiAqLworICBQeV9ERUNSRUYoZXhjX29iKTsKK30KKworCisMCisv
KioqIEhlbHBlci9Db252ZXJzaW9uIFJvdXRpbmVzICoqKi8KKworLyogRnVuY3Rpb25zIGZvciBt
YWtpbmcgUHl0aG9uIHdyYXBwZXJzIGFyb3VuZCBTdWJ2ZXJzaW9uIHN0cnVjdHMgKi8KK3N0YXRp
YyBQeU9iamVjdCAqbWFrZV9vYl9wb29sKHZvaWQgKnBvb2wpCit7CisgIC8qIFJldHVybiBhIGJy
YW5kIG5ldyBkZWZhdWx0IHBvb2wgdG8gUHl0aG9uLiBUaGlzIHBvb2wgaXNuJ3QKKyAgICogbm9y
bWFsbHkgdXNlZCBmb3IgYW55dGhpbmcuIEl0J3MganVzdCBoZXJlIGZvciBjb21wYXRpYmlsaXR5
CisgICAqIHdpdGggU3VidmVyc2lvbiAxLjIuICovCisgIGFwcl9wb29sX3QgKm5ld19wb29sID0g
c3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7CisgIFB5T2JqZWN0ICpuZXdfcHlfcG9vbCA9
IHN2bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsCisgICAgc3ZuX3N3aWdfVHlwZVF1ZXJ5
KCJhcHJfcG9vbF90ICoiKSwgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgKHZvaWQpIHBv
b2w7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlci4g
Ki8KKyAgcmV0dXJuIG5ld19weV9wb29sOworfQorc3RhdGljIFB5T2JqZWN0ICptYWtlX29iX2Zz
X3Jvb3Qoc3ZuX2ZzX3Jvb3RfdCAqcHRyLCBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgcmV0dXJu
IHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcocHRyLCAic3ZuX2ZzX3Jvb3RfdCAqIiwgcHlf
cG9vbCk7Cit9CisvKioqLworCisvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNpbmdsZSBvYmpl
Y3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCisgICBTdWJ2ZXJzaW9uIHR5cGVzLiAqLwor
c3RhdGljIGNvbnN0IGNoYXIgKm1ha2Vfc3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJf
cG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsK
KyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmlu
ZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKyAgcmV0dXJuIGFwcl9wc3RyZHVwKHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhvYikp
OworfQorc3RhdGljIHN2bl9zdHJpbmdfdCAqbWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IoUHlPYmpl
Y3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9uZSkKKyAgICBy
ZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsKKyAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKKyAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHN2bl9zdHJpbmdfY3JlYXRlKFB5U3RyaW5nX0FT
X1NUUklORyhvYiksIHBvb2wpOworfQorCisKKy8qKiovCisKK3N0YXRpYyBQeU9iamVjdCAqY29u
dmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQeU9iamVjdCAqICgqY29udmVydGVyX2Z1bmMpKHZvaWQgKnZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFB5T2JqZWN0ICpweV9wb29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmN0eCwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgICAgYXByX2hhc2hfaW5kZXhfdCAqaGk7
CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisKKyAgICBpZiAoZGljdCA9PSBO
VUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJz
dChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpCisgICAgICB7CisgICAg
ICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICAgICAgdm9pZCAqdmFsOworICAgICAgICBQeU9iamVj
dCAqdmFsdWU7CisKKyAgICAgICAgYXByX2hhc2hfdGhpcyhoaSwgJmtleSwgTlVMTCwgJnZhbCk7
CisgICAgICAgIHZhbHVlID0gKCpjb252ZXJ0ZXJfZnVuYykodmFsLCBjdHgsIHB5X3Bvb2wpOwor
ICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9E
RUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAg
ICAgIC8qICMjIyBnb3R0YSBjYXN0IHRoaXMgdGhpbmcgY3V6IFB5dGhvbiBkb2Vzbid0IHVzZSAi
Y29uc3QiICovCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAoY2hhciAq
KWtleSwgdmFsdWUpID09IC0xKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2
YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICB9CisK
KyAgICByZXR1cm4gZGljdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICpjb252ZXJ0X3RvX3N3aWd0
eXBlKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsIFB5T2JqZWN0ICpweV9wb29sKQoreworICAvKiBj
dHggaXMgYSAnc3dpZ190eXBlX2luZm8gKicgKi8KKyAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50
ZXJPYmoodmFsdWUsIGN0eCwgcHlfcG9vbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVy
dF9zdm5fc3RyaW5nX3Qodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIC8qIGN0eCBpcyB1
bnVzZWQgKi8KKworICBjb25zdCBzdm5fc3RyaW5nX3QgKnMgPSB2YWx1ZTsKKworICAvKiAjIyMg
Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwor
ICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKHZvaWQgKilzLT5kYXRhLCBzLT5s
ZW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRl
bV90KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgpCit7CisgIFB5T2JqZWN0ICpsaXN0OworICBQeU9i
amVjdCAqcGF0aCwgKmtpbmQsICp1cmwsICpyZXYsICpjZl91cmwsICpzdGF0ZTsKKyAgc3ZuX2Ns
aWVudF9jb21taXRfaXRlbV90ICppdGVtID0gdmFsdWU7CisKKyAgLyogY3R4IGlzIHVudXNlZCAq
LworCisgIGxpc3QgPSBQeUxpc3RfTmV3KDYpOworCisgIGlmIChpdGVtLT5wYXRoKQorICAgIHBh
dGggPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPnBhdGgpOworICBlbHNlCisgICAgeworICAg
ICAgcGF0aCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgfQorCisg
IGlmIChpdGVtLT51cmwpCisgICAgdXJsID0gUHlTdHJpbmdfRnJvbVN0cmluZyhpdGVtLT51cmwp
OworICBlbHNlCisgICAgeworICAgICAgdXJsID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQ
eV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKGl0ZW0tPmNvcHlmcm9tX3VybCkKKyAgICBjZl91cmwg
PSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPmNvcHlmcm9tX3VybCk7CisgIGVsc2UKKyAgICB7
CisgICAgICBjZl91cmwgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg
IH0KKworICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+a2luZCk7CisgIHJldiA9IFB5SW50
X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKKyAgc3RhdGUgPSBQeUludF9Gcm9tTG9uZyhpdGVt
LT5zdGF0ZV9mbGFncyk7CisKKyAgaWYgKCEgKGxpc3QgJiYgcGF0aCAmJiBraW5kICYmIHVybCAm
JiByZXYgJiYgY2ZfdXJsICYmIHN0YXRlKSkKKyAgICB7CisgICAgICBQeV9YREVDUkVGKGxpc3Qp
OworICAgICAgUHlfWERFQ1JFRihwYXRoKTsKKyAgICAgIFB5X1hERUNSRUYoa2luZCk7CisgICAg
ICBQeV9YREVDUkVGKHVybCk7CisgICAgICBQeV9YREVDUkVGKHJldik7CisgICAgICBQeV9YREVD
UkVGKGNmX3VybCk7CisgICAgICBQeV9YREVDUkVGKHN0YXRlKTsKKyAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgcGF0aCk7CisgIFB5TGlzdF9T
RVRfSVRFTShsaXN0LCAxLCBraW5kKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDIsIHVybCk7
CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAzLCByZXYpOworICBQeUxpc3RfU0VUX0lURU0obGlz
dCwgNCwgY2ZfdXJsKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDUsIHN0YXRlKTsKKyAgcmV0
dXJuIGxpc3Q7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KGFw
cl9oYXNoX3QgKmhhc2gpCit7CisgIHJldHVybiBjb252ZXJ0X2hhc2goaGFzaCwgY29udmVydF9z
dm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnByb3BhcnJh
eV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlPYmpl
Y3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50IGk7CisKKyAgICBpZiAoZGljdCA9PSBO
VUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5l
bHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9wcm9wX3QgcHJvcDsKKyAgICAgICAgUHlP
YmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAgICAgIHByb3AgPSBBUFJfQVJSQVlfSURY
KGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAgICBweV9rZXkgPSBQeVN0cmluZ19Gcm9t
U3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChweV9rZXkgPT0gTlVMTCkKKyAgICAgICAg
ICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9wLnZhbHVlID09IE5VTEwpCisgICAgICAg
ICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlfTm9uZTsKKyAgICAgICAgICAgICBQeV9J
TkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgewor
ICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKHZvaWQg
Kilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsKKyAgICAgICAgICAgICBpZiAocHlfdmFs
dWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgUHlfREVDUkVG
KHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAg
fQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3RfU2V0SXRlbShkaWN0LCBweV9rZXksIHB5
X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGljdDsKKworICBlcnJvcjoKKyAgICBQeV9E
RUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisKK30KKworCitQeU9iamVjdCAqc3ZuX3N3
aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCkKK3sKKyAgICAvKiBO
ZWVkIHNwZWNpYWwgY29kZSBmb3IgdGhpcyBiZWNhdXNlIG9mIHRoZSBkYXJuZWQgc3ZuX3Jldm51
bV90CisgICAgICAga2V5cy4gKi8KKyAgICBhcHJfaGFzaF9pbmRleF90ICpoaTsKKyAgICBQeU9i
amVjdCAqZGljdCA9IFB5RGljdF9OZXcoKTsKKworICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAg
ICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoaSA9IGFwcl9oYXNoX2ZpcnN0KE5VTEwsIGhh
c2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsKKyAgICAgICAgY29uc3Qg
dm9pZCAqazsKKyAgICAgICAgdm9pZCAqdjsKKyAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVl
OworCisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrLCBOVUxMLCAmdik7CisgICAgICAgIGtl
eSA9IFB5TG9uZ19Gcm9tTG9uZygqKHN2bl9yZXZudW1fdCAqKWspOworICAgICAgICBpZiAoa2V5
ID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IFB5U3Ry
aW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisg
ICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBQeV9E
RUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAg
ICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAg
ICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVG
KGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQ
eV9ERUNSRUYodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgIH0KKyAgICBy
ZXR1cm4gZGljdDsKK30KKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2NvbnZlcnRfaGFzaChhcHJf
aGFzaF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBjb252ZXJ0X2hh
c2goaGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwgcHlfcG9vbCk7Cit9CisKKyNkZWZp
bmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAorc3RhdGljIFB5T2JqZWN0
ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXAoreyBcCisgIGFwcl9wb29sX3QgKm5ld19w
b29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7IFwKKyAgUHlPYmplY3QgKm5ld19w
eV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihuZXdfcG9vbCwgXAorICAgIHN2bl9zd2ln
X1R5cGVRdWVyeSgiYXByX3Bvb2xfdCAqIiksIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCk7IFwK
KyAgc3ZuXyMjdHlwZSMjX3QgKm5ld192YWx1ZSA9IGR1cCh2YWx1ZSwgbmV3X3Bvb2wpOyBcCisg
IHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKG5ld192YWx1ZSwgInN2bl8iICN0
eXBlICJfdCAqIiwgXAorICAgICAgbmV3X3B5X3Bvb2wpOyBcCit9CisKK0RFQ0xBUkVfU1dJR19D
T05TVFJVQ1RPUih0eGRlbHRhX3dpbmRvdywgc3ZuX3R4ZGVsdGFfd2luZG93X2R1cCkKK0RFQ0xB
UkVfU1dJR19DT05TVFJVQ1RPUihsb2dfY2hhbmdlZF9wYXRoLCBzdm5fbG9nX2NoYW5nZWRfcGF0
aF9kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Iod2Nfc3RhdHVzLCBzdm5fd2NfZHVwX3N0
YXR1cykKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2NrLCBzdm5fbG9ja19kdXApCitERUNM
QVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICBzdm5f
YXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Io
aW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGNvbW1pdF9pbmZv
LCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX25vdGlm
eSwgc3ZuX3djX2R1cF9ub3RpZnkpCisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVydF9sb2dfY2hh
bmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgcmV0dXJuIG1ha2Vf
b2JfbG9nX2NoYW5nZWRfcGF0aCh2YWx1ZSk7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9j
X3N0cmluZ3NfdG9fbGlzdChjaGFyICoqc3RyaW5ncykKK3sKKyAgICBQeU9iamVjdCAqbGlzdCA9
IFB5TGlzdF9OZXcoMCk7CisgICAgY2hhciAqczsKKworICAgIHdoaWxlICgocyA9ICpzdHJpbmdz
KyspICE9IE5VTEwpCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9IFB5U3RyaW5nX0Zy
b21TdHJpbmcocyk7CisKKyAgICAgICAgaWYgKG9iID09IE5VTEwpCisgICAgICAgICAgICBnb3Rv
IGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYikgPT0gLTEpCisgICAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorCisgICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJy
b3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCithcHJfaGFz
aF90ICpzdm5fc3dpZ19weV9zdHJpbmdoYXNoX2Zyb21fZGljdChQeU9iamVjdCAqZGljdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv
b2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2JqZWN0ICprZXlzOworICBpbnQgaSwg
bnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsKKwor
ICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmco
UHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOworICBrZXlzID0gUHlEaWN0
X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7CisgIGZvciAoaSA9
IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICprZXkgPSBQeUxp
c3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5RGljdF9HZXRJ
dGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSA9IG1ha2Vfc3RyaW5n
X2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIGNvbnN0IGNoYXIgKnByb3B2YWwgPSBtYWtlX3N0
cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAg
UHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKKyAg
ICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp
bmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOworICAgICAgICAgIHJldHVybiBOVUxM
OworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFzaCwgcHJvcG5hbWUsIEFQUl9IQVNI
X0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlfREVDUkVGKGtleXMpOworICByZXR1
cm4gaGFzaDsKK30KKworCithcHJfaGFzaF90ICpzdm5fc3dpZ19weV9wcm9waGFzaF9mcm9tX2Rp
Y3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2hhc2hfdCAqaGFzaDsKKyAgUHlPYmpl
Y3QgKmtleXM7CisgIGludCBpLCBudW1fa2V5czsKKworICBpZiAoZGljdCA9PSBQeV9Ob25lKQor
ICAgIHJldHVybiBOVUxMOworCisgIGlmICghUHlEaWN0X0NoZWNrKGRpY3QpKQorICAgIHsKKyAg
ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7
CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaGFzaCA9IGFwcl9oYXNoX21ha2UocG9v
bCk7CisgIGtleXMgPSBQeURpY3RfS2V5cyhkaWN0KTsKKyAgbnVtX2tleXMgPSBQeUxpc3RfU2l6
ZShrZXlzKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9rZXlzOyBpKyspCisgICAgeworICAgICAg
UHlPYmplY3QgKmtleSA9IFB5TGlzdF9HZXRJdGVtKGtleXMsIGkpOworICAgICAgUHlPYmplY3Qg
KnZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZGljdCwga2V5KTsKKyAgICAgIGNvbnN0IGNoYXIgKnBy
b3BuYW1lID0gbWFrZV9zdHJpbmdfZnJvbV9vYihrZXksIHBvb2wpOworICAgICAgc3ZuX3N0cmlu
Z190ICpwcm9wdmFsID0gbWFrZV9zdm5fc3RyaW5nX2Zyb21fb2IodmFsdWUsIHBvb2wpOworICAg
ICAgUHlfREVDUkVGKGtleSk7CisgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgaWYgKCEg
KHByb3BuYW1lICYmIHByb3B2YWwpKQorICAgICAgICB7CisgICAgICAgICAgUHlFcnJfU2V0U3Ry
aW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRpY3Rpb25h
cnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKKyAgICAgICAgICBQeV9ERUNSRUYoa2V5
cyk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgIGFwcl9oYXNoX3Nl
dChoYXNoLCBwcm9wbmFtZSwgQVBSX0hBU0hfS0VZX1NUUklORywgcHJvcHZhbCk7CisgICAgfQor
ICBQeV9ERUNSRUYoa2V5cyk7CisgIHJldHVybiBoYXNoOworfQorCisKK2NvbnN0IGFwcl9hcnJh
eV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5nc190b19hcnJheShQeU9iamVjdCAqc291cmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmdsZW47CisgICAgYXByX2FycmF5X2hl
YWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAg
ICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1
ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICB0YXJnbGVuID0gUHlT
ZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0gYXByX2FycmF5X21ha2UocG9vbCwg
dGFyZ2xlbiwgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworICAgIC8qIEFQUl9BUlJBWV9JRFggZG9l
c24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0ZW0gY291bnQKKyAgICAgICAobGlr
ZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisgICAgdGVtcC0+bmVsdHMgPSB0YXJn
bGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpv
ID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xlbik7CisgICAgICAgIGlmIChvID09
IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFQeVN0cmluZ19D
aGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAg
ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3RyaW5nIik7Cisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIEFQUl9BUlJBWV9J
RFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5U3RyaW5nX0FTX1NUUklORyhvKTsK
KyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgfQorICAgIHJldHVybiB0ZW1wOworfQorCisK
K2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfcmV2bnVtc190b19hcnJheShQ
eU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmdsZW47Cisg
ICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNr
KHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy
b3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAg
ICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0gYXByX2Fy
cmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOworICAgIC8qIEFQ
Ul9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0ZW0gY291
bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisgICAgdGVt
cC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7CisgICAg
ICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xlbik7Cisg
ICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
aWYgKFB5TG9uZ19DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlf
SURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAgICAgICAgICAoc3ZuX3Jl
dm51bV90KVB5TG9uZ19Bc0xvbmcobyk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ
eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl
bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90
KVB5SW50X0FzTG9uZyhvKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7
CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmco
UHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVnZXIgdHlwZSIpOworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgfQorICAg
IHJldHVybiB0ZW1wOworfQorCisKKwwKKy8qKiogYXByX2FycmF5X2hlYWRlcl90IGNvbnZlcnNp
b25zLiAgVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YKKyAgICAgY29udmVydGVyLCBzaW1wbHkgY29w
eS1uLXBhc3RlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbiBhbmQgdHdlYWsKKyAgICAgdGhlIGNyZWF0
aW9uIG9mIHRoZSBQeU9iamVjdCAqb2IuICAqKiovCisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9h
cnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlP
YmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50IGk7CisKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIFB5
T2JqZWN0ICpvYiA9CisgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhBUFJfQVJSQVlfSURY
KGFycmF5LCBpLCBjb25zdCBjaGFyICopKTsKKyAgICAgICAgaWYgKG9iID09IE5VTEwpCisgICAg
ICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK
KyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlz
dCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBB
UElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChj
b25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0ID0g
UHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsg
aSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IKKyAg
ICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2bl9yZXZu
dW1fdCkpOworICAgICAgICBpZiAob2IgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOwor
ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOworICAgICAgfQorICAgIHJldHVy
biBsaXN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVM
TDsKK30KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21taXRfaXRlbV9hcnJheV90b19saXN0
KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmxpc3Qg
PSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAw
OyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9
IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90CisgICAgICAgICAgKEFQUl9BUlJBWV9J
RFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCAqKSwgTlVMTCk7CisgICAgICAg
IGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5TGlzdF9T
RVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJy
b3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCisKKwwKKy8q
KiogRXJyb3JzICoqKi8KKworLyogUmV0dXJuIGEgU3VidmVyc2lvbiBlcnJvciBhYm91dCBhIGZh
aWxlZCBjYWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2FsbGJhY2tfZXhjZXB0aW9u
X2Vycm9yKHZvaWQpCit7CisgIHJldHVybiBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfU1dJR19Q
WV9FWENFUFRJT05fU0VULCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9u
IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24iKTsKK30KKworLyogUmFpc2UgYSBUeXBlRXJy
b3IgZXhjZXB0aW9uIHdpdGggTUVTU0FHRSwgYW5kIHJldHVybiBhIFN1YnZlcnNpb24KKyAgIGVy
cm9yIGFib3V0IGFuIGludmFsaWQgcmV0dXJuIGZyb20gYSBjYWxsYmFjay4gKi8KK3N0YXRpYyBz
dm5fZXJyb3JfdCAqY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcihjb25zdCBjaGFyICptZXNzYWdl
KQoreworICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCBtZXNzYWdlKTsKKyAgcmV0
dXJuIHN2bl9lcnJvcl9jcmVhdGUoQVBSX0VHRU5FUkFMLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJldHVybmVkIGFuIGludmFsaWQgb2JqZWN0Iik7
Cit9CisKKy8qIFJldHVybiBhIGdlbmVyaWMgZXJyb3IgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8g
bWFwIHR5cGVzLiAqLworc3RhdGljIHN2bl9lcnJvcl90ICp0eXBlX2NvbnZlcnNpb25fZXJyb3Io
Y29uc3QgY2hhciAqZGF0YXR5cGUpCit7CisgIHJldHVybiBzdm5fZXJyb3JfY3JlYXRlZihBUFJf
RUdFTkVSQUwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29udmVy
dGluZyBvYmplY3Qgb2YgdHlwZSAnJXMnIiwgZGF0YXR5cGUpOworfQorCisKKwwKKy8qKiogRWRp
dG9yIFdyYXBwaW5nICoqKi8KKworLyogdGhpcyBiYXRvbiBpcyB1c2VkIGZvciB0aGUgZWRpdG9y
LCBkaXJlY3RvcnksIGFuZCBmaWxlIGJhdG9ucy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlP
YmplY3QgKmVkaXRvcjsgICAgIC8qIHRoZSBlZGl0b3IgaGFuZGxpbmcgdGhlIGNhbGxiYWNrcyAq
LworICBQeU9iamVjdCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxM
IGZvciBlZGl0IGJhdG9uKSAqLworfSBpdGVtX2JhdG9uOworCitzdGF0aWMgaXRlbV9iYXRvbiAq
bWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUHlPYmplY3QgKmVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq
ZWN0ICpiYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqbmV3YiA9IGFwcl9wYWxsb2MocG9vbCwgc2l6
ZW9mKCpuZXdiKSk7CisKKyAgLyogTm90ZTogV2Ugc3RlYWwgdGhlIGNhbGxlcidzIHJlZmVyZW5j
ZSB0byAnYmF0b24nLiBBbHNvLCB0byBhdm9pZAorICAgICBtZW1vcnkgbGVha3MsIHdlIGJvcnJv
dyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRvICdlZGl0b3InLiBJbiB0aGlzCisgICAgIGNhc2Us
IGJvcnJvd2luZyB0aGUgcmVmZXJlbmNlIHRvICdlZGl0b3InIGlzIHNhZmUgYmVjYXVzZSB0aGUg
Y29udGVudHMKKyAgICAgb2YgYW4gaXRlbV9iYXRvbiBzdHJ1Y3QgYXJlIG9ubHkgdXNlZCBieSBm
dW5jdGlubyBjYWxscyB3aGljaCBvcGVyYXRlIG9uCisgICAgIHRoZSBlZGl0b3IgaXRzZWxmLiAq
LworICBuZXdiLT5lZGl0b3IgPSBlZGl0b3I7CisgIG5ld2ItPmJhdG9uID0gYmF0b247CisKKyAg
cmV0dXJuIG5ld2I7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq
YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv
ZCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg
c3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor
ICAvKiBJZiB0aGVyZSBpcyBubyBiYXRvbiBvYmplY3QsIHRoZW4gaXQgaXMgYW4gZWRpdF9iYXRv
biwgYW5kIHdlIHNob3VsZAorICAgICBub3QgYm90aGVyIHRvIHBhc3MgYW4gb2JqZWN0LiBOb3Rl
IHRoYXQgd2Ugc3RpbGwgc2hvdmUgYSBOVUxMIG9udG8KKyAgICAgdGhlIHN0YWNrLCBidXQgdGhl
IGZvcm1hdCBzcGVjaWZpZWQganVzdCB3b24ndCByZWZlcmVuY2UgaXQuICAqLworICAvKiAjIyMg
cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0
ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh
ciAqKW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGliLT5iYXRv
biA/IChjaGFyICopIihPKSIgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWItPmJhdG9uKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l
eGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRo
ZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJs
eSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cgZG9u
ZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxsCisg
ICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25nZXIg
cmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5iYXRv
bik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5VTEw7
CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3
aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5f
ZXJyb3JfdCAqc2V0X3RhcmdldF9yZXZpc2lvbih2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCB0YXJnZXRfcmV2aXNp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVz
dWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhv
ZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9k
KGliLT5lZGl0b3IsIChjaGFyICopInNldF90YXJnZXRfcmV2aXNpb24iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibCIsIHRhcmdldF9yZXZpc2lvbikpID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFs
dWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlf
REVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBz
dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj
IHN2bl9lcnJvcl90ICpvcGVuX3Jvb3Qodm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICoqcm9vdF9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBl
ZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisg
IHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24n
dCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChy
ZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5fcm9v
dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJsTyYiLCBi
YXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf
ZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiBt
YWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKnJvb3RfYmF0b24g
PSBtYWtlX2JhdG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5f
Tk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7
CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqZGVsZXRlX2VudHJ5KGNv
bnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2
bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpw
YXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmplY3Qg
KnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBt
ZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l
dGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJkZWxldGVfZW50cnkiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPTyYiLCBwYXRoLCByZXZpc2lvbiwgaWIt
PmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29s
LCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5v
IHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25l
KSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmlu
aXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOwor
fQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJlbnRfYmF0b24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgY29weWZy
b21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf
dCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmNo
aWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmpl
Y3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJl
X3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRo
ZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs
bE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhZGRfZGlyZWN0b3J5IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5iYXRv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgsIGNv
cHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAv
KiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKmNoaWxkX2Jh
dG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0g
U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j
aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5fZGlyZWN0
b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICoqY2hpbGRfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50
X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBo
YXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1
bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5fZGlyZWN0
b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPbE8m
IiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf
b2JfcG9vbCwgZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNr
X2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyog
bWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpjaGlsZF9iYXRv
biA9IG1ha2VfYmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisgIGVyciA9IFNW
Tl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2so
KTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjaGFuZ2VfZGlyX3By
b3Aodm9pZCAqZGlyX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IGRpcl9iYXRvbjsK
KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29u
c3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlP
YmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGlyX3Byb3AiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3NzI08mIiwgaWIt
PmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj
YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQor
CisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0
IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZO
X05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp
OworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2RpcmVjdG9y
eSh2b2lkICpkaXJfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZGlyX2JhdG9uLCAiY2xv
c2VfZGlyZWN0b3J5Iik7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqYWRkX2ZpbGUoY29uc3Qg
Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2Jh
dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb3B5ZnJvbV9w
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgY29weWZyb21f
cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmZpbGVf
cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmZpbGVfYmF0b24pCit7
CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor
ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l
IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l
ZGl0b3IsIChjaGFyICopImFkZF9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgsIGNvcHlmcm9tX3JldmlzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBmaWxlX3Bv
b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0YWtl
cyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpmaWxlX2JhdG9uID0gbWFrZV9iYXRvbihm
aWxlX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisKKyAgZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4g
ZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5fZmlsZShjb25zdCBjaGFyICpwYXRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZmlsZV9iYXRvbikKK3sKKyAgaXRlbV9i
YXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv
cl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgLyogIyMj
IHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1h
dCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNo
YXIgKikib3Blbl9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
aGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7Cisg
ICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdyZXN1bHQnIHJlZmVyZW5jZSAqLwor
ICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQp
OworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVs
ZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAq
d2luZG93X2hhbmRsZXIoc3ZuX3R4ZGVsdGFfd2luZG93X3QgKndpbmRvdywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpoYW5k
bGVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisK
KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKHdpbmRvdyA9PSBOVUxM
KQorICAgIHsKKyAgICAgIC8qIHRoZSBsYXN0IGNhbGw7IGl0IGNsb3NlcyB0aGUgaGFuZGxlciAq
LworCisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCBOb25lIGZvciB0aGUgd2luZG93
ICovCisgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBmb3Jt
YXQgKi8KKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAoY2hh
ciAqKSJPIiwgUHlfTm9uZSk7CisKKyAgICAgIC8qIHdlIG5vIGxvbmdlciBuZWVkIHRvIHJlZmVy
IHRvIHRoZSBoYW5kbGVyIG9iamVjdCAqLworICAgICAgUHlfREVDUkVGKGhhbmRsZXIpOworICAg
IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGludm9rZSB0aGUgaGFuZGxlciB3aXRoIHRoZSB3
aW5kb3cgKi8KKyAgICAgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhl
IGZvcm1hdCAqLworICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIs
IChjaGFyICopIk8mIiwKKyAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93KTsK
KyAgICB9CisKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxi
YWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAg
LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy
b2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1bHQpOworICBlcnIgPSBTVk5fTk9f
RVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cisg
IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZv
aWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqaF9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIg
PSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l
c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImFwcGx5
X3RleHRkZWx0YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq
KSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmFzZV9jaGVja3N1bSkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiBJbnRl
cnByZXQgTm9uZSB0byBtZWFuIHN2bl9kZWx0YV9ub29wX3dpbmRvd19oYW5kbGVyLiBUaGlzIGlz
IG11Y2gKKyAgICAgZWFzaWVyL2Zhc3RlciB0aGFuIG1ha2luZyBjb2RlIGFsd2F5cyBoYXZlIHRv
IHdyaXRlIGEgTk9PUCBoYW5kbGVyCisgICAgIGluIFB5dGhvbi4gICovCisgIGlmIChyZXN1bHQg
PT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAgICAgKmhh
bmRsZXIgPSBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxlcjsKKyAgICAgICpoX2JhdG9uID0g
TlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiByZXR1cm4gdGhlIHRodW5rIGZv
ciBpbnZva2luZyB0aGUgaGFuZGxlci4gdGhlIGJhdG9uIHRha2VzIG91cgorICAgICAgICAgJ3Jl
c3VsdCcgcmVmZXJlbmNlLCB3aGljaCBpcyB0aGUgaGFuZGxlci4gKi8KKyAgICAgICpoYW5kbGVy
ID0gd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9IHJlc3VsdDsKKyAgICB9CisKKyAg
ZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf
cHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNoYW5n
ZV9maWxlX3Byb3Aodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIg
PSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l
c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNoYW5n
ZV9maWxlX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
KikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7
CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmlu
aXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0
b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0
KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3Jl
bGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3Qg
KmNsb3NlX2ZpbGUodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv
bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp
Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn
Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjbG9zZV9maWxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihPcykiLCBpYi0+YmF0
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2NoZWNrc3VtKSkg
PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2
YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQ
eV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cgZG9uZSB3aXRoIHRoZSBiYXRvbi4g
U2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxsCisgICAgIHdlIG5lZWQgdG8gZG8g
aXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieQorICAg
ICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5iYXRvbik7CisKKyNpZmRlZiBTVk5f
REVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5VTEw7CisjZW5kaWYKKworICBlcnIg
PSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s
b2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfZWRp
dCh2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w
b29sX3QgKnBvb2wpCit7CisgIHJldHVybiBjbG9zZV9iYXRvbihlZGl0X2JhdG9uLCAiY2xvc2Vf
ZWRpdCIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFib3J0X2VkaXQodm9pZCAqZWRpdF9i
YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor
eworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwgImFib3J0X2VkaXQiKTsKK30KKwor
dm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBzdm5fZGVsdGFfZWRpdG9yX3QgKipl
ZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiplZGl0X2JhdG9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfZWRpdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZGVsdGFf
ZWRpdG9yX3QgKnRodW5rX2VkaXRvciA9IHN2bl9kZWx0YV9kZWZhdWx0X2VkaXRvciAocG9vbCk7
CisgIAorICB0aHVua19lZGl0b3ItPnNldF90YXJnZXRfcmV2aXNpb24gPSBzZXRfdGFyZ2V0X3Jl
dmlzaW9uOworICB0aHVua19lZGl0b3ItPm9wZW5fcm9vdCA9IG9wZW5fcm9vdDsKKyAgdGh1bmtf
ZWRpdG9yLT5kZWxldGVfZW50cnkgPSBkZWxldGVfZW50cnk7CisgIHRodW5rX2VkaXRvci0+YWRk
X2RpcmVjdG9yeSA9IGFkZF9kaXJlY3Rvcnk7CisgIHRodW5rX2VkaXRvci0+b3Blbl9kaXJlY3Rv
cnkgPSBvcGVuX2RpcmVjdG9yeTsKKyAgdGh1bmtfZWRpdG9yLT5jaGFuZ2VfZGlyX3Byb3AgPSBj
aGFuZ2VfZGlyX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xvc2VfZGlyZWN0b3J5ID0gY2xvc2Vf
ZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPmFkZF9maWxlID0gYWRkX2ZpbGU7CisgIHRodW5r
X2VkaXRvci0+b3Blbl9maWxlID0gb3Blbl9maWxlOworICB0aHVua19lZGl0b3ItPmFwcGx5X3Rl
eHRkZWx0YSA9IGFwcGx5X3RleHRkZWx0YTsKKyAgdGh1bmtfZWRpdG9yLT5jaGFuZ2VfZmlsZV9w
cm9wID0gY2hhbmdlX2ZpbGVfcHJvcDsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9maWxlID0gY2xv
c2VfZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9lZGl0ID0gY2xvc2VfZWRpdDsKKyAgdGh1
bmtfZWRpdG9yLT5hYm9ydF9lZGl0ID0gYWJvcnRfZWRpdDsKKworICAqZWRpdG9yID0gdGh1bmtf
ZWRpdG9yOworICAqZWRpdF9iYXRvbiA9IG1ha2VfYmF0b24ocG9vbCwgcHlfZWRpdG9yLCBOVUxM
KTsKK30KKworCisMCisvKioqIE90aGVyIFdyYXBwZXJzIGZvciBTVk4gRnVuY3Rpb25zICoqKi8K
KworCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2ZpbGUgKFB5T2JqZWN0ICpweV9maWxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor
eworICBhcHJfZmlsZV90ICphcHJfZmlsZSA9IE5VTEw7CisgIGFwcl9zdGF0dXNfdCBhcHJfZXJy
OworCisgIGlmIChweV9maWxlID09IE5VTEwgfHwgcHlfZmlsZSA9PSBQeV9Ob25lKQorICAgIHJl
dHVybiBOVUxMOworCisgIGlmIChQeVN0cmluZ19DaGVjayAocHlfZmlsZSkpCisgICAgeworICAg
ICAgLyogaW5wdXQgaXMgYSBwYXRoIC0tIGp1c3Qgb3BlbiBhbiBhcHJfZmlsZV90ICovCisgICAg
ICBjaGFyKiBmbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyAocHlfZmlsZSk7CisgICAgICBhcHJf
ZXJyID0gYXByX2ZpbGVfb3BlbiAoJmFwcl9maWxlLCBmbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFQUl9DUkVBVEUgfCBBUFJfUkVBRCB8IEFQUl9XUklURSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFQUl9PU19ERUZBVUxULCBwb29sKTsKKyAgICAgIGlmIChh
cHJfZXJyKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAgICAgICAgICBh
cHJfc3RyZXJyb3IgKGFwcl9lcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgIFB5RXJy
X0Zvcm1hdCAoUHlFeGNfSU9FcnJvciwgImFwcl9maWxlX29wZW4gZmFpbGVkOiAlczogJyVzJyIs
CisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGZuYW1lKTsKKyAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoUHlGaWxlX0NoZWNrIChweV9maWxl
KSkKKyAgICB7CisgICAgICBGSUxFICpmaWxlOworICAgICAgYXByX29zX2ZpbGVfdCBvc2ZpbGU7
CisKKyAgICAgIC8qIGlucHV0IGlzIGEgZmlsZSBvYmplY3QgLS0gY29udmVydCB0byBhcHJfZmls
ZV90ICovCisgICAgICBmaWxlID0gUHlGaWxlX0FzRmlsZShweV9maWxlKTsKKyNpZmRlZiBXSU4z
MgorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpX2dldF9vc2ZoYW5kbGUoX2ZpbGVubyhm
aWxlKSk7CisjZWxzZQorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpZmlsZW5vKGZpbGUp
OworI2VuZGlmCisgICAgICBhcHJfZXJyID0gYXByX29zX2ZpbGVfcHV0ICgmYXByX2ZpbGUsICZv
c2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSwgcG9vbCk7CisgICAgICBpZiAoYXByX2VycikKKyAg
ICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgYXByX3N0cmVycm9y
IChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICBQeUVycl9Gb3JtYXQgKFB5
RXhjX0lPRXJyb3IsICJhcHJfb3NfZmlsZV9wdXQgZmFpbGVkOiAlcyIsIGJ1Zik7CisgICAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBhcHJfZmlsZTsKK30K
KworCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgorcmVhZF9oYW5kbGVyX3B5aW8gKHZvaWQgKmJhdG9u
LCBjaGFyICpidWZmZXIsIGFwcl9zaXplX3QgKmxlbikKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsK
KyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIGFwcl9zaXplX3QgYnl0ZXM7CisgIHN2bl9l
cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s
b2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9pbywgKGNoYXIg
KikicmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJp
IiwgKmxlbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u
X2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1bHQpKQorICAg
IHsKKyAgICAgIGJ5dGVzID0gUHlTdHJpbmdfR0VUX1NJWkUocmVzdWx0KTsKKyAgICAgIGlmIChi
eXRlcyA+ICpsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0
dXJuX2Vycm9yKCJUb28gbWFueSBieXRlcyIpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAvKiBXcml0ZWJhY2ssIGluIGNhc2UgdGhpcyB3YXMgYSBzaG9ydCBy
ZWFkLCBpbmRpY2F0aW5nIEVPRiAqLworICAgICAgICAgICpsZW4gPSBieXRlczsKKyAgICAgICAg
ICBtZW1jcHkoYnVmZmVyLCBQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KSwgKmxlbik7CisgICAg
ICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0
dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsKKyAgICB9CisgIFB5X1hERUNSRUYocmVzdWx0KTsK
KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKwor
c3RhdGljIHN2bl9lcnJvcl90ICoKK3dyaXRlX2hhbmRsZXJfcHlpbyAodm9pZCAqYmF0b24sIGNv
bnN0IGNoYXIgKmRhdGEsIGFwcl9zaXplX3QgKmxlbikKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsK
KyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f
RVJST1I7CisKKyAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9h
Y3F1aXJlX3B5X2xvY2soKTsKKyAgICAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhv
ZChweV9pbywgKGNoYXIgKikid3JpdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjaGFyICopInMjIiwgZGF0YSwgKmxlbikpID09IE5VTEwpCisgICAgICAgIHsK
KyAgICAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgICAgfQor
ICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s
b2NrKCk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9zdHJlYW1fdCAqCitzdm5f
c3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQor
eworICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsKKworICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJl
ZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMgc2FmZSBvbmx5IGJlY2F1c2UgdGhlCisgICAqIGNh
bGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGlu
dG8gdGhlCisgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBw
eV9pbyBvYmplY3QgYmVmb3JlIHdlIHJldHVybgorICAgKiB0byBweXRob24uIEkuZS4gRE8gTk9U
IFNUT1JFIEFXQVkgVEhFIFJFU1VMVElORyBzdm5fc3RyZWFtX3QgKiBmb3IgdXNlCisgICAqIG92
ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisgIHN0cmVhbSA9IHN2bl9z
dHJlYW1fY3JlYXRlIChweV9pbywgcG9vbCk7CisgIHN2bl9zdHJlYW1fc2V0X3JlYWQgKHN0cmVh
bSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF93cml0ZSAoc3RyZWFtLCB3
cml0ZV9oYW5kbGVyX3B5aW8pOworCisgIHJldHVybiBzdHJlYW07Cit9CisKKwordm9pZCBzdm5f
c3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu
X3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19u
b3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24g
PSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O
T19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25l
KQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2luZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbikpID09IE5VTEwpCisgICAg
eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNl
CisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5pbmcgYW55
dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNh
bGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVz
dWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4gOi0oICov
CisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3aWdfcHlf
cmVsZWFzZV9weV9sb2NrKCk7Cit9CisKKwordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYzIo
dm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fd2Nf
bm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq
cmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5j
dGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuOworCisgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRoaW5nLiAq
LworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19i
YWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Cisg
ICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLworICBpZiAo
ZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf
cHlfbG9jaygpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5jKHZvaWQgKmJhdG9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1cykKK3sKKyAgUHlP
YmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv
cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVu
Y3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9u
LCAoY2hhciAqKSJzTyYiLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlX29iX3djX3N0YXR1cywgc3RhdHVzKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg
ICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8K
KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk
X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg
IH0KKworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVy
cikKKyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmModm9p
ZCAqY2FuY2VsX2JhdG9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBjYW5jZWxfYmF0b247
CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7
CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICBy
ZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgTlVMTCkpID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKFB5SW50X0NoZWNrKHJlc3VsdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICBpZiAoUHlJbnRfQXNMb25nKHJlc3VsdCkpCisgICAgICAgICAgICBl
cnIgPSBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfQ0FOQ0VMTEVELCAwLCBOVUxMKTsKKyAgICAg
ICAgfQorICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJyID0gc3Zu
X2Vycm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAgIH0KKyAg
ICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAgICAgZXJy
ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIgb3IgTm9uZSIpOwor
ICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5
X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3Zu
X3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK
KyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2
bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwg
fHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFu
eXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBj
YWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJl
c3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1
cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVu
Yyhjb25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v
bF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3Qg
KnJlc3VsdDsKKyAgUHlPYmplY3QgKmNtdF9pdGVtczsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKwor
ICAqbG9nX21zZyA9IE5VTEw7CisgICp0bXBfZmlsZSA9IE5VTEw7CisKKyAgLyogIyMjIHRvZG86
IGZvciBub3csIGp1c3QgaWdub3JlIHRoZSB3aG9sZSB0bXBfZmlsZSB0aGluZy4gICovCisKKyAg
aWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0
dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor
ICBpZiAoY29tbWl0X2l0ZW1zKQorICAgIHsKKyAgICAgIGNtdF9pdGVtcyA9IGNvbW1pdF9pdGVt
X2FycmF5X3RvX2xpc3QoY29tbWl0X2l0ZW1zKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg
ICBjbXRfaXRlbXMgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIH0K
KworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT08mIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY210X2l0ZW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIFB5X0RFQ1JFRihjbXRfaXRlbXMpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICBQeV9ERUNS
RUYoY210X2l0ZW1zKTsKKworICBpZiAocmVzdWx0ID09IFB5X05vbmUpCisgICAgeworICAgICAg
UHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAqbG9nX21zZyA9IE5VTEw7CisgICAgICBlcnIgPSBT
Vk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1bHQpKQor
ICAgIHsKKyAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJpbmdfQVNfU1RS
SU5HKHJlc3VsdCkpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICBlcnIgPSBTVk5f
Tk9fRVJST1I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7
CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsK
KyAgICB9CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cisg
IHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2F1dGh6
X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3QgKnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVj
dCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5
X3Bvb2wsICpweV9yb290OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg
ICphbGxvd2VkID0gVFJVRTsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9
PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx
dWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYg
KHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorICBweV9yb290ID0gbWFrZV9v
Yl9mc19yb290KHJvb3QsIHB5X3Bvb2wpOworICBpZiAocHlfcm9vdCA9PSBOVUxMKQorICAgIHsK
KyAgICAgIFB5X0RFQ1JFRihweV9wb29sKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQg
PSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaGFyICopIk9zTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB5X3Jvb3QsIHBhdGgsIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAg
IHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICAqYWxsb3dlZCA9IFB5
SW50X0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkp
CisgICAgICAgICphbGxvd2VkID0gUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZQor
ICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYW4gaW50ZWdlciIp
OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBQeV9ERUNSRUYocHlfcm9vdCk7
CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNl
X3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf
cHlfcmVwb3NfaGlzdG9yeV9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wp
Cit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor
ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBO
VUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor
ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVj
dF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs
YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo
cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy
b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9z
d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJv
cl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNoYW5nZWRfcGF0aHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQorewor
ICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Bv
b2w7CisgIFB5T2JqZWN0ICpjaHBhdGhzOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VS
Uk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUp
KQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s
b2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYgKHB5X3Bvb2wg
PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmIChjaGFuZ2VkX3BhdGhzKQorICAg
IHsKKyAgICAgIGNocGF0aHMgPSBjb252ZXJ0X2hhc2goY2hhbmdlZF9wYXRocywgY29udmVydF9s
b2dfY2hhbmdlZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM
KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjaHBhdGhzID0gUHlfTm9uZTsKKyAgICAg
IFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9D
YWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjaGFyICopIk9sc3NzTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNocGF0aHMsIHJldiwgYXV0aG9yLCBkYXRlLCBtc2csCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9
IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg
IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVy
bl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKwor
ICBQeV9ERUNSRUYoY2hwYXRocyk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgor
ICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3Zu
X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Zu
X2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247Cisg
IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisK
KyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisgICAg
cmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsK
KworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8sIGluZm8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v
bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y
KCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor
ICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAg
ICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf
bG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9j
bGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y
ZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICps
aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQ
eU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg
IGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJl
dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJsc3NzTyYiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubywgcmV2aXNpb24s
IGF1dGhvciwgZGF0ZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs
YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAo
cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy
b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3Zu
X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vy
cm9yX3QgKgorc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2Ny
ZWRfc2ltcGxlX3QgKipjcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg
IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKmNyZWRzID0gTlVM
TDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9u
ID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VS
Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwgbWF5X3NhdmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAg
ICAgICAgc3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAg
ICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3Jl
ZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9h
dXRoX2NyZWRfc2ltcGxlX3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXpl
b2YgKCpjcmVkcykpOworICAgICAgICAgICAgICBjcmVkcy0+dXNlcm5hbWUgPSB0bXBfY3JlZHMt
PnVzZXJuYW1lID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRtcF9jcmVk
cy0+dXNlcm5hbWUpIDogTlVMTDsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3JkID0gdG1w
X2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0
bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2
ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr
KCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoK
K3N2bl9zd2lnX3B5X2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2NyZWRfdXNl
cm5hbWVfdCAqKmNyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu
X2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKmNyZWRzID0g
TlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0
aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05P
X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAg
IHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2
bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAgICBpZiAo
c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCisg
ICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhf
Y3JlZF91c2VybmFtZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9m
ICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2NyZWRzLT51
c2VybmFtZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMt
PnVzZXJuYW1lKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2ZSA9IHRtcF9j
cmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIFB5X0RFQ1JF
RihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpj
cmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKgorc3ZuX3N3
aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2Ny
ZWRfc3NsX3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25z
dCBjaGFyICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3Zu
X2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFu
X3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0
aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX3Nl
cnZlcl90cnVzdF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f
RVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9u
ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv
biwgKGNoYXIgKikic2xPJmxPJiIsCisgICAgICAgICAgICAgICAgICByZWFsbSwgZmFpbHVyZXMs
IG1ha2Vfb2JfYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICAgICAgICAgICAgICAgIGNl
cnRfaW5mbywgbWF5X3NhdmUsIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgewor
ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisg
ICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAgICAg
c3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAg
ICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAgICAgKHJlc3Vs
dCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Nz
bF9zZXJ2ZXJfdHJ1c3RfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9
IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhfY3JlZF9z
c2xfc2VydmVyX3RydXN0X3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29sLCBzaXpl
b2YgKCpjcmVkcykpOworICAgICAgICAgICAgICAqY3JlZHMgPSAqdG1wX2NyZWRzOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAg
c3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVy
biBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9j
ZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipj
cmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9i
b29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg
KmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRf
c3NsX2NsaWVudF9jZXJ0X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW
Tl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQ
eV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVp
cmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJz
bE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9z
YXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2ws
IHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l
cnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9u
ZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3Qg
KnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJp
bmcKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAg
ICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9j
cmVkX3NzbF9jbGllbnRfY2VydF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwg
c2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPmNlcnRfZmlsZSA9IHRtcF9j
cmVkcy0+Y2VydF9maWxlID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRt
cF9jcmVkcy0+Y2VydF9maWxlKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2
ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr
KCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoK
K3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAorICAgIHN2
bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9u
LAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisg
ICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg
IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3Qg
KmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBp
ZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1
cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg
IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAg
ICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVkcyA9IE5V
TEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAg
ICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0
aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yCisgICAgICAgICAgICAgICAgKCJzdm5f
YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxs
b2MocG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3Jk
ID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChw
b29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t
YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w
eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQKK3N2
bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoqY2FsbGJh
Y2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv
cl90ICplcnIgPSBzdm5fcmFfY3JlYXRlX2NhbGxiYWNrcyhjYWxsYmFja3MsIHBvb2wpOworCisg
IGlmIChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOwor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9CisKK3N2
bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRf
aW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247
CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7
CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisg
ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyZPJiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2luZm8sIGNv
bW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i
X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw
dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v
bmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9y
ZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3Zu
X3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24p
Cit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor
ICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0g
TlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7
CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQ
eU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopImxzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld19yZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg
ICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNr
X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK
KyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVy
cjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVu
YygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYs
CisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAgICAgICAg
ICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxlciwKKyAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAgICAgICAg
ICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgIGFw
cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247CisgIFB5T2Jq
ZWN0ICpyZXN1bHQsICpweV9yZXZfcHJvcHMgPSBOVUxMLCAqcHlfcHJvcF9kaWZmcyA9IE5VTEw7
CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChoYW5kbGVyID09
IE5VTEwpIHx8IChoYW5kbGVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7
CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcmV2X3Byb3BzID0g
c3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChyZXZfcHJvcHMpOworICBpZiAocHlfcmV2X3By
b3BzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJh
cHJfaGFzaF90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIHB5X3Byb3BfZGlm
ZnMgPSBwcm9wYXJyYXlfdG9fZGljdChwcm9wX2RpZmZzKTsKKworICBpZiAocHlfcHJvcF9kaWZm
cyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXBy
X2FycmF5X2hlYWRlcl90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIGlmICgo
cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsT09PJiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldiwgcHlfcmV2X3Byb3BzLCBweV9wcm9wX2Rp
ZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2ws
IHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l
cnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9u
ZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsK
KworICAgICAgLyogRklYTUU6IFN1cHBvcnQgcmV0dXJuZWQgVHhEZWx0YVdpbmRvdyBvYmplY3Qg
YW5kCisgICAgICAgKiBzZXQgZGVsdGFfaGFuZGxlciBhbmQgZGVsdGFfYmF0b24gKi8KKyAgICAg
ICpkZWx0YV9oYW5kbGVyID0gTlVMTDsKKyAgICAgICpkZWx0YV9iYXRvbiA9IE5VTEw7CisKKyAg
ICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICB9CisKK2Vycm9yOgorCisgIFB5X1hERUNSRUYo
cHlfcmV2X3Byb3BzKTsKKyAgUHlfWERFQ1JFRihweV9wcm9wX2RpZmZzKTsKKworICBzdm5fc3dp
Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3Zu
X2Vycm9yX3QgKnJlcG9ydGVyX3NldF9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdm5fYm9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w
b29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5
T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlf
cmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBT
Vk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2V0X3BhdGgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xic08mIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFk
X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQp
OworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9
CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZGVsZXRlX3BhdGgodm9pZCAqcmVwb3J0
X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAq
ZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0
b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIg
PT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2Fj
cXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChw
eV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop
ImRlbGV0ZV9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy
ICopInNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBj
YWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVD
UkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0
dXJuIGVycjsKK30KKyAgICAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfbGlua19wYXRo
KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVybCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICpl
cnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRv
biwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9
PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx
dWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5
X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki
bGlua19wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop
InNzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgdXJs
LCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2Vt
cHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l
eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7
CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNl
X3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJl
cG9ydGVyX2ZpbmlzaF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJy
ID0gU1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRv
biwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9
PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNx
dWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5
X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki
ZmluaXNoX3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bv
b2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgewor
ICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9
CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j
aygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJf
YWJvcnRfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P
X0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3Vs
dDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25l
KQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s
b2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiYWJvcnRfcmVw
b3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkp
ID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7
CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQeV9Y
REVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAg
cmV0dXJuIGVycjsKK30KKworY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVw
b3J0ZXIyID0geworICAgIHJlcG9ydGVyX3NldF9wYXRoLAorICAgIHJlcG9ydGVyX2RlbGV0ZV9w
YXRoLAorICAgIHJlcG9ydGVyX2xpbmtfcGF0aCwKKyAgICByZXBvcnRlcl9maW5pc2hfcmVwb3J0
LAorICAgIHJlcG9ydGVyX2Fib3J0X3JlcG9ydAorfTsKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z
LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRp
bF9weS5oIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRo
b24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJ
MjAwNS0xMC0yMCAyMzoxNzoxOS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEu
bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0
aWxfcHkuaAkyMDA2LTA3LTA0IDEzOjI2OjQ5LjAwMDAwMDAwMCArMDEwMApAQCAtNzksNiArNzks
OSBAQAogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCiB2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNh
dGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wpOwogCisvKiBT
ZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHBy
b3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVj
dCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOworCiAMCiAvKioq
IFNXSUcgV3JhcHBlcnMgKioqLwogCkBAIC0xOTgsNiArMjAxLDExIEBACiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBwcm9wX3N0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24pOwogCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJh
dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90
ICpub3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s
KTsKKwogLyogYSBzdGF0dXMgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlv
biB0aGF0IGlzIHBhc3NlZCBpbgogICAgdmlhIHRoZSBiYXRvbiBhcmd1bWVudCAqLwogU1ZOX1NX
SUdfU1dJR1VUSUxfRVhQT1JUCkBAIC0yNDksNiArMjU3LDEzIEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKKy8qIHRodW5rZWQgaW5m
byByZWNlaXZlciBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJy
b3JfdCAqc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jKHZvaWQgKnB5X3JlY2VpdmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dm5faW5mb190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwogLyogdGh1bmtlZCBibGFtZSByZWNlaXZlciBmdW5j
dGlvbiAqLwogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf
cHlfY2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCkBAIC0zMDMsNiArMzE4
LDQ1IEBACiAgICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKICAgICBhcHJfcG9vbF90ICpwb29s
KTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9y
YV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3Zu
X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazIoY29uc3Qgc3ZuX2NvbW1pdF9p
bmZvX3QgKmNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f
ZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2
aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqYmF0b24pOworCisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg
KnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVuYygKKyAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisg
ICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAg
IGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFf
d2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3Qg
KnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT
Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2V4dGVybiBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qg
c3dpZ19weV9yYV9yZXBvcnRlcjI7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAor
c3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxs
YmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKICNpZmRlZiBf
X2NwbHVzcGx1cwogfQogI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLU51ciBzdWJ2ZXJz
aW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv
c3dpZ3V0aWxfcHkuaC5vcmlnIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGlu
Z3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmlnCi0tLSBzdWJ2
ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf
cHkvc3dpZ3V0aWxfcHkuaC5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw
CisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u
L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZwkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIHN3aWd1dGlsX3B5LmggOiAg
dXRpbGl0eSBmdW5jdGlvbnMgYW5kIHN0dWZmIGZvciB0aGUgU1dJRyBQeXRob24gYmluZGluZ3MK
KyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgQ29sbGFiTmV0
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk
IGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAq
IGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vu
c2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0
ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91
ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29u
dHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRy
aWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBh
dmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICovCisKKworI2lmbmRlZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisjZGVmaW5lIFNWTl9T
V0lHX1NXSUdVVElMX1BZX0gKKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8YXBy
Lmg+CisjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX3N0cmluZ3MuaD4KKyNp
bmNsdWRlIDxhcHJfaGFzaC5oPgorI2luY2x1ZGUgPGFwcl90YWJsZXMuaD4KKworI2luY2x1ZGUg
InN2bl90eXBlcy5oIgorI2luY2x1ZGUgInN2bl9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdm5fZGVs
dGEuaCIKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3ZuX3JlcG9zLmgiCisK
Ky8qIERlZmluZSBETEwgZXhwb3J0IG1hZ2ljIG9uIFdpbmRvd3MuICovCisjaWZkZWYgV0lOMzIK
KyMgIGlmZGVmIFNWTl9TV0lHX1NXSUdVVElMX1BZX0MKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgIGVsc2UKKyMgICAgZGVmaW5l
IFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlm
CisjZWxzZQorIyAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorI2VuZGlmCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8K
KworDAorCisvKiBJbml0aWFsaXplIHRoZSBsaWJzdm5fc3dpZ19weSBsaWJyYXJ5LiAqLworU1ZO
X1NXSUdfU1dJR1VUSUxfRVhQT1JUCithcHJfc3RhdHVzX3Qgc3ZuX3N3aWdfcHlfaW5pdGlhbGl6
ZSh2b2lkKTsKKworDAorCisvKiBGdW5jdGlvbnMgdG8gbWFuYWdlIHB5dGhvbidzIGdsb2JhbCBp
bnRlcnByZXRlciBsb2NrICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3
aWdfcHlfcmVsZWFzZV9weV9sb2NrKHZvaWQpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK
K3ZvaWQgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKHZvaWQpOworCisMCisvKioqIEF1dG9t
YXRpYyBQb29sIE1hbmFnZW1lbnQgRnVuY3Rpb25zICoqKi8KKworLyogU2V0IHRoZSBhcHBsaWNh
dGlvbiBwb29sICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlf
c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp
OworCisvKiBDbGVhciB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxf
RVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2wodm9pZCk7CisK
Ky8qIEdldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
Cit2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwg
YXByX3Bvb2xfdCAqKnBvb2wpOworCisvKiBTZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ug
b24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5
X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5
T2JqZWN0ICpuZXdSZWYpOworCisMCisvKioqIFNXSUcgV3JhcHBlcnMgKioqLworCisvKiBXcmFw
cGVyIGZvciBTV0lHX05ld1BvaW50ZXJPYmogKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor
UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5m
byAqdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9v
bCk7CisKKy8qIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0ciAqLworU1ZOX1NXSUdfU1dJR1VU
SUxfRVhQT1JUCitpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5wdXQsIHZvaWQg
KipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKTsKKworLyogV3JhcHBlciBmb3IgU1dJR19NdXN0
R2V0UHRyICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgKnN2bl9zd2lnX011c3RH
ZXRQdHIodm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpOworDAorLyoqKiBGdW5j
dGlvbnMgdG8gZXhwb3NlIGEgY3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gKioqLworCisvKiBy
ZWdpc3RlciBhIG5ldyBzdWJ2ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmVnaXN0ZXJfZXhjZXB0aW9uKHZv
aWQpOworCisvKiBnZXQgdGhlIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBzdWJ2ZXJzaW9u
IGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAq
c3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCk7CisKKy8qIHJhaXNlIGEgc3VidmVyc2lv
biBleGNlcHRpb24sIGNyZWF0ZWQgZnJvbSBhIG5vcm1hbCBzdWJ2ZXJzaW9uIGVycm9yICovCitT
Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihz
dm5fZXJyb3JfdCAqZXJyKTsKKworCisMCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBh
biBhcHJfaGFzaF90KiAoY2hhciogLT4gc3Zuc3RyaW5nX3QqKSB0bworICAgYSBQeXRob24gZGlj
dCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJv
cGhhc2hfdG9fZGljdChhcHJfaGFzaF90ICpoYXNoKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRv
IGNvbnZlcnQgYW4gYXByX2hhc2hfdCogKHN2bl9yZXZudW1fdCogLT4gY29uc3QKKyAgIGNoYXIg
KikgdG8gYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVj
dCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisK
Ky8qIGNvbnZlcnQgYSBoYXNoIG9mICdjb25zdCBjaGFyIConIC0+IFRZUEUgaW50byBhIFB5dGhv
biBkaWN0ICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19w
eV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCk7CisK
Ky8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgJ2NoYXIgKionIGludG8gYSBQeXRob24g
bGlzdCBvZiBzdHJpbmcKKyAgIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor
UHlPYmplY3QgKnN2bl9zd2lnX3B5X2Nfc3RyaW5nc190b19saXN0KGNoYXIgKipzdHJpbmdzKTsK
KworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2YgJ2NvbnN0IGNoYXIg
KicgdG8gYSBQeXRob24gbGlzdAorICAgb2Ygc3RyaW5nIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoY29uc3Qg
YXByX2FycmF5X2hlYWRlcl90ICpzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNv
bnZlcnQgYW4gYXJyYXkgb2YgJ3N2bl9yZXZudW1fdCcgdG8gYSBQeXRob24gbGlzdAorICAgb2Yg
aW50IG9iamVjdHMgKi8KKy8qIEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51
c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJy
YXlfaGVhZGVyX3QgKnJldnMpOworKi8KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQg
YSBQeXRob24gZGljdGlvbmFyeSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBh
biBhcHJfaGFzaF90IG1hcHBpbmcgY29uc3QgY2hhciAqJ3MgdG8gY29uc3QgY2hhciAqJ3MsCisg
ICBhbGxvY2F0ZWQgaW4gUE9PTC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hh
c2hfdCAqc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFy
eSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBp
bmcgY29uc3QgY2hhciAqJ3MgdG8gc3ZuX3N0cmluZ190J3MsCisgICBhbGxvY2F0ZWQgaW4gUE9P
TC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlf
cHJvcGhhc2hfZnJvbV9kaWN0KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBoZWxwZXIgZnVu
Y3Rpb24gdG8gY29udmVydCBhIFB5dGhvbiBzZXF1ZW5jZSBvZiBzdHJpbmdzIGludG8gYW4KKyAg
ICdhcHJfYXJyYXlfaGVhZGVyX3QgKicgb2YgJ2NvbnN0IGNoYXIgKicgb2JqZWN0cy4gIE5vdGUg
dGhhdCB0aGUKKyAgIG9iamVjdHMgbXVzdCByZW1haW4gYWxpdmUgLS0gdGhlIHZhbHVlcyBhcmUg
bm90IGNvcGllZC4gVGhpcyBpcworICAgYXBwcm9wcmlhdGUgZm9yIGluY29taW5nIGFyZ3VtZW50
cyB3aGljaCBhcmUgZGVmaW5lZCB0byBsYXN0IHRoZQorICAgZHVyYXRpb24gb2YgdGhlIGZ1bmN0
aW9uJ3MgZXhlY3V0aW9uLiAgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXBy
X2FycmF5X2hlYWRlcl90ICpzdm5fc3dpZ19weV9zdHJpbmdzX3RvX2FycmF5KFB5T2JqZWN0ICpz
b3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGxpa2Ugc3ZuX3N3aWdfcHlfc3RyaW5nc190
b19hcnJheSgpLCBidXQgZm9yIGFycmF5J3Mgb2YgJ3N2bl9yZXZudW1fdCdzLiAqLworU1ZOX1NX
SUdfU1dJR1VUSUxfRVhQT1JUCitjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5
X3Jldm51bXNfdG9fYXJyYXkoUHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwor
LyogbWFrZSBhbiBlZGl0b3IgdGhhdCAidGh1bmtzIiBmcm9tIEMgY2FsbGJhY2tzIHVwIHRvIFB5
dGhvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X21ha2Vf
ZWRpdG9yKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqKmVkaXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFB5T2JqZWN0ICpweV9lZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fwcl9maWxl
X3QgKnN2bl9zd2lnX3B5X21ha2VfZmlsZShQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCitzdm5fc3RyZWFtX3QgKnN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2Jq
ZWN0ICpweV9pbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv
b2xfdCAqcG9vbCk7CisKKy8qIGEgbm90aWZ5IGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRo
b24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQg
Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVu
Yyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9hY3Rpb25f
dCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ub2RlX2tpbmRfdCBr
aW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX3R5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBjb250
ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0
YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51
bV90IHJldmlzaW9uKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2ln
X3B5X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQg
ZXhlY3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUg
YmF0b24gYXJndW1lbnQgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dp
Z19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3dj
X3N0YXR1c190ICpzdGF0dXMpOworCisvKiBhIGNhbmNlbCBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVz
IGEgUHl0aG9uIGZ1bmN0aW9uIHBhc3NlZCBpbiB2aWEgdGhlCisgICBjYW5jZWxfYmF0b24gYXJn
dW1lbnQuICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dp
Z19weV9jYW5jZWxfZnVuYyh2b2lkICpjYW5jZWxfYmF0b24pOworCisvKiB0aHVua2VkIGZzIGdl
dF9sb2NrcyBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3Jf
dCAqc3ZuX3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv
b2wpOworCisvKiB0aHVua2VkIGNvbW1pdCBsb2cgZmV0Y2hlciAqLworU1ZOX1NXSUdfU1dJR1VU
SUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYyhj
b25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKTsKKworLyogdGh1bmtlZCByZXBvcyBhdXRoeiBjYWxsYmFjayBmdW5jdGlvbiAqLwor
U1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmVwb3Nf
YXV0aHpfZnVuYyhzdm5fYm9vbGVhbl90ICphbGxvd2VkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ZuX2ZzX3Jvb3RfdCAqcm9vdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0
aHVua2VkIGhpc3RvcnkgY2FsbGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VY
UE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2hpc3RvcnlfZnVuYyh2b2lkICpi
YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBsb2cgcmVjZWl2ZXIg
ZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9z
d2lnX3B5X2xvZ19yZWNlaXZlcih2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXByX2hhc2hfdCAqY2hhbmdlZF9wYXRocywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0
aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S
VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpweV9y
ZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgYmxhbWUgcmVj
ZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg
KnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQgKmJhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9pbnQ2
NF90IGxpbmVfbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpk
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGF1dGggcHJvdmlkZXIgY2Fs
bGJhY2tzICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dp
Z19weV9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90
ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBj
b25zdCBjaGFyICp1c2VybmFtZSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFw
cl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90
ICpzdm5fc3dpZ19weV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2Ny
ZWRfdXNlcm5hbWVfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAq
cmVhbG0sCisgICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29s
KTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf
YXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3Ns
X3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFy
ICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3ZuX2F1dGhf
c3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFuX3QgbWF5
X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S
VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9m
dW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipjcmVkLAorICAgIHZv
aWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5
X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9S
VAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21w
dF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAor
ICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFu
X3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElM
X0VYUE9SVAordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxs
YmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9j
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v
bCk7CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9j
b21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7
CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Nv
bW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5f
U1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jl
dl9oYW5kbGVyX2Z1bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5f
cmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMs
CisgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRh
X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAg
ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
CitleHRlcm4gY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5k
aWYgIC8qIFNWTl9TV0lHX1NXSUdVVElMX1BZX0ggKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z
LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkgc3VidmVy
c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGll
bnQucHkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhv
bi90ZXN0cy9jbGllbnQucHkJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVz
dHMvY2xpZW50LnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsMTExIEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBz
dm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFj
LnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlU
ZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVy
bAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIi
IgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0
b3J5IiIiCisgICAgc2VsZi5jbGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2Nv
bnRleHQoKQorCisgICAgcHJvdmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dl
dF9zaW1wbGVfcHJvdmlkZXIoKSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5h
bWVfcHJvdmlkZXIoKSwKKyAgICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9
IGNvcmUuc3ZuX2F1dGhfb3Blbihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmls
ZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihz
ZWxmLCBwYXRoLCBpbmZvLCBwb29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQg
ZnJvbSAnc3ZuIGluZm8nIHNvIHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0
IHRoZW0uIiIiCisgICAgc2VsZi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKwor
ICBkZWYgdGVzdF9jaGVja291dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tv
dXQyLiIiIgorCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5r
aW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpv
aW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvciwgY2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5yZXBvc191cmwsIHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIo
c2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAg
IHNlbGYuY2xpZW50X2N0eCkKKworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qg
c2NvcGUgb2YgZ2V0X2xvZ3MgY2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2
dCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9v
cHRfcmV2aXNpb25faGVhZAorICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVy
bChSRVBPU19QQVRIKQorICAgIGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2Vs
Zi5pbmZvX3JlY2VpdmVyLAorICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgp
CisKKyAgICAjIENoZWNrIG91dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZl
cyB0byB2ZXJpZnkgdGhhdAorICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3Rp
bGwgdmFsaWQKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFt
ZShSRVBPU19QQVRIKSkKKyAgICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuaW5mby5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuaW5mby5yZXBvc19yb290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVp
ZF9mcm9tX3VybChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBv
biBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAg
ICAgICAgICAgIGNsaWVudC51dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVu
dF9jdHgpLAorICAgICAgICAgICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRl
c3RfdXJsX2Zyb21fcGF0aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21f
cGF0aCBmb3IgYSBmaWxlOi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51
cmxfZnJvbV9wYXRoKHNlbGYucmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYg
PSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRf
cmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1w
ZGlyKCksICd1cmxfZnJvbV9wYXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBv
c191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAg
IHNlbGYuY2xpZW50X2N0eCkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJv
bV9wYXRoKHBhdGgpLCBzZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0
aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAg
cmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5f
b3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0
dGVtcGRpcigpLCAndXVpZF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxm
LnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUs
IHBhdGgsIEZhbHNlLCAwLCBOb25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1
aWRfZnJvbV9wYXRoKHBhdGgsIHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAg
ICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xp
ZW50X2N0eCkpCisKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9t
X3BhdGgocGF0aCwgd2NfYWRtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs
aWVudF9jdHgpLCB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNz
aW9uKHNlbGYpOgorICAgICAgIiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIi
IgorICAgICAgY2xpZW50Lm9wZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGll
bnRfY3R4KQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1
YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RS
dW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4z
LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZyBz
dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz
L2NsaWVudC5weS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw
MDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Lm9yaWcJMjAwNi0wNy0wNCAxMzoyNjowNS4wMDAw
MDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMTEgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBm
aWxlLCB0eXBlcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xp
ZW50LCB3YworCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBT
dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxp
YiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENh
c2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lv
biByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQg
YSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKyAgICBzZWxmLmNsaWVudF9jdHggPSBjbGllbnQu
c3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCgpCisKKyAgICBwcm92aWRlcnMgPSBbCisgICAgICAg
Y2xpZW50LnN2bl9jbGllbnRfZ2V0X3NpbXBsZV9wcm92aWRlcigpLAorICAgICAgIGNsaWVudC5z
dm5fY2xpZW50X2dldF91c2VybmFtZV9wcm92aWRlcigpLAorICAgIF0KKworICAgIHNlbGYuY2xp
ZW50X2N0eC5hdXRoX2JhdG9uID0gY29yZS5zdm5fYXV0aF9vcGVuKHByb3ZpZGVycykKKyAgICBz
ZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorCisg
IGRlZiBpbmZvX3JlY2VpdmVyKHNlbGYsIHBhdGgsIGluZm8sIHBvb2wpOgorICAgICIiIlNxdWly
cmVsIGF3YXkgdGhlIG91dHB1dCBmcm9tICdzdm4gaW5mbycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0
cworICAgICAgIGNhbiBnZXQgYXQgdGhlbS4iIiIKKyAgICBzZWxmLnBhdGggPSBwYXRoCisgICAg
c2VsZi5pbmZvID0gaW5mbworCisgIGRlZiB0ZXN0X2NoZWNrb3V0KHNlbGYpOgorICAgICIiIlRl
c3Qgc3ZuX2NsaWVudF9jaGVja291dDIuIiIiCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2
aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisg
ICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICdjaGVja291dCcp
CisKKyAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbGllbnQuY2hlY2tvdXQyLCAK
KyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zX3VybCwgcGF0aCwgTm9uZSwgTm9uZSwg
VHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisg
ICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUs
IFRydWUsIAorICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgIGRlZiB0ZXN0X2luZm8o
c2VsZik6CisgICAgIiIiVGVzdCBzY29wZSBvZiBnZXRfbG9ncyBjYWxsYmFja3MiIiIKKworICAg
ICMgUnVuIGluZm8KKyAgICByZXZ0ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJl
dnQua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisgICAgcmVwb3NfdXJsID0gImZp
bGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgY2xpZW50LmluZm8ocmVwb3Nf
dXJsLCByZXZ0LCByZXZ0LCBzZWxmLmluZm9fcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgRmFs
c2UsIHNlbGYuY2xpZW50X2N0eCkKKworICAgICMgQ2hlY2sgb3V0cHV0IGZyb20gcnVubmluZyBp
bmZvLiBUaGlzIGFsc28gc2VydmVzIHRvIHZlcmlmeSB0aGF0CisgICAgIyB0aGUgaW50ZXJuYWwg
J2luZm8nIG9iamVjdCBpcyBzdGlsbCB2YWxpZAorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5w
YXRoLCBvcy5wYXRoLmJhc2VuYW1lKFJFUE9TX1BBVEgpKQorICAgIHNlbGYuaW5mby5hc3NlcnRf
dmFsaWQoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLlVSTCwgcmVwb3NfdXJsKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbmZvLnJlcG9zX3Jvb3RfVVJMLCByZXBvc191cmwp
CisKKworICBkZWYgdGVzdF91dWlkX2Zyb21fdXJsKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2Ns
aWVudF91dWlkX2Zyb21fdXJsIG9uIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxmLmFzc2VydF8o
aXNpbnN0YW5jZSgKKyAgICAgICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5y
ZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCksCisgICAgICAgICAgICAgICAgIHR5cGVzLlN0cmlu
Z1R5cGVzKSkKKworICBkZWYgdGVzdF91cmxfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qg
c3ZuX2NsaWVudF91cmxfZnJvbV9wYXRoIGZvciBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5h
c3NlcnRFcXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgoc2VsZi5yZXBvc191cmwpLCBzZWxmLnJl
cG9zX3VybCkKKworICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYu
a2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3MucGF0aC5q
b2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3VybF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50
LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAor
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgc2VsZi5hc3NlcnRF
cXVhbHMoY2xpZW50LnVybF9mcm9tX3BhdGgocGF0aCksIHNlbGYucmVwb3NfdXJsKQorCisgIGRl
ZiB0ZXN0X3V1aWRfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlk
X2Zyb21fcGF0aC4iIiIKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAg
cmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBh
dGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1dWlkX2Zyb21fcGF0aCcpCisKKyAgICBj
bGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1
ZSwgCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICB3Y19hZG0g
PSB3Yy5hZG1fb3BlbjMoTm9uZSwgcGF0aCwgRmFsc2UsIDAsIE5vbmUpCisKKyAgICBzZWxmLmFz
c2VydEVxdWFscyhjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVu
dF9jdHgpLCAKKyAgICAgICAgICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxm
LnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSkKKworICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3Rh
bmNlKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3Y19hZG0sIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCksIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBk
ZWYgdGVzdF9vcGVuX3JhX3Nlc3Npb24oc2VsZik6CisgICAgICAiIiJUZXN0IHN2bl9jbGllbnRf
b3Blbl9yYV9zZXNzaW9uKCkuIiIiCisgICAgICBjbGllbnQub3Blbl9yYV9zZXNzaW9uKHNlbGYu
cmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1
bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3Np
dG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIg
PSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZm
IC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rl
c3RzL3JhLnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9w
eXRob24vdGVzdHMvcmEucHkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5n
cy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr
MDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5
dGhvbi90ZXN0cy9yYS5weQkyMDA2LTA3LTA0IDEzOjI2OjQ5LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDEzNiBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29y
ZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRy
b2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAor
ICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1
YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0
IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAg
IHJhLmluaXRpYWxpemUoKQorCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRo
bmFtZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3Rs
eSBmb3IgY3Jvc3MtY2hlY2tpbmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19Q
QVRIKQorICAgIHNlbGYuZnMgPSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tz
ID0gcmEuY2FsbGJhY2tzMl90KCkKKworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5y
ZXBvc191cmwsIGNhbGxiYWNrcywgTm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nf
cm9vdChzZWxmKToKKyAgICByb290ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisg
ICAgc2VsZi5hc3NlcnRFcXVhbChyb290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dl
dF91dWlkKHNlbGYpOgorICAgIHJhX3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAg
ICBmc191dWlkID0gZnMuZ2V0X3V1aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJh
X3V1aWQsZnNfdXVpZCkKKworICBkZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6Cisg
ICAgcmFfcmV2bnVtID0gcmEuZ2V0X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNf
cmV2bnVtID0gZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChy
YV9yZXZudW0sZnNfcmV2bnVtKQorCisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRp
cmVudHMsXyxwcm9wcykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxm
LmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1
ZShkaXJlbnRzLmhhc19rZXkoJ2JyYW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVu
dHMuaGFzX2tleSgndGFncycpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsn
XS5raW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNb
J2JyYW5jaGVzJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVh
bChkaXJlbnRzWyd0YWdzJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3Nl
cnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxm
LmFzc2VydFRydWUocHJvcHMuaGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9S
KSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsn
LCAxKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRz
LF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYu
YXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3Nl
cnRFcXVhbChkaXJlbnRzWydSRUFETUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQor
CisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24s
IGRhdGUsIGF1dGhvciwgYmF0b24pOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2
aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRv
biA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJh
Y2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9v
dChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tl
X2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5l
ZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0
X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhv
cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3Jldihz
ZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9y
KHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJv
b3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQp
CisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAi
YmxhaCIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0
KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm
IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3Is
IGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIs
IG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9r
ZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRp
dG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQor
ICAgIGRlbHRhLmVkaXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisK
KyAgZGVmIHRlc3RfZ2V0X2xvY2F0aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRf
bG9jYXRpb25zKHNlbGYucmFfY3R4LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUp
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsv
UkVBRE1FLnR4dCcsIAorICAgICAgICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAg
NDogJy90cnVuay9SRUFETUUudHh0J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxm
KToKKyAgICBkZWYgcmV2X2hhbmRsZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMs
IHBvb2wpOgorICAgICAgICBzZWxmLmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAg
aWYgcmV2ID09IDI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgewor
ICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAg
J3N2bjphdXRob3InOiAnam9obicsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0
LTAxVDEzOjEyOjE4LjIxNjI2N1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwcm9wX2RpZmZzLCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46
bG9nJzogJ0ZpeGVkIFJFQURNRS5cbicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2th
dGUnLAorICAgICAgICAgICAgICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2
NDNaJworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9k
aWZmcywgeydzdm46bWltZS10eXBlJzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICdu
YXRpdmUnfSkKKworICAgIHJhLmdldF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFE
TUUudHh0IiwgMCwgMTAsIHJldl9oYW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToK
KyAgICBjbGFzcyBUZXN0RWRpdG9yKGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAg
IGVkaXRvciA9IFRlc3RFZGl0b3IoKQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtl
X2VkaXRvcihlZGl0b3IpCisgICAgCisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEu
ZG9fdXBkYXRlKHNlbGYucmFfY3R4LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisg
ICAgcmEucmVwb3J0ZXIyX2ludm9rZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24s
ICIiLCAwLCBUcnVlLCBOb25lKQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVw
b3J0KHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu
IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv
c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l
ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRp
ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
dGVzdHMvcmEucHkub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCTE5NzAtMDEtMDEgMDE6
MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcJMjAwNi0wNy0wNCAxMzoyNjow
NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MK
KworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKwor
ZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJl
cG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBh
dGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9y
eSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lv
biByZXBvc2l0b3J5IiIiCisKKyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3Nf
dXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBP
cGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBv
cyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5y
ZXBvcykKKworICAgIGNhbGxiYWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJh
X2N0eCA9IHJhLm9wZW4yKHNlbGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisK
KyAgZGVmIHRlc3RfZ2V0X3JlcG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBv
c19yb290KHNlbGYucmFfY3R4KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9z
X3VybCkKKworICBkZWYgdGVzdF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0
X3V1aWQoc2VsZi5yYV9jdHgpCisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisg
ICAgc2VsZi5hc3NlcnRFcXVhbChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xh
c3Rlc3RfcmV2bnVtKHNlbGYpOgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVt
KHNlbGYucmFfY3R4KQorICAgIGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9n
ZXRfZGlyKHNlbGYpOgorICAgIChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJh
X2N0eCwgJycsIDEpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsn
KSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAg
IHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRpcmVudHNbJ3RydW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkaXJlbnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGly
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25v
ZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1Bf
RU5UUllfVVVJRCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5f
UFJPUF9FTlRSWV9MQVNUX0FVVEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2Rp
cihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50
cywge30pCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry
dW5rJywgMTApCisKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUy
LnR4dCcpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5k
LGNvcmUuc3ZuX25vZGVfZmlsZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm
IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChpbmZvLnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisK
KyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0
eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEu
ZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxk
ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3Qs
IE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRp
dF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNr
KHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlz
aW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24g
PSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNr
LCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3Qo
ZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9h
ZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVk
aXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3Rf
Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNl
bGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Io
c2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9v
dCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkK
KyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJi
bGFoIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQo
ZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6Cisg
ICAgbG9jYXRpb25zID0gcmEuZ2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFE
TUUudHh0IiwgMiwgcmFuZ2UoMSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywg
eworICAgICAgICAyOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9S
RUFETUUudHh0JywgCisgICAgICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0
ZXN0X2dldF9maWxlX3JldnMoc2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwg
cmV2X3Byb3BzLCBwcm9wX2RpZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9
PSAyIG9yIHJldiA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsv
UkVBRE1FLnR4dCIpCisgICAgICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVB
RE1FLicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAg
ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAg
IGVsaWYgcmV2ID09IDM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywg
eworICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAg
ICAgICAnc3ZuOmF1dGhvcic6ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIw
MDUtMDQtMDFUMTM6MjQ6NTguMjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWlu
JywgJ3N2bjplb2wtc3R5bGUnOiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNl
bGYucmFfY3R4LCAidHJ1bmsvUkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBk
ZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3Ip
OgorICAgICAgICBwYXNzCisKKyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRy
LCBlX2JhdG9uID0gZGVsdGEubWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVy
LCByZXBvcnRlcl9iYXRvbiA9IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVl
LCBlX3B0ciwgZV9iYXRvbikKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVw
b3J0ZXIsIHJlcG9ydGVyX2JhdG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9y
dGVyMl9pbnZva2VfZmluaXNoX3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2Rl
ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp
dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg
cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3J1bl9hbGwucHkgc3VidmVyc2lvbi0xLjMuMS5u
ZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5Ci0tLSBz
dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVu
X2FsbC5weQkyMDA1LTEwLTAyIDA1OjE4OjI1LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxs
LnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xLDYgKzEsNiBAQAog
aW1wb3J0IHN5cywgb3MKIGJpbmRpciA9IG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkKLXN5
cy5wYXRoWzA6MF0gPSBbIG9zLmdldGN3ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwK
K3N5cy5wYXRoWzA6MF0gPSBbIGJpbmRpciwgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5n
ZXRjd2QoKSwgXAogICAgICAgICAgICAgICAgICAgIiVzLy4uIiAlIGJpbmRpciwgIiVzLy4uLy5s
aWJzIiAlIGJpbmRpciBdCiAKICMgT1NlcyB3aXRob3V0IFJQQVRIIHN1cHBvcnQgYXJlIGdvaW5n
IHRvIGhhdmUgdG8gZG8gdGhpbmdzIGhlcmUgdG8gbWFrZQpAQCAtMTcsNiArMTcsOSBAQAogaW1w
b3J0IHVuaXR0ZXN0CiBpbXBvcnQgcG9vbAogaW1wb3J0IHJlcG9zaXRvcnkKK2ltcG9ydCBjbGll
bnQKK2ltcG9ydCByYQoraW1wb3J0IHdjCiBpbXBvcnQgdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0
cwogCiAjIFJ1biBhbGwgdGVzdHMKQEAgLTI0LDcgKzI3LDEwIEBACiBkZWYgc3VpdGUoKToKICAg
IiIiUnVuIGFsbCB0ZXN0cyIiIgogICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgIHN1
aXRlLmFkZFRlc3QoY2xpZW50LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocG9vbC5zdWl0ZSgp
KQorICBzdWl0ZS5hZGRUZXN0KHJhLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3Qod2Muc3VpdGUo
KSkKICAgc3VpdGUuYWRkVGVzdChyZXBvc2l0b3J5LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3Qo
dHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdWl0ZSgpKTsKICAgcmV0dXJuIHN1aXRlCmRpZmYg
LU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVz
dHMvd2MucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5
dGhvbi90ZXN0cy93Yy5weQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0
aG9uL3Rlc3RzL3djLnB5CTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0w
LDAgKzEsMTc1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRp
bAorCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3Zu
LmNvcmUgaW1wb3J0IFN1YnZlcnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250
cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwK
KyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBT
dWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVz
dCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVm
IHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKwor
ICAgIHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgp
CisgICAgCisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5n
CisgICAgc2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0g
cmVwb3MuZnMoc2VsZi5yZXBvcykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgp
CisKKyAgICBjbGllbnRfY3R4ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICBy
ZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9v
cHRfcmV2aXNpb25faGVhZAorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwg
c2VsZi5wYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4
KQorCisgICAgc2VsZi53YyA9IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0x
LCBOb25lKQorCisgIGRlZiB0ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5l
bnRyeShzZWxmLnBhdGgsIHNlbGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToK
KyAgICAgIGxvY2sgPSB3Yy5hZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRl
KGNvcmUuUG9vbCgpKSwgc2VsZi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2Mu
YWRtX2xvY2tlZChzZWxmLndjKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9j
a2VkKHNlbGYucGF0aCkpCisgICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2Mp
CisKKyAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRl
ZiB0ZXN0X2FjY2Vzc19wYXRoKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBh
dGgsIHdjLmFkbV9hY2Nlc3NfcGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGly
KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0
ZXN0X2dldF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uo
d2MuZ2V0X2FkbV9kaXIoKSwgYmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIo
c2VsZik6CisgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5z
ZXRfYWRtX2RpciwgIi5mb29iYXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9k
aXIoIi5zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIp
KQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAg
ICB3Yy5zZXRfYWRtX2RpcigiX3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRt
X2RpcigiX3N2biIpKQorICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1f
ZGlyKCkpCisgICAgICB3Yy5zZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZh
bHNlKHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4i
LCB3Yy5nZXRfYWRtX2RpcigpKQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2Vs
Zik6CisgICAgICB3Yy5pbml0X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9y
ZXZpc2lvbnMyKHNlbGYpOgorICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10K
KworICAgICAgZGVmIG5vdGlmeShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQo
aW5mbykKKworICAgICAgY2xhc3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18o
c2VsZik6CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAg
ICAgICAgICBkZWYgYWJvcnRfcmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNz
CisKKyAgICAgICAgICBkZWYgZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAg
ICAgc2VsZi5fZmluaXNoZWRfcmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRo
KHNlbGYsIHBhdGgsIHJldmlzaW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6Cisg
ICAgICAgICAgICAgIHNldF9wYXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5r
X3BhdGgoc2VsZiwgcGF0aCwgdXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisg
ICAgICAgICAgZGVmIGRlbGV0ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICMgUmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9w
YXRoID0gb3MucGF0aC5qb2luKHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAg
ICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJl
bW92ZShyZWFkbWVfcGF0aCkKKworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNp
bmcgY3Jhd2xfcmV2aXNpb24yCisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygp
CisgICAgICByZXBvcnRlciA9IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25z
MihzZWxmLnBhdGgsIHNlbGYud2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcnVlLCBUcnVlLCBGYWxzZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQg
dGhlIHJlcG9ydCBmaW5pc2hlZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hl
ZF9yZXBvcnQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50
IG9mIGluZm9zIG9iamVjdAorICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmVhZG1lX3BhdGgsIGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29y
ZS5zdm5fbm9kZV9maWxlLCBpbmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBp
bmZvLnJldmlzaW9uKQorCisgIGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3
Yy5jcmVhdGVfbm90aWZ5KHNlbGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9j
aGVja193YyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBh
dGgpID4gMCkKKworICBkZWYgdGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFz
c2VydEVxdWFsKFtzZWxmLnJlcG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
d2MuZ2V0X2FuY2VzdHJ5KHNlbGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVz
KHNlbGYpOgorICAgICAgd2Muc3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRl
c3RfaXNfbm9ybWFsX3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxf
cHJvcCgnc3ZuOndjOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9w
cm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1h
bF9wcm9wKCdzdm46Zm9vOmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9w
cm9wKCdmb3JlaWduOmZvbzpiYXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgor
ICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAg
ICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAg
c2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFp
bElmKHdjLmlzX3djX3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2Vu
dHJ5X3Byb3Aoc2VsZik6CisgICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3Zu
OmVudHJ5OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2
bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46
Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpm
b286YmFyJykpCisKKyAgZGVmIHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgo
b3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNl
bGYucGF0aCwgd2MuZ2V0X2FkbV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkK
KworICBkZWYgdGVzdF9nZXRfaWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2lu
c3RhbmNlKHdjLmdldF9pZ25vcmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVz
dF9lbnRyaWVzX3JlYWQoc2VsZik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNl
bGYud2MsIFRydWUpCisgICAgICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdz
JywgJ2JyYW5jaGVzJywgJ3RydW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93
bihzZWxmKToKKyAgICAgIHdjLmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJl
ZShzZWxmLnBhdGgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3Vp
dGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0
VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lv
bi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pIHN1YnZlcnNpb24t
MS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkKLS0tIHN1YnZl
cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTAx
LTA0IDE3OjIwOjA4LjAwMDAwMDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw
MDAwMDAwMCArMDEwMApAQCAtMjUsNiArMjUsNyBAQAogI2VuZGlmCiAKICVpbmNsdWRlIHR5cGVt
YXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKIAogJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cK
ICVpbXBvcnQgY29yZS5pCkBAIC00NCw2ICs0NSwxMSBAQAogICBzdm5fY2xpZW50X2N0eF90ICoq
CiB9OwogCislYXBwbHkgUG9pbnRlciBOT05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNp
b25fdCAqcmV2aXNpb24sCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9u
Cit9OworCiAlYXBwbHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKICAg
ICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnRhcmdldHMsCiAgICAgY29uc3QgYXByX2FycmF5
X2hlYWRlcl90ICpkaWZmX29wdGlvbnMKQEAgLTY2LDYgKzcyLDE2IEBACiAKICNpZmRlZiBTV0lH
UFlUSE9OCiAlYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJlYW1f
dCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZvaWQg
KlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2dfbXNn
X2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0b24y
LAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9uCit9
OwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDAsNiArMjE2LDE4IEBACiB9CiAK
IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJfdAorICAg
c3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5faW5mb19y
ZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNlaXZl
cl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jOworICAg
ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdlIHVz
ZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBp
biB0aGUKICAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlw
ZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CiAgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRpb24gaGVy
ZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0LgpAQCAtNDgzLDYgKzUxMSwyNCBAQAog
JWluY2x1ZGUgc3ZuX3RpbWVfaC5zd2cKICVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKIAorI2lm
ZGVmIFNXSUdQWVRIT04KKworLyogcHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0
aHVua3MuICovCislY29uc3RhbnQgc3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2Vs
X2Z1bmM7CislY29uc3RhbnQgc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19w
eV9nZXRfY29tbWl0X2xvZ19mdW5jOworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBz
dm5fc3dpZ19weV9ub3RpZnlfZnVuYzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisK
Ky8qIHByb3ZpZGUgUHl0aG9uIHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0
YW50IHN2bl9jYW5jZWxfZnVuY190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50
IHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2df
ZnVuYzsKKyVjb25zdGFudCBzdm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5
X2Z1bmM7CisKKyNlbmRpZgorCiAjaWZkZWYgU1dJR1JVQlkKICVpbmxpbmUgJXsKIHN0YXRpYyBW
QUxVRQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv
c3ZuX2NsaWVudC5pLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5n
cy9zd2lnL3N2bl9jbGllbnQuaS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24v
YmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3N2bl9jbGllbnQuaS5vcmlnCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAwMDAwMDAwICswMTAw
CkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogc3ZuX2NsaWVudC5pIDogIFNXSUcgaW50ZXJmYWNl
IGZpbGUgZm9yIHN2bl9jbGllbnQuaAorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQg
KGMpIDIwMDAtMjAwMyBDb2xsYWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcs
IHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3Ry
aWJ1dGlvbi4gIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2
ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBv
ZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIg
dmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNv
bnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZp
ZHVhbHMuICBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24K
KyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdy
aXMub3JnLy4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJR1BFUkwpCisl
bW9kdWxlICJTVk46Ol9DbGllbnQiCisjZWxpZiBkZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAi
c3ZuOjpleHQ6OmNsaWVudCIKKyNlbHNlCislbW9kdWxlIGNsaWVudAorI2VuZGlmCisKKyVpbmNs
dWRlIHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2ds
b2JhbC5zd2cKKyVpbXBvcnQgY29yZS5pCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgc3ZuX3R5
cGVzLnN3ZworJWltcG9ydCBzdm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorJWlt
cG9ydCBzdm5fd2MuaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgJWFwcGx5LWluZyBvZiB0eXBl
bWFwcyBkZWZpbmVkIGVsc2V3aGVyZQorKi8KKworJWFwcGx5IFNXSUdUWVBFICoqT1VUUEFSQU0g
eworICBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiosCisgIHN2bl9hdXRoX3Byb3ZpZGVyX29i
amVjdF90ICoqLAorICBzdm5fY2xpZW50X2N0eF90ICoqCit9OworCislYXBwbHkgUG9pbnRlciBO
T05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisgIGNvbnN0
IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9uCit9OworCislYXBwbHkgY29uc3QgYXBy
X2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVy
X3QgKnRhcmdldHMsCisgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29wdGlvbnMK
K307CisKKyVhcHBseSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCB7CisgICAgY29uc3QgY2hhciAq
bmF0aXZlX2VvbCwKKyAgICBjb25zdCBjaGFyICpjb21tZW50Cit9OworCisvKiBzdm5fY2xpZW50
X3Byb3BnZXQoKSwgc3ZuX2NsaWVudF9wcm9wbGlzdCgpLCBzdm5fY2xpZW50X3JldnByb3BfbGlz
dCgpICovCislYXBwbHkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3Bz
IH07CisKKy8qIHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCgpLCBzdm5fY2xpZW50X3V1aWRfZnJv
bV91cmwoKQorICogc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aCAqLworJWFwcGx5IGNvbnN0IGNo
YXIgKipPVVRQVVQgeworICAgIGNvbnN0IGNoYXIgKip1cmwsCisgICAgY29uc3QgY2hhciAqKnV1
aWQKK307CisKKyNpZmRlZiBTV0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVE
X1NUUkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9j
dHhfdCAqLworJWFwcGx5IHZvaWQgKlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRv
biwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAg
ICB2b2lkICpub3RpZnlfYmF0b24yLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZv
aWQgKnByb2dyZXNzX2JhdG9uCit9OworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBz
dm5fY2xpZW50X3Byb3BsaXN0KCkKKyAgIHJldHVybnMgYXByX2FycmF5X2hlYWRlcl90ICogPHN2
bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90ICo+CisqLworCisldHlwZW1hcChpbiwgbnVtaW5wdXRz
PTApIGFwcl9hcnJheV9oZWFkZXJfdCAqKnByb3BzIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXAp
IHsKKyAgICAkMSA9ICZ0ZW1wOworfQorCisvKiBzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCBp
cyB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBzdm5fY2xpZW50X3Byb3BsaXN0KCkuCisgICBUaGUgcHl0
aG9uIGJpbmRpbmdzIGNvbnZlcnQgaXQgdG8gYSBuYXRpdmUgcHl0aG9uIHR1cGxlLiAqLworI2lm
ZGVmIFNXSUdQWVRIT04KKyAgICAlaWdub3JlIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90Owor
I2VuZGlmCisldHlwZW1hcChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBl
ciIpIGFwcl9hcnJheV9oZWFkZXJfdCAqKnByb3BzCit7CisgICAgc3ZuX2NsaWVudF9wcm9wbGlz
dF9pdGVtX3QgKipwcGl0ZW07CisgICAgaW50IGk7CisgICAgaW50IG5lbHRzID0gKCokMSktPm5l
bHRzOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhuZWx0cyk7CisgICAgaWYgKGxp
c3QgPT0gTlVMTCkKKyAgICAgICAgU1dJR19mYWlsOworICAgIHBwaXRlbSA9IChzdm5fY2xpZW50
X3Byb3BsaXN0X2l0ZW1fdCAqKikoKiQxKS0+ZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmVs
dHM7ICsraSwgKytwcGl0ZW0pIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVR1cGxlX05l
dygyKTsKKyAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6
ZSgoKnBwaXRlbSktPm5vZGVfbmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKnBwaXRlbSktPm5vZGVfbmFtZS0+bGVuKTsKKyAg
ICAgICAgUHlPYmplY3QgKmhhc2ggPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KCgqcHBp
dGVtKS0+cHJvcF9oYXNoKTsKKworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMIHx8IG5hbWUgPT0g
TlVMTCB8fCBoYXNoID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoaXRlbSk7Cisg
ICAgICAgICAgICBQeV9YREVDUkVGKG5hbWUpOworICAgICAgICAgICAgUHlfWERFQ1JFRihoYXNo
KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgICAgIFNXSUdfZmFpbDsK
KyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDAsIG5hbWUpOworICAg
ICAgICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDEsIGhhc2gpOworCisgICAgICAgIFB5TGlzdF9T
RVRfSVRFTShsaXN0LCBpLCBpdGVtKTsKKyAgICB9CisgICAgJHJlc3VsdCA9IHRfb3V0cHV0X2hl
bHBlcigkcmVzdWx0LCBsaXN0KTsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0KSBhcHJfYXJy
YXlfaGVhZGVyX3QgKipwcm9wcworeworICAkcmVzdWx0ID0gc3ZuX3N3aWdfcmJfYXByX2FycmF5
X3RvX2FycmF5X3Byb3BsaXN0X2l0ZW0oKiQxKTsKK30KKworJXR5cGVtYXAocnVieSwgb3V0KSBh
cHJfaGFzaF90ICpwcm9wX2hhc2gKK3sKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX3Byb3BfaGFz
aF90b19oYXNoKCQxKTsKK30KKworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBhcHJfYXJyYXlfaGVh
ZGVyX3QgKipwcm9wcyB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXko
KiQxLAorICAgICAgJGRlc2NyaXB0b3Ioc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKikpOwor
ICAgIGFyZ3ZpKys7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgYXByX2hhc2hfdCAqcHJvcF9o
YXNoIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfcHJvcGhhc2hfdG9faGFzaCgkMSk7Cisg
ICAgYXJndmkrKzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2xp
ZW50X2dldF9jb21taXRfbG9nX3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFw
KHB5dGhvbixpbikgKHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2dfdCBsb2dfbXNnX2Z1bmMsIAor
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9nX21zZ19iYXRvbikgeworCisgICQxID0gc3Zu
X3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5j
dGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2NsaWVu
dF9nZXRfY29tbWl0X2xvZzJfdCBsb2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICB2
b2lkICpsb2dfbXNnX2JhdG9uMikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9nZXRfY29tbWl0X2xv
Z19mdW5jMjsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBf
Z2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2Fs
bGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CisgICBzdm5fY2xpZW50X2N0eF90CisqLworCisldHlw
ZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNhbmNlbF9mdW5jLCB2b2lkICpjYW5j
ZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2FuY2VsX2Z1bmM7CisgICQyID0gKHZv
aWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9w
b29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5
X2Z1bmMyX3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHJ1YnksIGluKSAo
c3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5jMiwgdm9pZCAqbm90aWZ5X2JhdG9uMikK
K3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9ub3RpZnlfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5f
c3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30K
KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jbGllbnRfYmxhbWVfcmVj
ZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9ibGFtZSgpCisqLworCisldHlwZW1hcChweXRob24sIGlu
KSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfY2xp
ZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKwor
JXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVy
LAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgJDEgPSBz
dm5fc3dpZ19wbF9ibGFtZV9mdW5jOworICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlz
IHRoZSBiYXRvbi4gKi8KK30KKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2xpZW50X2JsYW1l
X3JlY2VpdmVyX3QgcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVy
X2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3JiX2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5j
OworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxf
c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog
c3ZuX2luZm9fcmVjZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFw
KHB5dGhvbiwgaW4pIChzdm5faW5mb19yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlf
aW5mb19yZWNlaXZlcl9mdW5jOworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIFdlIHVzZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3Vz
dG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBpbiB0aGUKKyAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJ
RyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CisgICBhZGRpbmcg
YSBzaW1wbGUgZGVjbGFyYXRpb24gaGVyZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0
LgorICAgRklYTUU6IFRoaXMgbWF5IGJlIHVudHJ1ZS4gU2VlIHN2bl93Y19zdGF0dXMsIGV0Yy4K
KyovCisldHlwZXMoc3ZuX3djX3N0YXR1c190ICopOworCisvKiBXZSBhbHNvIG5lZWQgU1dJRyB0
byB3cmFwIHN2bl9kaXJlbnRfdCBhbmQgc3ZuX2xvY2tfdCBmb3IgdXMuICBUaGV5CisgICBkb24n
dCBhcHBlYXIgaW4gYW55IEFQSSwgYnV0IHN2bl9jbGllbnRfbHMgcmV0dXJucyBhIGhhc2ggb2Yg
cG9pbnRlcnMKKyAgIHRvIGRpcmVudHMgYW5kIGxvY2tzLiAqLworJXR5cGVzKHN2bl9kaXJlbnRf
dCAqKTsKKyV0eXBlcyhzdm5fbG9ja190ICopOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0aHVu
ayB0aGUgdmFyaW91cyBhdXRoZW50aWNhdGlvbiBwcm9tcHQgZnVuY3Rpb25zLgorICBQRVJMIE5P
VEU6IHN0b3JlIHRoZSBpbnB1dGVkIFNWIGluIF9nbG9iYWxfY2FsbGJhY2sgZm9yIHVzZSBpbiB0
aGUKKyAgICAgICAgICAgICBsYXRlciBhcmdvdXQgdHlwZW1hcAorKi8KKyV0eXBlbWFwKHBlcmw1
LCBpbikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19w
bF90aHVua19zaW1wbGVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7Cisg
ICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBp
bikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlf
YXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChy
dWJ5LCBpbikgKHN2bl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAg
ICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2ln
X3JiX2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y
Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5
cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRf
ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQx
ID0gc3ZuX3N3aWdfcGxfdGh1bmtfdXNlcm5hbWVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJh
Y2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5
cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jX3QgcHJvbXB0
X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAg
JDEgPSBzdm5fc3dpZ19weV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jOworICAgICQyID0gJGlu
cHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0aF91c2VybmFtZV9wcm9tcHRfZnVu
Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv
bikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuYzsKKyAg
ICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3Zu
X3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9z
ZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3Ns
X3NlcnZlcl90cnVzdF9wcm9tcHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAg
ICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGlu
KSAoc3ZuX2F1dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAor
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5f
c3dpZ19weV9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5w
dXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJv
bXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21w
dF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfc2VydmVyX3RydXN0X3By
b21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1
dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAo
c3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dp
Z19wbF90aHVua19zc2xfY2xpZW50X2NlcnRfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sg
PSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVt
YXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVuY190IHBy
b21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgewor
ICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmM7Cisg
ICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGll
bnRfY2VydF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xp
ZW50X2NlcnRfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf
YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChw
ZXJsNSwgaW4pIChzdm5fYXV0aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmNfdCBwcm9t
cHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAg
ICAkMSA9IHN2bl9zd2lnX3BsX3RodW5rX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHQ7CisgICAg
X2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2Fs
bGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0
X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRf
Y2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1Ynks
IGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1
bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEg
PSBzdm5fc3dpZ19yYl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAk
MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3
aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3IgYWxsIHRoZSB2YXJp
b3VzIGZ1bmN0aW9ucyB0aGF0IHNldCBhIGNhbGxiYWNrIGJhdG9uIGNyZWF0ZSBhIHJlZmVyZW5j
ZQorICogZm9yIHRoZSBiYXRvbiAod2hpY2ggaW4gdGhpcyBjYXNlIGlzIGFuIFNWIHBvaW50aW5n
IHRvIHRoZSBjYWxsYmFjaykKKyAqIGFuZCBtYWtlIHRoYXQgYSByZXR1cm4gZnJvbSB0aGUgZnVu
Y3Rpb24uICBUaGUgcGVybCBzaWRlIHNob3VsZAorICogdGhlbiBzdG9yZSB0aGUgcmV0dXJuIGlu
IHRoZSBvYmplY3QgdGhlIGJhdG9uIGlzIGF0dGFjaGVkIHRvLgorICogSWYgdGhlIGZ1bmN0aW9u
IGFscmVhZHkgcmV0dXJucyBhIHZhbHVlIHRoZW4gdGhpcyB2YWx1ZSBpcyBmb2xsb3dzIHRoYXQK
KyAqIGZ1bmN0aW9uLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHByb21wdCBmdW5jdGlvbnMgYXV0aF9v
cGVuX2hlbHBlciBpbiBDb3JlLnBtCisgKiBpcyB1c2VkIHRvIHNwbGl0IHVwIHRoZXNlIHZhbHVl
cy4KKyovCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSB2b2lkICpDQUxMQkFDS19CQVRPTiAoU1Yg
KiBfZ2xvYmFsX2NhbGxiYWNrKSB7CisgIC8qIGNhbGxiYWNrIGJhdG9uICovCisgICRyZXN1bHQg
PSBzdl8ybW9ydGFsIChuZXdSVl9pbmMgKF9nbG9iYWxfY2FsbGJhY2spKTsgYXJndmkrKzsgfQor
CisldHlwZW1hcChwZXJsNSwgaW4pIHZvaWQgKkNBTExCQUNLX0JBVE9OIChTViAqIF9nbG9iYWxf
Y2FsbGJhY2spIHsKKyAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgJDEgPSAodm9pZCAq
KSBfZ2xvYmFsX2NhbGxiYWNrOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSB2b2lkICpD
QUxMQkFDS19CQVRPTiB7CisgIHZvaWQgKnByb21wdF9iYXRvbiwKKyAgdm9pZCAqbm90aWZ5X2Jh
dG9uLAorICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICB2b2lkICpjYW5jZWxfYmF0b24KK30KKyNl
bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTgorewor
ICB2b2lkICpub3RpZnlfYmF0b24yLAorICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgdm9pZCAq
Y2FuY2VsX2JhdG9uCit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgKiBDb252ZXJ0
IHBlcmwgaGFzaGVzIGJhY2sgaW50byBhcHJfaGFzaF90ICogZm9yIHNldHRpbmcgdGhlIGNvbmZp
ZworICogbWVtYmVyIG9mIHRoZSBzdm5fY2xpZW50X2N0eF90LiAgIFRoaXMgaXMgYW4gdWdseSBo
YWNrLCBpdCB3aWxsCisgKiBhbHdheXMgYWxsb2NhdGUgdGhlIG5ldyBhcHJfaGFzaF90IG91dCBv
ZiB0aGUgZ2xvYmFsIGN1cnJlbnRfcG9vbAorICogSXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2Ug
YXByX2hhc2hfdCdzIGludG8gbWFnaWMgdmFyaWFibGVzIGluCisgKiBwZXJsIHRoYXQgYXJlIHRp
ZWQgdG8gdGhlIGFwcl9oYXNoX3QgaW50ZXJmYWNlLiAgVGhpcyB3b3VsZAorICogcmVtb3ZlIHRo
ZSBuZWVkIHRvIGNvbnZlcnQgdG8gYW5kIGZyb20gcGVybCBoYXNocyBhbGwgdGhlIHRpbWUuCisg
Ki8KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5f
c3dpZ19wbF9vYmpzX3RvX2hhc2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19wbF9tYWtl
X3Bvb2wgKChTViAqKU5VTEwpKTsKK30KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2hhc2hf
dCAqY29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfaGFzaCgkMSwgCisg
ICAgJGRlc2NyaXB0b3Ioc3ZuX2NvbmZpZ190ICopKTsKKyAgYXJndmkrKzsKK30KKworI2lmZGVm
IFNXSUdSVUJZCislcnVudGltZSAleworICAjaW5jbHVkZSA8YXByLmg+CisgICNpbmNsdWRlIDxh
cHJfcG9vbHMuaD4KKworICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X3Bvb2wo
dm9pZCkgCisgIHsKKyAgICBzdGF0aWMgYXByX3Bvb2xfdCAqX19zdm5fY2xpZW50X3Bvb2wgPSBO
VUxMOworICAgIGlmICghX19zdm5fY2xpZW50X3Bvb2wpIHsKKyAgICAgIGFwcl9wb29sX2NyZWF0
ZSgmX19zdm5fY2xpZW50X3Bvb2wsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xp
ZW50X3Bvb2w7CisgIH0KKworICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X2Nv
bmZpZ19wb29sKHZvaWQpIAorICB7CisgICAgc3RhdGljIGFwcl9wb29sX3QgKl9fc3ZuX2NsaWVu
dF9jb25maWdfcG9vbCA9IE5VTEw7CisgICAgaWYgKCFfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wp
IHsKKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX19zdm5fY2xpZW50X2NvbmZpZ19wb29sLCBfc3Zu
X2NsaWVudF9wb29sKCkpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X2NvbmZpZ19w
b29sOworICB9CislfQorI2VuZGlmCisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX2hhc2hf
dCAqY29uZmlnIHsKKyAgaWYgKCQxKQorICAgIGFwcl9wb29sX2NsZWFyKF9zdm5fY2xpZW50X2Nv
bmZpZ19wb29sKCkpOworfQorCisldHlwZW1hcChydWJ5LCBpbikgYXByX2hhc2hfdCAqY29uZmln
IHsKKyAgJDEgPSBzdm5fc3dpZ19yYl9oYXNoX3RvX2Fwcl9oYXNoX3N3aWdfdHlwZSgkaW5wdXQs
ICJzdm5fY29uZmlnX3QgKiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX3N2bl9jbGllbnRfY29uZmlnX3Bvb2woKSk7Cit9CisKKyV0eXBlbWFwKHJ1Ynks
IG91dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX2Fwcl9o
YXNoX3RvX2hhc2hfc3dpZ190eXBlKCQxLCAic3ZuX2NvbmZpZ190ICoiKTsKK30KKworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAqIG92ZXJyaWRlIGRlZmF1bHQgdHlwZW1hcCBmb3Igc3ZuX2NsaWVudF9j
b21taXRfaW5mb190IGZvciBwZXJsLiAgU29tZSBjYWxscworICogbmV2ZXIgYWxsb2NhdGUgYW5k
IGZpbGwgdGhlIGNvbW1pdF9pbmZvIHN0cnVjdC4gIFRoaXMgbGV0cyB1cyByZXR1cm4KKyAqIHVu
ZGVmIGZvciB0aGVtLiAgT3RoZXJ3aXNlIHRoZSBvYmplY3Qgd2UgcGFzcyBiYWNrIGNhbiBjYXVz
ZSBjcmFzaGVzICovCisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBzdm5fY2xpZW50
X2NvbW1pdF9pbmZvX3QgKiogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN2
bl9jbGllbnRfY29tbWl0X2luZm9fdCAqIHRlbXAgKSB7CisgICAgdGVtcCA9IE5VTEw7CisgICAg
JDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgc3ZuX2NsaWVudF9jb21t
aXRfaW5mb190ICoqIHsKKyAgICBpZiAoJDEgPT0gTlVMTCkgeworICAgICAgICAkcmVzdWx0ID0g
JlBMX3N2X3VuZGVmOworICAgICAgICBhcmd2aSsrOworICAgIH0gIGVsc2UgeworICAgICAgICAk
cmVzdWx0ID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgICAgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAo
dm9pZCAqKSokMSwKKyAgICAgICAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAg
ICAgICAgYXJndmkrKzsKKyAgICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB3Y3Byb3Bf
Y2hhbmdlcyBtZW1iZXIgb2Ygc3ZuX2NsaWVudF9jb21taXRfaW5mbyBuZWVkcyB0byBiZQorICog
Y29udmVydGVkIGJhY2sgYW5kIGZvcnRoIGZyb20gYW4gYXJyYXkgKi8KKworJXR5cGVtYXAocGVy
bDUsIG91dCkgYXByX2FycmF5X2hlYWRlcl90ICp3Y3Byb3BfY2hhbmdlcyB7CisgICAgJHJlc3Vs
dCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXkoJDEsCisgICAgICAkZGVzY3JpcHRvcihzdm5f
cHJvcF90ICopKTsKKyAgICBhcmd2aSsrOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogd3Jh
cCBzdm5fY2xpZW50X2NyZWF0ZV9jb250ZXh0ICovCisKKyV0eXBlbWFwKHBlcmw1LGluLG51bWlu
cHV0cz0wKSBzdm5fY2xpZW50X2N0eF90ICoqIChzdm5fY2xpZW50X2N0eF90ICp0ZW1wKSB7Cisg
ICAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBzdm5fY2xpZW50X2N0
eF90ICoqIHsKKyAgKCokMSktPm5vdGlmeV9mdW5jID0gc3ZuX3N3aWdfcGxfbm90aWZ5X2Z1bmM7
CisgICgqJDEpLT5ub3RpZnlfYmF0b24gPSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICgqJDEp
LT5sb2dfbXNnX2Z1bmMgPSBzdm5fc3dpZ19wbF9nZXRfY29tbWl0X2xvZ19mdW5jOworICAoKiQx
KS0+bG9nX21zZ19iYXRvbiA9ICh2b2lkICopICZQTF9zdl91bmRlZjsKKyAgKCokMSktPmNhbmNl
bF9mdW5jID0gc3ZuX3N3aWdfcGxfY2FuY2VsX2Z1bmM7CisgICgqJDEpLT5jYW5jZWxfYmF0b24g
PSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICRyZXN1bHQgPSBzdl9uZXdtb3J0YWwoKTsKKyAg
U1dJR19NYWtlUHRyKCRyZXN1bHQsICh2b2lkICopKiQxLAorICAgICAgICAgICAgICAgJCoxX2Rl
c2NyaXB0b3IsIDApOworICBhcmd2aSsrOworfSAgCisKKy8qIHN2bl9jbGllbnRfdXBkYXRlMiAq
LworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipy
ZXN1bHRfcmV2cyAoYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wKQoreworICAkMSA9ICZ0ZW1wOwor
fQorCisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXBy
X2FycmF5X2hlYWRlcl90ICoqcmVzdWx0X3JldnMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxw
ZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3N2bl9yZXYoKiQxKSk7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2lu
Y2x1ZGUgInN3aWd1dGlsX3B5LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVk
ZSAic3dpZ3V0aWxfcGwuaCIKKyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxh
cHUuaD4KKyNpbmNsdWRlIDxhcHJfeGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgor
I2VuZGlmCislfQorCislaW5jbHVkZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX2NsaWVu
dF9oLnN3ZworCisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFj
Y2VzcyB0byBzb21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5f
c3dpZ19weV9jYW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9n
Ml90IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3djX25v
dGlmeV9mdW5jMl90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKworI2lmZGVm
IFNXSUdSVUJZCislaW5saW5lICV7CitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X2xvZ19t
c2dfZnVuYzIoc3ZuX2NsaWVudF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IGxvZ19tc2dfZnVuYzIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmxvZ19tc2dfZnVu
YzIgPSBsb2dfbXNnX2Z1bmMyOworICBjdHgtPmxvZ19tc2dfYmF0b24yID0gbG9nX21zZ19iYXRv
bjI7CisgIHJldHVybiAoVkFMVUUpbG9nX21zZ19iYXRvbjI7Cit9CisgCitzdGF0aWMgVkFMVUUK
K3N2bl9jbGllbnRfc2V0X25vdGlmeV9mdW5jMihzdm5fY2xpZW50X2N0eF90ICpjdHgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5j
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpub3RpZnlfYmF0b24yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGN0eC0+bm90
aWZ5X2Z1bmMyID0gbm90aWZ5X2Z1bmMyOworICBjdHgtPm5vdGlmeV9iYXRvbjIgPSBub3RpZnlf
YmF0b24yOworICByZXR1cm4gKFZBTFVFKW5vdGlmeV9iYXRvbjI7Cit9CisKK3N0YXRpYyBWQUxV
RQorc3ZuX2NsaWVudF9zZXRfY2FuY2VsX2Z1bmMoc3ZuX2NsaWVudF9jdHhfdCAqY3R4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2NhbmNlbF9mdW5jX3QgY2FuY2VsX2Z1bmMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYW5jZWxfYmF0b24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBjdHgtPmNhbmNlbF9mdW5j
ID0gY2FuY2VsX2Z1bmM7CisgIGN0eC0+Y2FuY2VsX2JhdG9uID0gY2FuY2VsX2JhdG9uOworICBy
ZXR1cm4gKFZBTFVFKWNhbmNlbF9iYXRvbjsKK30KKyV9CisjZW5kaWYKZGlmZiAtTnVyIHN1YnZl
cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9kZWx0YS5pIHN1YnZlcnNp
b24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fZGVsdGEuaQotLS0gc3Vi
dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJMjAwNS0w
OS0yOSAwMDo1Njo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fZGVsdGEuaQkyMDA2LTA3LTA0IDEzOjI2OjA1LjAw
MDAwMDAwMCArMDEwMApAQCAtNDcsNyArNDcsOCBAQAogICAgIGNvbnN0IGNoYXIgKmVycm9yX2lu
Zm8sCiAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0aCwKICAgICBjb25zdCBjaGFyICpjb3B5
X3BhdGgsCi0gICAgY29uc3QgY2hhciAqYmFzZV9jaGVja3N1bQorICAgIGNvbnN0IGNoYXIgKmJh
c2VfY2hlY2tzdW0sCisgICAgY29uc3QgY2hhciAqdGV4dF9jaGVja3N1bQogfTsKIAogI2lmZGVm
IFNXSUdQWVRIT04KQEAgLTE0NSw2ICsxNDYsMTcgQEAKIAogJWluY2x1ZGUgc3ZuX2RlbHRhX2gu
c3dnCiAKKyNpZmRlZiBTV0lHUFlUSE9OCislaW5saW5lICV7Citzdm5fZXJyb3JfdCAqc3ZuX2Rl
bHRhX2ludm9rZV90eGRlbHRhX3dpbmRvd19oYW5kbGVyICgKKyAgc3ZuX3R4ZGVsdGFfd2luZG93
X2hhbmRsZXJfdCBoYW5kbGVyLAorICBzdm5fdHhkZWx0YV93aW5kb3dfdCAqd2luZG93LCB2b2lk
ICpiYXRvbikgeworICByZXR1cm4gaGFuZGxlcih3aW5kb3csIGJhdG9uKTsKK30KKyV9CisjZW5k
aWYKKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaGFuZGxlIHN2bl90eGRlbHRhX3RvX3N2bmRp
ZmYoKS4KICovCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9zdm5fcmEuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3
aWcvc3ZuX3JhLmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln
L3N2bl9yYS5pCTIwMDUtMTAtMDQgMTY6NDM6NDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJz
aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkJMjAwNi0wNy0w
NCAxMzoyNjo0NC4wMDAwMDAwMDAgKzAxMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNlbmRpZgogCiAl
aW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVpbmNsdWRlIHN2
bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGFwci5zd2cKQEAgLTQ4LDEzICs1MywxNiBAQAogICAgIGNv
bnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqKnJlcG9ydGVyLAogICAgIHZvaWQgKipyZXBvcnRfYmF0
b24sCiAgICAgc3ZuX2RpcmVudF90ICoqZGlyZW50LAotICAgIHN2bl9sb2NrX3QgKipsb2NrCisg
ICAgc3ZuX2xvY2tfdCAqKmxvY2ssCisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCiB9
OwogCiAlYXBwbHkgYXByX2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07
CislYXBwbHkgYXByX2hhc2hfdCAqKkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9
OwogCiAlYXBwbHkgY29uc3QgY2hhciAqTUFZX0JFX05VTEwgewotICAgIGNvbnN0IGNoYXIgKmNv
bW1lbnQKKyAgICBjb25zdCBjaGFyICpjb21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9r
ZW4KIH07CiAKICVhcHBseSBhcHJfaGFzaF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKQEAgLTExMiw2
ICsxMjAsMTYgQEAKICAgc3ZuX3N3aWdfcmJfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAk
aW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChjb25zdCBz
dm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsIAorICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmNhbGxiYWNrX2JhdG9uKSB7CisgIHN2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcygm
JDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChweXRob24sIGlu
KSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzLCAKKyAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICBzdm5fc3dpZ19weV9zZXR1cF9yYV9j
YWxsYmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKwogJXR5cGVtYXAo
cGVybDUsIGluKSBhcHJfaGFzaF90ICpjb25maWcgewogICAgICQxID0gc3ZuX3N3aWdfcGxfb2Jq
c190b19oYXNoX2J5X25hbWUgKCRpbnB1dCwgInN2bl9jb25maWdfdCAqIiwKIAkJCQkJICAgX2ds
b2JhbF9wb29sKTsKQEAgLTEzNCw2ICsxNTIsMjIgQEAKICAgJDEgPSBzdm5fc3dpZ19yYl9oYXNo
X3RvX2Fwcl9oYXNoX3Jldm51bSgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7CiB9CiAKKyNpZmRlZiBT
V0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxl
ciwgdm9pZCAqaGFuZGxlcl9iYXRvbikKK3sKKyAgICQxID0gc3ZuX3N3aWdfcHlfcmFfZmlsZV9y
ZXZfaGFuZGxlcl9mdW5jOworICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisj
aWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qg
KnJlcG9ydGVyLCB2b2lkICpyZXBvcnRfYmF0b24pCit7CisgICQxID0gKHN2bl9yYV9yZXBvcnRl
cjJfdCAqKSZzd2lnX3B5X3JhX3JlcG9ydGVyMjsKKyAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30K
KyNlbmRpZgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAlewpkaWZmIC1OdXIgc3VidmVyc2lv
bi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZyBzdWJ2ZXJzaW9u
LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZwotLS0gc3Vi
dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkub3JpZwkxOTcw
LTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pLm9yaWcJMjAwNi0wNy0wNCAxMzoyNjow
NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBzdm5fcmEuaSA6ICBT
V0lHIGludGVyZmFjZSBmaWxlIGZvciBzdm5fcmEuaAorICoKKyAqID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBD
b3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBDb2xsYWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxl
IENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0
aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJtcworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0
dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2
ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQor
ICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNv
ZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQor
ICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUg
cmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVy
c2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJ
R1BFUkwpCislbW9kdWxlICJTVk46Ol9SYSIKKyNlbGlmIGRlZmluZWQoU1dJR1JVQlkpCislbW9k
dWxlICJzdm46OmV4dDo6cmEiCisjZWxzZQorJW1vZHVsZSByYQorI2VuZGlmCisKKyVpbmNsdWRl
IHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2dsb2Jh
bC5zd2cKKyVpbXBvcnQgYXByLnN3ZworJWltcG9ydCBjb3JlLmkKKyVpbXBvcnQgc3ZuX3R5cGVz
LnN3ZworJWltcG9ydCBzdm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorCisvKiBi
YWQgcG9vbCBjb252ZW50aW9uLCBhbHNvIHRoZXNlIHNob3VsZCBub3QgYmUgcHVibGljIGludGVy
ZmFjZSBhdCBhbGwKKyAgIGFzIGNvbW1lbnRlZCBieSBzdXNzbWFuLiAqLworJWlnbm9yZSBzdm5f
cmFfc3ZuX2luaXQ7CislaWdub3JlIHN2bl9yYV9sb2NhbF9pbml0OworJWlnbm9yZSBzdm5fcmFf
ZGF2X2luaXQ7CisKKyVhcHBseSBQb2ludGVyIE5PTk5VTEwgeyBzdm5fcmFfY2FsbGJhY2tzMl90
ICpjYWxsYmFja3MgfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICVhcHBseS1pbmcgb2YgdHlw
ZW1hcHMgZGVmaW5lZCBlbHNld2hlcmUKKyovCislYXBwbHkgU1dJR1RZUEUgKipPVVRQQVJBTSB7
CisgICAgc3ZuX3JhX3BsdWdpbl90ICoqLAorICAgIHN2bl9yYV9zZXNzaW9uX3QgKiosCisgICAg
Y29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90ICoqcmVwb3J0ZXIsCisgICAgdm9pZCAqKnJlcG9ydF9i
YXRvbiwKKyAgICBzdm5fZGlyZW50X3QgKipkaXJlbnQsCisgICAgc3ZuX2xvY2tfdCAqKmxvY2ss
CisgICAgY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqCit9OworCislYXBwbHkgYXByX2hhc2hf
dCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CislYXBwbHkgYXByX2hhc2hfdCAq
KkRJUkVOVEhBU0ggeyBhcHJfaGFzaF90ICoqZGlyZW50cyB9OworCislYXBwbHkgY29uc3QgY2hh
ciAqTUFZX0JFX05VTEwgeworICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQsCisgICAgY29uc3QgY2hh
ciAqbG9ja190b2tlbgorfTsKKworJWFwcGx5IGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg
eworICBhcHJfaGFzaF90ICpsb2NrX3Rva2VucywKKyAgYXByX2hhc2hfdCAqcGF0aF90b2tlbnMK
K307CisKKyNpZmRlZiBTV0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NU
UkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
IGhhbmRsZSBzdm5fcmFfZ2V0X2xvY2F0aW9ucygpCisqLworJXR5cGVtYXAocHl0aG9uLGluKSBh
cHJfYXJyYXlfaGVhZGVyX3QgKmxvY2F0aW9uX3JldmlzaW9ucyB7CisgICAgJDEgPSAoYXByX2Fy
cmF5X2hlYWRlcl90ICopIHN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXkoJGlucHV0LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZ2xvYmFsX3Bvb2wpOworICAgIGlmICgkMSA9PSBOVUxMKQorICAgICAgICBTV0lHX2ZhaWw7
Cit9CisldHlwZW1hcChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipsb2NhdGlv
bnMgPSBhcHJfaGFzaF90ICoqT1VUUFVUOworJXR5cGVtYXAocHl0aG9uLGFyZ291dCxmcmFnbWVu
dD0idF9vdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2F0aW9ucyB7CisgICAgJHJlc3Vs
dCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBzdm5fc3dpZ19weV9sb2NhdGlvbmhhc2hfdG9f
ZGljdCgqJDEpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHRodW5rIHJhX2NhbGxiYWNr
CisqLworJWFwcGx5IGNvbnN0IGNoYXIgKipPVVRQVVQgeworICAgIGNvbnN0IGNoYXIgKip1cmws
CisgICAgY29uc3QgY2hhciAqKnV1aWQKK307CisKKyVhcHBseSBjb25zdCBhcHJfYXJyYXlfaGVh
ZGVyX3QgKlNUUklOR0xJU1QgeworICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqcGF0aHMK
K307CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqdXBk
YXRlX2VkaXRvciwKKwkJICAgICB2b2lkICp1cGRhdGVfYmF0b24pIHsKKyAgICBzdm5fZGVsdGFf
bWFrZV9lZGl0b3IoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFw
KHBlcmw1LCBpbikgKGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqZGlmZl9lZGl0b3IsCisJCSAg
ICAgdm9pZCAqZGlmZl9iYXRvbikgeworICAgIHN2bl9kZWx0YV9tYWtlX2VkaXRvcigmJDEsICYk
MiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25z
dCBzdm5fcmFfY2FsbGJhY2tzX3QgKmNhbGxiYWNrcywKKwkJICAgICB2b2lkICpjYWxsYmFja19i
YXRvbikgeworICAgIHN2bl9yYV9tYWtlX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xv
YmFsX3Bvb2wpOworfQorCisldHlwZW1hcChydWJ5LCBpbikgKGNvbnN0IHN2bl9yYV9jYWxsYmFj
a3MyX3QgKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0
b24pCit7CisgIHN2bl9zd2lnX3JiX3NldHVwX3JhX2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0
LCBfZ2xvYmFsX3Bvb2wpOworfQorCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX3JhX2NhbGxi
YWNrczJfdCAqY2FsbGJhY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFj
a19iYXRvbikgeworICBzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3MoJiQxLCAmJDIsICRp
bnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSBhcHJfaGFzaF90
ICpjb25maWcgeworICAgICQxID0gc3ZuX3N3aWdfcGxfb2Jqc190b19oYXNoX2J5X25hbWUgKCRp
bnB1dCwgInN2bl9jb25maWdfdCAqIiwKKwkJCQkJICAgX2dsb2JhbF9wb29sKTsKK30KKworJXR5
cGVtYXAocnVieSwgaW4pIChzdm5fcmFfbG9ja19jYWxsYmFja190IGxvY2tfZnVuYywgdm9pZCAq
bG9ja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9yYV9sb2NrX2NhbGxiYWNrOworICAk
MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3
aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3JhX2ZpbGVfcmV2X2hh
bmRsZXJfdCBoYW5kbGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2ln
X3JiX3JhX2ZpbGVfcmV2X2hhbmRsZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtl
X2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAo
cnVieSwgaW4pIGFwcl9oYXNoX3QgKnBhdGhfcmV2cworeworICAkMSA9IHN2bl9zd2lnX3JiX2hh
c2hfdG9fYXByX2hhc2hfcmV2bnVtKCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworI2lmZGVm
IFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoc3ZuX3JhX2ZpbGVfcmV2X2hhbmRsZXJfdCBoYW5k
bGVyLCB2b2lkICpoYW5kbGVyX2JhdG9uKQoreworICAgJDEgPSBzdm5fc3dpZ19weV9yYV9maWxl
X3Jldl9oYW5kbGVyX2Z1bmM7CisgICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisK
KyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJf
dCAqcmVwb3J0ZXIsIHZvaWQgKnJlcG9ydF9iYXRvbikKK3sKKyAgJDEgPSAoc3ZuX3JhX3JlcG9y
dGVyMl90ICopJnN3aWdfcHlfcmFfcmVwb3J0ZXIyOworICAkMiA9ICh2b2lkICopJGlucHV0Owor
fQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhP
TgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisj
aW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNs
dWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVkZSBzdm5fcmFfaC5zd2cK
KwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3Zu
X3djLmkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93
Yy5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fd2Mu
aQkyMDA1LTEwLTIwIDIzOjEwOjU2LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMu
MS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pCTIwMDYtMDctMDQgMTM6MjY6
MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xOTEsNiArMTkxLDIwIEBACiAgICQxID0gc3ZuX3N3aWdf
cmJfYXJyYXlfdG9fYXByX2FycmF5X3Byb3AoJGlucHV0LCBwb29sKTsKIH0KIAorI2lmZGVmIFNX
SUdQWVRIT04KKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkKKyAgICAgYXByX2FycmF5X2hlYWRl
cl90ICoqcGF0dGVybnMgKGFwcl9hcnJheV9oZWFkZXJfdCAqdGVtcCkKK3sKKyAgJDEgPSAmdGVt
cDsKK30KKyV0eXBlbWFwKGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpCisgICAg
IGFwcl9hcnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zCit7CisgICRyZXN1bHQgPSB0X291dHB1dF9o
ZWxwZXIoJHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcHlfYXJy
YXlfdG9fbGlzdCgqJDEpKTsKK30KKyNlbmRpZgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgQ2Fs
bGJhY2s6IHN2bl93Y19ub3RpZnlfZnVuY190CiAgICBzdm5fY2xpZW50X2N0eF90CkBAIC0yMzcs
NiArMjUxLDExIEBACiAgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9u
LiAqLwogfQogCisldHlwZW1hcChweXRob24saW4pIChzdm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgbm90
aWZ5X2Z1bmMsIHZvaWQgKm5vdGlmeV9iYXRvbikgeworICAgJDEgPSBzdm5fc3dpZ19weV9ub3Rp
ZnlfZnVuYzI7CisgICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4g
Ki8KK30KKwogJXR5cGVtYXAocGVybDUsaW4pIChzdm5fd2Nfc3RhdHVzX2Z1bmNfdCBzdGF0dXNf
ZnVuYywgdm9pZCAqc3RhdHVzX2JhdG9uKSB7CiAgICQxID0gc3ZuX3N3aWdfcGxfc3RhdHVzX2Z1
bmM7CiAgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9uLiAqLwpkaWZm
IC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zdm4vY2xpZW50LmMg
c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCi0t
LSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYwkyMDA1
LTEyLTA5IDAxOjU1OjA5LjAwMDAwMDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2NsaWVudC5jCTIwMDYtMDctMDQgMTM6MjY6MDUuMDAw
MDAwMDAwICswMTAwCkBAIC0xMTUxLDExICsxMTUxLDggQEAKICAgICB9CiAgIGFwcl9wb29sX2Rl
c3Ryb3koc3VicG9vbCk7CiAKLSAgaWYgKG5yZWNlaXZlZCA8PSBsaW1pdCkKLSAgICB7Ci0gICAg
ICAvKiBSZWFkIHRoZSByZXNwb25zZS4gKi8KLSAgICAgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFk
X2NtZF9yZXNwb25zZShjb25uLCBwb29sLCAiIikpOwotICAgIH0KKyAgLyogUmVhZCB0aGUgcmVz
cG9uc2UuICovCisgIFNWTl9FUlIoc3ZuX3JhX3N2bl9yZWFkX2NtZF9yZXNwb25zZShjb25uLCBw
b29sLCAiIikpOwogCiAgIHJldHVybiBTVk5fTk9fRVJST1I7CiB9CmRpZmYgLU51ciBzdWJ2ZXJz
aW9uLTEuMy4xL3N1YnZlcnNpb24vbGlic3ZuX3N1YnIvY29uc3RydWN0b3JzLmMgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25zdHJ1Y3RvcnMuYwotLS0gc3Vi
dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbnN0cnVjdG9ycy5jCTIwMDUt
MTAtMTggMTk6NDA6MDIuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9z
dWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2NvbnN0cnVjdG9ycy5jCTIwMDYtMDctMDQgMTM6MjY6MDUu
MDAwMDAwMDAwICswMTAwCkBAIC0zNiw2ICszNiwyMyBAQAogICByZXR1cm4gY29tbWl0X2luZm87
CiB9CiAKK3N2bl9jb21taXRfaW5mb190ICoKK3N2bl9jb21taXRfaW5mb19kdXAoY29uc3Qgc3Zu
X2NvbW1pdF9pbmZvX3QgKnNyY19jb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgYXBy
X3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2NvbW1pdF9pbmZvX3QgKmRzdF9jb21taXRfaW5mbyA9
IHN2bl9jcmVhdGVfY29tbWl0X2luZm8ocG9vbCk7CisKKyAgZHN0X2NvbW1pdF9pbmZvLT5kYXRl
ID0gc3JjX2NvbW1pdF9pbmZvLT5kYXRlCisgICAgPyBhcHJfcHN0cmR1cChwb29sLCBzcmNfY29t
bWl0X2luZm8tPmRhdGUpIDogTlVMTDsKKyAgZHN0X2NvbW1pdF9pbmZvLT5hdXRob3IgPSBzcmNf
Y29tbWl0X2luZm8tPmF1dGhvcgorICAgID8gYXByX3BzdHJkdXAocG9vbCwgc3JjX2NvbW1pdF9p
bmZvLT5hdXRob3IpIDogTlVMTDsKKyAgZHN0X2NvbW1pdF9pbmZvLT5yZXZpc2lvbiA9IHNyY19j
b21taXRfaW5mby0+cmV2aXNpb247CisgIGRzdF9jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJy
ID0gc3JjX2NvbW1pdF9pbmZvLT5wb3N0X2NvbW1pdF9lcnIKKyAgICA/IGFwcl9wc3RyZHVwKHBv
b2wsIHNyY19jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJyKSA6IE5VTEw7CisKKyAgcmV0dXJu
IGRzdF9jb21taXRfaW5mbzsKK30KKwogc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCAqCiBzdm5fbG9n
X2NoYW5nZWRfcGF0aF9kdXAgKGNvbnN0IHN2bl9sb2dfY2hhbmdlZF9wYXRoX3QgKmNoYW5nZWRf
cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK
</contents>
</attachment>
<attachment href="http://librarian.demo.launchpad.net/3255643/rpath.patch">
<type>UNSPECIFIED</type>
<title>Updated rpath patch</title>
<mimetype>text/plain</mimetype>
<contents>ZGlmZiAtdXJOIE1ha2VmaWxlLmluIE1ha2VmaWxlLmluCi0tLSBNYWtlZmlsZS5pbgorKysgTWFr
ZWZpbGUuaW4KQEAgLTE2MCw3ICsxNjAsOCBAQAogQ09NUElMRV9KQVZBSExfSkFWQUMgPSAkKEpB
VkFDKSAkKEpBVkFDX0ZMQUdTKQogQ09NUElMRV9KQVZBSExfSkFWQUggPSAkKEpBVkFIKQogCi1M
SU5LID0gJChMSUJUT09MKSAkKExURkxBR1MpIC0tbW9kZT1saW5rICQoQ0MpICQoTFRfTERGTEFH
UykgJChDRkxBR1MpICQoTERGTEFHUykgLXJwYXRoICQobGliZGlyKQorTElOSyA9ICQoTElCVE9P
TCkgJChMVEZMQUdTKSAtLW1vZGU9bGluayAkKENDKSAkKExUX0xERkxBR1MpICQoQ0ZMQUdTKSAk
KExERkxBR1MpCitMSU5LX0xJQiA9ICQoTElOSykgLXJwYXRoICQobGliZGlyKQogCiAjIHNwZWNp
YWwgbGluayBydWxlIGZvciBtb2RfZGF2X3N2bgogTElOS19BUEFDSEVfTU9EID0gJChMSUJUT09M
KSAkKExURkxBR1MpIC0tbW9kZT1saW5rICQoQ0MpICQoTFRfTERGTEFHUykgJChDRkxBR1MpICQo
TERGTEFHUykgLXJwYXRoICQoQVBBQ0hFX0xJQkVYRUNESVIpIC1hdm9pZC12ZXJzaW9uIC1tb2R1
bGUKQEAgLTYxOCw3ICs2MTksOSBAQAogCS4vY29uZmlnLnN0YXR1cyBzdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvcGVybC9uYXRpdmUvTWFrZWZpbGUuUEwKIAogJChTV0lHX1BMX0RJUikvbmF0aXZl
L01ha2VmaWxlOiAkKFNXSUdfUExfRElSKS9uYXRpdmUvTWFrZWZpbGUuUEwKLQljZCAkKFNXSUdf
UExfRElSKS9uYXRpdmU7ICQoUEVSTCkgTWFrZWZpbGUuUEwKKwljZCAkKFNXSUdfUExfRElSKS9u
YXRpdmU7IFwKKwkJJChQRVJMKSBNYWtlZmlsZS5QTCBJTlNUQUxMRElSUz12ZW5kb3I7IFwKKwkJ
c2VkIC1pIC1lICdzL15MRF9SVU5fUEFUSC8jJi8nIE1ha2VmaWxlIE1ha2VmaWxlLlthLXpdKgog
CiBzd2lnLXBsX0RFUFMgPSBhdXRvZ2VuLXN3aWctcGwgbGlic3ZuX2NsaWVudCBsaWJzdm5fZGVs
dGEgbGlic3ZuX2RpZmYgXAogICBsaWJzdm5fZnMgbGlic3ZuX3JhIGxpYnN2bl9yZXBvcyBsaWJz
dm5fc3ViciBsaWJzdm5fd2MgbGlic3ZuX3N3aWdfcGVybCBcCmRpZmYgLXVyTiBidWlsZC9nZW5l
cmF0b3IvZ2VuX2Jhc2UucHkgYnVpbGQvZ2VuZXJhdG9yL2dlbl9iYXNlLnB5Ci0tLSBidWlsZC9n
ZW5lcmF0b3IvZ2VuX2Jhc2UucHkKKysrIGJ1aWxkL2dlbmVyYXRvci9nZW5fYmFzZS5weQpAQCAt
MzQ0LDcgKzM0NCw3IEBACiAgICAgc2VsZi5pbnN0YWxsID0gb3B0aW9ucy5nZXQoJ2luc3RhbGwn
KQogICAgIHNlbGYuY29tcGlsZV9jbWQgPSBvcHRpb25zLmdldCgnY29tcGlsZS1jbWQnKQogICAg
IHNlbGYuc291cmNlcyA9IG9wdGlvbnMuZ2V0KCdzb3VyY2VzJywgJyouYycpCi0gICAgc2VsZi5s
aW5rX2NtZCA9IG9wdGlvbnMuZ2V0KCdsaW5rLWNtZCcsICckKExJTkspJykKKyAgICBzZWxmLmxp
bmtfY21kID0gb3B0aW9ucy5nZXQoJ2xpbmstY21kJywgJyQoTElOS19MSUIpJykKIAogICAgIHNl
bGYuZXh0ZXJuYWxfbGliID0gb3B0aW9ucy5nZXQoJ2V4dGVybmFsLWxpYicpCiAgICAgc2VsZi5l
eHRlcm5hbF9wcm9qZWN0ID0gb3B0aW9ucy5nZXQoJ2V4dGVybmFsLXByb2plY3QnKQpAQCAtMzk1
LDYgKzM5NSw3IEBACiAgICAgICBleHRtYXAgPSBzZWxmLmdlbl9vYmouX2V4dGVuc2lvbl9tYXAK
ICAgICAgIHNlbGYub2JqZXh0ID0gZXh0bWFwWydleGUnLCAnb2JqZWN0J10KICAgICAgIHNlbGYu
ZmlsZW5hbWUgPSBidWlsZF9wYXRoX2pvaW4oc2VsZi5wYXRoLCBuYW1lICsgZXh0bWFwWydleGUn
LCAndGFyZ2V0J10pCisgICAgICBzZWxmLmxpbmtfY21kID0gJyQoTElOSyknCiAKICAgICBzZWxm
Lm1hbnBhZ2VzID0gb3B0aW9ucy5nZXQoJ21hbnBhZ2VzJywgJycpCiAgICAgc2VsZi50ZXN0aW5n
ID0gb3B0aW9ucy5nZXQoJ3Rlc3RpbmcnKQpkaWZmIC11ck4gYnVpbGQuY29uZiBidWlsZC5jb25m
Ci0tLSBidWlsZC5jb25mCisrKyBidWlsZC5jb25mCkBAIC0zNTYsNyArMzU2LDcgQEAKIGxhbmcg
PSBweXRob24KIHBhdGggPSBzdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9z
d2lnX3B5CiBsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBsaWJzdm5fZGVsdGEgbGli
c3ZuX3djIGFwcgotbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9MSUJTKQorbGluay1jbWQg
PSAkKExJTktfTElCKSAkKFNXSUdfUFlfTElCUykKIGluc3RhbGwgPSBzd2lnLXB5LWxpYgogIyBu
ZWVkIHNwZWNpYWwgYnVpbGQgcnVsZSB0byBpbmNsdWRlIC1EU1dJR1BZVEhPTgogY29tcGlsZS1j
bWQgPSAkKENPTVBJTEVfU1dJR19QWSkKLS0tIGJ1aWxkL2dlbmVyYXRvci9nZW5fbWFrZS5weQor
KysgYnVpbGQvZ2VuZXJhdG9yL2dlbl9tYWtlLnB5CkBAIC00MDgsOCArNDA4LDggQEAKICAgICAg
ICAgICBuYW1lID0gc3RyaW5nLnJlcGxhY2UoYmFzZSwgJ21vZF8nLCAnJykKICAgICAgICAgICBz
ZWxmLm9maWxlLndyaXRlKCdcdGNkICVzIDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
JyQoTUtESVIpICIkKEFQQUNIRV9MSUJFWEVDRElSKSIgOyAnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAnJChJTlNUQUxMX01PRF9TSEFSRUQpIC1uICVzICVzXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIChkaXJuYW1lLCBuYW1lLCBmbmFtZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnJChJTlNUQUxMX0xJQikgJXMgJChBUEFDSEVfTElCRVhFQ0RJUilcbicKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICUgKGRpcm5hbWUsIGZuYW1lKSkKICAgICAgICAgICBp
ZiBleHQgPT0gJy5sYSc6CiAgICAgICAgICAgICBsYV90d2Vha2VkW2ZpbGUgKyAnLWEnXSA9IE5v
bmUKIAo=
</contents>
</attachment>
<attachment href="http://librarian.demo.launchpad.net/3257726/python-fixes.patch">
<type>UNSPECIFIED</type>
<title>Final version of python-fixes.patch</title>
<mimetype>text/plain</mimetype>
<contents>ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l
dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNCAx
OTowMDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv
bmYJMjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA
QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2
bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs
aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M
SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv
IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6
MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAw
MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo
IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt
aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK
KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o
YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh
c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo
X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h
cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo
X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB
U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo
YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w
eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50
PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg
PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq
JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ
Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x
L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3
ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w
cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2
ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h
cHIuc3dnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy
LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0
dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg
ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl
cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp
OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk
X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug
LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1
Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h
bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg
ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v
d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6
CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt
b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg
J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl
eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg
aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du
ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1
dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O
dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94
eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDQg
MTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz
c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O
CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl
bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0
IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx
dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0
aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor
YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX
SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl
YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl
ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg
ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz
ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv
ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2
YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g
c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz
ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52
YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm
IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK
KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t
YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv
b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw
b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7
CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy
ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor
ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl
bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm
Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0
aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw
cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh
dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj
YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl
dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp
Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg
ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor
ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh
bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k
IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g
aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs
Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs
aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh
ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi
IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi
CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh
cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl
ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s
LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5
LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg
ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp
ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w
b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k
ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj
ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj
YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs
aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg
ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu
X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg
ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg
YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp
ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l
ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi
IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u
dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v
bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug
Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293
bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg
c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm
c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl
Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor
ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz
ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz
IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293
bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09
IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm
IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg
cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg
ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg
ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg
PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0
IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg
aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg
ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug
ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl
YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr
cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk
ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f
cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw
b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK
KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl
bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz
IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy
KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo
c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor
ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv
ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K
KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv
bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt
MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDQgMTk6
MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg
Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh
bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t
aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2
MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl
ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj
aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh
bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH
UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p
ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr
OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p
ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h
cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk
aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM
TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp
bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ
eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K
K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs
bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq
LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5
T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5
X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm
ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln
X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu
ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n
IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz
dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl
cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy
c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz
LnN3Zy5vcmlnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs
Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu
X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg
Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz
IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg
dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu
b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl
IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh
ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1
bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4
YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu
ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5
cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu
c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl
IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO
b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0
eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs
IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq
Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9
CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk
KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy
dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp
IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h
cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq
T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg
IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f
c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ
dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl
bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu
dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB
UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor
JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ
VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw
cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf
Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh
cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw
IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt
YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor
I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF
X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF
X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz
ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw
KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy
Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K
KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg
c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl
dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g
TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w
dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg
ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB
UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT
dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo
Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK
KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq
KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg
eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds
b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP
X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg
X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf
VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n
KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm
aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg
bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl
ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs
bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt
YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0
KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK
KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl
bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5
IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K
KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM
TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP
Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m
YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v
bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx
KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF
cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu
ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg
IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0
LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl
c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l
d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx
LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp
IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor
ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR
bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw
IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg
YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0
eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz
aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p
bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg
PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf
dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw
KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90
ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx
KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk
MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7
CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G
TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn
bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91
dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo
aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv
IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u
LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry
aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor
ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H
RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ
VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg
JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw
IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg
ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy
b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo
YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l
bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy
ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp
bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg
c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i
amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg
ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U
eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX
SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp
bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo
cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg
ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf
cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp
IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv
YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor
eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf
cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf
cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5
VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm
JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192
YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0
LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy
ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg
ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp
bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg
IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp
ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor
ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi
cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9
IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z
d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0
ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor
ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2
bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7
CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s
ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs
X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h
cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg
ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ
TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK
KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5
X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs
IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w
b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s
ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw
KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg
YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw
cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg
YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w
b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv
b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4
LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn
YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz
dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor
ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm
LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp
OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf
c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf
dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z
d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji
X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK
KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg
ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor
JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg
IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj
ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj
b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5
LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K
KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl
aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f
cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz
c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg
ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l
c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu
X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2
b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh
bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr
OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg
ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu
KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg
eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g
KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh
bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh
bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z
d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf
YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo
cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi
YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy
ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog
c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs
X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3
aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl
IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh
bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu
Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg
X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh
bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2
bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk
MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y
Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq
LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu
Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t
YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf
cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s
KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk
ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv
cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h
cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2
bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl
bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry
ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f
dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh
cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor
ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr
OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z
d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw
ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf
YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2
b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp
bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p
Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop
JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0
b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln
bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf
Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w
dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg
ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo
c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx
X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv
cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu
ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la
RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy
Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO
WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5
U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf
cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl
c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w
b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw
ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs
cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t
ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k
NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs
NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0
cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw
ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz
dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg
c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq
LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl
c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg
QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu
ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7
CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs
eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK
K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld
IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK
KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl
dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8
fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm
IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f
b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p
ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s
aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv
bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg
fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT
dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp
ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg
ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0
cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g
c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu
cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y
ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ
UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2
aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu
X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg
ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp
bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j
cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g
J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp
bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg
KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg
ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH
X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0
ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g
b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1
bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2
bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl
djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp
CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5
cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o
YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1
dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o
ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny
aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor
JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy
X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp
cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok
MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s
IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7
CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh
c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln
X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi
KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2
bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl
dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo
X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs
IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1
bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf
dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor
JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z
Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs
IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq
bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh
X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh
cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1
YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3
aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor
CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7
CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl
YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog
UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh
bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt
YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg
KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm
YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs
b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl
IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz
IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk
ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm
CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl
X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg
Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0
eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7
CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg
ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu
X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg
YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg
PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz
aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi
CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl
bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf
eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk
ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2
ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf
cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t
MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln
dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz
aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln
X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNCAxOTowMjozNS4wMDAwMDAwMDAgKzAxMDAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf
dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f
c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA
QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh
ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp
IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg
aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf
cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro
cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90
aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh
IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf
cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk
a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg
dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2
YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs
OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog
c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg
cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd
ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl
bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj
aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g
InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh
cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s
KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf
c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp
CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9
IHB5X3Bvb2w7CkBAIC0xNDcsNTUgKzE1MiwxMDYgQEAKIHsKICAgUHlPYmplY3QgKnJlc3VsdDsK
IAotICBpZiAoKnByb3h5ICE9IE5VTEwpIHsKLSAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAg
ICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wpKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKnByb3h5LCBzZXRQYXJlbnRQb29s
LCBlbXB0eVR1cGxlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgICAg
cmV0dXJuIDE7CisgIGlmICgqcHJveHkgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAocG9vbCA9
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
KnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2wsIGVtcHR5VHVw
bGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBQ
eU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9iamVjdFR1cGxlLCAqcHJveHkpOworICAg
ICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAgICAgICpwcm94eSA9IHJlc3VsdDsKICAg
ICAgICAgfQotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChwb29sLCB3cmFwLCBvYmplY3RU
dXBsZSwgKnByb3h5KTsKLSAgICAgIFB5X0RFQ1JFRigqcHJveHkpOwotICAgICAgKnByb3h5ID0g
cmVzdWx0OwogICAgIH0KLSAgfQogCiAgIHJldHVybiAwOwogfQorCisvKiBHZXQgdGhlIHBhcmVu
dCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlv
bgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVu
Y2UhICovCitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkK
K3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJv
eHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJT
dHJpbmcocHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29s
OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZl
cmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYg
b2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94
eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl
ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOwor
ICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xk
UmVmICE9IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlf
cG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRl
bXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RF
Q1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0
ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVw
bGUsIG5ld1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7
Cit9CiAMCiAvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLwogI2RlZmluZSBzdm5fc3dp
Z19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKIAogLyoqIFdyYXBwZXIgZm9yIFNXSUdf
TmV3UG9pbnRlck9iaiAqLwotUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAq
b2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCitQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRl
ck9iaih2b2lkICpvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QgKnBvb2wpCiB7CiAgIFB5T2JqZWN0ICpwcm94eSA9IFNX
SUdfTmV3UG9pbnRlck9iaihvYmosIHR5cGUsIDApOwogCi0gIGlmIChwcm94eSA9PSBOVUxMKSB7
CisgIGlmIChwcm94eSA9PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwotICB9Ci0gIAotICBpZiAo
cHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29sKSkgewotICAgIFB5X0RFQ1JFRihwcm94eSk7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KKworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29s
KSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQogCiAgIHJldHVybiBwcm94eTsKIH0KIAogLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmos
IGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCi1zdGF0aWMg
UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBj
aGFyICp0eXBlLCAKK3N0YXRpYyBQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmlu
Zyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHN3aWdfdHlwZV9p
bmZvICp0eXBlaW5mbyA9IHN2bl9zd2lnX1R5cGVRdWVyeSh0eXBlKTsKLSAgaWYgKHR5cGVpbmZv
ID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90
IGZpbmQgcmVxdWlyZWQgdHlwZW9iamVjdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlm
ICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKICAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBz
b21lIHBvaW50PyAqLwogICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVp
bmZvLCBweV9wb29sKTsKIH0KQEAgLTIwMywyMCArMjU5LDIxIEBACiAvKiogV3JhcHBlciBmb3Ig
U1dJR19Db252ZXJ0UHRyICovCiBpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5w
dXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKQogewotICBpZiAoUHlPYmplY3Rf
SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKSB7Ci0gICAgUHlPYmplY3QgKnJlc3Vs
dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsK
LSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBQ
eV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1
dCwgdW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53
cmFwLCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJu
IDE7CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisg
ICAgeworICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQs
IGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQ
eU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAg
IGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihp
bnB1dCk7CiAgICAgfQotICAgIFB5X0RFQ1JFRihpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJ
R19Db252ZXJ0UHRyKGlucHV0LCBvYmosIHR5cGUsIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAw
KTsKIH0KIApAQCAtMjMxLDMxICsyODgsMjggQEAKIHZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIo
dm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpCiB7Ci0gIGlmIChQeU9iamVjdF9I
YXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwot
ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7CisgIGlmIChQeU9i
amVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAgICAgUHlP
YmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBl
bXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHJlc3Vs
dCk7Ci0gIH0KLSAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkgewotICAgIGlmIChQeU9iamVjdF9IYXNB
dHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKSkgewotICAgICAgKnB5X3Bvb2wgPSBQeU9iamVj
dF9HZXRBdHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKTsKLSAgICAgIFB5X0RFQ1JFRigqcHlf
cG9vbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dpZ19w
eV9wb29sOwotICAgIH0KLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwg
dW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFw
LCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5V
TEw7CisKKyAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkKKyAgICAqcHlfcG9vbCA9IHByb3h5X2dldF9w
b29sKChQeU9iamVjdCAqKSBpbnB1dCk7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
aW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9k
KGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7
CiAgICAgfQotICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOwotICB9CisKICAgcmV0
dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhD
RVBUSU9OIHwgMCk7CiB9Ci0gIAorCiAMCiAvKioqIEN1c3RvbSBTdWJ2ZXJzaW9uRXhjZXB0aW9u
IHN0dWZmcy4gKioqLwogCkBAIC0yODMsNyArMzM3LDcgQEAKIH0KIAogdm9pZCBzdm5fc3dpZ19w
eV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCi17IAorewogICBQeU9iamVjdCAqZXhj
X29iLCAqYXByX2Vycl9vYjsKIAogICBpZiAoZXJyID09IE5VTEwpCkBAIC0yOTUsNyArMzQ5LDcg
QEAKICAgICByZXR1cm47CiAKICAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9u
IG9iamVjdC4gKi8KLSAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F
eGNlcHRpb24sIChjaGFyICopInNPIiwgCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOwogICBpZiAoZXhjX29iID09
IE5VTEwpCiAgICAgewpAQCAtMzQwLDcgKzM5NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKm1ha2Vf
b2JfZnNfcm9vdChzdm5fZnNfcm9vdF90ICpwdHIsIFB5T2JqZWN0ICpweV9wb29sKQogewogICBy
ZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhwdHIsICJzdm5fZnNfcm9vdF90ICoi
LCBweV9wb29sKTsKLX0gCit9CiAvKioqLwogCiAvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNp
bmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCkBAIC0zNDksMjAgKzQwMywy
MiBAQAogewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEg
UHlTdHJpbmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3Ry
aW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy
cm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVy
biBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKIH0KIHN0YXRpYyBz
dm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bv
b2xfdCAqcG9vbCkKIHsKICAgaWYgKG9iID09IFB5X05vbmUpCiAgICAgcmV0dXJuIE5VTEw7Ci0g
IGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAo
ISBQeVN0cmluZ19DaGVjayhvYikpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj
X1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
ICByZXR1cm4gc3ZuX3N0cmluZ19jcmVhdGUoUHlTdHJpbmdfQVNfU1RSSU5HKG9iKSwgcG9vbCk7
CiB9CiAKQEAgLTM4MSwyNSArNDM3LDI4IEBACiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAg
ICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz
aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKSB7CisgICAgZm9yIChoaSA9IGFwcl9oYXNo
X2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsK
ICAgICAgICAgY29uc3Qgdm9pZCAqa2V5OwogICAgICAgICB2b2lkICp2YWw7CiAgICAgICAgIFB5
T2JqZWN0ICp2YWx1ZTsKIAogICAgICAgICBhcHJfaGFzaF90aGlzKGhpLCAma2V5LCBOVUxMLCAm
dmFsKTsKICAgICAgICAgdmFsdWUgPSAoKmNvbnZlcnRlcl9mdW5jKSh2YWwsIGN0eCwgcHlfcG9v
bCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBO
VUxMKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICAvKiAjIyMg
Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwot
ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl
KSA9PSAtMSkgeworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIg
KilrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYo
dmFsdWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7
Ci0gICAgfQorICAgICAgfQogCiAgICAgcmV0dXJuIGRpY3Q7CiB9CkBAIC00NDYsNyArNTA1LDcg
QEAKICAgICAgIHVybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAg
fQotICAgICAgICAKKwogICBpZiAoaXRlbS0+Y29weWZyb21fdXJsKQogICAgIGNmX3VybCA9IFB5
U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+Y29weWZyb21fdXJsKTsKICAgZWxzZQpAQCAtNDU0LDcg
KzUxMyw3IEBACiAgICAgICBjZl91cmwgPSBQeV9Ob25lOwogICAgICAgUHlfSU5DUkVGKFB5X05v
bmUpOwogICAgIH0KLSAgICAgICAgCisKICAga2luZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtp
bmQpOwogICByZXYgPSBQeUludF9Gcm9tTG9uZyhpdGVtLT5yZXZpc2lvbik7CiAgIHN0YXRlID0g
UHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxhZ3MpOwpAQCAtNDg1LDYgKzU0NCw1MiBAQAog
ICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBO
VUxMKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJf
YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05l
dygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBO
VUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewor
ICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92
YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3Bf
dCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOwor
ICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAg
ICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBw
eV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1
ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Au
dmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpCisgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOworICAgICAgICAg
ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAg
ICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJl
dHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90
b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC00OTYsNyArNjAxLDcgQEAKICAgICBpZiAo
ZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZvciAoaGkgPSBhcHJf
aGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpIAorICAg
IGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hf
bmV4dChoaSkpCiAgICAgICB7CiAgICAgICAgIGNvbnN0IHZvaWQgKms7CiAgICAgICAgIHZvaWQg
KnY7CkBAIC01MTAsMTIgKzYxNSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAg
ICAgICAgfQogICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsK
LSAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwp
CisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQ
eV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpIAorICAgICAg
ICAgIH0KKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgdmFsdWUpID09IC0x
KQogICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAg
ICBQeV9ERUNSRUYoZGljdCk7CkBAIC01MjcsMTEgKzYzMywxMSBAQAogICAgIHJldHVybiBkaWN0
OwogfQogCi1QeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhh
c2gsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0
X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQogewogICByZXR1cm4g
Y29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOwot
fSAgCit9CiAKICNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAog
c3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXApAQCAtNTQzLDEz
ICs2NDksMTYgQEAKICAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcobmV3X3Zh
bHVlLCAic3ZuXyIgI3R5cGUgIl90ICoiLCBcCiAgICAgICBuZXdfcHlfcG9vbCk7IFwKIH0KLSAK
KwogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR4ZGVsdGFfd2luZG93LCBzdm5fdHhkZWx0YV93
aW5kb3dfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvZ19jaGFuZ2VkX3BhdGgsIHN2
bl9sb2dfY2hhbmdlZF9wYXRoX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19zdGF0
dXMsIHN2bl93Y19kdXBfc3RhdHVzKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvY2ssIHN2
bl9sb2NrX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihhdXRoX3NzbF9zZXJ2ZXJfY2Vy
dF9pbmZvLAogICAgIHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX2R1cCkKK0RFQ0xBUkVf
U1dJR19DT05TVFJVQ1RPUihpbmZvLCBzdm5faW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RS
VUNUT1IoY29tbWl0X2luZm8sIHN2bl9jb21taXRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O
U1RSVUNUT1Iod2Nfbm90aWZ5LCBzdm5fd2NfZHVwX25vdGlmeSkKIAogc3RhdGljIFB5T2JqZWN0
ICpjb252ZXJ0X2xvZ19jaGFuZ2VkX3BhdGgodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQpA
QCAtNTYyLDE0ICs2NzEsMTUgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7
CiAgICAgY2hhciAqczsKIAotICAgIHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpIHsK
KyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxMKQorICAgICAgewogICAgICAgICBQ
eU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMpOwogCiAgICAgICAgIGlmIChvYiA9
PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBl
bmQobGlzdCwgb2IpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9CisgICAg
ICB9CiAKICAgICByZXR1cm4gbGlzdDsKIApAQCAtNTg0LDE2ICs2OTQsMTcgQEAKICAgYXByX2hh
c2hfdCAqaGFzaDsKICAgUHlPYmplY3QgKmtleXM7CiAgIGludCBpLCBudW1fa2V5czsKLSAgCisK
ICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKIAotICBpZiAoIVB5RGlj
dF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu
b3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCFQeURpY3Rf
Q2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICBo
YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29s
KTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwogICBudW1fa2V5cyA9IFB5TGlzdF9TaXpl
KGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXM7IGkrKykKQEAgLTYwNiw3ICs3MTcs
NyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgIGlmICghIChwcm9wbmFtZSAmJiBw
cm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl
RXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp
bmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwogICAgICAgICAgIHJldHVybiBOVUxM
OwpAQCAtNjI4LDEyICs3MzksMTMgQEAKICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1
cm4gTlVMTDsKIAotICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0
cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KKyAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJf
U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KIAotICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBo
YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwog
ICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tl
eXM7IGkrKykKQEAgLTY0Niw3ICs3NTgsNyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAg
ICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmlu
ZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5
IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMp
OwogICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjY0LDI3ICs3NzYsMzAgQEAKICAgICBpbnQg
dGFyZ2xlbjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2Vx
dWVuY2VfQ2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2Up
KQorICAgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90
IGEgc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAg
IHRhcmdsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJy
YXlfbWFrZShwb29sLCB0YXJnbGVuLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CiAgICAgLyogQVBS
X0FSUkFZX0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3Vu
dAogICAgICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1w
LT5uZWx0cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0
YXJnbGVuLS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJ
dGVtKHNvdXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkgeworICAgICAg
ICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RF
Q1JFRihvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu
b3QgYSBzdHJpbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAg
ICAgICAgfQogICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIGNvbnN0IGNoYXIg
KikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICB9
CisgICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKQEAgLTY5NSwzMiArODEwLDM3IEBACiAg
ICAgaW50IHRhcmdsZW47CiAgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOwogCi0gICAgaWYg
KCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpIHsKKyAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2so
c291cmNlKSkKKyAgICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAg
IH0KICAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKICAgICB0ZW1wID0g
YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOwogICAg
IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0
ZW0gY291bnQKICAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCiAg
ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOwotICAgIHdoaWxlICh0YXJnbGVuLS0pIHsKKyAgICB3
aGlsZSAodGFyZ2xlbi0tKQorICAgICAgewogICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu
Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOwogICAgICAgICBpZiAobyA9PSBOVUxMKQogICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sobykpIHsKLSAg
ICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9IAor
ICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQ
Ul9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAg
IChzdm5fcmV2bnVtX3QpUHlMb25nX0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChQeUludF9DaGVjayhvKSkgewotICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0
YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ
eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl
bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQogICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90
KVB5SW50X0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAg
ICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVn
ZXIgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAg
ICB9CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CkBAIC03
MzcsMTMgKzg1NywxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+
bmVsdHMpOwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsg
KytpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYiA9IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJh
eS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iID0KICAgICAgICAg
ICBQeVN0cmluZ19Gcm9tU3RyaW5nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIGNvbnN0IGNoYXIg
KikpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwogICAg
ICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAgICBy
ZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc1NywxMyArODc4LDE0IEBACiAgICAgUHlPYmpl
Y3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7CiAKLSAgICBm
b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAgICAgUHlPYmplY3QgKm9i
IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAg
ICAgUHlPYmplY3QgKm9iCiAgICAgICAgICAgPSBQeUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURY
KGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg
ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK
LSAgICB9CisgICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiAKICAgZXJyb3I6CkBAIC03NzgsMTMg
KzkwMCwxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMp
OwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKSB7
CisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewogICAgICAg
ICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdAogICAgICAg
ICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiks
IE5VTEwpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwog
ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAg
ICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTgyOSw4ICs5NTIsOCBAQAogICBQeU9iamVj
dCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJh
dG9uKSAqLwogfSBpdGVtX2JhdG9uOwogCi1zdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihh
cHJfcG9vbF90ICpwb29sLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0
ICplZGl0b3IsIAorc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24oYXByX3Bvb2xfdCAqcG9v
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplZGl0b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24pCiB7CiAgIGl0ZW1fYmF0
b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3YikpOwpAQCAtODQ2LDcgKzk2
OSw3IEBACiAgIHJldHVybiBuZXdiOwogfQogCi1zdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2Jh
dG9uKHZvaWQgKmJhdG9uLCAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq
YmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv
ZCkKIHsKICAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKQEAgLTkwNyw3ICsxMDMwLDcgQEAKICAg
LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy
b2JhYmx5IFB5X05vbmUpICovCiAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICBlcnIgPSBTVk5fTk9f
RVJST1I7Ci0gIAorCiAgZmluaXNoZWQ6CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp
OwogICByZXR1cm4gZXJyOwpAQCAtMTAyOCw3ICsxMTUxLDcgQEAKICAgLyogbWFrZV9iYXRvbiB0
YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCiAgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0
b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsK
LSAgCisKICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJl
dHVybiBlcnI7CkBAIC0xMDQ4LDcgKzExNzEsNyBAQAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg
aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCiAgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGly
X3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3Nz
I08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAg
ICB7CkBAIC0xMTEzLDcgKzEyMzYsNyBAQAogICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRv
bjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVycjsKLSAgCisKICAgc3Zu
X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhh
dmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwpAQCAtMTE1OSw3ICsx
MjgyLDcgQEAKICAgICB7CiAgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2lu
ZG93ICovCiAgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBm
b3JtYXQgKi8KLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAo
Y2hhciAqKSJPJiIsIAorICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRs
ZXIsIChjaGFyICopIk8mIiwKICAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93
KTsKICAgICB9CiAKQEAgLTExNzgsNyArMTMwMSw3IEBACiAgIHJldHVybiBlcnI7CiB9CiAKLXN0
YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sIAorc3Rh
dGljIHN2bl9lcnJvcl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tzdW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hh
bmRsZXJfdCAqaGFuZGxlciwKQEAgLTEyMzgsNyArMTM2MSw3IEBACiAgIC8qICMjIyBweXRob24g
ZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNo
YW5nZV9maWxlX3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g
TlVMTCkKICAgICB7CkBAIC0xMjQ5LDcgKzEzNzIsNyBAQAogICAvKiB0aGVyZSBpcyBubyByZXR1
cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8K
ICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisKICBmaW5p
c2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBlcnI7CkBA
IC0xNDQ2LDE5ICsxNTY5LDMwIEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdm5fZXJy
b3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpw
eV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1cm4gU1ZOX05PX0VSUk9S
OworfQorCisKIHN2bl9zdHJlYW1fdCAqCiBzdm5fc3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmpl
Y3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQogewogICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsK
IAogICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMg
c2FmZSBvbmx5IGJlY2F1c2UgdGhlCi0gICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2Ug
aW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlIAorICAgKiBjYWxsZXIgbXVzdCBo
YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQogICAg
KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0
IGJlZm9yZSB3ZSByZXR1cm4KICAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ
IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQogICAgKiBvdmVyIG11bHRpcGxl
IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBQeV9JTkNSRUYocHlfaW8pOwogICBzdHJl
YW0gPSBzdm5fc3RyZWFtX2NyZWF0ZSAocHlfaW8sIHBvb2wpOwogICBzdm5fc3RyZWFtX3NldF9y
ZWFkIChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKICAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUg
KHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfY2xvc2UgKHN0
cmVhbSwgY2xvc2VfaGFuZGxlcl9weWlvKTsKIAogICByZXR1cm4gc3RyZWFtOwogfQpAQCAtMTQ4
MSwxMSArMTYxNSwxMSBAQAogICAgIHJldHVybjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24s
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lp
aSkiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2lu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0
YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9zdGF0
ZSwgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb24pKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l
cnJvcigpOwpAQCAtMTUwNiw2ICsxNjQwLDQxIEBACiB9CiAKIAordm9pZCBzdm5fc3dpZ19weV9u
b3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0
dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5n
IGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIg
PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVG
KHJlc3VsdCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDot
KCAqLworICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2ln
X3B5X3JlbGVhc2VfcHlfbG9jaygpOworfQorCiB2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5j
KHZvaWQgKmJhdG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw
YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1
cykKQEAgLTE1MzQsNyArMTcwMyw3IEBACiAgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8g
Z28uIDotKCAqLwogICBpZiAoZXJyKQogICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOwotICAgIAor
CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwogfQogCkBAIC0xNTg3LDcgKzE3NTYs
NyBAQAogICAgIHJldHVybiBTVk5fTk9fRVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKCk7Ci0gIAorCiAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTYzNyw3ICsxODA2LDcg
QEAKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9CiAKLSAgaWYgKChyZXN1bHQgPSBQ
eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0
X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNoYXIgKikiT08mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY210X2l0ZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl
X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTY1NSw3ICsxODI0LDcgQEAKICAgICAgICps
b2dfbXNnID0gTlVMTDsKICAgICAgIGVyciA9IFNWTl9OT19FUlJPUjsKICAgICB9Ci0gIGVsc2Ug
aWYgKFB5U3RyaW5nX0NoZWNrKHJlc3VsdCkpIAorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhy
ZXN1bHQpKQogICAgIHsKICAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJp
bmdfQVNfU1RSSU5HKHJlc3VsdCkpOwogICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0xNjkw
LDIxICsxODU5LDIzIEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29s
KTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYgKHB5X3Bvb2wgPT0gTlVM
TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg
IGdvdG8gZmluaXNoZWQ7CisgICAgfQogICBweV9yb290ID0gbWFrZV9vYl9mc19yb290KHJvb3Qs
IHB5X3Bvb2wpOwotICBpZiAocHlfcm9vdCA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKHB5X3Bv
b2wpOwotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmlu
aXNoZWQ7IAotICB9CisgIGlmIChweV9yb290ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVD
UkVGKHB5X3Bvb2wpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh
bGxGdW5jdGlvbihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjaGFyICopIk9zTyIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
KikiT3NPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfcm9vdCwg
cGF0aCwgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzQwLDkgKzE5MTEsOSBAQAogICAgIHJldHVybiBTVk5fTk9f
RVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7Ci0gIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmpl
Y3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aCwgcmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs
bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzcwLDE3ICsxOTQxLDE4IEBACiAgIFB5T2Jq
ZWN0ICpyZXN1bHQsICpweV9wb29sOwogICBQeU9iamVjdCAqY2hwYXRoczsKICAgc3ZuX2Vycm9y
X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8
IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCiAgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wo
cG9vbCk7Ci0gIGlmIChweV9wb29sID09IE5VTEwpIHsKLSAgICBlcnIgPSBjYWxsYmFja19leGNl
cHRpb25fZXJyb3IoKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9CisgIGlmIChweV9wb29sID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAogICBpZiAoY2hhbmdlZF9wYXRocykKICAgICB7
CkBAIC0xNzkzLDkgKzE5NjUsOSBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0K
IAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhzLCByZXYsIGF1dGhvciwg
ZGF0ZSwgbXNnLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3Nz
TyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJldiwg
YXV0aG9yLCBkYXRlLCBtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB5X3Bvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOwpAQCAtMTgxNCw2ICsxOTg2LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N2
bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2
bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAg
IHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7
CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZv
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv
b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkK
KyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAg
ICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf
Y2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywK
QEAgLTE4MjYsMTYgKzIwMzAsMTYgQEAKICAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CiAg
IFB5T2JqZWN0ICpyZXN1bHQ7CiAgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7Ci0g
CisKICAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCiAg
ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCisg
IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwg
YXV0aG9yLCBkYXRlLCBsaW5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgImxzc3NPJiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwgYXV0aG9yLCBkYXRlLCBsaW5l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv
b2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOwpAQCAtMTg3MCw5ICsyMDc0LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNzbE8mIiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwg
bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsTyYi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgdXNlcm5hbWUs
IG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i
X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw
dGlvbl9lcnJvcigpOwpAQCAtMTg4Miw3ICsyMDg2LDcgQEAKICAgICAgIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKnRt
cF9jcmVkcyA9IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmco
cmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29u
dmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAg
ICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfc2ltcGxlX3Qg
KiIpOwpAQCAtMTkyMSw5ICsyMTI1LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwp
CiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xOTMz
LDcgKzIxMzcsNyBAQAogICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAg
ICAgICAgICAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICp0bXBfY3JlZHMgPSBOVUxMOwotICAg
ICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRt
cF9jcmVkcywgCisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0
LCAodm9pZCAqKikmdG1wX2NyZWRzLAogICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Vz
ZXJuYW1lX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2Nv
bnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIik7CkBAIC0xOTc0LDcg
KzIxNzgsNyBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgo
cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJzbE8mbE8m
IiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hh
ciAqKSJzbE8mbE8mIiwKICAgICAgICAgICAgICAgICAgIHJlYWxtLCBmYWlsdXJlcywgbWFrZV9v
Yl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvLAogICAgICAgICAgICAgICAgICAgY2VydF9pbmZv
LCBtYXlfc2F2ZSwgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CkBAIC0xOTg2
LDcgKzIxOTAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2Vy
dmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv
bnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk
cywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAg
ICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IKQEAgLTIwMjQs
OSArMjIyOCw5IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwpAQCAtMjAzNyw3ICsyMjQxLDcgQEAK
ICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKnRt
cF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcK
LSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAg
ICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1
dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50
X2NlcnRfdCAqIik7CkBAIC0yMDc1LDkgKzIyNzksOSBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVp
cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki
c2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5
X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg
PT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
QEAgLTIwODgsNyArMjI5Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVk
X3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOwogICAgICAgICAgIGlmIChz
dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCi0gICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq
KSZ0bXBfY3JlZHMsIAorICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRz
LAogICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKiIp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJy
b3IKQEAgLTIxMDgsMyArMjMxMiwzMjMgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJuIGVy
cjsKIH0KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxs
YmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9j
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v
bCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJhY2tzKGNhbGxi
YWNrcywgcG9vbCk7CisKKyAgaWYgKGVycikKKyAgICB7CisgICAgICBzdm5fc3dpZ19weV9zdm5f
ZXhjZXB0aW9uKGVycik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICpiYXRvbiA9IHB5X2Nh
bGxiYWNrczsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazIo
Y29uc3Qgc3ZuX2NvbW1pdF9pbmZvX3QgKmNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAq
cmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVy
ciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZl
ciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5
X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0
aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJPJk8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl9jb21taXRfaW5mbywgY29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJy
ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAg
ICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0
dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQor
CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisK
K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2soc3ZuX3Jldm51bV90IG5l
d19yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpiYXRvbikKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CisgIFB5
T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAg
aWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCisgICAgcmV0
dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor
ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibHNzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3JldmlzaW9uLCBkYXRlLCBhdXRob3IpKSA9
PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwor
ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAg
ICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5
X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2so
KTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmFfZmls
ZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAg
c3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2hhc2hfdCAqcmV2X3By
b3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93aW5kb3dfaGFuZGxlcl90ICpk
ZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGVsdGFfYmF0b24sCisg
ICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqcHJvcF9kaWZmcywKKyAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmhhbmRsZXIg
PSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwgKnB5X3Jldl9wcm9wcyA9IE5VTEwsICpweV9w
cm9wX2RpZmZzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKwor
ICBpZiAoKGhhbmRsZXIgPT0gTlVMTCkgfHwgKGhhbmRsZXIgPT0gUHlfTm9uZSkpCisgICAgcmV0
dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKwor
ICBweV9yZXZfcHJvcHMgPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KHJldl9wcm9wcyk7
CisgIGlmIChweV9yZXZfcHJvcHMgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSB0eXBlX2Nv
bnZlcnNpb25fZXJyb3IoImFwcl9oYXNoX3QgKiIpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9
CisKKyAgcHlfcHJvcF9kaWZmcyA9IHByb3BhcnJheV90b19kaWN0KHByb3BfZGlmZnMpOworCisg
IGlmIChweV9wcm9wX2RpZmZzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252
ZXJzaW9uX2Vycm9yKCJhcHJfYXJyYXlfaGVhZGVyX3QgKiIpOworICAgICAgZ290byBlcnJvcjsK
KyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPT08mIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgcmV2LCBweV9yZXZf
cHJvcHMsIHB5X3Byb3BfZGlmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2Fs
bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYg
KHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vy
cm9yKCJOb3QgTm9uZSIpOworCisgICAgICAvKiBGSVhNRTogU3VwcG9ydCByZXR1cm5lZCBUeERl
bHRhV2luZG93IG9iamVjdCBhbmQKKyAgICAgICAqIHNldCBkZWx0YV9oYW5kbGVyIGFuZCBkZWx0
YV9iYXRvbiAqLworICAgICAgKmRlbHRhX2hhbmRsZXIgPSBOVUxMOworICAgICAgKmRlbHRhX2Jh
dG9uID0gTlVMTDsKKworICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIH0KKworZXJyb3I6
CisKKyAgUHlfWERFQ1JFRihweV9yZXZfcHJvcHMpOworICBQeV9YREVDUkVGKHB5X3Byb3BfZGlm
ZnMpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7
Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfc2V0X3BhdGgodm9pZCAqcmVwb3J0
X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW
Tl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVz
dWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05v
bmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzZXRfcGF0
aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbGJzTyYi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgcmV2aXNpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190b2tl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v
bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y
KCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQ
eV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK
KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9kZWxldGVf
cGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7
CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBv
cnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVM
TCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisK
KyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i
amVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoYXIgKikiZGVsZXRlX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNoYXIgKikic08mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl
cHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg
ICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorICAgIAorc3RhdGljIHN2bl9lcnJvcl90ICpy
ZXBvcnRlcl9saW5rX3BhdGgodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f
dCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fYm9vbGVhbl90IHN0
YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2tf
dG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK
KyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9y
dGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxM
IHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor
ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq
ZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKSJsaW5rX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoYXIgKikic3NsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRoLCB1cmwsIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVz
dWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9l
cnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2
bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRp
YyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCh2b2lkICpyZXBvcnRfYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg
IHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3JlcG9y
dGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxM
IHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor
ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq
ZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKSJmaW5pc2hfcmVwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopIk8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0g
Y2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJO
b3QgTm9uZSIpOworICAgIH0KKworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdf
cHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9l
cnJvcl90ICpyZXBvcnRlcl9hYm9ydF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv
cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVw
b3J0X2JhdG9uLCAqcmVzdWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3Jl
cG9ydGVyID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dp
Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN
ZXRob2QocHlfcmVwb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y2hhciAqKSJhYm9ydF9yZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNoYXIgKikiTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l
eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7
CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNl
X3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitjb25zdCBzdm5fcmFfcmVwb3J0ZXIy
X3Qgc3dpZ19weV9yYV9yZXBvcnRlcjIgPSB7CisgICAgcmVwb3J0ZXJfc2V0X3BhdGgsCisgICAg
cmVwb3J0ZXJfZGVsZXRlX3BhdGgsCisgICAgcmVwb3J0ZXJfbGlua19wYXRoLAorICAgIHJlcG9y
dGVyX2ZpbmlzaF9yZXBvcnQsCisgICAgcmVwb3J0ZXJfYWJvcnRfcmVwb3J0Cit9OwpkaWZmIC1O
dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2
bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJz
aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3Jp
ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xp
YnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw
MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5jLm9yaWcJMjAwNi0wNy0wNCAx
OTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwyNjIzIEBACisvKgorICogc3dpZ3V0
aWxfcHkuYzogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBTV0lHIFB5dGhvbiBiaW5kaW5ncwor
ICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBDb2xsYWJOZXQu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg
YXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJtcworICog
YXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcvbGljZW5z
ZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJlIHBvc3Rl
ZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3Vy
IG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250
cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3QgY29udHJp
YnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxvZ3MsIGF2
YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgKi8KKworLyogVGVsbCBzd2lndXRpbF9weS5oIHRoYXQgd2UncmUgaW5zaWRlIHRoZSBpbXBs
ZW1lbnRhdGlvbiAqLworI2RlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9QWV9DCisKKyNpbmNsdWRl
IDxQeXRob24uaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGFwcl9wb29scy5oPgorI2luY2x1
ZGUgPGFwcl9oYXNoLmg+CisjaW5jbHVkZSA8YXByX3BvcnRhYmxlLmg+CisjaW5jbHVkZSA8YXBy
X3RocmVhZF9wcm9jLmg+CisKKyNpbmNsdWRlICJzdm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3Zu
X3N0cmluZy5oIgorI2luY2x1ZGUgInN2bl9vcHQuaCIKKyNpbmNsdWRlICJzdm5fZGVsdGEuaCIK
KyNpbmNsdWRlICJzdm5fYXV0aC5oIgorI2luY2x1ZGUgInN2bl9wb29scy5oIgorCisjaW5jbHVk
ZSAic3ZuX3ByaXZhdGVfY29uZmlnLmgiIC8qIGZvciBTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICov
CisKKyNpbmNsdWRlICJzd2lnX3B5dGhvbl9leHRlcm5hbF9ydW50aW1lLnN3ZyIKKyNpbmNsdWRl
ICJzd2lndXRpbF9weS5oIgorCisMCisKKy8qKiogTWFuYWdlIHRoZSBHbG9iYWwgSW50ZXJwcmV0
ZXIgTG9jayAqKiovCisKKy8qIElmIGJvdGggUHl0aG9uIGFuZCBBUFIgaGF2ZSB0aHJlYWRzIGF2
YWlsYWJsZSwgd2UgY2FuIG9wdGltaXplIG91cnNlbHZlcworICogYnkgcmVsZWFzaW5nIHRoZSBn
bG9iYWwgaW50ZXJwcmV0ZXIgbG9jayB3aGVuIHdlIGRyb3AgaW50byBvdXIgU1ZOIGNhbGxzLgor
ICoKKyAqIEluIHN2bl90eXBlcy5pLCBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2sgaXMgY2Fs
bGVkIGJlZm9yZSBldmVyeQorICogZnVuY3Rpb24sIHRoZW4gc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrIGlzIGNhbGxlZCBhZnRlciBldmVyeQorICogZnVuY3Rpb24uICBTbywgaWYgdGhlc2Ug
ZnVuY3Rpb25zIGJlY29tZSBuby1vcHMsIHRoZW4gUHl0aG9uIHdpbGwKKyAqIHN0YXJ0IHRvIGJs
b2NrLi4uCisgKgorICogVGhlIFN1YnZlcnNpb24gbGlicmFyaWVzIGNhbiBiZSBhc3N1bWVkIHRv
IGJlIHRocmVhZC1zYWZlICpvbmx5KiB3aGVuCisgKiBBUFJfSEFTX1RIUkVBRCBpcyAxLiAgVGhl
IEFQUiBwb29sIGFsbG9jYXRpb25zIGFyZW4ndCB0aHJlYWQtc2FmZSB1bmxlc3MKKyAqIEFQUl9I
QVNfVEhSRUFEIGlzIDEuCisgKi8KKworI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIEFQUl9I
QVNfVEhSRUFEUworI2RlZmluZSBBQ1FVSVJFX1BZVEhPTl9MT0NLCisjZW5kaWYKKworI2lmZGVm
IEFDUVVJUkVfUFlUSE9OX0xPQ0sKK3N0YXRpYyBhcHJfdGhyZWFka2V5X3QgKl9zYXZlZF90aHJl
YWRfa2V5ID0gTlVMTDsKK3N0YXRpYyBhcHJfcG9vbF90ICpfc2F2ZWRfdGhyZWFkX3Bvb2wgPSBO
VUxMOworI2VuZGlmCisKK3ZvaWQgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKHZvaWQpCit7
CisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworICBQeVRocmVhZFN0YXRlICp0aHJlYWRfc3Rh
dGU7CisKKyAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyog
T2J2aW91c2x5LCBjcmVhdGluZyBhIHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBz
dHVwaWQuICovCisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVM
TCk7CisgICAgICBhcHJfdGhyZWFka2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tl
eSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVh
ZF9wb29sKTsKKyAgICB9CisKKyAgdGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsK
KyAgYXByX3RocmVhZGtleV9wcml2YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRf
a2V5KTsKKyNlbmRpZgorfQorCit2b2lkIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jayh2b2lk
KQoreworI2lmZGVmIEFDUVVJUkVfUFlUSE9OX0xPQ0sKKyAgdm9pZCAqdmFsOworICBQeVRocmVh
ZFN0YXRlICp0aHJlYWRfc3RhdGU7CisgIGFwcl90aHJlYWRrZXlfcHJpdmF0ZV9nZXQoJnZhbCwg
X3NhdmVkX3RocmVhZF9rZXkpOworICB0aHJlYWRfc3RhdGUgPSB2YWw7CisgIFB5RXZhbF9SZXN0
b3JlVGhyZWFkKHRocmVhZF9zdGF0ZSk7CisjZW5kaWYKK30KKworCisMCisvKioqIEF1dG9tYXRp
YyBQb29sIE1hbmFnZW1lbnQgRnVuY3Rpb25zICoqKi8KKworLyogVGhlIGFwcGxpY2F0aW9uIHBv
b2wgKi8KK3N0YXRpYyBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wgPSBOVUxMOworc3RhdGljIFB5
T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworc3RhdGljIGNoYXIgYXNz
ZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOworc3RhdGljIGNoYXIgcGFyZW50UG9vbFtdID0g
Il9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltdID0gIl9hZGRfb3duZWRf
cmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3JlbW92ZV9vd25lZF9yZWYi
Oworc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKK3N0YXRpYyBjaGFyIHVud3JhcFtdID0g
Il91bndyYXAiOworc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0gInNldF9wYXJlbnRfcG9v
bCI7CitzdGF0aWMgY2hhciBlbXB0eVR1cGxlW10gPSAiKCkiOworc3RhdGljIGNoYXIgb2JqZWN0
VHVwbGVbXSA9ICIoTykiOworCisKK2Fwcl9zdGF0dXNfdCBzdm5fc3dpZ19weV9pbml0aWFsaXpl
KHZvaWQpCit7CisgIGFwcl9zdGF0dXNfdCBzdGF0dXM7CisKKyAgaWYgKChzdGF0dXMgPSBhcHJf
aW5pdGlhbGl6ZSgpKSAhPSBBUFJfU1VDQ0VTUykKKyAgICByZXR1cm4gc3RhdHVzOworICBpZiAo
YXRleGl0KGFwcl90ZXJtaW5hdGUpICE9IDApCisgICAgcmV0dXJuIEFQUl9FR0VORVJBTDsKKyAg
cmV0dXJuIEFQUl9TVUNDRVNTOworfQorCisvKiBTZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8K
K3ZvaWQgc3ZuX3N3aWdfcHlfc2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2ws
IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CisgIF9nbG9iYWxf
c3ZuX3N3aWdfcHlfcG9vbCA9IHB5X3Bvb2w7Cit9CisKKy8qIENsZWFyIHRoZSBhcHBsaWNhdGlv
biBwb29sICovCit2b2lkIHN2bl9zd2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2woKQorewor
ICBfZ2xvYmFsX3Bvb2wgPSBOVUxMOworICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxM
OworfQorCisvKiBHZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdfZ2V0
X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKipweV9wb29sLCBhcHJfcG9vbF90ICoqcG9vbCkK
K3sKKyAgKnBvb2wgPSBfZ2xvYmFsX3Bvb2w7CisgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dp
Z19weV9wb29sOworfQorCisvKiBTZXQgdGhlIHBhcmVudCBwb29sIG9mIGEgcHJveHkgb2JqZWN0
ICovCitzdGF0aWMgaW50IHByb3h5X3NldF9wb29sKFB5T2JqZWN0ICoqcHJveHksIFB5T2JqZWN0
ICpwb29sKQoreworICBQeU9iamVjdCAqcmVzdWx0OworCisgIGlmICgqcHJveHkgIT0gTlVMTCkK
KyAgICB7CisgICAgICBpZiAocG9vbCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYg
KFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoKnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHks
IHNldFBhcmVudFBvb2wsIGVtcHR5VHVwbGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09
IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JF
RihyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9i
amVjdFR1cGxlLCAqcHJveHkpOworICAgICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAg
ICAgICpwcm94eSA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gMDsKK30K
KworLyogR2V0IHRoZSBwYXJlbnQgcG9vbCBvZiBhIHByb3h5IG9iamVjdCwgb3IgcmV0dXJuIHRo
ZSBnbG9iYWwgYXBwbGljYXRpb24KKyAqIHBvb2wgaWYgb25lIGlzIG5vdCBzZXQuICBSZXR1cm5z
IGEgQk9SUk9XRUQgcmVmZXJlbmNlISAqLworc3RhdGljIFB5T2JqZWN0ICpwcm94eV9nZXRfcG9v
bChQeU9iamVjdCAqcHJveHkpCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIGlmIChQeU9iamVj
dF9IYXNBdHRyU3RyaW5nKHByb3h5LCBwYXJlbnRQb29sKSkKKyAgICB7CisgICAgICByZXN1bHQg
PSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHByb3h5LCBwYXJlbnRQb29sKTsKKyAgICAgIFB5X0RF
Q1JFRihyZXN1bHQpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlc3VsdCA9IF9nbG9i
YWxfc3ZuX3N3aWdfcHlfcG9vbDsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIENo
YW5nZSBhbiAnb3duZWQgcmVmZXJlbmNlJyBhbGxvY2F0ZWQgaW4gYSBwb29sIGZyb20gb2xkUmVm
IHRvIG5ld1JlZi4KKyAqIElmIG9sZFJlZiBpcyBub24tTlVMTCBhbmQgcHJlc2VudCBpbiB0aGUg
cGFyZW50IHBvb2wgb2YgcHJveHksIGl0IGlzIHJlbW92ZWQuCisgKi8KK2ludCBzdm5fc3dpZ19w
eV9wb29sX3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5LCBQeU9iamVjdCAqb2xkUmVmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3UmVmKQorewor
ICBQeU9iamVjdCAqdGVtcDsKKyAgUHlPYmplY3QgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbChw
cm94eSk7CisKKyAgaWYgKG9sZFJlZiAhPSBOVUxMKQorICAgIHsKKyAgICAgIHRlbXAgPSBQeU9i
amVjdF9DYWxsTWV0aG9kKHB5X3Bvb2wsIHJlbW92ZU93bmVkUmVmLCBvYmplY3RUdXBsZSwgb2xk
UmVmKTsKKyAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgICAg
ZWxzZQorICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgfQorICBpZiAobmV3UmVmICE9IE5V
TEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwgYWRk
T3duZWRSZWYsIG9iamVjdFR1cGxlLCBuZXdSZWYpOworICAgICAgaWYgKHRlbXAgPT0gTlVMTCkK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsK
KyAgICB9CisgIHJldHVybiAwOworfQorDAorLyogV3JhcHBlciBmb3IgU1dJR19UeXBlUXVlcnkg
Ki8KKyNkZWZpbmUgc3ZuX3N3aWdfVHlwZVF1ZXJ5KHgpIFNXSUdfVHlwZVF1ZXJ5KHgpCisKKy8q
KiBXcmFwcGVyIGZvciBTV0lHX05ld1BvaW50ZXJPYmogKi8KK1B5T2JqZWN0ICpzdm5fc3dpZ19O
ZXdQb2ludGVyT2JqKHZvaWQgKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnBy
b3h5ID0gU1dJR19OZXdQb2ludGVyT2JqKG9iaiwgdHlwZSwgMCk7CisKKyAgaWYgKHByb3h5ID09
IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKHByb3h5X3NldF9wb29sKCZwcm94eSwg
cG9vbCkpCisgICAgeworICAgICAgUHlfREVDUkVGKHByb3h5KTsKKyAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICByZXR1cm4gcHJveHk7Cit9CisKKy8qKiBzdm5fc3dpZ19OZXdQb2ludGVy
T2JqLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdHlwZSAqLworc3Rh
dGljIFB5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5nKHZvaWQgKnB0ciwgY29u
c3QgY2hhciAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgc3dpZ190eXBlX2luZm8gKnR5cGVpbmZvID0g
c3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpOworICBpZiAodHlwZWluZm8gPT0gTlVMTCkKKyAgICB7
CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90IGZpbmQgcmVx
dWlyZWQgdHlwZW9iamVjdCIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qICMj
IyBjYWNoZSB0aGUgc3dpZ190eXBlX2luZm8gYXQgc29tZSBwb2ludD8gKi8KKyAgcmV0dXJuIHN2
bl9zd2lnX05ld1BvaW50ZXJPYmoocHRyLCB0eXBlaW5mbywgcHlfcG9vbCk7Cit9CisKKy8qKiBX
cmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQdHIgKi8KK2ludCBzdm5fc3dpZ19Db252ZXJ0UHRyKFB5
T2JqZWN0ICppbnB1dCwgdm9pZCAqKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUpCit7CisgIGlm
IChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAg
ICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZh
bGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQeU9iamVjdF9I
YXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0ID0gUHlPYmpl
Y3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1
dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihpbnB1dCk7Cisg
ICAgfQorCisgIHJldHVybiBTV0lHX0NvbnZlcnRQdHIoaW5wdXQsIG9iaiwgdHlwZSwgU1dJR19Q
T0lOVEVSX0VYQ0VQVElPTiB8IDApOworfQorCisvKiogc3ZuX3N3aWdfQ29udmVydFB0ciwgZXhj
ZXB0IGEgc3RyaW5nIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgKi8KK3N0YXRpYyBpbnQg
c3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhQeU9iamVjdCAqaW5wdXQsCisgICAgdm9pZCAqKm9i
aiwgY29uc3QgY2hhciAqdHlwZSkKK3sKKyAgcmV0dXJuIHN2bl9zd2lnX0NvbnZlcnRQdHIoaW5w
dXQsIG9iaiwgc3ZuX3N3aWdfVHlwZVF1ZXJ5KHR5cGUpKTsKK30KKworLyoqIFdyYXBwZXIgZm9y
IFNXSUdfTXVzdEdldFB0ciAqLwordm9pZCAqc3ZuX3N3aWdfTXVzdEdldFB0cih2b2lkICppbnB1
dCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIGludCBhcmdudW0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIFB5T2JqZWN0ICoqcHlfcG9vbCkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJp
bmcoaW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAg
ICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIFB5X0RF
Q1JFRihyZXN1bHQpOworICAgIH0KKworICBpZiAocHlfcG9vbCAhPSBOVUxMKQorICAgICpweV9w
b29sID0gcHJveHlfZ2V0X3Bvb2woKFB5T2JqZWN0ICopIGlucHV0KTsKKworICBpZiAoUHlPYmpl
Y3RfSGFzQXR0clN0cmluZyhpbnB1dCwgdW53cmFwKSkKKyAgICB7CisgICAgICBpbnB1dCA9IFB5
T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIHVud3JhcCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAo
aW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICBQeV9ERUNSRUYoKFB5
T2JqZWN0ICopIGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1
dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9CisKKwwKKy8q
KiogQ3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gc3R1ZmZzLiAqKiovCisKKy8qIEdsb2JhbCBT
dWJ2ZXJzaW9uRXhjZXB0aW9uIGNsYXNzIG9iamVjdC4gKi8KK3N0YXRpYyBQeU9iamVjdCAqU3Vi
dmVyc2lvbkV4Y2VwdGlvbiA9IE5VTEw7CisKKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2V4Y2Vw
dGlvbl90eXBlKHZvaWQpCit7CisgIFB5X0lOQ1JFRihTdWJ2ZXJzaW9uRXhjZXB0aW9uKTsKKyAg
cmV0dXJuIFN1YnZlcnNpb25FeGNlcHRpb247Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9y
ZWdpc3Rlcl9leGNlcHRpb24odm9pZCkKK3sKKyAgLyogSWYgd2UgaGF2ZW4ndCBjcmVhdGVkIG91
ciBleGNlcHRpb24gY2xhc3MsIGRvIHNvLiAqLworICBpZiAoU3VidmVyc2lvbkV4Y2VwdGlvbiA9
PSBOVUxMKQorICAgIHsKKyAgICAgIFN1YnZlcnNpb25FeGNlcHRpb24gPSBQeUVycl9OZXdFeGNl
cHRpb24KKyAgICAgICAgKChjaGFyICopImxpYnN2bi5fY29yZS5TdWJ2ZXJzaW9uRXhjZXB0aW9u
IiwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgIC8qIFJlZ2FyZGxlc3MsIHJldHVybiB0aGUgZXhj
ZXB0aW9uIGNsYXNzLiAqLworICByZXR1cm4gc3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUoKTsK
K30KKwordm9pZCBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCit7
CisgIFB5T2JqZWN0ICpleGNfb2IsICphcHJfZXJyX29iOworCisgIGlmIChlcnIgPT0gTlVMTCkK
KyAgICByZXR1cm47CisKKyAgLyogTWFrZSBhbiBpbnRlZ2VyIGZvciB0aGUgZXJyb3IgY29kZS4g
Ki8KKyAgYXByX2Vycl9vYiA9IFB5SW50X0Zyb21Mb25nKGVyci0+YXByX2Vycik7CisgIGlmIChh
cHJfZXJyX29iID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qIEluc3RhbnRpYXRlIGEgU3Vi
dmVyc2lvbkV4Y2VwdGlvbiBvYmplY3QuICovCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5j
dGlvbihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOworICBpZiAoZXhjX29i
ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVDUkVGKGFwcl9lcnJfb2IpOworICAgICAgcmV0
dXJuOworICAgIH0KKworICAvKiBTZXQgdGhlICJhcHJfZXJyIiBhdHRyaWJ1dGUgb2YgdGhlIGV4
Y2VwdGlvbiB0byBvdXIgZXJyb3IgY29kZS4gKi8KKyAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJp
bmcoZXhjX29iLCAoY2hhciAqKSJhcHJfZXJyIiwgYXByX2Vycl9vYikgPT0gLTEpCisgICAgewor
ICAgICAgUHlfREVDUkVGKGFwcl9lcnJfb2IpOworICAgICAgUHlfREVDUkVGKGV4Y19vYik7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgIC8qIEZpbmlzaGVkIHdpdGggdGhlIGFwcl9lcnIgb2Jq
ZWN0LiAqLworICBQeV9ERUNSRUYoYXByX2Vycl9vYik7CisKKyAgLyogU2V0IHRoZSBlcnJvciBz
dGF0ZSB0byBvdXIgZXhjZXB0aW9uIG9iamVjdC4gKi8KKyAgUHlFcnJfU2V0T2JqZWN0KFN1YnZl
cnNpb25FeGNlcHRpb24sIGV4Y19vYik7CisKKyAgLyogRmluaXNoZWQgd2l0aCB0aGUgZXhjX29i
IG9iamVjdC4gKi8KKyAgUHlfREVDUkVGKGV4Y19vYik7Cit9CisKKworDAorLyoqKiBIZWxwZXIv
Q29udmVyc2lvbiBSb3V0aW5lcyAqKiovCisKKy8qIEZ1bmN0aW9ucyBmb3IgbWFraW5nIFB5dGhv
biB3cmFwcGVycyBhcm91bmQgU3VidmVyc2lvbiBzdHJ1Y3RzICovCitzdGF0aWMgUHlPYmplY3Qg
Km1ha2Vfb2JfcG9vbCh2b2lkICpwb29sKQoreworICAvKiBSZXR1cm4gYSBicmFuZCBuZXcgZGVm
YXVsdCBwb29sIHRvIFB5dGhvbi4gVGhpcyBwb29sIGlzbid0CisgICAqIG5vcm1hbGx5IHVzZWQg
Zm9yIGFueXRoaW5nLiBJdCdzIGp1c3QgaGVyZSBmb3IgY29tcGF0aWJpbGl0eQorICAgKiB3aXRo
IFN1YnZlcnNpb24gMS4yLiAqLworICBhcHJfcG9vbF90ICpuZXdfcG9vbCA9IHN2bl9wb29sX2Ny
ZWF0ZShfZ2xvYmFsX3Bvb2wpOworICBQeU9iamVjdCAqbmV3X3B5X3Bvb2wgPSBzdm5fc3dpZ19O
ZXdQb2ludGVyT2JqKG5ld19wb29sLAorICAgIHN2bl9zd2lnX1R5cGVRdWVyeSgiYXByX3Bvb2xf
dCAqIiksIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCk7CisgICh2b2lkKSBwb29sOyAvKiBTaWxl
bmNlIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBwYXJhbWV0ZXIuICovCisgIHJldHVy
biBuZXdfcHlfcG9vbDsKK30KK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9mc19yb290KHN2bl9m
c19yb290X3QgKnB0ciwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBzdm5fc3dpZ19O
ZXdQb2ludGVyT2JqU3RyaW5nKHB0ciwgInN2bl9mc19yb290X3QgKiIsIHB5X3Bvb2wpOworfQor
LyoqKi8KKworLyogQ29udmVyc2lvbiBmcm9tIFB5dGhvbiBzaW5nbGUgb2JqZWN0cyAobm90IGhh
c2hlcy9saXN0cy9ldGMuKSB0bworICAgU3VidmVyc2lvbiB0eXBlcy4gKi8KK3N0YXRpYyBjb25z
dCBjaGFyICptYWtlX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bvb2xfdCAqcG9v
bCkKK3sKKyAgaWYgKG9iID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICghIFB5
U3RyaW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw
ZUVycm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJl
dHVybiBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKK30KK3N0YXRp
YyBzdm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXBy
X3Bvb2xfdCAqcG9vbCkKK3sKKyAgaWYgKG9iID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7
CisgIGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJp
bmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisgIHJldHVybiBzdm5fc3RyaW5nX2NyZWF0ZShQeVN0cmluZ19BU19TVFJJTkcob2Ip
LCBwb29sKTsKK30KKworCisvKioqLworCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfaGFzaChh
cHJfaGFzaF90ICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg
KiAoKmNvbnZlcnRlcl9mdW5jKSh2b2lkICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3R4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj
dCAqcHlfcG9vbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjdHgsIFB5
T2JqZWN0ICpweV9wb29sKQoreworICAgIGFwcl9oYXNoX2luZGV4X3QgKmhpOworICAgIFB5T2Jq
ZWN0ICpkaWN0ID0gUHlEaWN0X05ldygpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz
aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKQorICAgICAgeworICAgICAgICBjb25zdCB2
b2lkICprZXk7CisgICAgICAgIHZvaWQgKnZhbDsKKyAgICAgICAgUHlPYmplY3QgKnZhbHVlOwor
CisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrZXksIE5VTEwsICZ2YWwpOworICAgICAgICB2
YWx1ZSA9ICgqY29udmVydGVyX2Z1bmMpKHZhbCwgY3R4LCBweV9wb29sKTsKKyAgICAgICAgaWYg
KHZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3Qp
OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICAvKiAjIyMg
Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwor
ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl
KSA9PSAtMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAg
ICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgICAgfQorICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgfQorCisgICAgcmV0dXJu
IGRpY3Q7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqY29udmVydF90b19zd2lndHlwZSh2b2lkICp2
YWx1ZSwgdm9pZCAqY3R4LCBQeU9iamVjdCAqcHlfcG9vbCkKK3sKKyAgLyogY3R4IGlzIGEgJ3N3
aWdfdHlwZV9pbmZvIConICovCisgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZhbHVl
LCBjdHgsIHB5X3Bvb2wpOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfc3ZuX3N0cmlu
Z190KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICAvKiBjdHggaXMgdW51c2VkICovCisK
KyAgY29uc3Qgc3ZuX3N0cmluZ190ICpzID0gdmFsdWU7CisKKyAgLyogIyMjIGdvdHRhIGNhc3Qg
dGhpcyB0aGluZyBjdXogUHl0aG9uIGRvZXNuJ3QgdXNlICJjb25zdCIgKi8KKyAgcmV0dXJuIFB5
U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcy0+ZGF0YSwgcy0+bGVuKTsKK30KKwor
c3RhdGljIFB5T2JqZWN0ICpjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdCh2b2lkICp2
YWx1ZSwgdm9pZCAqY3R4KQoreworICBQeU9iamVjdCAqbGlzdDsKKyAgUHlPYmplY3QgKnBhdGgs
ICpraW5kLCAqdXJsLCAqcmV2LCAqY2ZfdXJsLCAqc3RhdGU7CisgIHN2bl9jbGllbnRfY29tbWl0
X2l0ZW1fdCAqaXRlbSA9IHZhbHVlOworCisgIC8qIGN0eCBpcyB1bnVzZWQgKi8KKworICBsaXN0
ID0gUHlMaXN0X05ldyg2KTsKKworICBpZiAoaXRlbS0+cGF0aCkKKyAgICBwYXRoID0gUHlTdHJp
bmdfRnJvbVN0cmluZyhpdGVtLT5wYXRoKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHBhdGggPSBQ
eV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIH0KKworICBpZiAoaXRlbS0+
dXJsKQorICAgIHVybCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+dXJsKTsKKyAgZWxzZQor
ICAgIHsKKyAgICAgIHVybCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Cisg
ICAgfQorCisgIGlmIChpdGVtLT5jb3B5ZnJvbV91cmwpCisgICAgY2ZfdXJsID0gUHlTdHJpbmdf
RnJvbVN0cmluZyhpdGVtLT5jb3B5ZnJvbV91cmwpOworICBlbHNlCisgICAgeworICAgICAgY2Zf
dXJsID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAga2lu
ZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtpbmQpOworICByZXYgPSBQeUludF9Gcm9tTG9uZyhp
dGVtLT5yZXZpc2lvbik7CisgIHN0YXRlID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxh
Z3MpOworCisgIGlmICghIChsaXN0ICYmIHBhdGggJiYga2luZCAmJiB1cmwgJiYgcmV2ICYmIGNm
X3VybCAmJiBzdGF0ZSkpCisgICAgeworICAgICAgUHlfWERFQ1JFRihsaXN0KTsKKyAgICAgIFB5
X1hERUNSRUYocGF0aCk7CisgICAgICBQeV9YREVDUkVGKGtpbmQpOworICAgICAgUHlfWERFQ1JF
Rih1cmwpOworICAgICAgUHlfWERFQ1JFRihyZXYpOworICAgICAgUHlfWERFQ1JFRihjZl91cmwp
OworICAgICAgUHlfWERFQ1JFRihzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK
KyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIHBhdGgpOworICBQeUxpc3RfU0VUX0lURU0obGlz
dCwgMSwga2luZCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAyLCB1cmwpOworICBQeUxpc3Rf
U0VUX0lURU0obGlzdCwgMywgcmV2KTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDQsIGNmX3Vy
bCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCA1LCBzdGF0ZSk7CisgIHJldHVybiBsaXN0Owor
fQorCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChhcHJfaGFzaF90ICpo
YXNoKQoreworICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190
LCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChj
b25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0g
UHlEaWN0X05ldygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAg
IHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQor
ICAgICAgeworICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9r
ZXksICpweV92YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwg
c3ZuX3Byb3BfdCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9w
Lm5hbWUpOworICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJv
cjsKKworICAgICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAg
ICAgICAgICBweV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05v
bmUpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAg
ICBweV92YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1
ZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3AudmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwp
CisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOwor
ICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9CisKKyAgICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3Qp
OworICAgIHJldHVybiBOVUxMOworCit9CisKKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0
aW9uaGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCit7CisgICAgLyogTmVlZCBzcGVjaWFs
IGNvZGUgZm9yIHRoaXMgYmVjYXVzZSBvZiB0aGUgZGFybmVkIHN2bl9yZXZudW1fdAorICAgICAg
IGtleXMuICovCisgICAgYXByX2hhc2hfaW5kZXhfdCAqaGk7CisgICAgUHlPYmplY3QgKmRpY3Qg
PSBQeURpY3RfTmV3KCk7CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4g
TlVMTDsKKworICAgIGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhp
ID0gYXByX2hhc2hfbmV4dChoaSkpCisgICAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKms7Cisg
ICAgICAgIHZvaWQgKnY7CisgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKworICAgICAg
ICBhcHJfaGFzaF90aGlzKGhpLCAmaywgTlVMTCwgJnYpOworICAgICAgICBrZXkgPSBQeUxvbmdf
RnJvbUxvbmcoKihzdm5fcmV2bnVtX3QgKilrKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQor
ICAgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBQeVN0cmluZ19Gcm9tU3Ry
aW5nKChjaGFyICopdik7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsK
KyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3Qp
OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBpZiAoUHlE
aWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgeworICAgICAg
ICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHZh
bHVlKTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICB9CisgICAgcmV0dXJuIGRpY3Q7
Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXByX2hhc2hfdCAqaGFz
aCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFB5T2JqZWN0ICpweV9wb29sKQoreworICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNv
bnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOworfQorCisjZGVmaW5lIERFQ0xBUkVf
U1dJR19DT05TVFJVQ1RPUih0eXBlLCBkdXApIFwKK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl8j
I3R5cGUodm9pZCAqdmFsdWUpIFwKK3sgXAorICBhcHJfcG9vbF90ICpuZXdfcG9vbCA9IHN2bl9w
b29sX2NyZWF0ZShfZ2xvYmFsX3Bvb2wpOyBcCisgIFB5T2JqZWN0ICpuZXdfcHlfcG9vbCA9IHN2
bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsIFwKKyAgICBzdm5fc3dpZ19UeXBlUXVlcnko
ImFwcl9wb29sX3QgKiIpLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpOyBcCisgIHN2bl8jI3R5
cGUjI190ICpuZXdfdmFsdWUgPSBkdXAodmFsdWUsIG5ld19wb29sKTsgXAorICByZXR1cm4gc3Zu
X3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhuZXdfdmFsdWUsICJzdm5fIiAjdHlwZSAiX3QgKiIs
IFwKKyAgICAgIG5ld19weV9wb29sKTsgXAorfQorCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Io
dHhkZWx0YV93aW5kb3csIHN2bl90eGRlbHRhX3dpbmRvd19kdXApCitERUNMQVJFX1NXSUdfQ09O
U1RSVUNUT1IobG9nX2NoYW5nZWRfcGF0aCwgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfZHVwKQorREVD
TEFSRV9TV0lHX0NPTlNUUlVDVE9SKHdjX3N0YXR1cywgc3ZuX3djX2R1cF9zdGF0dXMpCitERUNM
QVJFX1NXSUdfQ09OU1RSVUNUT1IobG9jaywgc3ZuX2xvY2tfZHVwKQorREVDTEFSRV9TV0lHX0NP
TlNUUlVDVE9SKGF1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCisgICAgc3ZuX2F1dGhfc3NsX3Nl
cnZlcl9jZXJ0X2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGluZm8sIHN2bl9p
bmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihjb21taXRfaW5mbywgc3ZuX2NvbW1p
dF9pbmZvX2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19ub3RpZnksIHN2bl93Y19k
dXBfbm90aWZ5KQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRfbG9nX2NoYW5nZWRfcGF0aCh2
b2lkICp2YWx1ZSwgdm9pZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgIHJldHVybiBtYWtlX29iX2xvZ19jaGFu
Z2VkX3BhdGgodmFsdWUpOworfQorCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfY19zdHJpbmdzX3Rv
X2xpc3QoY2hhciAqKnN0cmluZ3MpCit7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3
KDApOworICAgIGNoYXIgKnM7CisKKyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxM
KQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMp
OworCisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAg
ICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgb2IpID09IC0xKQorICAgICAgICAgICAgZ290
byBlcnJvcjsKKyAgICAgIH0KKworICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5
X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworYXByX2hhc2hfdCAqc3ZuX3N3
aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBh
cHJfaGFzaF90ICpoYXNoOworICBQeU9iamVjdCAqa2V5czsKKyAgaW50IGksIG51bV9rZXlzOwor
CisgIGlmIChkaWN0ID09IFB5X05vbmUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCFQeURp
Y3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKKyAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3Qp
OworICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOworICBmb3IgKGkgPSAwOyBpIDwgbnVt
X2tleXM7IGkrKykKKyAgICB7CisgICAgICBQeU9iamVjdCAqa2V5ID0gUHlMaXN0X0dldEl0ZW0o
a2V5cywgaSk7CisgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBr
ZXkpOworICAgICAgY29uc3QgY2hhciAqcHJvcG5hbWUgPSBtYWtlX3N0cmluZ19mcm9tX29iKGtl
eSwgcG9vbCk7CisgICAgICBjb25zdCBjaGFyICpwcm9wdmFsID0gbWFrZV9zdHJpbmdfZnJvbV9v
Yih2YWx1ZSwgcG9vbCk7CisgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgIFB5X0RFQ1JFRih2
YWx1ZSk7CisgICAgICBpZiAoISAocHJvcG5hbWUgJiYgcHJvcHZhbCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGljdGlvbmFyeSBrZXlzL3ZhbHVlcyBhcmVuJ3Qgc3RyaW5ncyIpOworICAg
ICAgICAgIFB5X0RFQ1JFRihrZXlzKTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
fQorICAgICAgYXByX2hhc2hfc2V0KGhhc2gsIHByb3BuYW1lLCBBUFJfSEFTSF9LRVlfU1RSSU5H
LCBwcm9wdmFsKTsKKyAgICB9CisgIFB5X0RFQ1JFRihrZXlzKTsKKyAgcmV0dXJuIGhhc2g7Cit9
CisKKworYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfZnJvbV9kaWN0KFB5T2JqZWN0
ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w
b29sX3QgKnBvb2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2JqZWN0ICprZXlzOwor
ICBpbnQgaSwgbnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4g
TlVMTDsKKworICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7CisgICAgICBQeUVycl9T
ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIpOworICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBvb2wpOworICBrZXlz
ID0gUHlEaWN0X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1NpemUoa2V5cyk7Cisg
IGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICpr
ZXkgPSBQeUxpc3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5
RGljdF9HZXRJdGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSA9IG1h
a2Vfc3RyaW5nX2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIHN2bl9zdHJpbmdfdCAqcHJvcHZh
bCA9IG1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5X0RFQ1JF
RihrZXkpOworICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9wbmFtZSAm
JiBwcm9wdmFsKSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFs
dWVzIGFyZW4ndCBzdHJpbmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOworICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFzaCwgcHJv
cG5hbWUsIEFQUl9IQVNIX0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlfREVDUkVG
KGtleXMpOworICByZXR1cm4gaGFzaDsKK30KKworCitjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3Qg
KnN2bl9zd2lnX3B5X3N0cmluZ3NfdG9fYXJyYXkoUHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICAgIGludCB0YXJnbGVuOworICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqdGVt
cDsKKworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQorICAgICAgeworICAgICAg
ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgc2VxdWVuY2UiKTsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgdGFyZ2xlbiA9IFB5U2VxdWVuY2VfTGVu
Z3RoKHNvdXJjZSk7CisgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBvb2wsIHRhcmdsZW4sIHNp
emVvZihjb25zdCBjaGFyICopKTsKKyAgICAvKiBBUFJfQVJSQVlfSURYIGRvZXNuJ3QgYWN0dWFs
bHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CisgICAgICAgKGxpa2UsIHNheSwgYXBy
X2FycmF5X3B1c2ggd291bGQpLiAqLworICAgIHRlbXAtPm5lbHRzID0gdGFyZ2xlbjsKKyAgICB3
aGlsZSAodGFyZ2xlbi0tKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu
Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOworICAgICAgICBpZiAobyA9PSBOVUxMKQorICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICghUHlTdHJpbmdfQ2hlY2sobykpCisg
ICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICAgICAgUHlFcnJf
U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRh
cmdsZW4sIGNvbnN0IGNoYXIgKikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CisgICAgICAgIFB5
X0RFQ1JFRihvKTsKKyAgICAgIH0KKyAgICByZXR1cm4gdGVtcDsKK30KKworCitjb25zdCBhcHJf
YXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXkoUHlPYmplY3QgKnNv
dXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICAgIGludCB0YXJnbGVuOworICAgIGFwcl9hcnJh
eV9oZWFkZXJfdCAqdGVtcDsKKworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2UpKQor
ICAgICAgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEg
c2VxdWVuY2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgdGFyZ2xlbiA9
IFB5U2VxdWVuY2VfTGVuZ3RoKHNvdXJjZSk7CisgICAgdGVtcCA9IGFwcl9hcnJheV9tYWtlKHBv
b2wsIHRhcmdsZW4sIHNpemVvZihzdm5fcmV2bnVtX3QpKTsKKyAgICAvKiBBUFJfQVJSQVlfSURY
IGRvZXNuJ3QgYWN0dWFsbHkgaW5jcmVtZW50IHRoZSBhcnJheSBpdGVtIGNvdW50CisgICAgICAg
KGxpa2UsIHNheSwgYXByX2FycmF5X3B1c2ggd291bGQpLiAqLworICAgIHRlbXAtPm5lbHRzID0g
dGFyZ2xlbjsKKyAgICB3aGlsZSAodGFyZ2xlbi0tKQorICAgICAgeworICAgICAgICBQeU9iamVj
dCAqbyA9IFB5U2VxdWVuY2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOworICAgICAgICBpZiAo
byA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeUxvbmdf
Q2hlY2sobykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0
YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0KKyAgICAgICAgICAgICAgKHN2bl9yZXZudW1fdClQeUxv
bmdfQXNMb25nKG8pOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlJbnRfQ2hlY2so
bykpCisgICAgICAgICAgeworICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0YXJnbGVu
LCBzdm5fcmV2bnVtX3QpID0KKyAgICAgICAgICAgICAgKHN2bl9yZXZudW1fdClQeUludF9Bc0xv
bmcobyk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAg
ICAgUHlfREVDUkVGKG8pOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwgIm5vdCBhbiBpbnRlZ2VyIHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgIH0KKyAgICByZXR1cm4gdGVt
cDsKK30KKworCisMCisvKioqIGFwcl9hcnJheV9oZWFkZXJfdCBjb252ZXJzaW9ucy4gIFRvIGNy
ZWF0ZSBhIG5ldyB0eXBlIG9mCisgICAgIGNvbnZlcnRlciwgc2ltcGx5IGNvcHktbi1wYXN0ZSBv
bmUgb2YgdGhlc2UgZnVuY3Rpb24gYW5kIHR3ZWFrCisgICAgIHRoZSBjcmVhdGlvbiBvZiB0aGUg
UHlPYmplY3QgKm9iLiAgKioqLworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfYXJyYXlfdG9fbGlz
dChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0
ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0g
MDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2Ig
PQorICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoQVBSX0FSUkFZX0lEWChhcnJheSwgaSwg
Y29uc3QgY2hhciAqKSk7CisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8g
ZXJyb3I7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9Cisg
ICAgcmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJl
dHVybiBOVUxMOworfQorCisvKiBGb3JtZXJseSB1c2VkIGJ5IHByZS0xLjAgQVBJcy4gTm93IHVu
dXNlZAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JldmFycmF5X3RvX2xpc3QoY29uc3QgYXByX2Fy
cmF5X2hlYWRlcl90ICphcnJheSkKK3sKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXco
YXJyYXktPm5lbHRzKTsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+
bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iCisgICAgICAgICAgPSBQ
eUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKKyAg
ICAgICAgaWYgKG9iID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlM
aXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsKKyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKwor
ICBlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisqLwor
CitzdGF0aWMgUHlPYmplY3QgKgorY29tbWl0X2l0ZW1fYXJyYXlfdG9fbGlzdChjb25zdCBhcHJf
YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05l
dyhhcnJheS0+bmVsdHMpOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5
LT5uZWx0czsgKytpKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2
bl9jbGllbnRfY29tbWl0X2l0ZW1fdAorICAgICAgICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBp
LCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiksIE5VTEwpOworICAgICAgICBpZiAob2IgPT0g
TlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlz
dCwgaSwgb2IpOworICAgICAgfQorICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5
X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisMCisvKioqIEVycm9ycyAq
KiovCisKKy8qIFJldHVybiBhIFN1YnZlcnNpb24gZXJyb3IgYWJvdXQgYSBmYWlsZWQgY2FsbGJh
Y2suICovCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcih2b2lk
KQoreworICByZXR1cm4gc3ZuX2Vycm9yX2NyZWF0ZShTVk5fRVJSX1NXSUdfUFlfRVhDRVBUSU9O
X1NFVCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBjYWxsYmFjayBy
YWlzZWQgYW4gZXhjZXB0aW9uIik7Cit9CisKKy8qIFJhaXNlIGEgVHlwZUVycm9yIGV4Y2VwdGlv
biB3aXRoIE1FU1NBR0UsIGFuZCByZXR1cm4gYSBTdWJ2ZXJzaW9uCisgICBlcnJvciBhYm91dCBh
biBpbnZhbGlkIHJldHVybiBmcm9tIGEgY2FsbGJhY2suICovCitzdGF0aWMgc3ZuX2Vycm9yX3Qg
KmNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgUHlF
cnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgbWVzc2FnZSk7CisgIHJldHVybiBzdm5fZXJy
b3JfY3JlYXRlKEFQUl9FR0VORVJBTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IlB5dGhvbiBjYWxsYmFjayByZXR1cm5lZCBhbiBpbnZhbGlkIG9iamVjdCIpOworfQorCisvKiBS
ZXR1cm4gYSBnZW5lcmljIGVycm9yIGFib3V0IG5vdCBiZWluZyBhYmxlIHRvIG1hcCB0eXBlcy4g
Ki8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqdHlwZV9jb252ZXJzaW9uX2Vycm9yKGNvbnN0IGNoYXIg
KmRhdGF0eXBlKQoreworICByZXR1cm4gc3ZuX2Vycm9yX2NyZWF0ZWYoQVBSX0VHRU5FUkFMLCBO
VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvbnZlcnRpbmcgb2JqZWN0
IG9mIHR5cGUgJyVzJyIsIGRhdGF0eXBlKTsKK30KKworCisMCisvKioqIEVkaXRvciBXcmFwcGlu
ZyAqKiovCisKKy8qIHRoaXMgYmF0b24gaXMgdXNlZCBmb3IgdGhlIGVkaXRvciwgZGlyZWN0b3J5
LCBhbmQgZmlsZSBiYXRvbnMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgIFB5T2JqZWN0ICplZGl0
b3I7ICAgICAvKiB0aGUgZWRpdG9yIGhhbmRsaW5nIHRoZSBjYWxsYmFja3MgKi8KKyAgUHlPYmpl
Y3QgKmJhdG9uOyAgICAgIC8qIHRoZSBkaXIvZmlsZSBiYXRvbiAob3IgTlVMTCBmb3IgZWRpdCBi
YXRvbikgKi8KK30gaXRlbV9iYXRvbjsKKworc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24o
YXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0
ICplZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24p
Cit7CisgIGl0ZW1fYmF0b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3Yikp
OworCisgIC8qIE5vdGU6IFdlIHN0ZWFsIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8gJ2JhdG9u
Jy4gQWxzbywgdG8gYXZvaWQKKyAgICAgbWVtb3J5IGxlYWtzLCB3ZSBib3Jyb3cgdGhlIGNhbGxl
cidzIHJlZmVyZW5jZSB0byAnZWRpdG9yJy4gSW4gdGhpcworICAgICBjYXNlLCBib3Jyb3dpbmcg
dGhlIHJlZmVyZW5jZSB0byAnZWRpdG9yJyBpcyBzYWZlIGJlY2F1c2UgdGhlIGNvbnRlbnRzCisg
ICAgIG9mIGFuIGl0ZW1fYmF0b24gc3RydWN0IGFyZSBvbmx5IHVzZWQgYnkgZnVuY3Rpbm8gY2Fs
bHMgd2hpY2ggb3BlcmF0ZSBvbgorICAgICB0aGUgZWRpdG9yIGl0c2VsZi4gKi8KKyAgbmV3Yi0+
ZWRpdG9yID0gZWRpdG9yOworICBuZXdiLT5iYXRvbiA9IGJhdG9uOworCisgIHJldHVybiBuZXdi
OworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2JhdG9uKHZvaWQgKmJhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QpCit7CisgIGl0
ZW1fYmF0b24gKmliID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90
ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgLyogSWYgdGhl
cmUgaXMgbm8gYmF0b24gb2JqZWN0LCB0aGVuIGl0IGlzIGFuIGVkaXRfYmF0b24sIGFuZCB3ZSBz
aG91bGQKKyAgICAgbm90IGJvdGhlciB0byBwYXNzIGFuIG9iamVjdC4gTm90ZSB0aGF0IHdlIHN0
aWxsIHNob3ZlIGEgTlVMTCBvbnRvCisgICAgIHRoZSBzdGFjaywgYnV0IHRoZSBmb3JtYXQgc3Bl
Y2lmaWVkIGp1c3Qgd29uJ3QgcmVmZXJlbmNlIGl0LiAgKi8KKyAgLyogIyMjIHB5dGhvbiBkb2Vz
bid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAo
KHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKiltZXRob2Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYi0+YmF0b24gPyAoY2hhciAq
KSIoTykiIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGliLT5i
YXRvbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy
cm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyBy
ZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkg
Ki8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgLyogV2UncmUgbm93IGRvbmUgd2l0aCB0aGUg
YmF0b24uIFNpbmNlIHRoZXJlIGlzbid0IHJlYWxseSBhIGZyZWUsIGFsbAorICAgICB3ZSBuZWVk
IHRvIGRvIGlzIG5vdGUgdGhhdCBpdHMgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQg
YnkKKyAgICAgdGhlIGJhdG9uLiAgKi8KKyAgUHlfWERFQ1JFRihpYi0+YmF0b24pOworCisjaWZk
ZWYgU1ZOX0RFQlVHCisgIGliLT5lZGl0b3IgPSBpYi0+YmF0b24gPSBOVUxMOworI2VuZGlmCisK
KyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVh
c2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnNl
dF90YXJnZXRfcmV2aXNpb24odm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgdGFyZ2V0X3JldmlzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7Cisg
IGl0ZW1fYmF0b24gKmliID0gZWRpdF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3Zu
X2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAv
KiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQg
Zm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9y
LCAoY2hhciAqKSJzZXRfdGFyZ2V0X3JldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopImwiLCB0YXJnZXRfcmV2aXNpb24pKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBm
aW5pc2hlZDsKKyAgICB9CisKKyAgLyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0
IHRvc3MgdGhpcyBvYmplY3QgKHByb2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1
bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlf
cmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf
dCAqb3Blbl9yb290KHZvaWQgKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdm5fcmV2bnVtX3QgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKnJvb3RfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gZWRpdF9iYXRvbjsK
KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29u
c3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlP
YmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJvcGVuX3Jvb3QiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibE8mIiwgYmFzZV9yZXZpc2lv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZGly
X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l
cnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0
YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpyb290X2JhdG9uID0gbWFrZV9iYXRv
bihkaXJfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4g
ZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmRlbGV0ZV9lbnRyeShjb25zdCBjaGFyICpw
YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sK
KyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg
IHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUg
YW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWItPmVk
aXRvciwgKGNoYXIgKikiZGVsZXRlX2VudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjaGFyICopInNsT08mIiwgcGF0aCwgcmV2aXNpb24sIGliLT5iYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFs
dWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlf
REVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBz
dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj
IHN2bl9lcnJvcl90ICphZGRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvcHlmcm9tX3BhdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGNvcHlmcm9tX3JldmlzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29s
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipjaGlsZF9iYXRvbikK
K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7
CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7
CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5h
bWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaWIt
PmVkaXRvciwgKGNoYXIgKikiYWRkX2RpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKSJzT3NsTyYiLCBwYXRoLCBpYi0+YmF0b24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ZnJvbV9wYXRoLCBjb3B5ZnJvbV9yZXZp
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg
ZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRv
biB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpjaGlsZF9iYXRvbiA9IG1ha2Vf
YmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJP
UjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0
dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX2RpcmVjdG9yeShjb25zdCBj
aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJl
bnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f
dCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf
cG9vbF90ICpkaXJfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKmNoaWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAg
UHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9h
Y3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3Qn
IG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmpl
Y3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJvcGVuX2RpcmVjdG9yeSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzT2xPJiIsIHBhdGgsIGli
LT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfcmV2aXNp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIGRp
cl9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24g
dGFrZXMgb3VyICdyZXN1bHQnIHJlZmVyZW5jZSAqLworICAqY2hpbGRfYmF0b24gPSBtYWtlX2Jh
dG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7
CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVy
biBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2hhbmdlX2Rpcl9wcm9wKHZvaWQgKmRp
cl9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
Km5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fc3Ry
aW5nX3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv
b2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBkaXJfYmF0b247CisgIFB5T2JqZWN0
ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUg
bWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN
ZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2hhbmdlX2Rpcl9wcm9wIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zcyNPJiIsIGliLT5iYXRvbiwgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID8gdmFsdWUtPmRh
dGEgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2
YWx1ZS0+bGVuIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vf
b2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVy
ZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkg
UHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsK
KworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJu
IGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9kaXJlY3Rvcnkodm9pZCAqZGly
X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCkKK3sKKyAgcmV0dXJuIGNsb3NlX2JhdG9uKGRpcl9iYXRvbiwgImNsb3NlX2RpcmVjdG9y
eSIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29weWZyb21fcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGNvcHlmcm9tX3JldmlzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipmaWxlX2JhdG9uKQoreworICBpdGVtX2Jh
dG9uICppYiA9IHBhcmVudF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y
X3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMg
cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0
ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh
ciAqKSJhZGRfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzT3NsTyYiLCBwYXRoLCBpYi0+YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3B5ZnJvbV9wYXRoLCBjb3B5ZnJvbV9yZXZpc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0gTlVM
TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg
IGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdyZXN1
bHQnIHJlZmVyZW5jZSAqLworICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29sLCBp
Yi0+ZWRpdG9yLCByZXN1bHQpOworCisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVk
OgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKwor
c3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZmlsZV9wb29sLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqKmZpbGVfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0g
cGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9l
c24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopIm9wZW5f
ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzT2xP
JiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl
X29iX3Bvb2wsIGZpbGVfcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAv
KiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVuY2UgKi8KKyAgKmZpbGVfYmF0
b24gPSBtYWtlX2JhdG9uKGZpbGVfcG9vbCwgaWItPmVkaXRvciwgcmVzdWx0KTsKKyAgZXJyID0g
U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j
aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKndpbmRvd19oYW5k
bGVyKHN2bl90eGRlbHRhX3dpbmRvd190ICp3aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9u
OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2ln
X3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICh3aW5kb3cgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICAvKiB0aGUgbGFzdCBjYWxsOyBpdCBjbG9zZXMgdGhlIGhhbmRsZXIgKi8KKworICAgICAg
LyogaW52b2tlIHRoZSBoYW5kbGVyIHdpdGggTm9uZSBmb3IgdGhlIHdpbmRvdyAqLworICAgICAg
LyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUgZm9ybWF0ICovCisgICAg
ICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oaGFuZGxlciwgKGNoYXIgKikiTyIsIFB5
X05vbmUpOworCisgICAgICAvKiB3ZSBubyBsb25nZXIgbmVlZCB0byByZWZlciB0byB0aGUgaGFu
ZGxlciBvYmplY3QgKi8KKyAgICAgIFB5X0RFQ1JFRihoYW5kbGVyKTsKKyAgICB9CisgIGVsc2UK
KyAgICB7CisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2luZG93ICovCisg
ICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBmb3JtYXQgKi8K
KyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAoY2hhciAqKSJP
JiIsCisgICAgICAgIG1ha2Vfb2JfdHhkZWx0YV93aW5kb3csIHdpbmRvdyk7CisgICAgfQorCisg
IGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRp
b25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlz
IG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9O
b25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisg
ZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJy
OworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFwcGx5X3RleHRkZWx0YSh2b2lkICpmaWxlX2Jh
dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFz
ZV9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0
YV93aW5kb3dfaGFuZGxlcl90ICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqKmhfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv
bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp
Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn
Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhcHBseV90ZXh0ZGVsdGEi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiKE9zKSIsIGli
LT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfY2hlY2tz
dW0pKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgLyogSW50ZXJwcmV0IE5vbmUg
dG8gbWVhbiBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxlci4gVGhpcyBpcyBtdWNoCisgICAg
IGVhc2llci9mYXN0ZXIgdGhhbiBtYWtpbmcgY29kZSBhbHdheXMgaGF2ZSB0byB3cml0ZSBhIE5P
T1AgaGFuZGxlcgorICAgICBpbiBQeXRob24uICAqLworICBpZiAocmVzdWx0ID09IFB5X05vbmUp
CisgICAgeworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisKKyAgICAgICpoYW5kbGVyID0gc3Zu
X2RlbHRhX25vb3Bfd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9IE5VTEw7CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgLyogcmV0dXJuIHRoZSB0aHVuayBmb3IgaW52b2tpbmcg
dGhlIGhhbmRsZXIuIHRoZSBiYXRvbiB0YWtlcyBvdXIKKyAgICAgICAgICdyZXN1bHQnIHJlZmVy
ZW5jZSwgd2hpY2ggaXMgdGhlIGhhbmRsZXIuICovCisgICAgICAqaGFuZGxlciA9IHdpbmRvd19o
YW5kbGVyOworICAgICAgKmhfYmF0b24gPSByZXN1bHQ7CisgICAgfQorCisgIGVyciA9IFNWTl9O
T19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsK
KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjaGFuZ2VfZmlsZV9wcm9w
KHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdm5fc3RyaW5nX3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1fYmF0b24gKmliID0gZmlsZV9iYXRv
bjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dp
Z19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAn
Y29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZmlsZV9wcm9w
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zcyNPJiIs
IGliLT5iYXRvbiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlID8gdmFsdWUtPmRhdGEgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPyB2YWx1ZS0+bGVuIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJy
ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAg
IH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9i
amVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9
IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xv
Y2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpjbG9zZV9maWxl
KHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqdGV4dF9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf
cG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IGZpbGVfYmF0b247CisgIFB5T2Jq
ZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly
ZV9weV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0
aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh
bGxNZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikiY2xvc2VfZmlsZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9jaGVja3N1bSkpID09IE5VTEwpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3Rv
IGZpbmlzaGVkOworICAgIH0KKworICAvKiB0aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1
c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJl
c3VsdCk7CisKKyAgLyogV2UncmUgbm93IGRvbmUgd2l0aCB0aGUgYmF0b24uIFNpbmNlIHRoZXJl
IGlzbid0IHJlYWxseSBhIGZyZWUsIGFsbAorICAgICB3ZSBuZWVkIHRvIGRvIGlzIG5vdGUgdGhh
dCBpdHMgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYnkKKyAgICAgdGhlIGJhdG9u
LiAgKi8KKyAgUHlfWERFQ1JFRihpYi0+YmF0b24pOworCisjaWZkZWYgU1ZOX0RFQlVHCisgIGli
LT5lZGl0b3IgPSBpYi0+YmF0b24gPSBOVUxMOworI2VuZGlmCisKKyAgZXJyID0gU1ZOX05PX0VS
Uk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICBy
ZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2VkaXQodm9pZCAqZWRp
dF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s
KQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwgImNsb3NlX2VkaXQiKTsKK30K
Kworc3RhdGljIHN2bl9lcnJvcl90ICphYm9ydF9lZGl0KHZvaWQgKmVkaXRfYmF0b24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgcmV0dXJu
IGNsb3NlX2JhdG9uKGVkaXRfYmF0b24sICJhYm9ydF9lZGl0Iik7Cit9CisKK3ZvaWQgc3ZuX3N3
aWdfcHlfbWFrZV9lZGl0b3IoY29uc3Qgc3ZuX2RlbHRhX2VkaXRvcl90ICoqZWRpdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZWRpdF9iYXRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2VkaXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2RlbHRhX2VkaXRvcl90ICp0
aHVua19lZGl0b3IgPSBzdm5fZGVsdGFfZGVmYXVsdF9lZGl0b3IgKHBvb2wpOworICAKKyAgdGh1
bmtfZWRpdG9yLT5zZXRfdGFyZ2V0X3JldmlzaW9uID0gc2V0X3RhcmdldF9yZXZpc2lvbjsKKyAg
dGh1bmtfZWRpdG9yLT5vcGVuX3Jvb3QgPSBvcGVuX3Jvb3Q7CisgIHRodW5rX2VkaXRvci0+ZGVs
ZXRlX2VudHJ5ID0gZGVsZXRlX2VudHJ5OworICB0aHVua19lZGl0b3ItPmFkZF9kaXJlY3Rvcnkg
PSBhZGRfZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPm9wZW5fZGlyZWN0b3J5ID0gb3Blbl9k
aXJlY3Rvcnk7CisgIHRodW5rX2VkaXRvci0+Y2hhbmdlX2Rpcl9wcm9wID0gY2hhbmdlX2Rpcl9w
cm9wOworICB0aHVua19lZGl0b3ItPmNsb3NlX2RpcmVjdG9yeSA9IGNsb3NlX2RpcmVjdG9yeTsK
KyAgdGh1bmtfZWRpdG9yLT5hZGRfZmlsZSA9IGFkZF9maWxlOworICB0aHVua19lZGl0b3ItPm9w
ZW5fZmlsZSA9IG9wZW5fZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5hcHBseV90ZXh0ZGVsdGEgPSBh
cHBseV90ZXh0ZGVsdGE7CisgIHRodW5rX2VkaXRvci0+Y2hhbmdlX2ZpbGVfcHJvcCA9IGNoYW5n
ZV9maWxlX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xvc2VfZmlsZSA9IGNsb3NlX2ZpbGU7Cisg
IHRodW5rX2VkaXRvci0+Y2xvc2VfZWRpdCA9IGNsb3NlX2VkaXQ7CisgIHRodW5rX2VkaXRvci0+
YWJvcnRfZWRpdCA9IGFib3J0X2VkaXQ7CisKKyAgKmVkaXRvciA9IHRodW5rX2VkaXRvcjsKKyAg
KmVkaXRfYmF0b24gPSBtYWtlX2JhdG9uKHBvb2wsIHB5X2VkaXRvciwgTlVMTCk7Cit9CisKKwor
DAorLyoqKiBPdGhlciBXcmFwcGVycyBmb3IgU1ZOIEZ1bmN0aW9ucyAqKiovCisKKworYXByX2Zp
bGVfdCAqc3ZuX3N3aWdfcHlfbWFrZV9maWxlIChQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2Zp
bGVfdCAqYXByX2ZpbGUgPSBOVUxMOworICBhcHJfc3RhdHVzX3QgYXByX2VycjsKKworICBpZiAo
cHlfZmlsZSA9PSBOVUxMIHx8IHB5X2ZpbGUgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsK
KworICBpZiAoUHlTdHJpbmdfQ2hlY2sgKHB5X2ZpbGUpKQorICAgIHsKKyAgICAgIC8qIGlucHV0
IGlzIGEgcGF0aCAtLSBqdXN0IG9wZW4gYW4gYXByX2ZpbGVfdCAqLworICAgICAgY2hhciogZm5h
bWUgPSBQeVN0cmluZ19BU19TVFJJTkcgKHB5X2ZpbGUpOworICAgICAgYXByX2VyciA9IGFwcl9m
aWxlX29wZW4gKCZhcHJfZmlsZSwgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBUFJfQ1JFQVRFIHwgQVBSX1JFQUQgfCBBUFJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBUFJfT1NfREVGQVVMVCwgcG9vbCk7CisgICAgICBpZiAoYXByX2VycikKKyAg
ICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgYXByX3N0cmVycm9y
IChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICBQeUVycl9Gb3JtYXQgKFB5
RXhjX0lPRXJyb3IsICJhcHJfZmlsZV9vcGVuIGZhaWxlZDogJXM6ICclcyciLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYnVmLCBmbmFtZSk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKFB5RmlsZV9DaGVjayAocHlfZmlsZSkpCisgICAgewor
ICAgICAgRklMRSAqZmlsZTsKKyAgICAgIGFwcl9vc19maWxlX3Qgb3NmaWxlOworCisgICAgICAv
KiBpbnB1dCBpcyBhIGZpbGUgb2JqZWN0IC0tIGNvbnZlcnQgdG8gYXByX2ZpbGVfdCAqLworICAg
ICAgZmlsZSA9IFB5RmlsZV9Bc0ZpbGUocHlfZmlsZSk7CisjaWZkZWYgV0lOMzIKKyAgICAgIG9z
ZmlsZSA9IChhcHJfb3NfZmlsZV90KV9nZXRfb3NmaGFuZGxlKF9maWxlbm8oZmlsZSkpOworI2Vs
c2UKKyAgICAgIG9zZmlsZSA9IChhcHJfb3NfZmlsZV90KWZpbGVubyhmaWxlKTsKKyNlbmRpZgor
ICAgICAgYXByX2VyciA9IGFwcl9vc19maWxlX3B1dCAoJmFwcl9maWxlLCAmb3NmaWxlLCBPX0NS
RUFUIHwgT19XUk9OTFksIHBvb2wpOworICAgICAgaWYgKGFwcl9lcnIpCisgICAgICAgIHsKKyAg
ICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgIGFwcl9zdHJlcnJvciAoYXByX2Vyciwg
YnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4Y19JT0Vycm9y
LCAiYXByX29zX2ZpbGVfcHV0IGZhaWxlZDogJXMiLCBidWYpOworICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICB9CisgICAgfQorICByZXR1cm4gYXByX2ZpbGU7Cit9CisKKworc3RhdGlj
IHN2bl9lcnJvcl90ICoKK3JlYWRfaGFuZGxlcl9weWlvICh2b2lkICpiYXRvbiwgY2hhciAqYnVm
ZmVyLCBhcHJfc2l6ZV90ICpsZW4pCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0
ICpweV9pbyA9IGJhdG9uOworICBhcHJfc2l6ZV90IGJ5dGVzOworICBzdm5fZXJyb3JfdCAqZXJy
ID0gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworICBp
ZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfaW8sIChjaGFyICopInJlYWQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiaSIsICpsZW4pKSA9
PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwor
ICAgIH0KKyAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkKKyAgICB7CisgICAgICBi
eXRlcyA9IFB5U3RyaW5nX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgICBpZiAoYnl0ZXMgPiAqbGVu
KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi
VG9vIG1hbnkgYnl0ZXMiKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgLyogV3JpdGViYWNrLCBpbiBjYXNlIHRoaXMgd2FzIGEgc2hvcnQgcmVhZCwgaW5kaWNh
dGluZyBFT0YgKi8KKyAgICAgICAgICAqbGVuID0gYnl0ZXM7CisgICAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgUHlTdHJpbmdfQVNfU1RSSU5HKHJlc3VsdCksICpsZW4pOworICAgICAgICB9CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi
Tm90IGEgc3RyaW5nIik7CisgICAgfQorICBQeV9YREVDUkVGKHJlc3VsdCk7CisgIHN2bl9zd2ln
X3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5f
ZXJyb3JfdCAqCit3cml0ZV9oYW5kbGVyX3B5aW8gKHZvaWQgKmJhdG9uLCBjb25zdCBjaGFyICpk
YXRhLCBhcHJfc2l6ZV90ICpsZW4pCit7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0
ICpweV9pbyA9IGJhdG9uOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg
IGlmIChkYXRhICE9IE5VTEwpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9s
b2NrKCk7CisgICAgICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfaW8sIChj
aGFyICopIndyaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y2hhciAqKSJzIyIsIGRhdGEsICpsZW4pKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg
ZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgIFB5X1hE
RUNSRUYocmVzdWx0KTsKKyAgICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAg
IH0KKworICByZXR1cm4gZXJyOworfQorCitzdm5fc3RyZWFtX3QgKgorc3ZuX3N3aWdfcHlfbWFr
ZV9zdHJlYW0gKFB5T2JqZWN0ICpweV9pbywgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX3N0
cmVhbV90ICpzdHJlYW07CisKKyAgLyogQm9ycm93IHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8g
cHlfaW8gLSB0aGlzIGlzIHNhZmUgb25seSBiZWNhdXNlIHRoZQorICAgKiBjYWxsZXIgbXVzdCBo
YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQorICAg
KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0
IGJlZm9yZSB3ZSByZXR1cm4KKyAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ
IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQorICAgKiBvdmVyIG11bHRpcGxl
IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBzdHJlYW0gPSBzdm5fc3RyZWFtX2NyZWF0
ZSAocHlfaW8sIHBvb2wpOworICBzdm5fc3RyZWFtX3NldF9yZWFkIChzdHJlYW0sIHJlYWRfaGFu
ZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUgKHN0cmVhbSwgd3JpdGVfaGFuZGxl
cl9weWlvKTsKKworICByZXR1cm4gc3RyZWFtOworfQorCisKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90
aWZ5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlf
YWN0aW9uX3QgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fbm9kZV9r
aW5kX3Qga2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWlt
ZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl
X3QgY29udGVudF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX25v
dGlmeV9zdGF0ZV90IHByb3Bfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl9yZXZudW1fdCByZXZpc2lvbikKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247Cisg
IFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisK
KyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1
cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lpaSkiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoLCBhY3Rpb24sIGtpbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGVudF9zdGF0ZSwgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24pKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy
ciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg
ICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRoaW5nLiAqLwor
ICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRf
cmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg
fQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLworICBpZiAoZXJy
KQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlf
bG9jaygpOworfQorCisKK3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJhdG9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90ICpu
b3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQor
eworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAg
c3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVM
TCB8fCBmdW5jdGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9h
Y3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
KikiKE8mTyYpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl93Y19ub3RpZnksIG5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs
YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBU
aGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8KKyAgICAgIGlm
IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9l
cnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICAv
KiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAgaWYgKGVycikKKyAgICBz
dm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsK
K30KKwordm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMpCit7CisgIFB5T2JqZWN0ICpmdW5j
dGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0g
U1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5
X05vbmUpCisgICAgcmV0dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
ICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgKGNoYXIgKiki
c08mIiwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9v
Yl93Y19zdGF0dXMsIHN0YXR1cykpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogVGhl
IGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5pbmcgYW55dGhpbmcuICovCisgICAgICBpZiAo
cmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy
b3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyog
T3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4gOi0oICovCisgIGlmIChlcnIpCisgICAgc3Zu
X2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9
CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jKHZvaWQgKmNhbmNlbF9i
YXRvbikKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gY2FuY2VsX2JhdG9uOworICBQeU9iamVj
dCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChm
dW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9O
T19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1
bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIE5VTEwpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgaWYgKFB5SW50X0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJyID0gc3ZuX2Vy
cm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAgIH0KKyAgICAg
IGVsc2UgaWYgKFB5TG9uZ19DaGVjayhyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgaWYg
KFB5TG9uZ19Bc0xvbmcocmVzdWx0KSkKKyAgICAgICAgICAgIGVyciA9IHN2bl9lcnJvcl9jcmVh
dGUoU1ZOX0VSUl9DQU5DRUxMRUQsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICBlbHNlIGlm
IChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGNhbGxiYWNr
X2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKKyAgICAgICAgfQor
ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Zz
X2dldF9sb2Nrc19mdW5jICh2b2lkICpiYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN2bl9sb2NrX3QgKmxvY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0
ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAq
ZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9u
ID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9h
Y3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihmdW5jdGlvbiwgKGNoYXIgKikiTyZPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2Vfb2JfbG9jaywgbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg
ICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGluZy4gKi8K
KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk
X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg
IH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30K
Kworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmMoY29uc3QgY2hh
ciAqKmxvZ19tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICoqdG1wX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKmNvbW1pdF9pdGVtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK
K3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg
IFB5T2JqZWN0ICpjbXRfaXRlbXM7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgKmxvZ19tc2cg
PSBOVUxMOworICAqdG1wX2ZpbGUgPSBOVUxMOworCisgIC8qICMjIyB0b2RvOiBmb3Igbm93LCBq
dXN0IGlnbm9yZSB0aGUgd2hvbGUgdG1wX2ZpbGUgdGhpbmcuICAqLworCisgIGlmICgoZnVuY3Rp
b24gPT0gTlVMTCkgfHwgKGZ1bmN0aW9uID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f
RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKGNvbW1p
dF9pdGVtcykKKyAgICB7CisgICAgICBjbXRfaXRlbXMgPSBjb21taXRfaXRlbV9hcnJheV90b19s
aXN0KGNvbW1pdF9pdGVtcyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY210X2l0ZW1z
ID0gUHlfTm9uZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChy
ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9PJiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNtdF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBQ
eV9ERUNSRUYoY210X2l0ZW1zKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgUHlfREVDUkVGKGNtdF9pdGVt
cyk7CisKKyAgaWYgKHJlc3VsdCA9PSBQeV9Ob25lKQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihy
ZXN1bHQpOworICAgICAgKmxvZ19tc2cgPSBOVUxMOworICAgICAgZXJyID0gU1ZOX05PX0VSUk9S
OworICAgIH0KKyAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkKKyAgICB7CisgICAg
ICAqbG9nX21zZyA9IGFwcl9wc3RyZHVwKHBvb2wsIFB5U3RyaW5nX0FTX1NUUklORyhyZXN1bHQp
KTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgZXJyID0gU1ZOX05PX0VSUk9SOwor
ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgZXJy
ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGEgc3RyaW5nIik7CisgICAgfQorCisg
ZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJy
OworfQorCisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yZXBvc19hdXRoel9mdW5jKHN2bl9i
b29sZWFuX3QgKmFsbG93ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdm5fZnNfcm9vdF90ICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9u
ID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIFB5T2JqZWN0ICpweV9wb29sLCAqcHlf
cm9vdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICAqYWxsb3dlZCA9
IFRSVUU7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wocG9vbCk7CisgIGlmIChweV9wb29sID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKyAgcHlfcm9vdCA9IG1ha2Vfb2JfZnNfcm9vdChy
b290LCBweV9wb29sKTsKKyAgaWYgKHB5X3Jvb3QgPT0gTlVMTCkKKyAgICB7CisgICAgICBQeV9E
RUNSRUYocHlfcG9vbCk7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
KyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKSJPc08iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBweV9yb290LCBwYXRoLCBweV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj
YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp
ZiAoUHlJbnRfQ2hlY2socmVzdWx0KSkKKyAgICAgICAgKmFsbG93ZWQgPSBQeUludF9Bc0xvbmco
cmVzdWx0KTsKKyAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhyZXN1bHQpKQorICAgICAgICAq
YWxsb3dlZCA9IFB5TG9uZ19Bc0xvbmcocmVzdWx0KTsKKyAgICAgIGVsc2UKKyAgICAgICAgZXJy
ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIiKTsKKyAgICAgIFB5
X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgUHlfREVDUkVGKHB5X3Jvb3QpOworICBQeV9ERUNS
RUYocHlfcG9vbCk7CitmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7
CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9zX2hp
c3RvcnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9i
amVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y
X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5j
dGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf
cHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0
aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwg
cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jf
cG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0
aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQ
eV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9u
ZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBzdm5fc3dpZ19weV9yZWxl
YXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3
aWdfcHlfbG9nX3JlY2VpdmVyKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfaGFzaF90ICpjaGFuZ2VkX3BhdGhzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg
KnJlY2VpdmVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQsICpweV9wb29sOworICBQeU9i
amVjdCAqY2hwYXRoczsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBp
ZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1
cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg
IHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wocG9vbCk7CisgIGlmIChweV9wb29sID09IE5VTEwpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3Rv
IGZpbmlzaGVkOworICAgIH0KKworICBpZiAoY2hhbmdlZF9wYXRocykKKyAgICB7CisgICAgICBj
aHBhdGhzID0gY29udmVydF9oYXNoKGNoYW5nZWRfcGF0aHMsIGNvbnZlcnRfbG9nX2NoYW5nZWRf
cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgY2hwYXRocyA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYo
UHlfTm9uZSk7CisgICAgfQorCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9u
KHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq
KSJPbHNzc08iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhz
LCByZXYsIGF1dGhvciwgZGF0ZSwgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBweV9wb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19l
eGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0
ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5v
dCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgUHlfREVDUkVG
KGNocGF0aHMpOworICBQeV9ERUNSRUYocHlfcG9vbCk7CitmaW5pc2hlZDoKKyAgc3ZuX3N3aWdf
cHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpz
dm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmlu
Zm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAq
cmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVj
ZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5f
Tk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChy
ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZvLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM
KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K
KyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJy
ID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JF
RihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKwor
ICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1l
X3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2
aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJl
c3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2Vp
dmVyID09IE5VTEwpIHx8IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05P
X0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbm8sIHJldmlzaW9uLCBhdXRob3IsIGRh
dGUsIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2Jf
cG9vbCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0
aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQ
eV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9u
ZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3Jl
bGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJvcl90ICoKK3N2
bl9zd2lnX3B5X2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jIChzdm5fYXV0aF9jcmVkX3NpbXBsZV90
ICoqY3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpiYXRv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFs
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2Vy
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fYm9vbGVhbl90
IG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq
cmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9l
cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8
fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBz
dm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0
X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNoYXIgKikic3NsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWFsbSwgdXNlcm5hbWUsIG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9h
dXRoX2NyZWRfc2ltcGxlX3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9z
d2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLAorICAgICAg
ICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICoiKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5fYXV0aF9jcmVkX3Np
bXBsZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMp
KTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2NyZWRzLT51c2VybmFtZSA/
IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMtPnVzZXJuYW1l
KSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5wYXNzd29yZCA9IHRtcF9jcmVkcy0+cGFz
c3dvcmQgPyBcCisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2NyZWRzLT5w
YXNzd29yZCkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3Jl
ZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYo
cmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3Jl
ZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19w
eV9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jIChzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKipj
cmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFs
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qg
bWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v
bF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3Qg
KnJlc3VsdDsKKyAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICpjcmVkcyA9IE5VTEw7CisgIHN2
bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxM
KSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKwor
ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2Jq
ZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBj
YWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp
ZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICBzdm5fYXV0aF9jcmVk
X3VzZXJuYW1lX3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv
bnZlcnRQdHJTdHJpbmcocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLAorICAgICAgICAgICAg
ICAgICJzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKiIpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5h
bWVfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNpemVvZiAoKmNyZWRzKSk7
CisgICAgICAgICAgICAgIGNyZWRzLT51c2VybmFtZSA9IHRtcF9jcmVkcy0+dXNlcm5hbWUgPyBc
CisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2NyZWRzLT51c2VybmFtZSkg
OiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3JlZHMtPm1heV9z
YXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsK
KyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3JlZCA9IGNyZWRz
OworICByZXR1cm4gZXJyOworfQorCisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhf
c3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2
ZXJfdHJ1c3RfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAqcmVh
bG0sCisgICAgYXByX3VpbnQzMl90IGZhaWx1cmVzLAorICAgIGNvbnN0IHN2bl9hdXRoX3NzbF9z
ZXJ2ZXJfY2VydF9pbmZvX3QgKmNlcnRfaW5mbywKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZl
LAorICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9u
OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3Rf
dCAqY3JlZHMgPSBOVUxMOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisg
IGlmICgoZnVuY3Rpb24gPT0gTlVMTCkgfHwgKGZ1bmN0aW9uID09IFB5X05vbmUpKQorICAgIHJl
dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIChjaGFyICop
InNsTyZsTyYiLAorICAgICAgICAgICAgICAgICAgcmVhbG0sIGZhaWx1cmVzLCBtYWtlX29iX2F1
dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm8sCisgICAgICAgICAgICAgICAgICBjZXJ0X2luZm8sIG1h
eV9zYXZlLCBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9
IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg
IGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2Ny
ZWRfc3NsX3NlcnZlcl90cnVzdF90ICp0bXBfY3JlZHMgPSBOVUxMOworICAgICAgICAgIGlmIChz
dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq
KSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3Ry
dXN0X3QgKiIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZl
cnNpb25fZXJyb3IKKyAgICAgICAgICAgICAgICAoInN2bl9hdXRoX2NyZWRfc3NsX3NlcnZlcl90
cnVzdF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMp
KTsKKyAgICAgICAgICAgICAgKmNyZWRzID0gKnRtcF9jcmVkczsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5
X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3JlZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQor
Citzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRf
ZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoqY3JlZCwKKyAgICB2
b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1h
eV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9
IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRf
Y2VydF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7
CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisg
ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g
TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg
ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAg
IHsKKyAgICAgICAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICp0bXBfY3JlZHMg
PSBOVUxMOworICAgICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAg
ICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3Zu
X2F1dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xp
ZW50X2NlcnRfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNpemVvZiAoKmNy
ZWRzKSk7CisgICAgICAgICAgICAgIGNyZWRzLT5jZXJ0X2ZpbGUgPSB0bXBfY3JlZHMtPmNlcnRf
ZmlsZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBfY3JlZHMtPmNl
cnRfZmlsZSkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0bXBfY3Jl
ZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYo
cmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICAqY3Jl
ZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqCitzdm5fc3dpZ19w
eV9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVk
X3NzbF9jbGllbnRfY2VydF9wd190ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25z
dCBjaGFyICpyZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29s
X3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAq
cmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICpjcmVkcyA9IE5V
TEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlv
biA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19F
UlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3Vs
dCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICBzdm5f
YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOworICAgICAg
ICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCisgICAgICAgICAgICAgIChyZXN1bHQs
ICh2b2lkICoqKSZ0bXBfY3JlZHMsCisgICAgICAgICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xf
Y2xpZW50X2NlcnRfcHdfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9
IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhfY3JlZF9z
c2xfY2xpZW50X2NlcnRfcHdfdCAqIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjcmVkcyA9IGFwcl9wY2FsbG9jKHBvb2wsIHNp
emVvZiAoKmNyZWRzKSk7CisgICAgICAgICAgICAgIGNyZWRzLT5wYXNzd29yZCA9IHRtcF9jcmVk
cy0+cGFzc3dvcmQgPyBcCisgICAgICAgICAgICAgICAgYXByX3BzdHJkdXAocG9vbCwgdG1wX2Ny
ZWRzLT5wYXNzd29yZCkgOiBOVUxMOworICAgICAgICAgICAgICBjcmVkcy0+bWF5X3NhdmUgPSB0
bXBfY3JlZHMtPm1heV9zYXZlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9E
RUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwor
ICAqY3JlZCA9IGNyZWRzOworICByZXR1cm4gZXJyOworfQorCit2b2lkCitzdm5fc3dpZ19weV9z
ZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3JhX2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0g
c3ZuX3JhX2NyZWF0ZV9jYWxsYmFja3MoY2FsbGJhY2tzLCBwb29sKTsKKworICBpZiAoZXJyKQor
ICAgIHsKKyAgICAgIHN2bl9zd2lnX3B5X3N2bl9leGNlcHRpb24oZXJyKTsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgKmJhdG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3JfdCAq
c3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAqY29t
bWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9w
b29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVj
dCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgo
cmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBT
Vk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s
KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io
KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg
ICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAg
ICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s
b2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2Nv
bW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQeU9i
amVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y
X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8IChy
ZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z
d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs
bEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKSJsc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdfcmV2aXNpb24sIGRhdGUsIGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0g
Y2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg
aWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJu
X2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisg
IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2
bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAgICAg
ICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAgIHN2
bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2FycmF5
X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVzdWx0
LCAqcHlfcmV2X3Byb3BzID0gTlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5fZXJy
b3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8fCAo
aGFuZGxlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9z
d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2lnX3B5
X3Byb3BoYXNoX3RvX2RpY3QocmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBOVUxM
KQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hfdCAq
Iik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJvcGFy
cmF5X3RvX2RpY3QocHJvcF9kaWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVMTCkK
KyAgICB7CisgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9oZWFk
ZXJfdCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5
T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoLCByZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g
TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg
ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAg
IGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAgIC8q
IEZJWE1FOiBTdXBwb3J0IHJldHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAgICAg
ICogc2V0IGRlbHRhX2hhbmRsZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFfaGFu
ZGxlciA9IE5VTEw7CisgICAgICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9YREVD
UkVGKHJlc3VsdCk7CisgICAgfQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9wcm9w
cyk7CisgIFB5X1hERUNSRUYocHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFz
ZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpy
ZXBvcnRlcl9zZXRfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Zu
X3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xl
YW5fdCBzdGFydF9lbXB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s
KQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlf
cmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09
IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9S
OworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3Vs
dCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJy
b3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5f
c3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMg
c3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O
T19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVzdWx0
OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05vbmUp
CisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVfcGF0
aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFk
X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQp
OworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9
CisgICAgCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpyZXBv
cnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05P
X0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7
CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0aCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08mIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9ja190
b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg
cG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy
cm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKwor
ICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7
CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9maW5p
c2hfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19F
UlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7
CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9yZXBv
cnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg
PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
KyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9
IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hE
RUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICBy
ZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3JlcG9y
dCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy
X3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKwor
ICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYg
KHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1
cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg
IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf
YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1
bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7
Cit9CisKK2NvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9IHsK
KyAgICByZXBvcnRlcl9zZXRfcGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAgICBy
ZXBvcnRlcl9saW5rX3BhdGgsCisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICByZXBv
cnRlcl9hYm9ydF9yZXBvcnQKK307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5yZWog
c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJz
dm5fc3dpZ19weS9zd2lndXRpbF9weS5jLnJlagotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJz
aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMucmVq
CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4x
Lm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1
dGlsX3B5LmMucmVqCTIwMDYtMDctMDQgMTk6MDE6MjcuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAg
KzEsNDYgQEAKKyoqKioqKioqKioqKioqKgorKioqIDE1NjksMTU4NyAqKioqCisgICAgcmV0dXJu
IGVycjsKKyAgfQorICAKKyAgc3ZuX3N0cmVhbV90ICoKKyAgc3ZuX3N3aWdfcHlfbWFrZV9zdHJl
YW0oUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQorICB7CisgICAgc3ZuX3N0cmVh
bV90ICpzdHJlYW07CisgIAorLSAgIC8qIEJvcnJvdyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRv
IHB5X2lvIC0gdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUKKy0gICAgKiBjYWxsZXIgbXVz
dCBoYXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQor
LSAgICAqIGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBv
YmplY3QgYmVmb3JlIHdlIHJldHVybgorLSAgICAqIHRvIHB5dGhvbi4gSS5lLiBETyBOT1QgU1RP
UkUgQVdBWSBUSEUgUkVTVUxUSU5HIHN2bl9zdHJlYW1fdCAqIGZvciB1c2UKKy0gICAgKiBvdmVy
IG11bHRpcGxlIGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICAgIHN0cmVhbSA9IHN2bl9z
dHJlYW1fY3JlYXRlKHB5X2lvLCBwb29sKTsKKyAgICBzdm5fc3RyZWFtX3NldF9yZWFkKHN0cmVh
bSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICAgIHN2bl9zdHJlYW1fc2V0X3dyaXRlKHN0cmVhbSwg
d3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgCisgICAgcmV0dXJuIHN0cmVhbTsKKyAgfQorLS0tIDE1
NjksMTU5MiAtLS0tCisgICAgcmV0dXJuIGVycjsKKyAgfQorICAKKysgc3RhdGljIHN2bl9lcnJv
cl90ICoKKysgY2xvc2VfaGFuZGxlcl9weWlvKHZvaWQgKmJhdG9uKQorKyB7CisrICAgUHlPYmpl
Y3QgKnB5X2lvID0gYmF0b247CisrICAgUHlfREVDUkVGKHB5X2lvKTsKKysgICByZXR1cm4gU1ZO
X05PX0VSUk9SOworKyB9CisrIAorICBzdm5fc3RyZWFtX3QgKgorICBzdm5fc3dpZ19weV9tYWtl
X3N0cmVhbShQeU9iamVjdCAqcHlfaW8sIGFwcl9wb29sX3QgKnBvb2wpCisgIHsKKyAgICBzdm5f
c3RyZWFtX3QgKnN0cmVhbTsKKyAgCisrICAgUHlfSU5DUkVGKHB5X2lvKTsKKyAgICBzdHJlYW0g
PSBzdm5fc3RyZWFtX2NyZWF0ZShweV9pbywgcG9vbCk7CisgICAgc3ZuX3N0cmVhbV9zZXRfcmVh
ZChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKKyAgICBzdm5fc3RyZWFtX3NldF93cml0ZShz
dHJlYW0sIHdyaXRlX2hhbmRsZXJfcHlpbyk7CisrICAgc3ZuX3N0cmVhbV9zZXRfY2xvc2Uoc3Ry
ZWFtLCBjbG9zZV9oYW5kbGVyX3B5aW8pOworICAKKyAgICByZXR1cm4gc3RyZWFtOworICB9CmRp
ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaCBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJz
aW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgKLS0t
IHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5f
c3dpZ19weS9zd2lndXRpbF9weS5oCTIwMDUtMTAtMjAgMjM6MTc6MTkuMDAwMDAwMDAwICswMTAw
CisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9u
L2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJMjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAw
MDAgKzAxMDAKQEAgLTc5LDYgKzc5LDkgQEAKIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAogdm9p
ZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9w
b29sX3QgKipwb29sKTsKIAorLyogU2V0IGEgUHl0aG9uICdvd25lZCcgcmVmZXJlbmNlIG9uIHRo
ZSBwb29sIG9mIHRoZSBnaXZlbiBwcm94eSBvYmplY3QgKi8KK2ludCBzdm5fc3dpZ19weV9wb29s
X3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5LCBQeU9iamVjdCAqb2xkUmVmLCBQeU9iamVj
dCAqbmV3UmVmKTsKKwogDAogLyoqKiBTV0lHIFdyYXBwZXJzICoqKi8KIApAQCAtMTk4LDYgKzIw
MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRl
X3QgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90
IHJldmlzaW9uKTsKIAorU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5
X25vdGlmeV9mdW5jMih2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN2bl93Y19ub3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhl
Y3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KICAgIHZpYSB0aGUgYmF0
b24gYXJndW1lbnQgKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVApAQCAtMjQ5LDYgKzI1Nywx
MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
c2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBv
b2wpOwogCisvKiB0aHVua2VkIGluZm8gcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVu
Yyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKIC8qIHRodW5r
ZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAog
c3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQg
KmJhdG9uLApAQCAtMzAzLDYgKzMxOCw0NSBAQAogICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs
CiAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9p
ZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipj
YWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJh
Y2syKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lH
X1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFj
ayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJ
TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1
bmMoCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2
LAorICAgICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAg
ICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgYXByX2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBh
cHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29u
c3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCitTVk5fU1dJR19T
V0lHVVRJTF9FWFBPUlQKK3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5f
cmFfY2FsbGJhY2tzMl90ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKipiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj
dCAqcHlfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29s
X3QgKnBvb2wpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1
cyAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv
cHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZyBzdWJ2ZXJzaW9uLTEuMy4x
Lm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1
dGlsX3B5Lmgub3JpZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3
aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5Lmgub3JpZwkxOTcwLTAxLTAxIDAx
OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv
bi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oLm9yaWcJ
MjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwzNTcgQEAKKy8q
CisgKiBzd2lndXRpbF9weS5oIDogIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBzdHVmZiBmb3IgdGhl
IFNXSUcgUHl0aG9uIGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAo
YykgMjAwMC0yMDA0IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgQ09QWUlORywg
d2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRoaXMgZGlzdHJp
YnV0aW9uLiAgVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZl
cnNpb24udGlncmlzLm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZlcnNpb25zIG9m
IHRoaXMgbGljZW5zZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisgKiBuZXdlciB2
ZXJzaW9uIGluc3RlYWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29mdHdhcmUgY29u
c2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlk
dWFscy4gIEZvciBleGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbgor
ICogaGlzdG9yeSBhbmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jp
cy5vcmcvLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisKKyNpZm5kZWYgU1ZOX1NXSUdfU1dJR1VU
SUxfUFlfSAorI2RlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisKKyNpbmNsdWRlIDxQeXRo
b24uaD4KKworI2luY2x1ZGUgPGFwci5oPgorI2luY2x1ZGUgPGFwcl9wb29scy5oPgorI2luY2x1
ZGUgPGFwcl9zdHJpbmdzLmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRlIDxhcHJf
dGFibGVzLmg+CisKKyNpbmNsdWRlICJzdm5fdHlwZXMuaCIKKyNpbmNsdWRlICJzdm5fc3RyaW5n
LmgiCisjaW5jbHVkZSAic3ZuX2RlbHRhLmgiCisjaW5jbHVkZSAic3ZuX2NsaWVudC5oIgorI2lu
Y2x1ZGUgInN2bl9yZXBvcy5oIgorCisvKiBEZWZpbmUgRExMIGV4cG9ydCBtYWdpYyBvbiBXaW5k
b3dzLiAqLworI2lmZGVmIFdJTjMyCisjICBpZmRlZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9DCisj
ICAgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQp
CisjICBlbHNlCisjICAgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQgX19kZWNsc3Bl
YyhkbGxpbXBvcnQpCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBTVk5fU1dJR19TV0lHVVRJ
TF9FWFBPUlQKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKwwKKworLyogSW5pdGlhbGl6ZSB0aGUgbGlic3ZuX3N3
aWdfcHkgbGlicmFyeS4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX3N0YXR1c190
IHN2bl9zd2lnX3B5X2luaXRpYWxpemUodm9pZCk7CisKKwwKKworLyogRnVuY3Rpb25zIHRvIG1h
bmFnZSBweXRob24ncyBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayAqLworU1ZOX1NXSUdfU1dJR1VU
SUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jayh2b2lkKTsKKworU1ZO
X1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jayh2
b2lkKTsKKworDAorLyoqKiBBdXRvbWF0aWMgUG9vbCBNYW5hZ2VtZW50IEZ1bmN0aW9ucyAqKiov
CisKKy8qIFNldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQ
T1JUCit2b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICpweV9w
b29sLCBhcHJfcG9vbF90ICpwb29sKTsKKworLyogQ2xlYXIgdGhlIGFwcGxpY2F0aW9uIHBvb2wg
Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9jbGVhcl9hcHBs
aWNhdGlvbl9wb29sKHZvaWQpOworCisvKiBHZXQgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK1NW
Tl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9v
bChQeU9iamVjdCAqKnB5X3Bvb2wsIGFwcl9wb29sX3QgKipwb29sKTsKKworLyogU2V0IGEgUHl0
aG9uICdvd25lZCcgcmVmZXJlbmNlIG9uIHRoZSBwb29sIG9mIHRoZSBnaXZlbiBwcm94eSBvYmpl
Y3QgKi8KK2ludCBzdm5fc3dpZ19weV9wb29sX3NldF9vd25lZF9yZWYoUHlPYmplY3QgKnByb3h5
LCBQeU9iamVjdCAqb2xkUmVmLCBQeU9iamVjdCAqbmV3UmVmKTsKKworDAorLyoqKiBTV0lHIFdy
YXBwZXJzICoqKi8KKworLyogV3JhcHBlciBmb3IgU1dJR19OZXdQb2ludGVyT2JqICovCitTVk5f
U1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19OZXdQb2ludGVyT2JqKHZv
aWQgKm9iaiwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHlPYmplY3QgKnBvb2wpOworCisvKiBXcmFwcGVyIGZvciBTV0lHX0NvbnZlcnRQ
dHIgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAoraW50IHN2bl9zd2lnX0NvbnZlcnRQdHIo
UHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSk7CisKKy8q
IFdyYXBwZXIgZm9yIFNXSUdfTXVzdEdldFB0ciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
Cit2b2lkICpzdm5fc3dpZ19NdXN0R2V0UHRyKHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAq
dHlwZSwgaW50IGFyZ251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipw
eV9wb29sKTsKKwwKKy8qKiogRnVuY3Rpb25zIHRvIGV4cG9zZSBhIGN1c3RvbSBTdWJ2ZXJzaW9u
RXhjZXB0aW9uICoqKi8KKworLyogcmVnaXN0ZXIgYSBuZXcgc3VidmVyc2lvbiBleGNlcHRpb24g
Y2xhc3MgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5
X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKTsKKworLyogZ2V0IHRoZSBvYmplY3Qgd2hpY2ggcmVw
cmVzZW50cyB0aGUgc3VidmVyc2lvbiBleGNlcHRpb24gY2xhc3MgKi8KK1NWTl9TV0lHX1NXSUdV
VElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2V4Y2VwdGlvbl90eXBlKHZvaWQpOwor
CisvKiByYWlzZSBhIHN1YnZlcnNpb24gZXhjZXB0aW9uLCBjcmVhdGVkIGZyb20gYSBub3JtYWwg
c3VidmVyc2lvbiBlcnJvciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9z
d2lnX3B5X3N2bl9leGNlcHRpb24oc3ZuX2Vycm9yX3QgKmVycik7CisKKworDAorLyogaGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXByX2hhc2hfdCogKGNoYXIqIC0+IHN2bnN0cmluZ190
KikgdG8KKyAgIGEgUHl0aG9uIGRpY3QgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlP
YmplY3QgKnN2bl9zd2lnX3B5X3Byb3BoYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisK
Ky8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIGFwcl9oYXNoX3QqIChzdm5fcmV2bnVt
X3QqIC0+IGNvbnN0CisgICBjaGFyICopIHRvIGEgUHl0aG9uIGRpY3QgKi8KK1NWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90b19kaWN0
KGFwcl9oYXNoX3QgKmhhc2gpOworCisvKiBjb252ZXJ0IGEgaGFzaCBvZiAnY29uc3QgY2hhciAq
JyAtPiBUWVBFIGludG8gYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
CitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsIHN3
aWdfdHlwZV9pbmZvICp0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UHlPYmplY3QgKnB5X3Bvb2wpOworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhICdj
aGFyICoqJyBpbnRvIGEgUHl0aG9uIGxpc3Qgb2Ygc3RyaW5nCisgICBvYmplY3RzICovCitTVk5f
U1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jX3N0cmluZ3NfdG9f
bGlzdChjaGFyICoqc3RyaW5ncyk7CisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFu
IGFycmF5IG9mICdjb25zdCBjaGFyIConIHRvIGEgUHl0aG9uIGxpc3QKKyAgIG9mIHN0cmluZyBv
YmplY3RzICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19w
eV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3RyaW5ncyk7CisKKy8q
IGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIGFycmF5IG9mICdzdm5fcmV2bnVtX3QnIHRv
IGEgUHl0aG9uIGxpc3QKKyAgIG9mIGludCBvYmplY3RzICovCisvKiBGb3JtZXJseSB1c2VkIGJ5
IHByZS0xLjAgQVBJcy4gTm93IHVudXNlZAorUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JldmFycmF5
X3RvX2xpc3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpyZXZzKTsKKyovCisKKy8qIGhlbHBl
ciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgUHl0aG9uIGRpY3Rpb25hcnkgbWFwcGluZyBzdHJpbmdz
IHRvCisgICBzdHJpbmdzIGludG8gYW4gYXByX2hhc2hfdCBtYXBwaW5nIGNvbnN0IGNoYXIgKidz
IHRvIGNvbnN0IGNoYXIgKidzLAorICAgYWxsb2NhdGVkIGluIFBPT0wuICovCitTVk5fU1dJR19T
V0lHVVRJTF9FWFBPUlQKK2Fwcl9oYXNoX3QgKnN2bl9zd2lnX3B5X3N0cmluZ2hhc2hfZnJvbV9k
aWN0KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byBjb252
ZXJ0IGEgUHl0aG9uIGRpY3Rpb25hcnkgbWFwcGluZyBzdHJpbmdzIHRvCisgICBzdHJpbmdzIGlu
dG8gYW4gYXByX2hhc2hfdCBtYXBwaW5nIGNvbnN0IGNoYXIgKidzIHRvIHN2bl9zdHJpbmdfdCdz
LAorICAgYWxsb2NhdGVkIGluIFBPT0wuICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fw
cl9oYXNoX3QgKnN2bl9zd2lnX3B5X3Byb3BoYXNoX2Zyb21fZGljdChQeU9iamVjdCAqZGljdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gc2VxdWVuY2Ug
b2Ygc3RyaW5ncyBpbnRvIGFuCisgICAnYXByX2FycmF5X2hlYWRlcl90IConIG9mICdjb25zdCBj
aGFyIConIG9iamVjdHMuICBOb3RlIHRoYXQgdGhlCisgICBvYmplY3RzIG11c3QgcmVtYWluIGFs
aXZlIC0tIHRoZSB2YWx1ZXMgYXJlIG5vdCBjb3BpZWQuIFRoaXMgaXMKKyAgIGFwcHJvcHJpYXRl
IGZvciBpbmNvbWluZyBhcmd1bWVudHMgd2hpY2ggYXJlIGRlZmluZWQgdG8gbGFzdCB0aGUKKyAg
IGR1cmF0aW9uIG9mIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi4gICovCitTVk5fU1dJR19TV0lH
VVRJTF9FWFBPUlQKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5n
c190b19hcnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBsaWtl
IHN2bl9zd2lnX3B5X3N0cmluZ3NfdG9fYXJyYXkoKSwgYnV0IGZvciBhcnJheSdzIG9mICdzdm5f
cmV2bnVtX3Qncy4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXByX2FycmF5
X2hlYWRlcl90ICpzdm5fc3dpZ19weV9yZXZudW1zX3RvX2FycmF5KFB5T2JqZWN0ICpzb3VyY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIG1ha2UgYW4gZWRpdG9yIHRoYXQgInRodW5rcyIgZnJv
bSBDIGNhbGxiYWNrcyB1cCB0byBQeXRob24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAor
dm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBzdm5fZGVsdGFfZWRpdG9yX3QgKipl
ZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiplZGl0X2JhdG9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfZWRpdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2ZpbGUoUHlPYmplY3Qg
KnB5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX3N0cmVhbV90ICpzdm5fc3dp
Z19weV9tYWtlX3N0cmVhbShQeU9iamVjdCAqcHlfaW8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBhIG5vdGlmeSBmdW5jdGlv
biB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGluCisgICB2
aWEgdGhlIGJhdG9uIGFyZ3VtZW50ICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQg
c3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl93Y19ub3RpZnlfYWN0aW9uX3QgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdm5fbm9kZV9raW5kX3Qga2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5f
d2Nfbm90aWZ5X3N0YXRlX3QgY29udGVudF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3ZuX3djX25vdGlmeV9zdGF0ZV90IHByb3Bfc3RhdGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbik7CisKK1NWTl9TV0lHX1NXSUdVVElM
X0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBh
IHN0YXR1cyBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgaXMg
cGFzc2VkIGluCisgICB2aWEgdGhlIGJhdG9uIGFyZ3VtZW50ICovCitTVk5fU1dJR19TV0lHVVRJ
TF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3RhdHVzX2Z1bmModm9pZCAqYmF0b24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl93Y19zdGF0dXNfdCAqc3RhdHVzKTsKKworLyogYSBjYW5jZWwg
ZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlvbiBwYXNzZWQgaW4gdmlhIHRo
ZQorICAgY2FuY2VsX2JhdG9uIGFyZ3VtZW50LiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
Citzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmModm9pZCAqY2FuY2VsX2JhdG9u
KTsKKworLyogdGh1bmtlZCBmcyBnZXRfbG9ja3MgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdV
VElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2ZzX2dldF9sb2Nrc19mdW5jICh2
b2lkICpiYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl9sb2NrX3QgKmxvY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBjb21taXQgbG9nIGZldGNo
ZXIgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5
X2dldF9jb21taXRfbG9nX2Z1bmMoY29uc3QgY2hhciAqKmxvZ19tc2csCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqdG1wX2ZpbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVh
ZGVyX3QgKmNvbW1pdF9pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgcmVwb3MgYXV0aHog
Y2FsbGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9y
X3QgKnN2bl9zd2lnX3B5X3JlcG9zX2F1dGh6X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3Qg
KnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf
cG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBoaXN0b3J5IGNhbGxiYWNrIGZ1bmN0aW9uICov
CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yZXBv
c19oaXN0b3J5X2Z1bmModm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8q
IHRodW5rZWQgbG9nIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJR19TV0lHVVRJTF9FWFBP
UlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqcHlfcmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNo
YW5nZWRfcGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y
ZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJf
cG9vbF90ICpwb29sKTsKKworLyogdGh1bmtlZCBpbmZvIHJlY2VpdmVyIGZ1bmN0aW9uICovCitT
Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3Jl
Y2VpdmVyX2Z1bmModm9pZCAqcHlfcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9pbmZvX3QgKmluZm8sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOwor
CisvKiB0aHVua2VkIGJsYW1lIHJlY2VpdmVyIGZ1bmN0aW9uICovCitTVk5fU1dJR19TV0lHVVRJ
TF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJf
ZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5lX25vLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOwor
CisvKiBhdXRoIHByb3ZpZGVyIGNhbGxiYWNrcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
Citzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMoCisgICAg
c3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqKmNyZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29u
c3QgY2hhciAqcmVhbG0sCisgICAgY29uc3QgY2hhciAqdXNlcm5hbWUsCisgICAgc3ZuX2Jvb2xl
YW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VU
SUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF91c2VybmFtZV9wcm9tcHRf
ZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKipjcmVkLAorICAgIHZvaWQgKmJh
dG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUs
CisgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3Zu
X2Vycm9yX3QgKnN2bl9zd2lnX3B5X2F1dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYygK
KyAgICBzdm5fYXV0aF9jcmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqKmNyZWQsCisgICAgdm9pZCAq
YmF0b24sCisgICAgY29uc3QgY2hhciAqcmVhbG0sCisgICAgYXByX3VpbnQzMl90IGZhaWx1cmVz
LAorICAgIGNvbnN0IHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX3QgKmNlcnRfaW5mbywK
KyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT
Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3Nz
bF9jbGllbnRfY2VydF9wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRf
Y2VydF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwK
KyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitT
Vk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3Nz
bF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NzbF9jbGll
bnRfY2VydF9wd190ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpy
ZWFsbSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wp
OworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQKK3N2bl9zd2lnX3B5X3NldHVwX3Jh
X2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoqY2FsbGJhY2tzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f
ZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2lu
Zm9fdCAqY29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9l
cnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2soc3ZuX3Jldm51bV90IG5ld19yZXZp
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpiYXRvbik7CisKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAq
c3ZuX3N3aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jKAorICAgICAgICAgICAgICAgICAg
ICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAg
YXByX2hhc2hfdCAqcmV2X3Byb3BzLAorICAgICAgICAgICAgICAgICAgICBzdm5fdHhkZWx0YV93
aW5kb3dfaGFuZGxlcl90ICpkZWx0YV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB2b2lk
ICoqZGVsdGFfYmF0b24sCisgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAq
cHJvcF9kaWZmcywKKyAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NW
Tl9TV0lHX1NXSUdVVElMX0VYUE9SVAorZXh0ZXJuIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBz
d2lnX3B5X3JhX3JlcG9ydGVyMjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyog
X19jcGx1c3BsdXMgKi8KKworI2VuZGlmICAvKiBTVk5fU1dJR19TV0lHVVRJTF9QWV9IICovCmRp
ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
dGVzdHMvY2xpZW50LnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5Ci0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5CTE5NzAtMDEtMDEgMDE6MDA6
MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weQkyMDA2LTA3LTA0IDE5OjAxOjA1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDExMSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywgdGVt
cGZpbGUsIHR5cGVzCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgZnMsIGRlbHRhLCBj
bGllbnQsIHdjCisKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5fZnMgaW1wb3J0
IFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgKK2Zyb20gdXJs
bGliIGltcG9ydCBwYXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0
Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRoZSBTdWJ2ZXJz
aW9uIHJlcG9zaXRvcnkgbGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgIiIiTG9h
ZCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSIiIgorICAgIHNlbGYuY2xpZW50X2N0eCA9IGNsaWVu
dC5zdm5fY2xpZW50X2NyZWF0ZV9jb250ZXh0KCkKKworICAgIHByb3ZpZGVycyA9IFsKKyAgICAg
ICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfc2ltcGxlX3Byb3ZpZGVyKCksCisgICAgICAgY2xpZW50
LnN2bl9jbGllbnRfZ2V0X3VzZXJuYW1lX3Byb3ZpZGVyKCksCisgICAgXQorCisgICAgc2VsZi5j
bGllbnRfY3R4LmF1dGhfYmF0b24gPSBjb3JlLnN2bl9hdXRoX29wZW4ocHJvdmlkZXJzKQorICAg
IHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisK
KyAgZGVmIGluZm9fcmVjZWl2ZXIoc2VsZiwgcGF0aCwgaW5mbywgcG9vbCk6CisgICAgIiIiU3F1
aXJyZWwgYXdheSB0aGUgb3V0cHV0IGZyb20gJ3N2biBpbmZvJyBzbyB0aGF0IHRoZSB1bml0IHRl
c3RzCisgICAgICAgY2FuIGdldCBhdCB0aGVtLiIiIgorICAgIHNlbGYucGF0aCA9IHBhdGgKKyAg
ICBzZWxmLmluZm8gPSBpbmZvCisKKyAgZGVmIHRlc3RfY2hlY2tvdXQoc2VsZik6CisgICAgIiIi
VGVzdCBzdm5fY2xpZW50X2NoZWNrb3V0Mi4iIiIKKworICAgIHJldiA9IGNvcmUuc3ZuX29wdF9y
ZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisK
KyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ2NoZWNrb3V0
JykKKworICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsaWVudC5jaGVja291dDIs
IAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NfdXJsLCBwYXRoLCBOb25lLCBOb25l
LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisK
KyAgICBjbGllbnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1
ZSwgVHJ1ZSwgCisgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgZGVmIHRlc3RfaW5m
byhzZWxmKToKKyAgICAiIiJUZXN0IHNjb3BlIG9mIGdldF9sb2dzIGNhbGxiYWNrcyIiIgorCisg
ICAgIyBSdW4gaW5mbworICAgIHJldnQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAg
cmV2dC5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKyAgICByZXBvc191cmwgPSAi
ZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFUSCkKKyAgICBjbGllbnQuaW5mbyhyZXBv
c191cmwsIHJldnQsIHJldnQsIHNlbGYuaW5mb19yZWNlaXZlciwKKyAgICAgICAgICAgICAgICBG
YWxzZSwgc2VsZi5jbGllbnRfY3R4KQorCisgICAgIyBDaGVjayBvdXRwdXQgZnJvbSBydW5uaW5n
IGluZm8uIFRoaXMgYWxzbyBzZXJ2ZXMgdG8gdmVyaWZ5IHRoYXQKKyAgICAjIHRoZSBpbnRlcm5h
bCAnaW5mbycgb2JqZWN0IGlzIHN0aWxsIHZhbGlkCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LnBhdGgsIG9zLnBhdGguYmFzZW5hbWUoUkVQT1NfUEFUSCkpCisgICAgc2VsZi5pbmZvLmFzc2Vy
dF92YWxpZCgpCisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmluZm8uVVJMLCByZXBvc191cmwp
CisgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmluZm8ucmVwb3Nfcm9vdF9VUkwsIHJlcG9zX3Vy
bCkKKworCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV91cmwoc2VsZik6CisgICAgIiIiVGVzdCBzdm5f
Y2xpZW50X3V1aWRfZnJvbV91cmwgb24gYSBmaWxlOi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0
Xyhpc2luc3RhbmNlKAorICAgICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxm
LnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KSwKKyAgICAgICAgICAgICAgICAgdHlwZXMuU3Ry
aW5nVHlwZXMpKQorCisgIGRlZiB0ZXN0X3VybF9mcm9tX3BhdGgoc2VsZik6CisgICAgIiIiVGVz
dCBzdm5fY2xpZW50X3VybF9mcm9tX3BhdGggZm9yIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxm
LmFzc2VydEVxdWFscyhjbGllbnQudXJsX2Zyb21fcGF0aChzZWxmLnJlcG9zX3VybCksIHNlbGYu
cmVwb3NfdXJsKQorCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJl
di5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRo
LmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXJsX2Zyb21fcGF0aCcpCisKKyAgICBjbGll
bnQuY2hlY2tvdXQyKHNlbGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwg
CisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICBzZWxmLmFzc2Vy
dEVxdWFscyhjbGllbnQudXJsX2Zyb21fcGF0aChwYXRoKSwgc2VsZi5yZXBvc191cmwpCisKKyAg
ZGVmIHRlc3RfdXVpZF9mcm9tX3BhdGgoc2VsZik6CisgICAgIiIiVGVzdCBzdm5fY2xpZW50X3V1
aWRfZnJvbV9wYXRoLiIiIgorICAgIHJldiA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAg
ICByZXYua2luZCA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3V1aWRfZnJvbV9wYXRoJykKKworICAg
IGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwgcmV2LCBUcnVlLCBU
cnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkKKworICAgIHdjX2Fk
bSA9IHdjLmFkbV9vcGVuMyhOb25lLCBwYXRoLCBGYWxzZSwgMCwgTm9uZSkKKworICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGNsaWVudC51dWlkX2Zyb21fcGF0aChwYXRoLCB3Y19hZG0sIHNlbGYuY2xp
ZW50X2N0eCksIAorICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC51dWlkX2Zyb21fdXJsKHNl
bGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpKQorCisgICAgc2VsZi5hc3NlcnRfKGlzaW5z
dGFuY2UoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBhdGgsIHdjX2FkbSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KSwgdHlwZXMuU3RyaW5nVHlwZXMpKQorCisg
IGRlZiB0ZXN0X29wZW5fcmFfc2Vzc2lvbihzZWxmKToKKyAgICAgICIiIlRlc3Qgc3ZuX2NsaWVu
dF9vcGVuX3JhX3Nlc3Npb24oKS4iIiIKKyAgICAgIGNsaWVudC5vcGVuX3JhX3Nlc3Npb24oc2Vs
Zi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJu
IHVuaXR0ZXN0Lm1ha2VTdWl0ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBv
c2l0b3J5VGVzdFNldHVwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5l
ciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRp
ZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
dGVzdHMvY2xpZW50LnB5Lm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCTE5
NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5l
dy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCTIw
MDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTExIEBACitpbXBv
cnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUs
IHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9s
LnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAg
UkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2
ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBj
YXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRlZiBzZXRV
cChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisgICAgc2Vs
Zi5jbGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2NvbnRleHQoKQorCisgICAg
cHJvdmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF9zaW1wbGVfcHJvdmlk
ZXIoKSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5hbWVfcHJvdmlkZXIoKSwK
KyAgICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9IGNvcmUuc3ZuX2F1dGhf
b3Blbihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFt
ZTJ1cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihzZWxmLCBwYXRoLCBpbmZv
LCBwb29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQgZnJvbSAnc3ZuIGluZm8n
IHNvIHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0IHRoZW0uIiIiCisgICAg
c2VsZi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKworICBkZWYgdGVzdF9jaGVj
a291dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tvdXQyLiIiIgorCisgICAg
cmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5f
b3B0X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0
dGVtcGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
ciwgY2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc191
cmwsIHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmws
IHBhdGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0
eCkKKworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qgc2NvcGUgb2YgZ2V0X2xv
Z3MgY2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2dCA9IGNvcmUuc3ZuX29w
dF9yZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVh
ZAorICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQor
ICAgIGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2VsZi5pbmZvX3JlY2VpdmVy
LAorICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgpCisKKyAgICAjIENoZWNr
IG91dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZlcyB0byB2ZXJpZnkgdGhh
dAorICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3RpbGwgdmFsaWQKKyAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFtZShSRVBPU19QQVRIKSkK
KyAgICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
aW5mby5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5mby5yZXBv
c19yb290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVpZF9mcm9tX3VybChzZWxm
KToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBvbiBhIGZpbGU6Ly8gVVJM
IiIiCisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAgICAgICAgICAgIGNsaWVu
dC51dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpLAorICAgICAg
ICAgICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3RfdXJsX2Zyb21fcGF0
aChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCBmb3IgYSBmaWxl
Oi8vIFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHNl
bGYucmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRf
cmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor
CisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1cmxfZnJv
bV9wYXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJl
diwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0
eCkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHBhdGgpLCBz
ZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0aChzZWxmKToKKyAgICAi
IiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAgcmV2ID0gY29yZS5zdm5f
b3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hl
YWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXVp
ZF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0
aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGll
bnRfY3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUsIHBhdGgsIEZhbHNlLCAw
LCBOb25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBh
dGgsIHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAgICAgICAgICAgICAgY2xp
ZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkpCisKKyAg
ICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2Nf
YWRtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpLCB0eXBl
cy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNzaW9uKHNlbGYpOgorICAg
ICAgIiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIiIgorICAgICAgY2xpZW50
Lm9wZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KQorCitkZWYg
c3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0
b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRl
Q2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1
bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9i
aW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Ci0tLSBzdWJ2ZXJzaW9uLTEu
My4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkJMjAwNi0wNy0wNCAxOTowMTow
NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MK
KworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKwor
ZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJl
cG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBh
dGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9y
eSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lv
biByZXBvc2l0b3J5IiIiCisKKyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3Nf
dXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBP
cGVuIHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBv
cyA9IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5y
ZXBvcykKKworICAgIGNhbGxiYWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJh
X2N0eCA9IHJhLm9wZW4yKHNlbGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisK
KyAgZGVmIHRlc3RfZ2V0X3JlcG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBv
c19yb290KHNlbGYucmFfY3R4KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9z
X3VybCkKKworICBkZWYgdGVzdF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0
X3V1aWQoc2VsZi5yYV9jdHgpCisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisg
ICAgc2VsZi5hc3NlcnRFcXVhbChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xh
c3Rlc3RfcmV2bnVtKHNlbGYpOgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVt
KHNlbGYucmFfY3R4KQorICAgIGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9n
ZXRfZGlyKHNlbGYpOgorICAgIChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJh
X2N0eCwgJycsIDEpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsn
KSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAg
IHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2Vy
dEVxdWFsKGRpcmVudHNbJ3RydW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2Vs
Zi5hc3NlcnRFcXVhbChkaXJlbnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGly
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25v
ZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1Bf
RU5UUllfVVVJRCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5f
UFJPUF9FTlRSWV9MQVNUX0FVVEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2Rp
cihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50
cywge30pCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry
dW5rJywgMTApCisKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUy
LnR4dCcpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5k
LGNvcmUuc3ZuX25vZGVfZmlsZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVm
IG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChpbmZvLnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisK
KyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0
eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEu
ZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxk
ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3Qs
IE5vbmUsIDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRp
dF9iYXRvbikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNr
KHJldmlzaW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlz
aW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24g
PSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNr
LCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3Qo
ZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9h
ZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVk
aXRvcl9pbnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3Rf
Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNl
bGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Io
c2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9v
dCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkK
KyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJi
bGFoIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQo
ZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6Cisg
ICAgbG9jYXRpb25zID0gcmEuZ2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFE
TUUudHh0IiwgMiwgcmFuZ2UoMSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywg
eworICAgICAgICAyOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9S
RUFETUUudHh0JywgCisgICAgICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0
ZXN0X2dldF9maWxlX3JldnMoc2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwg
cmV2X3Byb3BzLCBwcm9wX2RpZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9
PSAyIG9yIHJldiA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsv
UkVBRE1FLnR4dCIpCisgICAgICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVB
RE1FLicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAg
ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAg
IGVsaWYgcmV2ID09IDM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywg
eworICAgICAgICAgICAgICAnc3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAg
ICAgICAnc3ZuOmF1dGhvcic6ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIw
MDUtMDQtMDFUMTM6MjQ6NTguMjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHByb3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWlu
JywgJ3N2bjplb2wtc3R5bGUnOiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNl
bGYucmFfY3R4LCAidHJ1bmsvUkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBk
ZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3Ip
OgorICAgICAgICBwYXNzCisKKyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRy
LCBlX2JhdG9uID0gZGVsdGEubWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVy
LCByZXBvcnRlcl9iYXRvbiA9IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVl
LCBlX3B0ciwgZV9iYXRvbikKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVw
b3J0ZXIsIHJlcG9ydGVyX2JhdG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9y
dGVyMl9pbnZva2VfZmluaXNoX3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2Rl
ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp
dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg
cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5Lm9yaWcgc3VidmVyc2lvbi0xLjMuMS5u
ZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCi0tLSBz
dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEu
cHkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weS5v
cmlnCTIwMDYtMDctMDQgMTk6MDE6MDUuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTM2IEBA
CitpbXBvcnQgdW5pdHRlc3QsIG9zCisKK2Zyb20gc3ZuIGltcG9ydCBjb3JlLCByZXBvcywgZnMs
IGRlbHRhLCBjbGllbnQsIHJhCisKK2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5f
ZnMgaW1wb3J0IFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgK
K2Zyb20gdXJsbGliIGltcG9ydCBwYXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRo
ZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgbGF5ZXIiIiIKKworICBkZWYgc2V0VXAoc2VsZik6Cisg
ICAgIiIiTG9hZCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSIiIgorCisgICAgcmEuaW5pdGlhbGl6
ZSgpCisKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBP
U19QQVRIKQorICAgIAorICAgICMgT3BlbiByZXBvc2l0b3J5IGRpcmVjdGx5IGZvciBjcm9zcy1j
aGVja2luZworICAgIHNlbGYucmVwb3MgPSByZXBvcy5vcGVuKFJFUE9TX1BBVEgpCisgICAgc2Vs
Zi5mcyA9IHJlcG9zLmZzKHNlbGYucmVwb3MpCisKKyAgICBjYWxsYmFja3MgPSByYS5jYWxsYmFj
a3MyX3QoKQorCisgICAgc2VsZi5yYV9jdHggPSByYS5vcGVuMihzZWxmLnJlcG9zX3VybCwgY2Fs
bGJhY2tzLCBOb25lLCBOb25lKQorCisgIGRlZiB0ZXN0X2dldF9yZXBvc19yb290KHNlbGYpOgor
ICAgIHJvb3QgPSByYS5nZXRfcmVwb3Nfcm9vdChzZWxmLnJhX2N0eCkKKyAgICBzZWxmLmFzc2Vy
dEVxdWFsKHJvb3Qsc2VsZi5yZXBvc191cmwpCisKKyAgZGVmIHRlc3RfZ2V0X3V1aWQoc2VsZik6
CisgICAgcmFfdXVpZCA9IHJhLmdldF91dWlkKHNlbGYucmFfY3R4KQorICAgIGZzX3V1aWQgPSBm
cy5nZXRfdXVpZChzZWxmLmZzKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFfdXVpZCxmc191dWlk
KQorCisgIGRlZiB0ZXN0X2dldF9sYXN0ZXN0X3Jldm51bShzZWxmKToKKyAgICByYV9yZXZudW0g
PSByYS5nZXRfbGF0ZXN0X3Jldm51bShzZWxmLnJhX2N0eCkKKyAgICBmc19yZXZudW0gPSBmcy55
b3VuZ2VzdF9yZXYoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3Jldm51bSxmc19y
ZXZudW0pCisKKyAgZGVmIHRlc3RfZ2V0X2RpcihzZWxmKToKKyAgICAoZGlyZW50cyxfLHByb3Bz
KSA9IHJhLmdldF9kaXIoc2VsZi5yYV9jdHgsICcnLCAxKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShk
aXJlbnRzLmhhc19rZXkoJ3RydW5rJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFz
X2tleSgnYnJhbmNoZXMnKSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCd0
YWdzJykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0cnVuayddLmtpbmQsIGNvcmUu
c3ZuX25vZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1snYnJhbmNoZXMnXS5r
aW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ3Rh
Z3MnXS5raW5kLCBjb3JlLnN2bl9ub2RlX2RpcikKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMu
aGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX1VVSUQpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
cm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1BfRU5UUllfTEFTVF9BVVRIT1IpKQorCisgICAgKGRp
cmVudHMsXyxfKSA9IHJhLmdldF9kaXIoc2VsZi5yYV9jdHgsICd0cnVuaycsIDEpCisKKyAgICBz
ZWxmLmFzc2VydEVxdWFsKGRpcmVudHMsIHt9KQorCisgICAgKGRpcmVudHMsXyxfKSA9IHJhLmdl
dF9kaXIoc2VsZi5yYV9jdHgsICd0cnVuaycsIDEwKQorCisgICAgc2VsZi5hc3NlcnRUcnVlKGRp
cmVudHMuaGFzX2tleSgnUkVBRE1FMi50eHQnKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVu
dHNbJ1JFQURNRTIudHh0J10ua2luZCxjb3JlLnN2bl9ub2RlX2ZpbGUpCisKKyAgZGVmIHRlc3Rf
Y29tbWl0KHNlbGYpOgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9y
LCBiYXRvbik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5yZXZpc2lvbiwgZnMueW91
bmdlc3RfcmV2KHNlbGYuZnMpKQorCisgICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2Nv
bW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgsICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFs
c2UpCisgICAgcm9vdCA9IGRlbHRhLmVkaXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRp
dF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9y
eShlZGl0b3IsICJibGEiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZva2Vf
Y2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfY29tbWl0KHNlbGYp
OgorICAgIGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKToKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpKQorCisg
ICAgZWRpdG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgs
ICJmb29iYXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9vdCA9IGRlbHRhLmVk
aXRvcl9pbnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9
IGRlbHRhLmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJibGFoIiwgcm9vdCwg
Tm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0
X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2so
cmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2aXNp
b24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9
IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ss
IE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChl
ZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2Fk
ZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVsdGEuZWRp
dG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYgdGVzdF9n
ZXRfbG9jYXRpb25zKHNlbGYpOgorICAgIGxvY2F0aW9ucyA9IHJhLmdldF9sb2NhdGlvbnMoc2Vs
Zi5yYV9jdHgsICIvdHJ1bmsvUkVBRE1FLnR4dCIsIDIsIHJhbmdlKDEsNSkpCisgICAgc2VsZi5h
c3NlcnRFcXVhbChsb2NhdGlvbnMsIHsKKyAgICAgICAgMjogJy90cnVuay9SRUFETUUudHh0Jywg
CisgICAgICAgIDM6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAgICAgICA0OiAnL3RydW5rL1JF
QURNRS50eHQnfSkKKworICBkZWYgdGVzdF9nZXRfZmlsZV9yZXZzKHNlbGYpOgorICAgIGRlZiBy
ZXZfaGFuZGxlcihwYXRoLCByZXYsIHJldl9wcm9wcywgcHJvcF9kaWZmcywgcG9vbCk6CisgICAg
ICAgIHNlbGYuYXNzZXJ0XyhyZXYgPT0gMiBvciByZXYgPT0gMykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChwYXRoLCAiL3RydW5rL1JFQURNRS50eHQiKQorICAgICAgICBpZiByZXYgPT0gMjoK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAg
ICdzdm46bG9nJzogJ0FkZGVkIFJFQURNRS4nLAorICAgICAgICAgICAgICAnc3ZuOmF1dGhvcic6
ICdqb2huJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUtMDQtMDFUMTM6MTI6MTgu
MjE2MjY3WicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBy
b3BfZGlmZnMsIHt9KQorICAgICAgICBlbGlmIHJldiA9PSAzOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChyZXZfcHJvcHMsIHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnRml4ZWQg
UkVBRE1FLlxuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAna2F0ZScsCisgICAgICAg
ICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjI0OjU4LjIzNDY0M1onCisgICAgICAg
ICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2RpZmZzLCB7J3N2bjpt
aW1lLXR5cGUnOiAndGV4dC9wbGFpbicsICdzdm46ZW9sLXN0eWxlJzogJ25hdGl2ZSd9KQorCisg
ICAgcmEuZ2V0X2ZpbGVfcmV2cyhzZWxmLnJhX2N0eCwgInRydW5rL1JFQURNRS50eHQiLCAwLCAx
MCwgcmV2X2hhbmRsZXIpCisKKyAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgIGNsYXNzIFRl
c3RFZGl0b3IoZGVsdGEuRWRpdG9yKToKKyAgICAgICAgcGFzcworCisgICAgZWRpdG9yID0gVGVz
dEVkaXRvcigpCisKKyAgICBlX3B0ciwgZV9iYXRvbiA9IGRlbHRhLm1ha2VfZWRpdG9yKGVkaXRv
cikKKyAgICAKKyAgICByZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24gPSByYS5kb191cGRhdGUoc2Vs
Zi5yYV9jdHgsIDEwLCAiIiwgVHJ1ZSwgZV9wdHIsIGVfYmF0b24pCisKKyAgICByYS5yZXBvcnRl
cjJfaW52b2tlX3NldF9wYXRoKHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbiwgIiIsIDAsIFRydWUs
IE5vbmUpCisKKyAgICByYS5yZXBvcnRlcjJfaW52b2tlX2ZpbmlzaF9yZXBvcnQocmVwb3J0ZXIs
IHJlcG9ydGVyX2JhdG9uKQorCitkZWYgc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFr
ZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0
dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3Qu
VGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZl
cnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxs
LnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
dGVzdHMvcnVuX2FsbC5weQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL3Rlc3RzL3J1bl9hbGwucHkJMjAwNS0xMC0wMiAwNToxODoyNS4wMDAwMDAw
MDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp
Zy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkyMDA2LTA3LTA0IDE5OjAxOjA1LjAwMDAwMDAwMCAr
MDEwMApAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCBzeXMsIG9zCiBiaW5kaXIgPSBvcy5wYXRoLmRp
cm5hbWUoc3lzLmFyZ3ZbMF0pCi1zeXMucGF0aFswOjBdID0gWyBvcy5nZXRjd2QoKSwgIiVzLy5s
aWJzIiAlIG9zLmdldGN3ZCgpLCBcCitzeXMucGF0aFswOjBdID0gWyBiaW5kaXIsIG9zLmdldGN3
ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwKICAgICAgICAgICAgICAgICAgICIlcy8u
LiIgJSBiaW5kaXIsICIlcy8uLi8ubGlicyIgJSBiaW5kaXIgXQogCiAjIE9TZXMgd2l0aG91dCBS
UEFUSCBzdXBwb3J0IGFyZSBnb2luZyB0byBoYXZlIHRvIGRvIHRoaW5ncyBoZXJlIHRvIG1ha2UK
QEAgLTE3LDYgKzE3LDkgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBvb2wKIGltcG9ydCBy
ZXBvc2l0b3J5CitpbXBvcnQgY2xpZW50CitpbXBvcnQgcmEKK2ltcG9ydCB3YwogaW1wb3J0IHRy
YWMudmVyc2lvbmNvbnRyb2wudGVzdHMKIAogIyBSdW4gYWxsIHRlc3RzCkBAIC0yNCw3ICsyNywx
MCBAQAogZGVmIHN1aXRlKCk6CiAgICIiIlJ1biBhbGwgdGVzdHMiIiIKICAgc3VpdGUgPSB1bml0
dGVzdC5UZXN0U3VpdGUoKQorICBzdWl0ZS5hZGRUZXN0KGNsaWVudC5zdWl0ZSgpKQogICBzdWl0
ZS5hZGRUZXN0KHBvb2wuc3VpdGUoKSkKKyAgc3VpdGUuYWRkVGVzdChyYS5zdWl0ZSgpKQorICBz
dWl0ZS5hZGRUZXN0KHdjLnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocmVwb3NpdG9yeS5zdWl0
ZSgpKQogICBzdWl0ZS5hZGRUZXN0KHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3VpdGUoKSk7
CiAgIHJldHVybiBzdWl0ZQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2Jp
bmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkKLS0tIHN1YnZlcnNpb24tMS4z
LjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQkyMDA2LTA3LTA0IDE5OjAxOjA1
LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDE3NSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywg
dGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJlcG9zLCB3
YywgY2xpZW50Citmcm9tIGxpYnN2bi5jb3JlIGltcG9ydCBTdWJ2ZXJzaW9uRXhjZXB0aW9uCisK
K2Zyb20gdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cy5zdm5fZnMgaW1wb3J0IFN1YnZlcnNpb25S
ZXBvc2l0b3J5VGVzdFNldHVwLCBcCisgIFJFUE9TX1BBVEgKK2Zyb20gdXJsbGliIGltcG9ydCBw
YXRobmFtZTJ1cmwKKworY2xhc3MgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICIiIlRlc3QgY2FzZXMgZm9yIHRoZSBTdWJ2ZXJzaW9uIHdvcmtpbmcg
Y29weSBsYXllciIiIgorCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVy
c2lvbiByZXBvc2l0b3J5IiIiCisKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBh
dGhuYW1lMnVybChSRVBPU19QQVRIKQorICAgIAorICAgICMgT3BlbiByZXBvc2l0b3J5IGRpcmVj
dGx5IGZvciBjcm9zcy1jaGVja2luZworICAgIHNlbGYucmVwb3MgPSByZXBvcy5vcGVuKFJFUE9T
X1BBVEgpCisgICAgc2VsZi5mcyA9IHJlcG9zLmZzKHNlbGYucmVwb3MpCisKKyAgICBzZWxmLnBh
dGggPSB0ZW1wZmlsZS5ta3RlbXAoKQorCisgICAgY2xpZW50X2N0eCA9IGNsaWVudC5jcmVhdGVf
Y29udGV4dCgpCisgICAgCisgICAgcmV2ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAg
IHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQKKworICAgIGNsaWVudC5jaGVj
a291dDIoc2VsZi5yZXBvc191cmwsIHNlbGYucGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAor
ICAgICAgICAgICAgY2xpZW50X2N0eCkKKworICAgIHNlbGYud2MgPSB3Yy5hZG1fb3BlbjMoTm9u
ZSwgc2VsZi5wYXRoLCBUcnVlLCAtMSwgTm9uZSkKKworICBkZWYgdGVzdF9lbnRyeShzZWxmKToK
KyAgICAgIHdjX2VudHJ5ID0gd2MuZW50cnkoc2VsZi5wYXRoLCBzZWxmLndjLCBUcnVlKQorCisg
IGRlZiB0ZXN0X2xvY2soc2VsZik6CisgICAgICBsb2NrID0gd2MuYWRkX2xvY2soc2VsZi5wYXRo
LCBjb3JlLnN2bl9sb2NrX2NyZWF0ZShjb3JlLlBvb2woKSksIHNlbGYud2MpCisgICAgICBzZWxm
LmFzc2VydEVxdWFsKFRydWUsIHdjLmFkbV9sb2NrZWQoc2VsZi53YykpCisgICAgICBzZWxmLmFz
c2VydEVxdWFsKFRydWUsIHdjLmxvY2tlZChzZWxmLnBhdGgpKQorICAgICAgd2MucmVtb3ZlX2xv
Y2soc2VsZi5wYXRoLCBzZWxmLndjKQorCisgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAg
ICB3Yy52ZXJzaW9uKCkKKworICBkZWYgdGVzdF9hY2Nlc3NfcGF0aChzZWxmKToKKyAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCB3Yy5hZG1fYWNjZXNzX3BhdGgoc2VsZi53YykpCisK
KyAgZGVmIHRlc3RfaXNfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5p
c19hZG1fZGlyKCIuc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo
Ii5mb29zdm4iKSkKKworICBkZWYgdGVzdF9nZXRfYWRtX2RpcihzZWxmKToKKyAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHdjLmdldF9hZG1fZGlyKCksIGJhc2VzdHJpbmcpKQorCisg
IGRlZiB0ZXN0X3NldF9hZG1fZGlyKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3Vi
dmVyc2lvbkV4Y2VwdGlvbiwgd2Muc2V0X2FkbV9kaXIsICIuZm9vYmFyIikKKyAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZSh3Yy5pc19hZG1fZGlyKCIuc3ZuIikpCisgICAgICBzZWxmLmFzc2VydEZhbHNl
KHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRt
X2RpcigiLmZvb2JhciIpKQorICAgICAgd2Muc2V0X2FkbV9kaXIoIl9zdm4iKQorICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIl9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoIl9zdm4iLCB3Yy5nZXRfYWRtX2RpcigpKQorICAgICAgd2Muc2V0X2FkbV9kaXIoIi5zdm4i
KQorICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3Yy5pc19hZG1fZGlyKCJfc3ZuIikpCisgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCIuc3ZuIiwgd2MuZ2V0X2FkbV9kaXIoKSkKKworICBkZWYgdGVzdF9p
bml0X3RyYXZlcnNhbF9pbmZvKHNlbGYpOgorICAgICAgd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygp
CisKKyAgZGVmIHRlc3RfY3Jhd2xfcmV2aXNpb25zMihzZWxmKToKKyAgICAgIGluZm9zID0gW10K
KyAgICAgIHNldF9wYXRocyA9IFtdCisKKyAgICAgIGRlZiBub3RpZnkoaW5mbywgcG9vbCk6Cisg
ICAgICAgICAgaW5mb3MuYXBwZW5kKGluZm8pCisKKyAgICAgIGNsYXNzIE15UmVwb3J0ZXI6Cisg
ICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICBzZWxmLl9maW5pc2hl
ZF9yZXBvcnQgPSBGYWxzZQorCisgICAgICAgICAgZGVmIGFib3J0X3JlcG9ydChzZWxmLCBwb29s
KToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgZGVmIGZpbmlzaF9yZXBvcnQoc2Vs
ZiwgcG9vbCk6CisgICAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IFRydWUKKwor
ICAgICAgICAgIGRlZiBzZXRfcGF0aChzZWxmLCBwYXRoLCByZXZpc2lvbiwgc3RhcnRfZW1wdHks
IGxvY2tfdG9rZW4sIHBvb2wpOgorICAgICAgICAgICAgICBzZXRfcGF0aHMuYXBwZW5kKHBhdGgp
CisKKyAgICAgICAgICBkZWYgbGlua19wYXRoKHNlbGYsIHBhdGgsIHVybCwgcmV2aXNpb24sIHN0
YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCk6Cisg
ICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgIGRlZiBkZWxldGVfcGF0aChzZWxmLCBwYXRo
LCBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAjIFJlbW92ZSB0cnVuay9SRUFE
TUUudHh0CisgICAgICByZWFkbWVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJ0cnVu
ayIsICJSRUFETUUudHh0IikKKyAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhyZWFk
bWVfcGF0aCkpCisgICAgICBvcy5yZW1vdmUocmVhZG1lX3BhdGgpCisKKyAgICAgICMgUmVzdG9y
ZSB0cnVuay9SRUFETUUudHh0IHVzaW5nIGNyYXdsX3JldmlzaW9uMgorICAgICAgaW5mbyA9IHdj
LmluaXRfdHJhdmVyc2FsX2luZm8oKQorICAgICAgcmVwb3J0ZXIgPSBNeVJlcG9ydGVyKCkKKyAg
ICAgIHdjLmNyYXdsX3JldmlzaW9uczIoc2VsZi5wYXRoLCBzZWxmLndjLCByZXBvcnRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSwgRmFsc2UsIG5vdGlmeSwgaW5mbykK
KworICAgICAgIyBDaGVjayB0aGF0IHRoZSByZXBvcnQgZmluaXNoZWQKKyAgICAgIHNlbGYuYXNz
ZXJ0XyhyZXBvcnRlci5fZmluaXNoZWRfcmVwb3J0KQorICAgICAgc2VsZi5hc3NlcnRFcXVhbChb
JyddLCBzZXRfcGF0aHMpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihpbmZvcykpCisK
KyAgICAgICMgQ2hlY2sgY29udGVudCBvZiBpbmZvcyBvYmplY3QKKyAgICAgIFtpbmZvXSA9IGlu
Zm9zCisgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRtZV9wYXRoLCBpbmZvLnBhdGgpCisgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvcmUuc3ZuX25vZGVfZmlsZSwgaW5mby5raW5kKQorICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgtMSwgaW5mby5yZXZpc2lvbikKKworICBkZWYgdGVzdF9jcmVhdGVf
bm90aWZ5KHNlbGYpOgorICAgICAgd2MuY3JlYXRlX25vdGlmeShzZWxmLnBhdGgsIHdjLm5vdGlm
eV9hZGQpCisKKyAgZGVmIHRlc3RfY2hlY2tfd2Moc2VsZik6CisgICAgICBzZWxmLmFzc2VydFRy
dWUod2MuY2hlY2tfd2Moc2VsZi5wYXRoKSA+IDApCisKKyAgZGVmIHRlc3RfZ2V0X2FuY2VzdHJ5
KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc2VsZi5yZXBvc191cmwsIDEyXSwgCisg
ICAgICAgICAgICAgICAgICAgICAgIHdjLmdldF9hbmNlc3RyeShzZWxmLnBhdGgsIHNlbGYud2Mp
KQorCisgIGRlZiB0ZXN0X3N0YXR1cyhzZWxmKToKKyAgICAgIHdjLnN0YXR1czIoc2VsZi5wYXRo
LCBzZWxmLndjKQorCisgIGRlZiB0ZXN0X2lzX25vcm1hbF9wcm9wKHNlbGYpOgorICAgICAgc2Vs
Zi5mYWlsSWYod2MuaXNfbm9ybWFsX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxm
LmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOmVudHJ5OmZvbzpiYXInKSkKKyAgICAgIHNl
bGYuYXNzZXJ0Xyh3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYu
YXNzZXJ0Xyh3Yy5pc19ub3JtYWxfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisKKyAgZGVmIHRl
c3RfaXNfd2NfcHJvcChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyh3Yy5pc193Y19wcm9wKCdz
dm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNfd2NfcHJvcCgnc3ZuOmVu
dHJ5OmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3AoJ3N2bjpmb286
YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5pc193Y19wcm9wKCdmb3JlaWduOmZvbzpiYXIn
KSkKKworICBkZWYgdGVzdF9pc19lbnRyeV9wcm9wKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRf
KHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjplbnRyeTpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJ
Zih3Yy5pc19lbnRyeV9wcm9wKCdzdm46d2M6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYo
d2MuaXNfZW50cnlfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlz
X2VudHJ5X3Byb3AoJ2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2dldF9wcmlzdGlu
ZV9jb3B5X3BhdGgoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICB3Yy5n
ZXRfcHJpc3RpbmVfY29weV9wYXRoKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICdmb28nKSksCisg
ICAgICAgIG9zLnBhdGguam9pbihzZWxmLnBhdGgsIHdjLmdldF9hZG1fZGlyKCksICd0ZXh0LWJh
c2UnLCAnZm9vLnN2bi1iYXNlJykpCisKKyAgZGVmIHRlc3RfZ2V0X2lnbm9yZXMoc2VsZik6Cisg
ICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh3Yy5nZXRfaWdub3JlcyhOb25lLCBzZWxmLndj
KSwgbGlzdCkpCisKKyAgZGVmIHRlc3RfZW50cmllc19yZWFkKHNlbGYpOgorICAgICAgZW50cmll
cyA9IHdjLmVudHJpZXNfcmVhZChzZWxmLndjLCBUcnVlKQorICAgICAgICAKKyAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoWycnLCAndGFncycsICdicmFuY2hlcycsICd0cnVuayddLCBlbnRyaWVzLmtl
eXMoKSkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICB3Yy5hZG1fY2xvc2Uoc2VsZi53
YykKKyAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wYXRoKQorCitkZWYgc3VpdGUoKToKKyAgICBy
ZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UsICd0
ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9U3VidmVyc2lv
blJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
cnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUo
KSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2
bl9jbGllbnQuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcv
c3ZuX2NsaWVudC5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp
Zy9zdm5fY2xpZW50LmkJMjAwNi0wMS0wNCAxNzoyMDowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHN1
YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkJ
MjAwNi0wNy0wNCAxOTowMTowNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNl
bmRpZgogCiAlaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5pCiAKICVp
bmNsdWRlIHN2bl9nbG9iYWwuc3dnCiAlaW1wb3J0IGNvcmUuaQpAQCAtNDQsNiArNDUsMTEgQEAK
ICAgc3ZuX2NsaWVudF9jdHhfdCAqKgogfTsKIAorJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IAor
ICBjb25zdCBzdm5fb3B0X3JldmlzaW9uX3QgKnJldmlzaW9uLAorICBjb25zdCBzdm5fb3B0X3Jl
dmlzaW9uX3QgKnBlZ19yZXZpc2lvbgorfTsKKwogJWFwcGx5IGNvbnN0IGFwcl9hcnJheV9oZWFk
ZXJfdCAqU1RSSU5HTElTVCB7CiAgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICp0YXJnZXRz
LAogICAgIGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqZGlmZl9vcHRpb25zCkBAIC02Niw2ICs3
MiwxNiBAQAogCiAjaWZkZWYgU1dJR1BZVEhPTgogJWFwcGx5IHN2bl9zdHJlYW1fdCAqV1JBUFBF
RF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworCisvKiBtZW1iZXJzIG9mIHN2bl9jbGllbnRf
Y3R4X3QgKi8KKyVhcHBseSB2b2lkICpQWV9BU19WT0lEIHsKKyAgICB2b2lkICpub3RpZnlfYmF0
b24sCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgICB2b2lkICpjYW5jZWxfYmF0b24sCisg
ICAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgICB2
b2lkICpwcm9ncmVzc19iYXRvbgorfTsKICNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
MjAwLDYgKzIxNiwxOCBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2
bl9pbmZvX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRfaW5mbygpCisqLworCisldHlwZW1hcChw
eXRob24sIGluKSAoc3ZuX2luZm9fcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3B5X2lu
Zm9fcmVjZWl2ZXJfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAgICBXZSB1c2UgJ3N2bl93Y19zdGF0dXNfdCAqJyBpbiBzb21lIGN1c3Rv
bSBjb2RlLCBidXQgaXQgaXNuJ3QgaW4gdGhlCiAgICBBUEkgYW55d2hlcmUuIFRodXMsIFNXSUcg
ZG9lc24ndCBnZW5lcmF0ZSBhIHR5cGVtYXAgZW50cnkgZm9yIGl0LiBieQogICAgYWRkaW5nIGEg
c2ltcGxlIGRlY2xhcmF0aW9uIGhlcmUsIFNXSUcgd2lsbCBpbnNlcnQgYSBuYW1lIGZvciBpdC4K
QEAgLTQ4Myw2ICs1MTEsMjQgQEAKICVpbmNsdWRlIHN2bl90aW1lX2guc3dnCiAlaW5jbHVkZSBz
dm5fY2xpZW50X2guc3dnCiAKKyNpZmRlZiBTV0lHUFlUSE9OCisKKy8qIHByb3ZpZGUgUHl0aG9u
IHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0YW50IHN2bl9jYW5jZWxfZnVu
Y190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50IHN2bl9jbGllbnRfZ2V0X2Nv
bW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyVjb25zdGFudCBz
dm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmM7CisKKyNlbmRpZgor
CisjaWZkZWYgU1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFjY2VzcyB0byBz
b21lIHRodW5rcy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9j
YW5jZWxfZnVuYzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IHN2bl9z
d2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CislY29uc3RhbnQgc3ZuX3djX25vdGlmeV9mdW5j
Ml90IHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jOworCisjZW5kaWYKKwogI2lmZGVmIFNXSUdSVUJZ
CiAlaW5saW5lICV7CiBzdGF0aWMgVkFMVUUKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaS5vcmlnIHN1YnZlcnNpb24tMS4zLjEu
bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwotLS0gc3VidmVy
c2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pLm9yaWcJMTk3
MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3
L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50Lmkub3JpZwkyMDA2LTA3LTA0IDE5
OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIHN2bl9jbGll
bnQuaSA6ICBTV0lHIGludGVyZmFjZSBmaWxlIGZvciBzdm5fY2xpZW50LmgKKyAqCisgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQ29sbGFiTmV0LiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJl
ZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2
YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2UtMS5odG1sLgor
ICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQgdGhlcmUsIHlv
dSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBvcHRpb24uCisg
KgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBt
YWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1dGlvbiBoaXN0
b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFpbGFibGUgYXQg
aHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNp
ZiBkZWZpbmVkKFNXSUdQRVJMKQorJW1vZHVsZSAiU1ZOOjpfQ2xpZW50IgorI2VsaWYgZGVmaW5l
ZChTV0lHUlVCWSkKKyVtb2R1bGUgInN2bjo6ZXh0OjpjbGllbnQiCisjZWxzZQorJW1vZHVsZSBj
bGllbnQKKyNlbmRpZgorCislaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50
cy5pCisKKyVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCislaW1wb3J0IGNvcmUuaQorJWltcG9ydCBh
cHIuc3dnCislaW1wb3J0IHN2bl90eXBlcy5zd2cKKyVpbXBvcnQgc3ZuX3N0cmluZy5zd2cKKyVp
bXBvcnQgc3ZuX2RlbHRhLmkKKyVpbXBvcnQgc3ZuX3djLmkKKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMgZGVmaW5lZCBlbHNld2hlcmUKKyovCisKKyVhcHBs
eSBTV0lHVFlQRSAqKk9VVFBBUkFNIHsKKyAgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqLAor
ICBzdm5fYXV0aF9wcm92aWRlcl9vYmplY3RfdCAqKiwKKyAgc3ZuX2NsaWVudF9jdHhfdCAqKgor
fTsKKworJWFwcGx5IFBvaW50ZXIgTk9OTlVMTCB7IAorICBjb25zdCBzdm5fb3B0X3JldmlzaW9u
X3QgKnJldmlzaW9uLAorICBjb25zdCBzdm5fb3B0X3JldmlzaW9uX3QgKnBlZ19yZXZpc2lvbgor
fTsKKworJWFwcGx5IGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqU1RSSU5HTElTVCB7CisgICAg
Y29uc3QgYXByX2FycmF5X2hlYWRlcl90ICp0YXJnZXRzLAorICAgIGNvbnN0IGFwcl9hcnJheV9o
ZWFkZXJfdCAqZGlmZl9vcHRpb25zCit9OworCislYXBwbHkgY29uc3QgY2hhciAqTUFZX0JFX05V
TEwgeworICAgIGNvbnN0IGNoYXIgKm5hdGl2ZV9lb2wsCisgICAgY29uc3QgY2hhciAqY29tbWVu
dAorfTsKKworLyogc3ZuX2NsaWVudF9wcm9wZ2V0KCksIHN2bl9jbGllbnRfcHJvcGxpc3QoKSwg
c3ZuX2NsaWVudF9yZXZwcm9wX2xpc3QoKSAqLworJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFT
SCB7IGFwcl9oYXNoX3QgKipwcm9wcyB9OworCisvKiBzdm5fY2xpZW50X3VybF9mcm9tX3BhdGgo
KSwgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJsKCkKKyAqIHN2bl9jbGllbnRfdXVpZF9mcm9tX3Bh
dGggKi8KKyVhcHBseSBjb25zdCBjaGFyICoqT1VUUFVUIHsKKyAgICBjb25zdCBjaGFyICoqdXJs
LAorICAgIGNvbnN0IGNoYXIgKip1dWlkCit9OworCisjaWZkZWYgU1dJR1BZVEhPTgorJWFwcGx5
IHN2bl9zdHJlYW1fdCAqV1JBUFBFRF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworCisvKiBt
ZW1iZXJzIG9mIHN2bl9jbGllbnRfY3R4X3QgKi8KKyVhcHBseSB2b2lkICpQWV9BU19WT0lEIHsK
KyAgICB2b2lkICpub3RpZnlfYmF0b24sCisgICAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgICB2
b2lkICpjYW5jZWxfYmF0b24sCisgICAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgICB2b2lkICps
b2dfbXNnX2JhdG9uMiwKKyAgICB2b2lkICpwcm9ncmVzc19iYXRvbgorfTsKKyNlbmRpZgorCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgc3ZuX2NsaWVudF9wcm9wbGlzdCgpCisgICByZXR1cm5zIGFw
cl9hcnJheV9oZWFkZXJfdCAqIDxzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCAqPgorKi8KKwor
JXR5cGVtYXAoaW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcyAoYXBy
X2FycmF5X2hlYWRlcl90ICp0ZW1wKSB7CisgICAgJDEgPSAmdGVtcDsKK30KKworLyogc3ZuX2Ns
aWVudF9wcm9wbGlzdF9pdGVtX3QgaXMgdXNlZCBleGNsdXNpdmVseSBmb3Igc3ZuX2NsaWVudF9w
cm9wbGlzdCgpLgorICAgVGhlIHB5dGhvbiBiaW5kaW5ncyBjb252ZXJ0IGl0IHRvIGEgbmF0aXZl
IHB5dGhvbiB0dXBsZS4gKi8KKyNpZmRlZiBTV0lHUFlUSE9OCisgICAgJWlnbm9yZSBzdm5fY2xp
ZW50X3Byb3BsaXN0X2l0ZW1fdDsKKyNlbmRpZgorJXR5cGVtYXAocHl0aG9uLCBhcmdvdXQsIGZy
YWdtZW50PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcworewor
ICAgIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90ICoqcHBpdGVtOworICAgIGludCBpOworICAg
IGludCBuZWx0cyA9ICgqJDEpLT5uZWx0czsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9O
ZXcobmVsdHMpOworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIFNXSUdfZmFpbDsKKyAg
ICBwcGl0ZW0gPSAoc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKiopKCokMSktPmVsdHM7Cisg
ICAgZm9yIChpID0gMDsgaSA8IG5lbHRzOyArK2ksICsrcHBpdGVtKSB7CisgICAgICAgIFB5T2Jq
ZWN0ICppdGVtID0gUHlUdXBsZV9OZXcoMik7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlT
dHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKCpwcGl0ZW0pLT5ub2RlX25hbWUtPmRhdGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpwcGl0ZW0p
LT5ub2RlX25hbWUtPmxlbik7CisgICAgICAgIFB5T2JqZWN0ICpoYXNoID0gc3ZuX3N3aWdfcHlf
cHJvcGhhc2hfdG9fZGljdCgoKnBwaXRlbSktPnByb3BfaGFzaCk7CisKKyAgICAgICAgaWYgKGl0
ZW0gPT0gTlVMTCB8fCBuYW1lID09IE5VTEwgfHwgaGFzaCA9PSBOVUxMKSB7CisgICAgICAgICAg
ICBQeV9YREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfWERFQ1JFRihuYW1lKTsKKyAgICAg
ICAgICAgIFB5X1hERUNSRUYoaGFzaCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Cisg
ICAgICAgICAgICBTV0lHX2ZhaWw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRF
TShpdGVtLCAwLCBuYW1lKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShpdGVtLCAxLCBoYXNo
KTsKKworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgaXRlbSk7CisgICAgfQorICAg
ICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgbGlzdCk7Cit9CisKKyV0eXBlbWFw
KHJ1YnksIGFyZ291dCkgYXByX2FycmF5X2hlYWRlcl90ICoqcHJvcHMKK3sKKyAgJHJlc3VsdCA9
IHN2bl9zd2lnX3JiX2Fwcl9hcnJheV90b19hcnJheV9wcm9wbGlzdF9pdGVtKCokMSk7Cit9CisK
KyV0eXBlbWFwKHJ1YnksIG91dCkgYXByX2hhc2hfdCAqcHJvcF9oYXNoCit7CisgICRyZXN1bHQg
PSBzdm5fc3dpZ19yYl9wcm9wX2hhc2hfdG9faGFzaCgkMSk7Cit9CisKKyV0eXBlbWFwKHBlcmw1
LGFyZ291dCkgYXByX2FycmF5X2hlYWRlcl90ICoqcHJvcHMgeworICAgICRyZXN1bHQgPSBzdm5f
c3dpZ19wbF9jb252ZXJ0X2FycmF5KCokMSwKKyAgICAgICRkZXNjcmlwdG9yKHN2bl9jbGllbnRf
cHJvcGxpc3RfaXRlbV90ICopKTsKKyAgICBhcmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSxv
dXQpIGFwcl9oYXNoX3QgKnByb3BfaGFzaCB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX3By
b3BoYXNoX3RvX2hhc2goJDEpOworICAgIGFyZ3ZpKys7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICBDYWxsYmFjazogc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZ190CisgICBzdm5fY2xpZW50
X2N0eF90CisqLworCisldHlwZW1hcChweXRob24saW4pIChzdm5fY2xpZW50X2dldF9jb21taXRf
bG9nX3QgbG9nX21zZ19mdW5jLCAKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmxvZ19tc2df
YmF0b24pIHsKKworICAkMSA9IHN2bl9zd2lnX3B5X2dldF9jb21taXRfbG9nX2Z1bmM7CisgICQy
ID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhlIGJhdG9uLiAqLworfQorCisldHlwZW1h
cChydWJ5LCBpbikgKHN2bl9jbGllbnRfZ2V0X2NvbW1pdF9sb2cyX3QgbG9nX21zZ19mdW5jMiwK
KyAgICAgICAgICAgICAgICAgICAgdm9pZCAqbG9nX21zZ19iYXRvbjIpCit7CisgICQxID0gc3Zu
X3N3aWdfcmJfZ2V0X2NvbW1pdF9sb2dfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y
Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2FuY2VsX2Z1bmNfdAorICAgc3ZuX2Ns
aWVudF9jdHhfdAorKi8KKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2FuY2VsX2Z1bmNfdCBj
YW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3JiX2Nh
bmNlbF9mdW5jOworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQs
IF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBD
YWxsYmFjazogc3ZuX3djX25vdGlmeV9mdW5jMl90CisgICBzdm5fY2xpZW50X2N0eF90CisqLwor
CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl93Y19ub3RpZnlfZnVuYzJfdCBub3RpZnlfZnVuYzIs
IHZvaWQgKm5vdGlmeV9iYXRvbjIpCit7CisgICQxID0gc3ZuX3N3aWdfcmJfbm90aWZ5X2Z1bmMy
OworICAkMiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxf
c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr
OiBzdm5fY2xpZW50X2JsYW1lX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRfYmxhbWUoKQorKi8K
KworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfdCByZWNl
aXZlciwgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAg
ICAkMSA9IHN2bl9zd2lnX3B5X2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jOworICAgICQyID0g
KHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9jbGllbnRfYmxh
bWVfcmVjZWl2ZXJfdCByZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2Vp
dmVyX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3aWdfcGxfYmxhbWVfZnVuYzsKKyAgJDIgPSAkaW5w
dXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKKyV0eXBlbWFwKHJ1Ynks
IGluKSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLAorICAgICAgICAgICAg
ICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9jbGll
bnRfYmxhbWVfcmVjZWl2ZXJfZnVuYzsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf
YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9pbmZvX3JlY2VpdmVyX3QKKyAgIHN2bl9jbGllbnRf
aW5mbygpCisqLworCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2luZm9fcmVjZWl2ZXJfdCBy
ZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsK
KyAgICAkMSA9IHN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYzsKKyAgICAkMiA9ICh2b2lk
ICopJGlucHV0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBXZSB1c2UgJ3N2bl93Y19z
dGF0dXNfdCAqJyBpbiBzb21lIGN1c3RvbSBjb2RlLCBidXQgaXQgaXNuJ3QgaW4gdGhlCisgICBB
UEkgYW55d2hlcmUuIFRodXMsIFNXSUcgZG9lc24ndCBnZW5lcmF0ZSBhIHR5cGVtYXAgZW50cnkg
Zm9yIGl0LiBieQorICAgYWRkaW5nIGEgc2ltcGxlIGRlY2xhcmF0aW9uIGhlcmUsIFNXSUcgd2ls
bCBpbnNlcnQgYSBuYW1lIGZvciBpdC4KKyAgIEZJWE1FOiBUaGlzIG1heSBiZSB1bnRydWUuIFNl
ZSBzdm5fd2Nfc3RhdHVzLCBldGMuCisqLworJXR5cGVzKHN2bl93Y19zdGF0dXNfdCAqKTsKKwor
LyogV2UgYWxzbyBuZWVkIFNXSUcgdG8gd3JhcCBzdm5fZGlyZW50X3QgYW5kIHN2bl9sb2NrX3Qg
Zm9yIHVzLiAgVGhleQorICAgZG9uJ3QgYXBwZWFyIGluIGFueSBBUEksIGJ1dCBzdm5fY2xpZW50
X2xzIHJldHVybnMgYSBoYXNoIG9mIHBvaW50ZXJzCisgICB0byBkaXJlbnRzIGFuZCBsb2Nrcy4g
Ki8KKyV0eXBlcyhzdm5fZGlyZW50X3QgKik7CisldHlwZXMoc3ZuX2xvY2tfdCAqKTsKKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgdGh1bmsgdGhlIHZhcmlvdXMgYXV0aGVudGljYXRpb24gcHJvbXB0
IGZ1bmN0aW9ucy4KKyAgUEVSTCBOT1RFOiBzdG9yZSB0aGUgaW5wdXRlZCBTViBpbiBfZ2xvYmFs
X2NhbGxiYWNrIGZvciB1c2UgaW4gdGhlCisgICAgICAgICAgICAgbGF0ZXIgYXJnb3V0IHR5cGVt
YXAKKyovCisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmNf
dCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikg
eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc2ltcGxlX3Byb21wdDsKKyAgICBfZ2xvYmFs
X2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2dsb2JhbF9jYWxsYmFjazsK
K30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmNfdCBw
cm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsK
KyAgICAkMSA9IHN2bl9zd2lnX3B5X2F1dGhfc2ltcGxlX3Byb21wdF9mdW5jOworICAgICQyID0g
JGlucHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0aF9zaW1wbGVfcHJvbXB0X2Z1
bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9u
KSB7CisgICAgJDEgPSBzdm5fc3dpZ19yYl9hdXRoX3NpbXBsZV9wcm9tcHRfZnVuYzsKKyAgICAk
MiA9ICh2b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3
aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3VzZXJuYW1l
X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpw
cm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3BsX3RodW5rX3VzZXJuYW1lX3Byb21w
dDsKKyAgICBfZ2xvYmFsX2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2ds
b2JhbF9jYWxsYmFjazsKK30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF91c2VybmFt
ZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF91c2VybmFtZV9wcm9t
cHRfZnVuYzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2F1
dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1dGhfdXNl
cm5hbWVfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0
b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJs
NSwgaW4pIChzdm5fYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1
bmMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9
IHN2bl9zd2lnX3BsX3RodW5rX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0OworICAgIF9nbG9iYWxf
Y2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOwor
fQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0
X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9i
YXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21w
dF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAocnVieSwgaW4pIChzdm5fYXV0
aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1
dGhfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3ZuX3N3
aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisK
KyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVu
Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv
bikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3NsX2NsaWVudF9jZXJ0X3Byb21wdDsK
KyAgICBfZ2xvYmFsX2NhbGxiYWNrID0gJGlucHV0OworICAgICQyID0gKHZvaWQgKikgX2dsb2Jh
bF9jYWxsYmFjazsKK30KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fYXV0aF9zc2xfY2xpZW50
X2NlcnRfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVu
dF9jZXJ0X3Byb21wdF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAocnVieSwg
aW4pIChzdm5fYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywK
KyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2
bl9zd2lnX3JiX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jOworICAgICQyID0gKHZv
aWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9w
b29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0
X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zc2xfY2xpZW50
X2NlcnRfcHdfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIg
PSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2
bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3
aWdfcHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5w
dXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19w
cm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBy
b21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xpZW50X2NlcnRf
cHdfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24o
JGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICogRm9yIGFsbCB0aGUgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBzZXQgYSBjYWxsYmFjayBi
YXRvbiBjcmVhdGUgYSByZWZlcmVuY2UKKyAqIGZvciB0aGUgYmF0b24gKHdoaWNoIGluIHRoaXMg
Y2FzZSBpcyBhbiBTViBwb2ludGluZyB0byB0aGUgY2FsbGJhY2spCisgKiBhbmQgbWFrZSB0aGF0
IGEgcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLiAgVGhlIHBlcmwgc2lkZSBzaG91bGQKKyAqIHRo
ZW4gc3RvcmUgdGhlIHJldHVybiBpbiB0aGUgb2JqZWN0IHRoZSBiYXRvbiBpcyBhdHRhY2hlZCB0
by4KKyAqIElmIHRoZSBmdW5jdGlvbiBhbHJlYWR5IHJldHVybnMgYSB2YWx1ZSB0aGVuIHRoaXMg
dmFsdWUgaXMgZm9sbG93cyB0aGF0CisgKiBmdW5jdGlvbi4gIEluIHRoZSBjYXNlIG9mIHRoZSBw
cm9tcHQgZnVuY3Rpb25zIGF1dGhfb3Blbl9oZWxwZXIgaW4gQ29yZS5wbQorICogaXMgdXNlZCB0
byBzcGxpdCB1cCB0aGVzZSB2YWx1ZXMuCisqLworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdm9p
ZCAqQ0FMTEJBQ0tfQkFUT04gKFNWICogX2dsb2JhbF9jYWxsYmFjaykgeworICAvKiBjYWxsYmFj
ayBiYXRvbiAqLworICAkcmVzdWx0ID0gc3ZfMm1vcnRhbCAobmV3UlZfaW5jIChfZ2xvYmFsX2Nh
bGxiYWNrKSk7IGFyZ3ZpKys7IH0KKworJXR5cGVtYXAocGVybDUsIGluKSB2b2lkICpDQUxMQkFD
S19CQVRPTiAoU1YgKiBfZ2xvYmFsX2NhbGxiYWNrKSB7CisgIF9nbG9iYWxfY2FsbGJhY2sgPSAk
aW5wdXQ7CisgICQxID0gKHZvaWQgKikgX2dsb2JhbF9jYWxsYmFjazsKK30KKworI2lmZGVmIFNX
SUdQRVJMCislYXBwbHkgdm9pZCAqQ0FMTEJBQ0tfQkFUT04geworICB2b2lkICpwcm9tcHRfYmF0
b24sCisgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgdm9pZCAqbG9nX21zZ19iYXRvbiwKKyAgdm9p
ZCAqY2FuY2VsX2JhdG9uCit9CisjZW5kaWYKKworI2lmZGVmIFNXSUdSVUJZCislYXBwbHkgdm9p
ZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgdm9pZCAqbm90aWZ5X2JhdG9uMiwKKyAgdm9pZCAqbG9n
X21zZ19iYXRvbjIsCisgIHZvaWQgKmNhbmNlbF9iYXRvbgorfQorI2VuZGlmCisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIAorICogQ29udmVydCBwZXJsIGhhc2hlcyBiYWNrIGludG8gYXByX2hhc2hfdCAq
IGZvciBzZXR0aW5nIHRoZSBjb25maWcKKyAqIG1lbWJlciBvZiB0aGUgc3ZuX2NsaWVudF9jdHhf
dC4gICBUaGlzIGlzIGFuIHVnbHkgaGFjaywgaXQgd2lsbAorICogYWx3YXlzIGFsbG9jYXRlIHRo
ZSBuZXcgYXByX2hhc2hfdCBvdXQgb2YgdGhlIGdsb2JhbCBjdXJyZW50X3Bvb2wKKyAqIEl0IHdv
dWxkIGJlIGJldHRlciB0byBtYWtlIGFwcl9oYXNoX3QncyBpbnRvIG1hZ2ljIHZhcmlhYmxlcyBp
bgorICogcGVybCB0aGF0IGFyZSB0aWVkIHRvIHRoZSBhcHJfaGFzaF90IGludGVyZmFjZS4gIFRo
aXMgd291bGQKKyAqIHJlbW92ZSB0aGUgbmVlZCB0byBjb252ZXJ0IHRvIGFuZCBmcm9tIHBlcmwg
aGFzaHMgYWxsIHRoZSB0aW1lLgorICovCisldHlwZW1hcChwZXJsNSwgaW4pIGFwcl9oYXNoX3Qg
KmNvbmZpZyB7CisgICQxID0gc3ZuX3N3aWdfcGxfb2Jqc190b19oYXNoX2J5X25hbWUgKCRpbnB1
dCwgInN2bl9jb25maWdfdCAqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3ZuX3N3aWdfcGxfbWFrZV9wb29sICgoU1YgKilOVUxMKSk7Cit9CisKKyV0eXBlbWFw
KHBlcmw1LCBvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICRyZXN1bHQgPSBzdm5fc3dpZ19w
bF9jb252ZXJ0X2hhc2goJDEsIAorICAgICRkZXNjcmlwdG9yKHN2bl9jb25maWdfdCAqKSk7Cisg
IGFyZ3ZpKys7Cit9CisKKyNpZmRlZiBTV0lHUlVCWQorJXJ1bnRpbWUgJXsKKyAgI2luY2x1ZGUg
PGFwci5oPgorICAjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisKKyAgc3RhdGljIGFwcl9wb29sX3Qg
KgorICBfc3ZuX2NsaWVudF9wb29sKHZvaWQpIAorICB7CisgICAgc3RhdGljIGFwcl9wb29sX3Qg
Kl9fc3ZuX2NsaWVudF9wb29sID0gTlVMTDsKKyAgICBpZiAoIV9fc3ZuX2NsaWVudF9wb29sKSB7
CisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9fc3ZuX2NsaWVudF9wb29sLCBOVUxMKTsKKyAgICB9
CisgICAgcmV0dXJuIF9fc3ZuX2NsaWVudF9wb29sOworICB9CisKKyAgc3RhdGljIGFwcl9wb29s
X3QgKgorICBfc3ZuX2NsaWVudF9jb25maWdfcG9vbCh2b2lkKSAKKyAgeworICAgIHN0YXRpYyBh
cHJfcG9vbF90ICpfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wgPSBOVUxMOworICAgIGlmICghX19z
dm5fY2xpZW50X2NvbmZpZ19wb29sKSB7CisgICAgICBhcHJfcG9vbF9jcmVhdGUoJl9fc3ZuX2Ns
aWVudF9jb25maWdfcG9vbCwgX3N2bl9jbGllbnRfcG9vbCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IF9fc3ZuX2NsaWVudF9jb25maWdfcG9vbDsKKyAgfQorJX0KKyNlbmRpZgorCisldHlwZW1hcChy
dWJ5LCBhcmdvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgIGlmICgkMSkKKyAgICBhcHJfcG9v
bF9jbGVhcihfc3ZuX2NsaWVudF9jb25maWdfcG9vbCgpKTsKK30KKworJXR5cGVtYXAocnVieSwg
aW4pIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJf
aGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKCkp
OworfQorCisldHlwZW1hcChydWJ5LCBvdXQpIGFwcl9oYXNoX3QgKmNvbmZpZyB7CisgICRyZXN1
bHQgPSBzdm5fc3dpZ19yYl9hcHJfaGFzaF90b19oYXNoX3N3aWdfdHlwZSgkMSwgInN2bl9jb25m
aWdfdCAqIik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBvdmVycmlkZSBkZWZhdWx0IHR5
cGVtYXAgZm9yIHN2bl9jbGllbnRfY29tbWl0X2luZm9fdCBmb3IgcGVybC4gIFNvbWUgY2FsbHMK
KyAqIG5ldmVyIGFsbG9jYXRlIGFuZCBmaWxsIHRoZSBjb21taXRfaW5mbyBzdHJ1Y3QuICBUaGlz
IGxldHMgdXMgcmV0dXJuCisgKiB1bmRlZiBmb3IgdGhlbS4gIE90aGVyd2lzZSB0aGUgb2JqZWN0
IHdlIHBhc3MgYmFjayBjYW4gY2F1c2UgY3Jhc2hlcyAqLworJXR5cGVtYXAocGVybDUsIGluLCBu
dW1pbnB1dHM9MCkgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiB0ZW1wICkgewor
ICAgIHRlbXAgPSBOVUxMOworICAgICQxID0gJnRlbXA7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBh
cmdvdXQpIHN2bl9jbGllbnRfY29tbWl0X2luZm9fdCAqKiB7CisgICAgaWYgKCQxID09IE5VTEwp
IHsKKyAgICAgICAgJHJlc3VsdCA9ICZQTF9zdl91bmRlZjsKKyAgICAgICAgYXJndmkrKzsKKyAg
ICB9ICBlbHNlIHsKKyAgICAgICAgJHJlc3VsdCA9IHN2X25ld21vcnRhbCgpOworICAgICAgICBT
V0lHX01ha2VQdHIoJHJlc3VsdCwgKHZvaWQgKikqJDEsCisgICAgICAgICAgICAgICAgICAgICAk
KjFfZGVzY3JpcHRvciwgMCk7CisgICAgICAgIGFyZ3ZpKys7CisgICAgfQorfQorCisvKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICogd2Nwcm9wX2NoYW5nZXMgbWVtYmVyIG9mIHN2bl9jbGllbnRfY29tbWl0
X2luZm8gbmVlZHMgdG8gYmUKKyAqIGNvbnZlcnRlZCBiYWNrIGFuZCBmb3J0aCBmcm9tIGFuIGFy
cmF5ICovCisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIGFwcl9hcnJheV9oZWFkZXJfdCAqd2Nwcm9w
X2NoYW5nZXMgeworICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9jb252ZXJ0X2FycmF5KCQxLAor
ICAgICAgJGRlc2NyaXB0b3Ioc3ZuX3Byb3BfdCAqKSk7CisgICAgYXJndmkrKzsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAqIHdyYXAgc3ZuX2NsaWVudF9jcmVhdGVfY29udGV4dCAqLworCisl
dHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgc3ZuX2NsaWVudF9jdHhfdCAqKiAoc3ZuX2Ns
aWVudF9jdHhfdCAqdGVtcCkgeworICAgICQxID0gJnRlbXA7Cit9CisKKyV0eXBlbWFwKHBlcmw1
LGFyZ291dCkgc3ZuX2NsaWVudF9jdHhfdCAqKiB7CisgICgqJDEpLT5ub3RpZnlfZnVuYyA9IHN2
bl9zd2lnX3BsX25vdGlmeV9mdW5jOworICAoKiQxKS0+bm90aWZ5X2JhdG9uID0gKHZvaWQgKikg
JlBMX3N2X3VuZGVmOworICAoKiQxKS0+bG9nX21zZ19mdW5jID0gc3ZuX3N3aWdfcGxfZ2V0X2Nv
bW1pdF9sb2dfZnVuYzsKKyAgKCokMSktPmxvZ19tc2dfYmF0b24gPSAodm9pZCAqKSAmUExfc3Zf
dW5kZWY7CisgICgqJDEpLT5jYW5jZWxfZnVuYyA9IHN2bl9zd2lnX3BsX2NhbmNlbF9mdW5jOwor
ICAoKiQxKS0+Y2FuY2VsX2JhdG9uID0gKHZvaWQgKikgJlBMX3N2X3VuZGVmOworICAkcmVzdWx0
ID0gc3ZfbmV3bW9ydGFsKCk7CisgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAodm9pZCAqKSokMSwK
KyAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAgYXJndmkrKzsKK30gIAorCisv
KiBzdm5fY2xpZW50X3VwZGF0ZTIgKi8KKyV0eXBlbWFwKHJ1YnksIGluLCBudW1pbnB1dHM9MCkg
YXByX2FycmF5X2hlYWRlcl90ICoqcmVzdWx0X3JldnMgKGFwcl9hcnJheV9oZWFkZXJfdCAqdGVt
cCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0LCBmcmFnbWVu
dD0ib3V0cHV0X2hlbHBlciIpIGFwcl9hcnJheV9oZWFkZXJfdCAqKnJlc3VsdF9yZXZzCit7Cisg
ICRyZXN1bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsIHN2bl9zd2lnX3JiX2Fwcl9hcnJheV90
b19hcnJheV9zdm5fcmV2KCokMSkpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCislewor
I2lmZGVmIFNXSUdQWVRIT04KKyNpbmNsdWRlICJzd2lndXRpbF9weS5oIgorI2VuZGlmCisKKyNp
ZmRlZiBTV0lHUEVSTAorI2luY2x1ZGUgInN3aWd1dGlsX3BsLmgiCisjZW5kaWYKKworI2lmZGVm
IFNXSUdSVUJZCisjaW5jbHVkZSA8YXB1Lmg+CisjaW5jbHVkZSA8YXByX3hsYXRlLmg+CisjaW5j
bHVkZSAic3dpZ3V0aWxfcmIuaCIKKyNlbmRpZgorJX0KKworJWluY2x1ZGUgc3ZuX3RpbWVfaC5z
d2cKKyVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKKworI2lmZGVmIFNXSUdQWVRIT04KKworLyog
cHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0aHVua3MuICovCislY29uc3RhbnQg
c3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmM7CislY29uc3RhbnQgc3Zu
X2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19weV9nZXRfY29tbWl0X2xvZ19mdW5j
OworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBzdm5fc3dpZ19weV9ub3RpZnlfZnVu
YzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQorJWlubGluZSAleworc3RhdGljIFZBTFVF
Citzdm5fY2xpZW50X3NldF9sb2dfbXNnX2Z1bmMyKHN2bl9jbGllbnRfY3R4X3QgKmN0eCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBs
b2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpsb2dfbXNn
X2JhdG9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK
K3sKKyAgY3R4LT5sb2dfbXNnX2Z1bmMyID0gbG9nX21zZ19mdW5jMjsKKyAgY3R4LT5sb2dfbXNn
X2JhdG9uMiA9IGxvZ19tc2dfYmF0b24yOworICByZXR1cm4gKFZBTFVFKWxvZ19tc2dfYmF0b24y
OworfQorIAorc3RhdGljIFZBTFVFCitzdm5fY2xpZW50X3NldF9ub3RpZnlfZnVuYzIoc3ZuX2Ns
aWVudF9jdHhfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl93Y19ub3Rp
ZnlfZnVuYzJfdCBub3RpZnlfZnVuYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqbm90aWZ5X2JhdG9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICBjdHgtPm5vdGlmeV9mdW5jMiA9IG5vdGlmeV9mdW5jMjsKKyAgY3R4LT5u
b3RpZnlfYmF0b24yID0gbm90aWZ5X2JhdG9uMjsKKyAgcmV0dXJuIChWQUxVRSlub3RpZnlfYmF0
b24yOworfQorCitzdGF0aWMgVkFMVUUKK3N2bl9jbGllbnRfc2V0X2NhbmNlbF9mdW5jKHN2bl9j
bGllbnRfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9jYW5jZWxf
ZnVuY190IGNhbmNlbF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2Fu
Y2VsX2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK
K3sKKyAgY3R4LT5jYW5jZWxfZnVuYyA9IGNhbmNlbF9mdW5jOworICBjdHgtPmNhbmNlbF9iYXRv
biA9IGNhbmNlbF9iYXRvbjsKKyAgcmV0dXJuIChWQUxVRSljYW5jZWxfYmF0b247Cit9CislfQor
I2VuZGlmCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dp
Zy9zdm5fZGVsdGEuaSBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3
aWcvc3ZuX2RlbHRhLmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3N2bl9kZWx0YS5pCTIwMDUtMDktMjkgMDA6NTY6NTIuMDAwMDAwMDAwICswMTAwCisrKyBz
dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2RlbHRhLmkJ
MjAwNi0wNy0wNCAxOTowMTowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTQ3LDcgKzQ3LDggQEAKICAg
ICBjb25zdCBjaGFyICplcnJvcl9pbmZvLAogICAgIGNvbnN0IGNoYXIgKmNvcHlmcm9tX3BhdGgs
CiAgICAgY29uc3QgY2hhciAqY29weV9wYXRoLAotICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tz
dW0KKyAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgIGNvbnN0IGNoYXIgKnRleHRf
Y2hlY2tzdW0KIH07CiAKICNpZmRlZiBTV0lHUFlUSE9OCkBAIC0xNDUsNiArMTQ2LDE3IEBACiAK
ICVpbmNsdWRlIHN2bl9kZWx0YV9oLnN3ZwogCisjaWZkZWYgU1dJR1BZVEhPTgorJWlubGluZSAl
eworc3ZuX2Vycm9yX3QgKnN2bl9kZWx0YV9pbnZva2VfdHhkZWx0YV93aW5kb3dfaGFuZGxlciAo
CisgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgaGFuZGxlciwKKyAgc3ZuX3R4ZGVsdGFf
d2luZG93X3QgKndpbmRvdywgdm9pZCAqYmF0b24pIHsKKyAgcmV0dXJuIGhhbmRsZXIod2luZG93
LCBiYXRvbik7Cit9CislfQorI2VuZGlmCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGhhbmRs
ZSBzdm5fdHhkZWx0YV90b19zdm5kaWZmKCkuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX3JhLmkgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9yYS5pCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaQkyMDA1LTEwLTA0IDE2OjQzOjQwLjAwMDAw
MDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3N2bl9yYS5pCTIwMDYtMDctMDQgMTk6MDE6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0yNSw2
ICsyNSw3IEBACiAjZW5kaWYKIAogJWluY2x1ZGUgdHlwZW1hcHMuaQorJWluY2x1ZGUgY29uc3Ry
YWludHMuaQogCiAlaW5jbHVkZSBzdm5fZ2xvYmFsLnN3ZwogJWltcG9ydCBhcHIuc3dnCkBAIC00
OCwxMyArNDksMTYgQEAKICAgICBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3QgKipyZXBvcnRlciwK
ICAgICB2b2lkICoqcmVwb3J0X2JhdG9uLAogICAgIHN2bl9kaXJlbnRfdCAqKmRpcmVudCwKLSAg
ICBzdm5fbG9ja190ICoqbG9jaworICAgIHN2bl9sb2NrX3QgKipsb2NrLAorICAgIGNvbnN0IHN2
bl9kZWx0YV9lZGl0b3JfdCAqKgogfTsKIAogJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7
IGFwcl9oYXNoX3QgKipwcm9wcyB9OworJWFwcGx5IGFwcl9oYXNoX3QgKipESVJFTlRIQVNIIHsg
YXByX2hhc2hfdCAqKmRpcmVudHMgfTsKIAogJWFwcGx5IGNvbnN0IGNoYXIgKk1BWV9CRV9OVUxM
IHsKLSAgICBjb25zdCBjaGFyICpjb21tZW50CisgICAgY29uc3QgY2hhciAqY29tbWVudCwKKyAg
ICBjb25zdCBjaGFyICpsb2NrX3Rva2VuCiB9OwogCiAlYXBwbHkgYXByX2hhc2hfdCAqU1RSSU5H
X1RPX1NUUklORyB7CkBAIC0xMTIsNiArMTE2LDE2IEBACiAgIHN2bl9zd2lnX3JiX3NldHVwX3Jh
X2NhbGxiYWNrcygmJDEsICYkMiwgJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOwogfQogCisldHlwZW1h
cChweXRob24sIGluKSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzLCAKKyAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19iYXRvbikgeworICBzdm5fc3dpZ19w
eV9zZXR1cF9yYV9jYWxsYmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30K
KworJXR5cGVtYXAocHl0aG9uLCBpbikgKGNvbnN0IHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxi
YWNrcywgCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAg
c3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxf
cG9vbCk7Cit9CisKICV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKICAg
ICAkMSA9IHN2bl9zd2lnX3BsX29ianNfdG9faGFzaF9ieV9uYW1lICgkaW5wdXQsICJzdm5fY29u
ZmlnX3QgKiIsCiAJCQkJCSAgIF9nbG9iYWxfcG9vbCk7CkBAIC0xMzQsNiArMTQ4LDIyIEBACiAg
ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9yZXZudW0oJGlucHV0LCBfZ2xvYmFs
X3Bvb2wpOwogfQogCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChzdm5fcmFfZmls
ZV9yZXZfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmhhbmRsZXJfYmF0b24pCit7CisgICAkMSA9
IHN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRsZXJfZnVuYzsKKyAgICQyID0gKHZvaWQgKikk
aW5wdXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIFNXSUdQWVRIT04KKyV0eXBlbWFwKGluKSAoY29u
c3Qgc3ZuX3JhX3JlcG9ydGVyMl90ICpyZXBvcnRlciwgdm9pZCAqcmVwb3J0X2JhdG9uKQorewor
ICAkMSA9IChzdm5fcmFfcmVwb3J0ZXIyX3QgKikmc3dpZ19weV9yYV9yZXBvcnRlcjI7CisgICQy
ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAog
JXsKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2
bl9yYS5pLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln
L3N2bl9yYS5pLm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3N2bl9yYS5pLm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5fcmEuaS5v
cmlnCTIwMDYtMDctMDQgMTk6MDE6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTgxIEBA
CisvKgorICogc3ZuX3JhLmkgOiAgU1dJRyBpbnRlcmZhY2UgZmlsZSBmb3Igc3ZuX3JhLmgKKyAq
CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQ29sbGFiTmV0LiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFz
IGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFy
ZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2Ut
MS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQg
dGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBv
cHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJp
YnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1
dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFp
bGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
ICovCisKKyNpZiBkZWZpbmVkKFNXSUdQRVJMKQorJW1vZHVsZSAiU1ZOOjpfUmEiCisjZWxpZiBk
ZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAic3ZuOjpleHQ6OnJhIgorI2Vsc2UKKyVtb2R1bGUg
cmEKKyNlbmRpZgorCislaW5jbHVkZSB0eXBlbWFwcy5pCislaW5jbHVkZSBjb25zdHJhaW50cy5p
CisKKyVpbmNsdWRlIHN2bl9nbG9iYWwuc3dnCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgY29y
ZS5pCislaW1wb3J0IHN2bl90eXBlcy5zd2cKKyVpbXBvcnQgc3ZuX3N0cmluZy5zd2cKKyVpbXBv
cnQgc3ZuX2RlbHRhLmkKKworLyogYmFkIHBvb2wgY29udmVudGlvbiwgYWxzbyB0aGVzZSBzaG91
bGQgbm90IGJlIHB1YmxpYyBpbnRlcmZhY2UgYXQgYWxsCisgICBhcyBjb21tZW50ZWQgYnkgc3Vz
c21hbi4gKi8KKyVpZ25vcmUgc3ZuX3JhX3N2bl9pbml0OworJWlnbm9yZSBzdm5fcmFfbG9jYWxf
aW5pdDsKKyVpZ25vcmUgc3ZuX3JhX2Rhdl9pbml0OworCislYXBwbHkgUG9pbnRlciBOT05OVUxM
IHsgc3ZuX3JhX2NhbGxiYWNrczJfdCAqY2FsbGJhY2tzIH07CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAlYXBwbHktaW5nIG9mIHR5cGVtYXBzIGRlZmluZWQgZWxzZXdoZXJlCisqLworJWFwcGx5
IFNXSUdUWVBFICoqT1VUUEFSQU0geworICAgIHN2bl9yYV9wbHVnaW5fdCAqKiwKKyAgICBzdm5f
cmFfc2Vzc2lvbl90ICoqLAorICAgIGNvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCAqKnJlcG9ydGVy
LAorICAgIHZvaWQgKipyZXBvcnRfYmF0b24sCisgICAgc3ZuX2RpcmVudF90ICoqZGlyZW50LAor
ICAgIHN2bl9sb2NrX3QgKipsb2NrLAorICAgIGNvbnN0IHN2bl9kZWx0YV9lZGl0b3JfdCAqKgor
fTsKKworJWFwcGx5IGFwcl9oYXNoX3QgKipQUk9QSEFTSCB7IGFwcl9oYXNoX3QgKipwcm9wcyB9
OworJWFwcGx5IGFwcl9oYXNoX3QgKipESVJFTlRIQVNIIHsgYXByX2hhc2hfdCAqKmRpcmVudHMg
fTsKKworJWFwcGx5IGNvbnN0IGNoYXIgKk1BWV9CRV9OVUxMIHsKKyAgICBjb25zdCBjaGFyICpj
b21tZW50LAorICAgIGNvbnN0IGNoYXIgKmxvY2tfdG9rZW4KK307CisKKyVhcHBseSBhcHJfaGFz
aF90ICpTVFJJTkdfVE9fU1RSSU5HIHsKKyAgYXByX2hhc2hfdCAqbG9ja190b2tlbnMsCisgIGFw
cl9oYXNoX3QgKnBhdGhfdG9rZW5zCit9OworCisjaWZkZWYgU1dJR1BZVEhPTgorJWFwcGx5IHN2
bl9zdHJlYW1fdCAqV1JBUFBFRF9TVFJFQU0geyBzdm5fc3RyZWFtX3QgKiB9OworI2VuZGlmCisK
Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8K
KyV0eXBlbWFwKHB5dGhvbixpbikgYXByX2FycmF5X2hlYWRlcl90ICpsb2NhdGlvbl9yZXZpc2lv
bnMgeworICAgICQxID0gKGFwcl9hcnJheV9oZWFkZXJfdCAqKSBzdm5fc3dpZ19weV9yZXZudW1z
X3RvX2FycmF5KCRpbnB1dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX2dsb2JhbF9wb29sKTsKKyAgICBpZiAoJDEgPT0gTlVM
TCkKKyAgICAgICAgU1dJR19mYWlsOworfQorJXR5cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0w
KSBhcHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFw
KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9oYXNoX3QgKips
b2NhdGlvbnMgeworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3
aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoKiQxKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICB0aHVuayByYV9jYWxsYmFjaworKi8KKyVhcHBseSBjb25zdCBjaGFyICoqT1VUUFVUIHsK
KyAgICBjb25zdCBjaGFyICoqdXJsLAorICAgIGNvbnN0IGNoYXIgKip1dWlkCit9OworCislYXBw
bHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJf
YXJyYXlfaGVhZGVyX3QgKnBhdGhzCit9OworCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBz
dm5fZGVsdGFfZWRpdG9yX3QgKnVwZGF0ZV9lZGl0b3IsCisJCSAgICAgdm9pZCAqdXBkYXRlX2Jh
dG9uKSB7CisgICAgc3ZuX2RlbHRhX21ha2VfZWRpdG9yKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9i
YWxfcG9vbCk7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBzdm5fZGVsdGFfZWRpdG9y
X3QgKmRpZmZfZWRpdG9yLAorCQkgICAgIHZvaWQgKmRpZmZfYmF0b24pIHsKKyAgICBzdm5fZGVs
dGFfbWFrZV9lZGl0b3IoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5
cGVtYXAocGVybDUsIGluKSAoY29uc3Qgc3ZuX3JhX2NhbGxiYWNrc190ICpjYWxsYmFja3MsCisJ
CSAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAgICBzdm5fcmFfbWFrZV9jYWxsYmFja3Mo
JiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4p
IChjb25zdCBzdm5fcmFfY2FsbGJhY2tzMl90ICpjYWxsYmFja3MsCisgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICBzdm5fc3dpZ19yYl9zZXR1cF9yYV9jYWxs
YmFja3MoJiQxLCAmJDIsICRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworJXR5cGVtYXAocHl0
aG9uLCBpbikgKHN2bl9yYV9jYWxsYmFja3MyX3QgKmNhbGxiYWNrcywgCisgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24pIHsKKyAgc3ZuX3N3aWdfcHlfc2V0dXBfcmFf
Y2FsbGJhY2tzKCYkMSwgJiQyLCAkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBlbWFw
KHBlcmw1LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgICAkMSA9IHN2bl9zd2lnX3BsX29i
anNfdG9faGFzaF9ieV9uYW1lICgkaW5wdXQsICJzdm5fY29uZmlnX3QgKiIsCisJCQkJCSAgIF9n
bG9iYWxfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3JhX2xvY2tfY2FsbGJh
Y2tfdCBsb2NrX2Z1bmMsIHZvaWQgKmxvY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJf
cmFfbG9ja19jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24o
JGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChydWJ5LCBp
bikgKHN2bl9yYV9maWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqaGFuZGxlcl9iYXRv
bikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9yYV9maWxlX3Jldl9oYW5kbGVyOworICAkMiA9ICh2
b2lkICopc3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJf
cG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpwYXRoX3JldnMKK3sK
KyAgJDEgPSBzdm5fc3dpZ19yYl9oYXNoX3RvX2Fwcl9oYXNoX3Jldm51bSgkaW5wdXQsIF9nbG9i
YWxfcG9vbCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9yYV9m
aWxlX3Jldl9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqaGFuZGxlcl9iYXRvbikKK3sKKyAgICQx
ID0gc3ZuX3N3aWdfcHlfcmFfZmlsZV9yZXZfaGFuZGxlcl9mdW5jOworICAgJDIgPSAodm9pZCAq
KSRpbnB1dDsKK30KKyNlbmRpZgorCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIChj
b25zdCBzdm5fcmFfcmVwb3J0ZXIyX3QgKnJlcG9ydGVyLCB2b2lkICpyZXBvcnRfYmF0b24pCit7
CisgICQxID0gKHN2bl9yYV9yZXBvcnRlcjJfdCAqKSZzd2lnX3B5X3JhX3JlcG9ydGVyMjsKKyAg
JDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwor
CisleworI2lmZGVmIFNXSUdQWVRIT04KKyNpbmNsdWRlICJzd2lndXRpbF9weS5oIgorI2VuZGlm
CisKKyNpZmRlZiBTV0lHUEVSTAorI2luY2x1ZGUgInN3aWd1dGlsX3BsLmgiCisjZW5kaWYKKwor
I2lmZGVmIFNXSUdSVUJZCisjaW5jbHVkZSAic3dpZ3V0aWxfcmIuaCIKKyNlbmRpZgorJX0KKwor
JWluY2x1ZGUgc3ZuX3JhX2guc3dnCisKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl93Yy5pIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9zdm5fd2MuaQotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvc3ZuX3djLmkJMjAwNS0xMC0yMCAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAx
MDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f
d2MuaQkyMDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMTkxLDYgKzE5MSwy
MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX2FycmF5X3RvX2Fwcl9hcnJheV9wcm9wKCRpbnB1dCwg
cG9vbCk7CiB9CiAKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTAp
CisgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqKnBhdHRlcm5zIChhcHJfYXJyYXlfaGVhZGVyX3Qg
KnRlbXApCit7CisgICQxID0gJnRlbXA7Cit9CisldHlwZW1hcChhcmdvdXQsIGZyYWdtZW50PSJ0
X291dHB1dF9oZWxwZXIiKQorICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKipwYXR0ZXJucworewor
ICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoKiQxKSk7Cit9CisjZW5kaWYKKwogLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmNfdAogICAgc3Zu
X2NsaWVudF9jdHhfdApAQCAtMjM3LDYgKzI1MSwxMSBAQAogICAkMiA9ICRpbnB1dDsgLyogb3Vy
IGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KIH0KIAorJXR5cGVtYXAocHl0aG9uLGluKSAoc3Zu
X3djX25vdGlmeV9mdW5jMl90IG5vdGlmeV9mdW5jLCB2b2lkICpub3RpZnlfYmF0b24pIHsKKyAg
ICQxID0gc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyOworICAgJDIgPSAkaW5wdXQ7IC8qIG91ciBm
dW5jdGlvbiBpcyB0aGUgYmF0b24uICovCit9CisKICV0eXBlbWFwKHBlcmw1LGluKSAoc3ZuX3dj
X3N0YXR1c19mdW5jX3Qgc3RhdHVzX2Z1bmMsIHZvaWQgKnN0YXR1c19iYXRvbikgewogICAkMSA9
IHN2bl9zd2lnX3BsX3N0YXR1c19mdW5jOwogICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9u
IGlzIHRoZSBiYXRvbi4gKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9s
aWJzdm5fcmFfc3ZuL2NsaWVudC5jIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGli
c3ZuX3JhX3N2bi9jbGllbnQuYwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2
bl9yYV9zdm4vY2xpZW50LmMJMjAwNS0xMi0wOSAwMTo1NTowOS4wMDAwMDAwMDAgKzAwMDAKKysr
IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9jbGllbnQuYwky
MDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMTE1MSwxMSArMTE1MSw4IEBA
CiAgICAgfQogICBhcHJfcG9vbF9kZXN0cm95KHN1YnBvb2wpOwogCi0gIGlmIChucmVjZWl2ZWQg
PD0gbGltaXQpCi0gICAgewotICAgICAgLyogUmVhZCB0aGUgcmVzcG9uc2UuICovCi0gICAgICBT
Vk5fRVJSKHN2bl9yYV9zdm5fcmVhZF9jbWRfcmVzcG9uc2UoY29ubiwgcG9vbCwgIiIpKTsKLSAg
ICB9CisgIC8qIFJlYWQgdGhlIHJlc3BvbnNlLiAqLworICBTVk5fRVJSKHN2bl9yYV9zdm5fcmVh
ZF9jbWRfcmVzcG9uc2UoY29ubiwgcG9vbCwgIiIpKTsKIAogICByZXR1cm4gU1ZOX05PX0VSUk9S
OwogfQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL2Nv
bnN0cnVjdG9ycy5jIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vbGlic3ZuX3N1YnIv
Y29uc3RydWN0b3JzLmMKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9saWJzdm5fc3Vi
ci9jb25zdHJ1Y3RvcnMuYwkyMDA1LTEwLTE4IDE5OjQwOjAyLjAwMDAwMDAwMCArMDEwMAorKysg
c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9saWJzdm5fc3Vici9jb25zdHJ1Y3RvcnMu
YwkyMDA2LTA3LTA0IDE5OjAxOjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMzYsNiArMzYsMjMgQEAK
ICAgcmV0dXJuIGNvbW1pdF9pbmZvOwogfQogCitzdm5fY29tbWl0X2luZm9fdCAqCitzdm5fY29t
bWl0X2luZm9fZHVwKGNvbnN0IHN2bl9jb21taXRfaW5mb190ICpzcmNfY29tbWl0X2luZm8sCisg
ICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9jb21taXRfaW5m
b190ICpkc3RfY29tbWl0X2luZm8gPSBzdm5fY3JlYXRlX2NvbW1pdF9pbmZvKHBvb2wpOworCisg
IGRzdF9jb21taXRfaW5mby0+ZGF0ZSA9IHNyY19jb21taXRfaW5mby0+ZGF0ZQorICAgID8gYXBy
X3BzdHJkdXAocG9vbCwgc3JjX2NvbW1pdF9pbmZvLT5kYXRlKSA6IE5VTEw7CisgIGRzdF9jb21t
aXRfaW5mby0+YXV0aG9yID0gc3JjX2NvbW1pdF9pbmZvLT5hdXRob3IKKyAgICA/IGFwcl9wc3Ry
ZHVwKHBvb2wsIHNyY19jb21taXRfaW5mby0+YXV0aG9yKSA6IE5VTEw7CisgIGRzdF9jb21taXRf
aW5mby0+cmV2aXNpb24gPSBzcmNfY29tbWl0X2luZm8tPnJldmlzaW9uOworICBkc3RfY29tbWl0
X2luZm8tPnBvc3RfY29tbWl0X2VyciA9IHNyY19jb21taXRfaW5mby0+cG9zdF9jb21taXRfZXJy
CisgICAgPyBhcHJfcHN0cmR1cChwb29sLCBzcmNfY29tbWl0X2luZm8tPnBvc3RfY29tbWl0X2Vy
cikgOiBOVUxMOworCisgIHJldHVybiBkc3RfY29tbWl0X2luZm87Cit9CisKIHN2bl9sb2dfY2hh
bmdlZF9wYXRoX3QgKgogc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfZHVwIChjb25zdCBzdm5fbG9nX2No
YW5nZWRfcGF0aF90ICpjaGFuZ2VkX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cl9wb29sX3QgKnBvb2wpCg==
</contents>
</attachment>
<attachment href="http://librarian.demo.launchpad.net/3263702/python-fixes.patch">
<type>UNSPECIFIED</type>
<title>Updated for http support</title>
<mimetype>text/plain</mimetype>
<contents>ZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvYnVpbGQuY29uZiBzdWJ2ZXJzaW9uLTEuMy4xLm5l
dy9idWlsZC5jb25mCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL2J1aWxkLmNvbmYJMjAwNi0wNy0wNSAw
MTowMzo1OC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L2J1aWxkLmNv
bmYJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTM1MSw3ICszNTEsNyBA
QAogdHlwZSA9IHN3aWdfbGliCiBsYW5nID0gcHl0aG9uCiBwYXRoID0gc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weQotbGlicyA9IGxpYnN2bl9zdWJyIGxpYnN2
bl9kZWx0YSBsaWJzdm5fd2MgYXByCitsaWJzID0gbGlic3ZuX2NsaWVudCBsaWJzdm5fc3ViciBs
aWJzdm5fZGVsdGEgbGlic3ZuX3djIGFwcgogbGluay1jbWQgPSAkKExJTkspICQoU1dJR19QWV9M
SUJTKQogaW5zdGFsbCA9IHN3aWctcHktbGliCiAjIG5lZWQgc3BlY2lhbCBidWlsZCBydWxlIHRv
IGluY2x1ZGUgLURTV0lHUFlUSE9OCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL2Fwci5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvYXByLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDUtMTAtMjUgMjA6
MTY6MzguMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9hcHIuc3dnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAw
MDAwICswMTAwCkBAIC0xNDYsMTQgKzE0NiwyNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
Y3JlYXRlIGFuIE9VVFBVVCBhcmd1bWVudCBkZWZuIGZvciBhbiBhcHJfaGFzaF90ICoqIHdoaWNo
IGlzIHN0b3JpbmcKKyAgIGRpcmVudCB2YWx1ZXMKKyovCisldHlwZW1hcChweXRob24saW4sbnVt
aW5wdXRzPTApIGFwcl9oYXNoX3QgKipESVJFTlRIQVNIID0gYXByX2hhc2hfdCAqKk9VVFBVVDsK
KyV0eXBlbWFwKHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9o
YXNoX3QgKipESVJFTlRIQVNIIHsKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19weV9jb252ZXJ0X2hh
c2goKiQxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTV0lHVFlQRV9wX3N2bl9kaXJlbnRfdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7Cit9CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICBjcmVhdGUgYW4gT1VUUFVUIGFyZ3VtZW50IGRlZm4gZm9yIGFuIGFwcl9oYXNo
X3QgKiogd2hpY2ggaXMgc3RvcmluZwogICAgcHJvcGVydHkgdmFsdWVzCiAqLwogCiAldHlwZW1h
cChweXRob24saW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQUk9QSEFTSCA9IGFwcl9oYXNo
X3QgKipPVVRQVVQ7Ci0ldHlwZW1hcChweXRob24sYXJnb3V0KSBhcHJfaGFzaF90ICoqUFJPUEhB
U0ggewotICAgIC8qIHRvc3MgcHJpb3IgcmVzdWx0LCBnZXQgbmV3IHJlc3VsdCBmcm9tIHRoZSBo
YXNoICovCi0gICAgUHlfREVDUkVGKCRyZXN1bHQpOwotICAgICRyZXN1bHQgPSBzdm5fc3dpZ19w
eV9wcm9waGFzaF90b19kaWN0KCokMSk7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50
PSJ0X291dHB1dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqUFJPUEhBU0ggeworICAgICRyZXN1bHQg
PSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdCgq
JDEpKTsKIH0KIAogJXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipQ
Uk9QSEFTSCA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4x
L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3
ZwotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9w
cm94eV9hcHIuc3dnCTIwMDYtMDMtMTMgMDk6NTE6NDAuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2
ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94eV9h
cHIuc3dnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0xMTIsNiArMTEy
LDI4IEBACiAgICAgICAgICAgZGVsIHNlbGYuX3BhcmVudF9wb29sCiAgICAgICAgIGlmIGhhc2F0
dHIoc2VsZiwgIl9pc192YWxpZCIpOgogICAgICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAg
ICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQgYW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNl
cnRlZCBieSB0eXBlbWFwcworICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIp
OgorICAgICAgICAgIGRlbCBzZWxmLl9vd25lZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVk
X3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2Ug
LS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29udGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1
Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9vbC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1h
bmFnZQorICAgICAgICAgICByZWZlcmVuY2UgY291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAg
ICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9v
d25lZF9yZWZzID0ge30KKyAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6
CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVmc1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3JlZl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVt
b3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3Rpbmcg
J293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVzZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlm
IGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZzIikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tl
eShyZWYpOgorICAgICAgICAgIHNlbGYuX293bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAg
aWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3du
ZWRfcmVmc1tyZWZdCiAgIAogICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICIiIkF1
dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkgcG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgpkaWZmIC1O
dXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9wcm94
eV9hcHIuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3Byb3h5X2Fwci5zd2cub3JpZwkxOTcwLTAxLTAx
IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvcHJveHlfYXByLnN3Zy5vcmlnCTIwMDYtMDctMDUg
MDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTg1IEBACisvKiBQcm94eSBjbGFz
c2VzIGZvciBhcHJfKi4gR2VuZXJhdGVkIGJ5IGhhbmQuICovCisKKyNpZmRlZiBTV0lHUFlUSE9O
CislaW5jbHVkZSBwcm94eS5zd2cKKworJW5vZGVmYXVsdCBhcHJfYXJyYXlfaGVhZGVyX3Q7Cisl
bm9kZWZhdWx0IGFwcl9maWxlX3Q7Cislbm9kZWZhdWx0IGFwcl9oYXNoX3Q7Cislbm9kZWZhdWx0
IGFwcl9wb29sX3Q7CisKKyVvcGFxdWVfcHJveHkoYXByX2FycmF5X2hlYWRlcl90KTsKKyVvcGFx
dWVfcHJveHkoYXByX2ZpbGVfdCk7Cislb3BhcXVlX3Byb3h5KGFwcl9oYXNoX3QpOworCislcHl0
aG9uY29kZSAleworaW1wb3J0IHRocmVhZGluZworCithcHBsaWNhdGlvbl9wb29sID0gTm9uZQor
YXBwbGljYXRpb25fcG9vbF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorY2xhc3MgR2VuZXJpY1NX
SUdXcmFwcGVyOgorICBkZWYgX19pbml0X18oc2VsZiwgdGhpcywgcG9vbCk6CisgICAgIiIiQ3Jl
YXRlIG5ldyBHZW5lcmljIFNXSUcgd3JhcHBlciBvYmplY3QiIiIKKyAgICBpbXBvcnQgd2Vha3Jl
ZgorICAgIHNlbGYudGhpcyA9IHRoaXMKKyAgICBzZWxmLl9wYXJlbnRfcG9vbCA9IHBvb2wKKyAg
ICBzZWxmLl9pc192YWxpZCA9IHdlYWtyZWYucmVmKHBvb2wuX2lzX3ZhbGlkKQorCisgIGRlZiBz
ZXRfcGFyZW50X3Bvb2woc2VsZiwgcG9vbCk6CisgICAgIiIiU2V0IHRoZSBwYXJlbnQgcG9vbCBv
ZiB0aGlzIG9iamVjdCIiIgorICAgIHNlbGYuX3BhcmVudF9wb29sID0gcG9vbAorCisgIGRlZiB2
YWxpZChzZWxmKToKKyAgICAiIiJJcyB0aGlzIG9iamVjdCB2YWxpZD8iIiIKKyAgICByZXR1cm4g
c2VsZi5faXNfdmFsaWQoKQorCisgIGRlZiBhc3NlcnRfdmFsaWQoc2VsZik6CisgICAgIiIiQXNz
ZXJ0IHRoYXQgdGhpcyBvYmplY3QgaXMgc3RpbGwgdmFsaWQiIiIKKyAgICBhc3NlcnQgc2VsZi52
YWxpZCgpLCAiVGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiCisKKyAgZGVm
IF91bndyYXAoc2VsZik6CisgICAgIiIiUmV0dXJuIHVuZGVybHlpbmcgU1dJRyBvYmplY3QiIiIK
KyAgICBzZWxmLmFzc2VydF92YWxpZCgpCisgICAgcmV0dXJuIHNlbGYudGhpcworIAorZGVmIF9t
YXJrX3dlYWtwb29sX2ludmFsaWQod2Vha3Bvb2wpOgorICBpZiB3ZWFrcG9vbCBhbmQgd2Vha3Bv
b2woKSBhbmQgaGFzYXR0cih3ZWFrcG9vbCgpLCAiX2lzX3ZhbGlkIik6CisgICAgZGVsIHdlYWtw
b29sKCkuX2lzX3ZhbGlkCisKKyV9CisKK3N0cnVjdCBhcHJfcG9vbF90IHsKKyAgJWV4dGVuZCB7
CisgICAgJXB5dGhvbmNvZGUgJXsKKyAgICAgIGRlZiBzZXRfcGFyZW50X3Bvb2woc2VsZiwgcGFy
ZW50X3Bvb2w9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtZW1vcnkgcG9vbCIiIgor
ICAgICAgICBnbG9iYWwgYXBwbGljYXRpb25fcG9vbAorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICBhcHBsaWNhdGlvbl9wb29sX2xvY2suYWNxdWlyZSgpCisKKyAgICAgICAgICBzZWxmLl9wYXJl
bnRfcG9vbCA9IHBhcmVudF9wb29sIG9yIGFwcGxpY2F0aW9uX3Bvb2wKKyAgICAgICAgICBzZWxm
Ll9tYXJrX3ZhbGlkKCkKKyAgICAKKyAgICAgICAgICAjIFByb3RlY3QgaW1wb3J0YW50IGZ1bmN0
aW9ucyBmcm9tIEdDCisgICAgICAgICAgc2VsZi5fYXByX3Bvb2xfZGVzdHJveSA9IF9jb3JlLmFw
cl9wb29sX2Rlc3Ryb3kKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBsaWNh
dGlvbl9wb29sID0gXAorICAgICAgICAgICAgX2NvcmUuc3ZuX3N3aWdfcHlfY2xlYXJfYXBwbGlj
YXRpb25fcG9vbAorICAgIAorICAgICAgICAgICMgSWYgd2UgYXJlIGFuIGFwcGxpY2F0aW9uLWxl
dmVsIHBvb2wsCisgICAgICAgICAgIyB0aGVuIHNldCB0aGlzIHBvb2wgdG8gYmUgdGhlIGFwcGxp
Y2F0aW9uLWxldmVsIHBvb2wKKyAgICAgICAgICBpZiBub3Qgc2VsZi5fcGFyZW50X3Bvb2w6Cisg
ICAgICAgICAgICBzdm5fc3dpZ19weV9zZXRfYXBwbGljYXRpb25fcG9vbChzZWxmLCBzZWxmKQor
ICAgICAgICAgICAgYXBwbGljYXRpb25fcG9vbCA9IHNlbGYKKyAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICBhcHBsaWNhdGlvbl9wb29sX2xvY2sucmVsZWFzZSgpCisgIAorICAgICAgZGVmIHZh
bGlkKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IHBvb2wgYW5k
IGl0cyBwYXJlbnRzCisgICAgICAgIGFyZSBzdGlsbCB2YWxpZCIiIgorICAgICAgICByZXR1cm4g
aGFzYXR0cihzZWxmLCJfaXNfdmFsaWQiKQorICAKKyAgICAgIGRlZiBhc3NlcnRfdmFsaWQoc2Vs
Zik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHRoaXMgbWVtb3J5X3Bvb2wgaXMgc3RpbGwgdmFs
aWQuIiIiCisgICAgICAgIGFzc2VydCBzZWxmLnZhbGlkKCksICJUaGlzIHBvb2wgaGFzIGFscmVh
ZHkgYmVlbiBkZXN0cm95ZWQiCisgIAorICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAi
IiJDbGVhciBlbWJlZGRlZCBtZW1vcnkgcG9vbC4gSW52YWxpZGF0ZSBhbGwgc3VicG9vbHMuIiIi
CisgICAgICAgIHBvb2wgPSBzZWxmLl9wYXJlbnRfcG9vbAorICAgICAgICBhcHJfcG9vbF9jbGVh
cihzZWxmKQorICAgICAgICBzZWxmLnNldF9wYXJlbnRfcG9vbChwb29sKQorICAKKyAgICAgIGRl
ZiBkZXN0cm95KHNlbGYpOgorICAgICAgICAiIiJEZXN0cm95IGVtYmVkZGVkIG1lbW9yeSBwb29s
LiBJZiB5b3UgZG8gbm90IGRlc3Ryb3kKKyAgICAgICAgdGhlIG1lbW9yeSBwb29sIG1hbnVhbGx5
LCBQeXRob24gd2lsbCBkZXN0cm95IGl0CisgICAgICAgIGF1dG9tYXRpY2FsbHkuIiIiCisgICAg
ICAgIGdsb2JhbCBhcHBsaWNhdGlvbl9wb29sCisgIAorICAgICAgICBzZWxmLmFzc2VydF92YWxp
ZCgpCisgIAorICAgICAgICBpc19hcHBsaWNhdGlvbl9wb29sID0gbm90IHNlbGYuX3BhcmVudF9w
b29sCisgIAorICAgICAgICAjIERlc3Ryb3kgcG9vbAorICAgICAgICBzZWxmLl9hcHJfcG9vbF9k
ZXN0cm95KHNlbGYpCisgIAorICAgICAgICAjIENsZWFyIGFwcGxpY2F0aW9uIHBvb2wgaWYgbmVj
ZXNzYXJ5CisgICAgICAgIGlmIGlzX2FwcGxpY2F0aW9uX3Bvb2w6CisgICAgICAgICAgYXBwbGlj
YXRpb25fcG9vbCA9IE5vbmUKKyAgICAgICAgICBzZWxmLl9zdm5fc3dpZ19weV9jbGVhcl9hcHBs
aWNhdGlvbl9wb29sKCkKKyAgCisgICAgICAgICMgTWFyayBzZWxmIGFzIGludmFsaWQKKyAgICAg
ICAgaWYgaGFzYXR0cihzZWxmLCAiX3BhcmVudF9wb29sIik6CisgICAgICAgICAgZGVsIHNlbGYu
X3BhcmVudF9wb29sCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pc192YWxpZCIpOgorICAg
ICAgICAgIGRlbCBzZWxmLl9pc192YWxpZAorICAgICAgICAKKyAgICAgICAgIyBDbGVhciBvdXQg
YW55IHBvb2wtb3duZWQgcmVmZXJlbmNlcyBpbnNlcnRlZCBieSB0eXBlbWFwcworICAgICAgICBp
ZiBoYXNhdHRyKHNlbGYsICJfb3duZWRfcmVmcyIpOgorICAgICAgICAgIGRlbCBzZWxmLl9vd25l
ZF9yZWZzCisKKyAgICAgIGRlZiBfYWRkX293bmVkX3JlZihzZWxmLCByZWYpOgorICAgICAgICAi
IiJBZGQgYSBuZXcgJ293bmVkJyByZWZlcmVuY2UgLS0gaS5lLiBhIFB5dGhvbiBvYmplY3QgY29u
dGFpbmVkIGluIGEgQworICAgICAgICAgICBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGluIHRoaXMgcG9v
bC4gIFVzZWQgYnkgdGhlIHR5cGVtYXBzIHRvIG1hbmFnZQorICAgICAgICAgICByZWZlcmVuY2Ug
Y291bnRpbmcgc2VtYW50aWNzLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX293
bmVkX3JlZnMiKToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzID0ge30KKyAgICAgICAgaWYg
c2VsZi5fb3duZWRfcmVmcy5oYXNfa2V5KHJlZik6CisgICAgICAgICAgc2VsZi5fb3duZWRfcmVm
c1tyZWZdICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9vd25lZF9yZWZzW3Jl
Zl0gPSAxCisgICAgICAKKyAgICAgIGRlZiBfcmVtb3ZlX293bmVkX3JlZihzZWxmLCByZWYpOgor
ICAgICAgICAiIiJSZW1vdmUgYW4gZXhpc3RpbmcgJ293bmVkJyByZWZlcmVuY2UuICBBbHNvIHVz
ZWQgYnkgdHlwZW1hcHMuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9vd25lZF9yZWZz
IikgYW5kIHNlbGYuX293bmVkX3JlZnMuaGFzX2tleShyZWYpOgorICAgICAgICAgIHNlbGYuX293
bmVkX3JlZnNbcmVmXSAtPSAxCisgICAgICAgICAgaWYgc2VsZi5fb3duZWRfcmVmc1tyZWZdID09
IDA6CisgICAgICAgICAgICBkZWwgc2VsZi5fb3duZWRfcmVmc1tyZWZdCisgIAorICAgICAgZGVm
IF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIkF1dG9tYXRpY2FsbHkgZGVzdHJveSBtZW1vcnkg
cG9vbHMsIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBpZiBzZWxmLnZhbGlkKCk6CisgICAgICAg
ICAgc2VsZi5kZXN0cm95KCkKKyAgCisgICAgICBkZWYgX21hcmtfdmFsaWQoc2VsZik6CisgICAg
ICAgICIiIk1hcmsgcG9vbCBhcyB2YWxpZCIiIgorCisgICAgICAgIHNlbGYuX3dlYWtwYXJlbnQg
PSBOb25lCisKKyAgICAgICAgaWYgc2VsZi5fcGFyZW50X3Bvb2w6CisgICAgICAgICAgaW1wb3J0
IHdlYWtyZWYKKworICAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBvYmplY3Qg
aXMgdmFsaWQKKyAgICAgICAgICBzZWxmLl9wYXJlbnRfcG9vbC5hc3NlcnRfdmFsaWQoKQorCisg
ICAgICAgICAgIyBSZWZlciB0byBzZWxmIHVzaW5nIGEgd2Vha3JlZnJlbmNlIHNvIHRoYXQgd2Ug
ZG9uJ3QKKyAgICAgICAgICAjIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZQorICAgICAgICAgIHdl
YWtzZWxmID0gd2Vha3JlZi5yZWYoc2VsZikKKworICAgICAgICAgICMgU2V0IHVwIGNhbGxiYWNr
cyB0byBtYXJrIHBvb2wgYXMgaW52YWxpZCB3aGVuIHBhcmVudHMKKyAgICAgICAgICAjIGFyZSBk
ZXN0cm95ZWQKKyAgICAgICAgICBzZWxmLl93ZWFrcGFyZW50ID0gd2Vha3JlZi5yZWYoc2VsZi5f
cGFyZW50X3Bvb2wuX2lzX3ZhbGlkLAorICAgICAgICAgICAgbGFtYmRhIHg6IF9tYXJrX3dlYWtw
b29sX2ludmFsaWQod2Vha3NlbGYpKQorICAKKyAgICAgICAgIyBNYXJrIHBvb2wgYXMgdmFsaWQK
KyAgICAgICAgc2VsZi5faXNfdmFsaWQgPSBsYW1iZGE6IDEKKworICAgICAgZGVmIF93cmFwKHNl
bGYsIG9iaik6CisgICAgICAgICIiIk1hcmsgYSBTV0lHIG9iamVjdCBhcyBvd25lZCBieSB0aGlz
IHBvb2wiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfdmFsaWQoKQorICAgICAgICBpZiBoYXNhdHRy
KG9iaiwgInNldF9wYXJlbnRfcG9vbCIpOgorICAgICAgICAgIG9iai5zZXRfcGFyZW50X3Bvb2wo
c2VsZikKKyAgICAgICAgICByZXR1cm4gb2JqIAorICAgICAgICBlbGlmIG9iaiBpcyBOb25lOgor
ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNTV0lHV3JhcHBlcihvYmosIHNlbGYpCisKKyAgICAlfQorICB9Cit9OworJXB5dGhvbmNv
ZGUgJXsKKyMgSW5pdGlhbGl6ZSBhIGdsb2JhbCBwb29sCitzdm5fcG9vbF9jcmVhdGUoKQorJX0K
KyNlbmRpZgorCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mv
c3dpZy9pbmNsdWRlL3N2bl90eXBlcy5zd2cgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lv
bi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3ZwotLS0gc3VidmVyc2lvbi0xLjMu
MS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDUtMTAt
MjUgMjA6MDM6MjEuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2
ZXJzaW9uL2JpbmRpbmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnCTIwMDYtMDctMDUgMDE6
MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC00MzAsNiArNDMwLDEyIEBACiAgICQyID0gKHZvaWQg
Kilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
KTsKIH07CiAKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY29tbWl0X2NhbGxiYWNrMl90IGNh
bGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikKK3sKKyAgJDEgPSBzdm5fc3dpZ19weV9jb21t
aXRfY2FsbGJhY2syOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorCiAvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxfZnVuY190CiAqLwpAQCAtNDkzLDYgKzQ5OSw2
MCBAQAogICAkMSA9IHN2bl9zd2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7CiB9CiAKKyNpZmRl
ZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFj
aywgdm9pZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2Nh
bGxiYWNrOworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lH
UFlUSE9OCisldHlwZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9p
ZCAqY2FsbGJhY2tfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNr
OworICAkMiA9ICh2b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICBNYXBwZXIgdG8gYXV0b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9p
ZCogYmF0b25zIG9uIGFzc2lnbm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1h
cChpbikgdm9pZCAqUFlfQVNfVk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAk
aW5wdXQ7CisgIGlmICgkaW5wdXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVM
TDsKKyAgfSBlbHNlIHsKKyAgICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRp
bnB1dDsKKyAgfQorICBpZiAoc3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQ
eU9iamVjdCAqKWFyZzEtPiQxX25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0K
K30KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTWFwcGVyIHRvIGF1dG9tYXRpY2Fs
bHkgdHVybiBQeXRob24gb2JqZWN0cyBpbnRvIHZvaWQqIGJhdG9ucyBvbiBhc3NpZ25tZW50Cisq
LworCisjaWZkZWYgU1dJR1BZVEhPTgorJXR5cGVtYXAoaW4pIHZvaWQgKlBZX0FTX1ZPSUQgKFB5
T2JqZWN0ICpuZXdSZWYpIHsKKyAgbmV3UmVmID0gJGlucHV0OworICBpZiAoJGlucHV0ID09IFB5
X05vbmUpIHsKKyAgICAkMSA9IG5ld1JlZiA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgbmV3UmVm
ID0gJGlucHV0OworICAgICQxID0gKHZvaWQgKikkaW5wdXQ7CisgIH0KKyAgaWYgKHN2bl9zd2ln
X3B5X3Bvb2xfc2V0X293bmVkX3JlZihvYmowLCAoUHlPYmplY3QgKilhcmcxLT4kMV9uYW1lLCBu
ZXdSZWYpKSB7CisgICAgU1dJR19mYWlsOworICB9Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICAgIFdyYXAgdGhlIGRpZ2VzdCBvdXRwdXQgZm9yIGZ1bmN0aW9ucyBwb3B1bGF0aW5n
IGRpZ2VzdHMuCiAqLwpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRp
bmdzL3N3aWcvaW5jbHVkZS9zdm5fdHlwZXMuc3dnLm9yaWcgc3VidmVyc2lvbi0xLjMuMS5uZXcv
c3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVzLnN3Zy5vcmlnCi0tLSBz
dWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9pbmNsdWRlL3N2bl90eXBl
cy5zd2cub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVy
c2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL2luY2x1ZGUvc3ZuX3R5cGVz
LnN3Zy5vcmlnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEs
Nzk1IEBACisvKgorICogc3ZuX3R5cGVzLnN3ZyA6ICBTV0lHIGluY2x1ZGUgZmlsZSBmb3Igc3Zu
X3R5cGVzLmgKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMg
Q29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlz
IGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg
dGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMu
b3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYgbmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNl
IGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkgdXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVh
ZCwgYXQgeW91ciBvcHRpb24uCisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1
bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4
YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBzZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFu
ZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICovCisKKy8qIFRoaXMgaW50ZXJmYWNlIGZpbGUgb25seSBkZWZpbmVzIHR5
cGVzIGFuZCB0aGVpciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgVGhlcmUgaXMgbm8gbW9kdWxl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZSBmaWxlLiAqLworCislaW5jbHVkZSBhcHIu
c3dnCislaW5jbHVkZSBleGNlcHRpb24uaQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRl
IGEgdHlwZW1hcCB0byBkZWZpbmUgInR5cGUgKioiIGFzIE9VVCBwYXJhbWV0ZXJzLgorCisgICBO
b3RlOiBTV0lHVFlQRSBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgZm9yICJzb21lIGFyYml0cmFyeSB0
eXBlIi4gVGhpcworICAgICAgICAgdHlwZW1hcCB3aWxsIGJlIGFwcGxpZWQgb250byBhICJyZWFs
IiB0eXBlLgorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAq
Kk9VVFBBUkFNICgkKjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9
CisldHlwZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBTV0lHVFlQRSAqKk9VVFBBUkFNICgk
KjFfdHlwZSB0ZW1wKSB7CisgICAgJDEgPSAoJDFfbHR5cGUpJnRlbXA7Cit9CisldHlwZW1hcChy
dWJ5LCBpbiwgbnVtaW5wdXRzPTApIFNXSUdUWVBFICoqT1VUUEFSQU0gKCQqMV90eXBlIHRlbXAp
IHsKKyAgdGVtcCA9IE5VTEw7CisgICQxID0gKCQxX2x0eXBlKSZ0ZW1wOworfQorCisldHlwZW1h
cChweXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIFNXSUdUWVBFICoq
T1VUUEFSQU0geworICAgICRyZXN1bHQgPSB0X291dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAgICAg
IHN2bl9zd2lnX05ld1BvaW50ZXJPYmooKiQxLCAkKjFfZGVzY3JpcHRvciwgX2dsb2JhbF9zdm5f
c3dpZ19weV9wb29sKSk7Cit9CisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgICBTVChhcmd2aSkgPSBzdl9uZXdtb3J0YWwoKTsKKyAgICBTV0lHX01ha2VQ
dHIoU1QoYXJndmkrKyksICh2b2lkICopKiQxLCAkKjFfZGVzY3JpcHRvciwwKTsKK30KKyV0eXBl
bWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxwZXIiKSBTV0lHVFlQRSAqKk9V
VFBBUkFNIHsKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgU1dJR19OZXdQb2lu
dGVyT2JqKCokMSwgJCoxX2Rlc2NyaXB0b3IsIDApKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICVhcHBseS1pbmcgb2YgdHlwZW1hcHMKKyovCisKKyVhcHBseSBTV0lHVFlQRSAqKk9VVFBB
UkFNIHsKKyAgc3ZuX3N0cmVhbV90ICoqLAorICBzdm5fY29tbWl0X2luZm9fdCAqKgorfTsKKwor
JWFwcGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9yZXZudW1fdCAqIH07CislYXBwbHkgaW50ICpPVVRQ
VVQgeyBzdm5fYm9vbGVhbl90ICogfTsKKworLyogc3ZuX2ZzX2NoZWNrX3BhdGgoKSAqLworJWFw
cGx5IGxvbmcgKk9VVFBVVCB7IHN2bl9ub2RlX2tpbmRfdCAqIH07CisKKy8qIHN2bl9jb25maWdf
Z2V0X3NlcnZlcl9zZXR0aW5nX2ludCgpICovCislYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgeyBh
cHJfaW50NjRfdCAqIH07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGUgYSB0eXBlbWFw
IGZvciBzcGVjaWZ5aW5nIHN0cmluZyBhcmdzIHRoYXQgbWF5IGJlIE5VTEwuCisqLworJXR5cGVt
YXAocHl0aG9uLCBpbiwgcGFyc2U9InoiKSBjb25zdCBjaGFyICpNQVlfQkVfTlVMTCAiIjsKKwor
I2lmZGVmIFNXSUdQRVJMCislYXBwbHkgY29uc3QgY2hhciAqIHsgY29uc3QgY2hhciAqTUFZX0JF
X05VTEwgfTsKKyNlbmRpZgorCisldHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciogTUFZX0JF
X05VTEwKK3sKKyAgaWYgKE5JTF9QKCRpbnB1dCkpIHsKKyAgICAkMSA9IE5VTEw7CisgIH0gZWxz
ZSB7CisgICAgJDEgPSBTdHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9Cit9CisKKyV0eXBlbWFw
KHJ1YnksIG91dCkgY29uc3QgY2hhciAqCit7CisgIGlmICgkMSkgeworICAgICRyZXN1bHQgPSBy
Yl9zdHJfbmV3MigkMSk7CisgIH0gZWxzZSB7CisgICAgJHJlc3VsdCA9IFFuaWw7CisgIH0KK30K
KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNvbnN0IGNoYXIgKmhlYWRlcl9lbmNvZGluZworICAg
c3ZuX2RpZmZfZmlsZV9vdXRwdXRfdW5pZmllZDIKKyAgIHN2bl9jbGllbnRfZGlmZjMKKyovCisl
dHlwZW1hcChydWJ5LCBpbikgY29uc3QgY2hhciAqaGVhZGVyX2VuY29kaW5nCit7CisgICQxID0g
TlVMTDsKKyAgCisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgIH0gZWxzZSBpZiAoVFlQRSgkaW5w
dXQpID09IFRfRklYTlVNKSB7CisgICAgJDEgPSAoY2hhciAqKU5VTTJJTlQoJGlucHV0KTsKKyAg
ICBpZiAoISgkMSA9PSBBUFJfTE9DQUxFX0NIQVJTRVQgfHwgJDEgPT0gQVBSX0RFRkFVTFRfQ0hB
UlNFVCkpIHsKKyAgICAgICQxID0gTlVMTDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgJDEgPSBT
dHJpbmdWYWx1ZVB0cigkaW5wdXQpOworICB9CisgIAorICBpZiAoISQxKSB7CisgICAgJDEgPSAo
Y2hhciAqKUFQUl9MT0NBTEVfQ0hBUlNFVDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgSW5wdXQgb2Ygc2NyaXB0aW5nIGhhc2gvZGljdGlvbmFyeSAoc3RyaW5nID0+IHN0cmluZykK
KyAgIGNvbnZlcnRlZCB0byBhcHJfaGFzaF90IChjb25zdCBjaGFyICogPT4gY29uc3QgY2hhciAq
KQorKi8KKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9oYXNoX3QgKlNUUklOR19UT19TVFJJTkcg
eworICAgICQxID0gc3ZuX3N3aWdfcHlfc3RyaW5naGFzaF9mcm9tX2RpY3QgKCRpbnB1dCwgX2ds
b2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHBlcmw1LCBpbikgYXByX2hhc2hfdCAqU1RSSU5HX1RP
X1NUUklORyB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF9zdHJpbmdzX3RvX2hhc2ggKCRpbnB1dCwg
X2dsb2JhbF9wb29sKTsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpTVFJJTkdf
VE9fU1RSSU5HIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2hhc2hfdG9fYXByX2hhc2hfc3RyaW5n
KCRpbnB1dCwgX2dsb2JhbF9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVm
aW5lIGEgbW9yZSByZWZpbmVkICdtZW1iZXJpbicgdHlwZW1hcCBmb3IgJ2NvbnN0IGNoYXIgKicg
bWVtYmVycy4gVGhpcworICAgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgJ2NoYXIgKicgaGFuZGxl
ciBkZWZpbmVkIGF1dG9tYXRpY2FsbHkuCisKKyAgIFdlIG5lZWQgdG8gZG8gdGhlIGZyZWUvbWFs
bG9jL3N0cmNweSBzcGVjaWFsIGJlY2F1c2Ugb2YgdGhlIGNvbnN0CisqLworJXR5cGVtYXAobWVt
YmVyaW4pIGNvbnN0IGNoYXIgKiB7CisgICAgYXByX3NpemVfdCBsZW4gPSBzdHJsZW4oJGlucHV0
KSArIDE7CisgICAgY2hhciAqY29waWVkOworICAgIGlmICgkMSkgZnJlZSgoY2hhciAqKSQxKTsK
KyAgICBjb3BpZWQgPSBtYWxsb2MobGVuKTsKKyAgICBtZW1jcHkoY29waWVkLCAkaW5wdXQsIGxl
bik7CisgICAgJDEgPSBjb3BpZWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBTcGVjaWZ5
IGhvdyBzdm5fZXJyb3JfdCByZXR1cm5zIGFyZSB0dXJuZWQgaW50byBleGNlcHRpb25zLgorKi8K
KyV0eXBlbWFwKHB5dGhvbiwgb3V0KSBzdm5fZXJyb3JfdCAqIHsKKyAgICBpZiAoJDEgIT0gTlVM
TCkgeworICAgICAgICBpZiAoJDEtPmFwcl9lcnIgIT0gU1ZOX0VSUl9TV0lHX1BZX0VYQ0VQVElP
Tl9TRVQpCisgICAgICAgICAgICBzdm5fc3dpZ19weV9zdm5fZXhjZXB0aW9uKCQxKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3ZuX2Vycm9yX2NsZWFyKCQxKTsKKyAgICAgICAgU1dJR19m
YWlsOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgJHJlc3VsdCA9IFB5X05v
bmU7Cit9CisKKyV0eXBlbWFwKHBlcmw1LG91dCkgc3ZuX2Vycm9yX3QgKiB7CisgICAgaWYgKCQx
KSB7CisgICAgICAgIFNWICpleGNlcHRpb25faGFuZGxlciA9IHBlcmxfZ2V0X3N2ICgiU1ZOOjpF
cnJvcjo6aGFuZGxlciIsIEZBTFNFKTsKKworICAgICAgICBpZiAoU3ZPSyhleGNlcHRpb25faGFu
ZGxlcikpIHsKKyAgICAgICAgICAgIFNWICpjYWxsYmFja19yZXN1bHQ7CisKKyAgICAgICAgICAg
IHN2bl9zd2lnX3BsX2NhbGxiYWNrX3RodW5rIChDQUxMX1NWLCBleGNlcHRpb25faGFuZGxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FsbGJhY2tfcmVzdWx0
LCAiUyIsICQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQxX2Rl
c2NyaXB0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHJlc3VsdCA9IHN2X25l
d21vcnRhbCgpOworICAgICAgICAgICAgU1dJR19NYWtlUHRyICgkcmVzdWx0LCAodm9pZCAqKSQx
LCAkMV9kZXNjcmlwdG9yICwwKTsKKyAgICAgICAgICAgIGFyZ3ZpKys7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgc3ZuX2Vycm9yX3QgKgoreworICBpZiAoJDEp
IHsKKyAgICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOwor
ICAgIHN2bl9zd2lnX3JiX2hhbmRsZV9zdm5fZXJyb3IoJDEpOworICB9CisgICRyZXN1bHQgPSBR
bmlsOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGFuIE9VVFBVVCB0eXBlbWFw
IGZvciAnc3ZuX2ZpbGVzaXplX3QgKicuICBGb3Igbm93LCB3ZSdsbAorICAgdHJlYXQgaXQgYXMg
YSAnbG9uZycgZXZlbiBpZiB0aGF0IGlzbid0IGVudGlyZWx5IGNvcnJlY3QuLi4gIAorKi8KKyV0
eXBlbWFwKHB5dGhvbixpbixudW1pbnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVz
aXplX3QgdGVtcCkKKyAgICAiJDEgPSAmdGVtcDsiOworCisldHlwZW1hcChwZXJsNSxpbixudW1p
bnB1dHM9MCkgc3ZuX2ZpbGVzaXplX3QgKiAoc3ZuX2ZpbGVzaXplX3QgdGVtcCkKKyAgICAiJDEg
PSAmdGVtcDsiOworCisldHlwZW1hcChydWJ5LGluLG51bWlucHV0cz0wKSBzdm5fZmlsZXNpemVf
dCAqIChzdm5fZmlsZXNpemVfdCB0ZW1wKQorICAgICIkMSA9ICZ0ZW1wOyI7CisKKyV0eXBlbWFw
KHB5dGhvbixhcmdvdXQsZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90
ICoKKyAgICAiJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKGFwcl9pbnQ2NF90KSAoKiQx
KSkpOyI7CisKKy8qIFhYWDogYXBwbHkgbG9uZyBsb25nICpPVVRQVVQgZG9lc24ndCB0cmFjayAk
MSBjb3JyZWN0bHkgKi8KKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgc3ZuX2ZpbGVzaXplX3QgKiB7
CisgICAgY2hhciB0ZW1wWzI1Nl07CisgICAgc3ByaW50Zih0ZW1wLCIlIiBBUFJfSU5UNjRfVF9G
TVQsICokMSk7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgdGVtcCk7Cit9OworCisldHlwZW1hcChydWJ5LGFyZ291dCxmcmFn
bWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9maWxlc2l6ZV90ICoKKyAgICAiJHJlc3VsdCA9IG91
dHB1dF9oZWxwZXIoJHJlc3VsdCwgTEwyTlVNKChhcHJfaW50NjRfdCkgKCokMSkpKTsiOworCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJhbCBwdHIvbGVuIHR5cGVtYXAuIFRo
aXMgdGFrZXMgYSBzaW5nbGUgc2NyaXB0IGFyZ3VtZW50CisgICBhbmQgZXhwYW5kcyBpdCBpbnRv
IGEgcHRyL2xlbiBwYWlyIGZvciB0aGUgbmF0aXZlIGNhbGwuCisqLworJXR5cGVtYXAocHl0aG9u
LCBpbikgKGNvbnN0IGNoYXIgKlBUUiwgYXByX3NpemVfdCBMRU4pIHsKKyAgICBpZiAoIVB5U3Ry
aW5nX0NoZWNrKCRpbnB1dCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF
cnJvciwgImV4cGVjdGluZyBhIHN0cmluZyIpOworICAgICAgICBTV0lHX2ZhaWw7CisgICAgfQor
ICAgICQxID0gUHlTdHJpbmdfQVNfU1RSSU5HKCRpbnB1dCk7CisgICAgJDIgPSBQeVN0cmluZ19H
RVRfU0laRSgkaW5wdXQpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChjb25zdCBjaGFyICpQ
VFIsIGFwcl9zaXplX3QgTEVOKSB7CisgICAgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAg
JDEgPSBTdlBWKCRpbnB1dCwgJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHNldCB0byAw
IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyAgICAgICAgJDEgPSAwOworICAgICAgICAkMiA9IDA7Cisg
ICAgICAgIFNXSUdfY3JvYWsoIkV4cGVjdGluZyBhIHN0cmluZyIpOworICAgIH0KK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIEhhbmRsZSByZXRyaWV2aW5nIHRoZSBlcnJvciBtZXNzYWdlIGZy
b20gc3ZuX3N0cmVycm9yCisqLworCisldHlwZW1hcChwZXJsNSxpbixudW1pbnB1dHM9MCkgKGNo
YXIgKmJ1ZiwgYXByX3NpemVfdCBidWZzaXplKSAoIGNoYXIgdGVtcFsxMjhdICkgeworICAgIG1l
bXNldCAodGVtcCwwLDEyOCk7IC8qIHBhcmFub2lhICovCisgICAgJDEgPSB0ZW1wOworICAgICQy
ID0gMTI4OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRGVmaW5lIGEgZ2VuZXJpYyBhcmdp
bml0IG1hcHBpbmcgZm9yIHBvb2xzLgorKi8KKworI2lmZGVmIFNXSUdQWVRIT04KKyVkZWZpbmUg
c3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhwb29sKQorICBpZiAocG9vbCAhPSBOVUxMICYmICFQeU9i
amVjdF9IYXNBdHRyU3RyaW5nKHBvb2wsIChjaGFyICopIl9tYXJrX3ZhbGlkIikpCisgIHsKKyAg
ICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICBTV0lHX1B5dGhvbl9U
eXBlRXJyb3IoU1dJR19UeXBlUHJldHR5TmFtZSgkZGVzY3JpcHRvciksIHBvb2wpOworICAgIFNX
SUdfYXJnX2ZhaWwoYXJnbnVtKTsKKyAgICBTV0lHX2ZhaWw7CisgIH0KKyVlbmRkZWYKKyVkZWZp
bmUgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3VicG9vbChweV9wb29sLCBwb29sKQorICBpZiAo
cHlfcG9vbCAhPSBOVUxMKSB7CisgICAgcG9vbCA9IHN2bl9wb29sX2NyZWF0ZShwb29sKTsKKyAg
ICBweV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwb29sLCAkZGVzY3JpcHRvciwgcHlf
cG9vbCk7CisgIH0KKyVlbmRkZWYKKyNlbmRpZgorCisldHlwZW1hcChweXRob24sIGRlZmF1bHQp
IGFwcl9wb29sX3QgKihhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wsCisgIFB5T2JqZWN0ICpfZ2xv
YmFsX3N2bl9zd2lnX3B5X3Bvb2wsIGludCBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29sKQor
eworICBpbnQgYXJnbnVtID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAtIDE7CisgIF9nbG9iYWxf
cG9vbF9pc19hcHBsaWNhdGlvbl9wb29sID0gMDsKKyAgX2dsb2JhbF9wb29sX2lzX2RlZmF1bHRf
cG9vbCA9IDE7CisgIGlmIChhcmdudW0gPj0gMCkgeworICAgIFB5T2JqZWN0ICppbnB1dCA9IFB5
VHVwbGVfR0VUX0lURU0oYXJncywgYXJnbnVtKTsKKyAgICBpZiAoaW5wdXQgIT0gUHlfTm9uZSAm
JgorICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCAoY2hhciAqKSJfbWFya192
YWxpZCIpKSB7CisgICAgICBfZ2xvYmFsX3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKGlucHV0
LCAkMV9kZXNjcmlwdG9yLCBhcmdudW0rMSwgTlVMTCk7CisgICAgICBpZiAoUHlFcnJfT2NjdXJy
ZWQoKSkgeworICAgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOworICAgICAg
ICBTV0lHX2ZhaWw7CisgICAgICB9CisgICAgICBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBp
bnB1dDsKKyAgICAgIFB5X1hJTkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAg
IF9nbG9iYWxfcG9vbF9pc19kZWZhdWx0X3Bvb2wgPSAwOworICAgIH0gZWxzZSB7CisgICAgICBp
ZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgfQor
ICAgICAgc3ZuX3N3aWdfZ2V0X2FwcGxpY2F0aW9uX3Bvb2woJl9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCwgJl9nbG9iYWxfcG9vbCk7IAorICAgICAgc3ZuX3N3aWdfcHlfcG9vbF9jcmVhdGVfc3Vi
cG9vbChfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wsIF9nbG9iYWxfcG9vbCk7CisgICAgfQorICB9
IGVsc2UgeworICAgIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKCZfZ2xvYmFsX3N2bl9z
d2lnX3B5X3Bvb2wsICZfZ2xvYmFsX3Bvb2wpOyAKKyAgICBzdm5fc3dpZ19weV9wb29sX2NyZWF0
ZV9zdWJwb29sKF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCwgX2dsb2JhbF9wb29sKTsKKyAgfQor
ICAkMSA9IF9nbG9iYWxfcG9vbDsKKyAgc3ZuX3N3aWdfcHlfcG9vbF9jaGVjayhfZ2xvYmFsX3N2
bl9zd2lnX3B5X3Bvb2wpCit9CisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIGFwcl9wb29sX3QgKiB7
CisgIGlmICgkaW5wdXQgIT0gUHlfTm9uZSAmJiBfZ2xvYmFsX3Bvb2xfaXNfZGVmYXVsdF9wb29s
ID09IDEpIHsKKyAgICBzdm5fc3dpZ19weV9wb29sX2NoZWNrKCRpbnB1dCkKKyAgICBfZ2xvYmFs
X3Bvb2wgPSBzdm5fc3dpZ19NdXN0R2V0UHRyKCRpbnB1dCwgJDFfZGVzY3JpcHRvciwgJHN2bl9h
cmdudW0sIAorICAgICAgTlVMTCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAg
ICAgU1dJR19mYWlsOworICAgIH0KKyAgICBQeV9YREVDUkVGKF9nbG9iYWxfc3ZuX3N3aWdfcHlf
cG9vbCk7CisgICAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gJGlucHV0OworICAgIFB5X1hJ
TkNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKKyAgICAkMSA9IF9nbG9iYWxfcG9vbDsK
KyAgfQorfQorCisldHlwZW1hcChweXRob24sIGZyZWVhcmcpIGFwcl9wb29sX3QgKiB7CisgIFB5
X1hERUNSRUYoX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUs
IGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocGVybDUsIGRlZmF1bHQpIGFwcl9w
b29sX3QgKnBvb2woYXByX3Bvb2xfdCAqX2dsb2JhbF9wb29sKSB7CisgICAgX2dsb2JhbF9wb29s
ID0gJDEgPSBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKFNUKGl0ZW1zLTEpKTsKK30KKyV0eXBlbWFw
KHJ1YnksIGluKSBhcHJfcG9vbF90ICpwb29sICIiOworJXR5cGVtYXAocnVieSwgZGVmYXVsdCkg
YXByX3Bvb2xfdCAqcG9vbAorICAgIChWQUxVRSBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wsIGFw
cl9wb29sX3QgKl9nbG9iYWxfcG9vbCkKK3sKKyAgc3ZuX3N3aWdfcmJfZ2V0X3Bvb2woYXJnYywg
YXJndiwgc2VsZiwgJl9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCwgJiQxKTsKKyAgX2dsb2JhbF9w
b29sID0gJDE7CisgIHN2bl9zd2lnX3JiX3B1c2hfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bv
b2wpOworfQorCisldHlwZW1hcChydWJ5LCBkZWZhdWx0KSAoc3ZuX2NsaWVudF9jdHhfdCAqY3R4
LCBhcHJfcG9vbF90ICpwb29sKQorICAgICAoVkFMVUUgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29s
LCBhcHJfcG9vbF90ICpfZ2xvYmFsX3Bvb2wpCit7CisgIGludCBhZGp1c3RlZF9hcmdjID0gYXJn
YzsKKyAgVkFMVUUgKmFkanVzdGVkX2FyZ3YgPSBhcmd2OworCisgIHN2bl9zd2lnX3JiX2FkanVz
dF9hcmdfZm9yX2NsaWVudF9jdHhfYW5kX3Bvb2woJmFkanVzdGVkX2FyZ2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkanVzdGVkX2FyZ3YpOwor
ICBzdm5fc3dpZ19yYl9nZXRfcG9vbChhZGp1c3RlZF9hcmdjLCBhZGp1c3RlZF9hcmd2LCBzZWxm
LAorICAgICAgICAgICAgICAgICAgICAgICAmX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sLCAmJDIp
OworICBfZ2xvYmFsX3Bvb2wgPSAkMjsKKyAgc3ZuX3N3aWdfcmJfcHVzaF9wb29sKF9nbG9iYWxf
c3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX3Bvb2xf
dCAqcG9vbAoreworICBzdm5fc3dpZ19yYl9zZXRfcG9vbCgkcmVzdWx0LCBfZ2xvYmFsX3N2bl9z
d2lnX3JiX3Bvb2wpOworICBzdm5fc3dpZ19yYl9wb3BfcG9vbChfZ2xvYmFsX3N2bl9zd2lnX3Ji
X3Bvb2wpOworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSBhcHJfcG9vbF90ICpwb29sIHsK
KyAgICBhcHJfcG9vbF90ICpkaXJfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpmaWxlX3Bvb2wsCisg
ICAgYXByX3Bvb2xfdCAqbm9kZV9wb29sCit9OworI2VuZGlmCisKKyNpZmRlZiBTV0lHUlVCWQor
JWFwcGx5IGFwcl9wb29sX3QgKnBvb2wgeworICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAg
IGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICBhcHJfcG9vbF90ICpub2RlX3Bvb2wKK307Cisj
ZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ0FMTEJBQ0tfQkFUT046IERvIG5vdCBj
b252ZXJ0IHRvIEMgb2JqZWN0IGZyb20gUnVieSBvYmplY3QuCisqLworCisldHlwZW1hcChydWJ5
LCBpbikgdm9pZCAqQ0FMTEJBQ0tfQkFUT04KK3sKKyAgJDEgPSAodm9pZCAqKSRpbnB1dDsKK30K
KworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9sb2dfbWVzc2FnZV9yZWNl
aXZlcl90CisgICBzdm5fY2xpZW50X2xvZygpCisgICBzdm5fcmEgZ2V0X2xvZygpCisgICBzdm5f
cmVwb3NfZ2V0X2xvZ3MoKQorKi8KKworJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9sb2dfbWVz
c2FnZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfbG9nX3JlY2VpdmVyOworICAg
ICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fbG9nX21l
c3NhZ2VfcmVjZWl2ZXJfdCByZWNlaXZlciwgCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3Zu
X2xvZ19tZXNzYWdlX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIAorICAgICAgICAgICAgICAgICAgICB2
b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfbG9nX3JlY2VpdmVy
OworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2Jh
bF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNr
OiBzdm5fY29tbWl0X2NhbGxiYWNrX3QKKyAgIHN2bl9yYSBnZXRfY29tbWl0X2VkaXRvcigpCisg
ICBzdm5fcmVwb3NfZ2V0X2NvbW1pdF9lZGl0b3IoKQorKi8KKworJXR5cGVtYXAocGVybDUsIGlu
KSAoc3ZuX2NvbW1pdF9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19iYXRvbikg
eworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfY29tbWl0X2NhbGxiYWNrOworICAgICQyID0g
KHZvaWQgKikkaW5wdXQ7CisgICAgc3ZuX3N3aWdfcGxfaG9sZF9yZWZfaW5fcG9vbCAoX2dsb2Jh
bF9wb29sLCAkaW5wdXQpOworfTsKKworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY29tbWl0X2Nh
bGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9z
d2lnX3JiX2NvbW1pdF9jYWxsYmFjazsKKyAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2Vf
YmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfTsKKworJXR5cGVtYXAo
cHl0aG9uLCBpbikgKHN2bl9jb21taXRfY2FsbGJhY2syX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxi
YWNrX2JhdG9uKQoreworICAkMSA9IHN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjazI7CisgICQy
ID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazog
c3ZuX2NhbmNlbF9mdW5jX3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5fY2FuY2Vs
X2Z1bmNfdCBjYW5jZWxfZnVuYywgdm9pZCAqY2FuY2VsX2JhdG9uKSB7CisgICQxID0gc3ZuX3N3
aWdfcHlfY2FuY2VsX2Z1bmM7CisgICQyID0gJGlucHV0OyAvKiBvdXIgZnVuY3Rpb24gaXMgdGhl
IGJhdG9uLiAqLworfQorCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9jYW5jZWxfZnVuY190IGNh
bmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcmJfY2Fu
Y2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwg
X2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIENh
bGxiYWNrOiBzdm5faW5mb19yZWNlaXZlcl90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2
bl9pbmZvX3JlY2VpdmVyX3QgcmVjZWl2ZXIsIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAk
MSA9IHN2bl9zd2lnX3JiX2luZm9fcmVjZWl2ZXI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19y
Yl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fZnNfd2FybmluZ19jYWxsYmFja190Cisq
LworCisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9mc193YXJuaW5nX2NhbGxiYWNrX3Qgd2Fybmlu
Zywgdm9pZCAqd2FybmluZ19iYXRvbikKK3sKKyAgVkFMVUUgYmF0b24gPSBzdm5fc3dpZ19yYl9t
YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKKyAgc3ZuX3N3aWdf
cmJfZnNfd2FybmluZ19jYWxsYmFja19iYXRvbl9yZWdpc3RlcihiYXRvbiwgX2dsb2JhbF9wb29s
KTsKKyAgJDEgPSBzdm5fc3dpZ19yYl9mc193YXJuaW5nX2NhbGxiYWNrOworICAkMiA9ICh2b2lk
ICopYmF0b247Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fc3RyZWFtX3QgaW50ZXJv
cGVyYWJpbGl0eSB3aXRoIGxhbmd1YWdlIG5hdGl2ZSBpbyBoYW5kbGVzCisqLworCisldHlwZW1h
cChweXRob24sIGluKSBzdm5fc3RyZWFtX3QgKldSQVBQRURfU1RSRUFNIHsKKyAgICAkMSA9IHN2
bl9zd2lnX3B5X21ha2Vfc3RyZWFtICgkaW5wdXQsIF9nbG9iYWxfcG9vbCk7Cit9CisKKyV0eXBl
bWFwKHBlcmw1LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAgIHN2bl9zd2lnX3BsX21ha2Vfc3Ry
ZWFtICgmJDEsICRpbnB1dCk7Cit9CisKKyV0eXBlbWFwKHBlcmw1LCBvdXQpIHN2bl9zdHJlYW1f
dCAqIHsKKyAgICAkcmVzdWx0ID0gc3ZuX3N3aWdfcGxfZnJvbV9zdHJlYW0gKCQxKTsKKyAgICBh
cmd2aSsrOworfQorCisldHlwZW1hcChwZXJsNSwgYXJnb3V0KSBzdm5fc3RyZWFtX3QgKiogewor
ICAgICRyZXN1bHQgPSBzdm5fc3dpZ19wbF9mcm9tX3N0cmVhbSAoKiQxKTsKKyAgICBhcmd2aSsr
OworfQorCisldHlwZW1hcChydWJ5LCBpbikgc3ZuX3N0cmVhbV90ICogeworICAkMSA9IHN2bl9z
d2lnX3JiX21ha2Vfc3RyZWFtKCRpbnB1dCk7Cit9CisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlw
ZW1hcChpbikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tf
YmF0b24pCit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2
b2lkICopJGlucHV0OworfQorI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChp
bikgKHN2bl9jb21taXRfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfYmF0b24p
Cit7CisgICQxID0gc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrOworICAkMiA9ICh2b2lkICop
JGlucHV0OworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNYXBwZXIgdG8gYXV0
b21hdGljYWxseSB0dXJuIFB5dGhvbiBvYmplY3RzIGludG8gdm9pZCogYmF0b25zIG9uIGFzc2ln
bm1lbnQKKyovCisKKyNpZmRlZiBTV0lHUFlUSE9OCisldHlwZW1hcChpbikgdm9pZCAqUFlfQVNf
Vk9JRCAoUHlPYmplY3QgKm5ld1JlZikgeworICBuZXdSZWYgPSAkaW5wdXQ7CisgIGlmICgkaW5w
dXQgPT0gUHlfTm9uZSkgeworICAgICQxID0gbmV3UmVmID0gTlVMTDsKKyAgfSBlbHNlIHsKKyAg
ICBuZXdSZWYgPSAkaW5wdXQ7CisgICAgJDEgPSAodm9pZCAqKSRpbnB1dDsKKyAgfQorICBpZiAo
c3ZuX3N3aWdfcHlfcG9vbF9zZXRfb3duZWRfcmVmKG9iajAsIChQeU9iamVjdCAqKWFyZzEtPiQx
X25hbWUsIG5ld1JlZikpIHsKKyAgICBTV0lHX2ZhaWw7CisgIH0KK30KKyNlbmRpZgorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgV3JhcCB0aGUgZGlnZXN0IG91dHB1dCBmb3IgZnVuY3Rpb25zIHBv
cHVsYXRpbmcgZGlnZXN0cy4KKyovCisKKyV0eXBlbWFwKGluLCBudW1pbnB1dHM9MCkgdW5zaWdu
ZWQgY2hhciBkaWdlc3RbQU5ZXQorICAgICgkKjFfdHlwZSB0ZW1wW0FQUl9NRDVfRElHRVNUU0la
RV0pIHsKKyAgICAkMSA9ICgkMV9sdHlwZSl0ZW1wOworfQorCisldHlwZW1hcChweXRob24sIGFy
Z291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIHVuc2lnbmVkIGNoYXIgZGlnZXN0W0FO
WV0KK3sKKyAgICAkcmVzdWx0ID0gdF9vdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgIFB5
U3RyaW5nX0Zyb21TdHJpbmcoc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsIF9nbG9iYWxf
cG9vbCkpKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWduZWQgY2hhciBkaWdl
c3RbQU5ZXSB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7CisgICAgc3Zfc2V0cHYo
KFNWKilTVChhcmd2aSsrKSwgc3ZuX21kNV9kaWdlc3RfdG9fY3N0cmluZyAoJDEsX2dsb2JhbF9w
b29sKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCwgZnJhZ21lbnQ9Im91dHB1dF9oZWxw
ZXIiKSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldCit7CisgICRyZXN1bHQgPSBvdXRwdXRfaGVs
cGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX3N0cl9uZXcyKHN2bl9t
ZDVfZGlnZXN0X3RvX2NzdHJpbmcoJDEsIF9nbG9iYWxfcG9vbCkpKTsKK30KKworLyogc3ZuX21k
NV8qIGZ1bmN0aW9ucyB0YWtlcyBjb25zdCBvbmVzIGFzIGlucHV0ICovCisldHlwZW1hcChwZXJs
NSwgaW4pIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnZXN0W10geworICAgIFNXSUdfQ29udmVydFB0
cigkaW5wdXQsICh2b2lkICoqKSYkMSwgJDFfZGVzY3JpcHRvciwgMCk7Cit9CisldHlwZW1hcChw
ZXJsNSwgYXJnb3V0KSBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtdIHt9CisKKy8qCisgICBz
dm5fdHhkZWx0YV9zZW5kX3N0cmVhbSgpIHVzZXMgKmRpZ2VzdCBub3QgZGlnZXN0W10gLgorICAg
c3ZuX3R4ZGVsdGFfYXBwbHkoKSB1c2VzICpyZXN1bHRfZGlnZXN0IG5vdCBkaWdlc3RbXSAuCisq
LworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9kaWdl
c3QgeworICAgICQxID0gKHVuc2lnbmVkIGNoYXIgKilhcHJfcGFsbG9jKF9nbG9iYWxfcG9vbCwg
QVBSX01ENV9ESUdFU1RTSVpFKTsKK30KKworJXR5cGVtYXAocGVybDUsIGFyZ291dCkgdW5zaWdu
ZWQgY2hhciAqcmVzdWx0X2RpZ2VzdCB7CisgICAgU1QoYXJndmkpID0gc3ZfbmV3bW9ydGFsKCk7
CisgICAgU1QoYXJndmkrKykgPSBzdm5fc3dpZ19wbF9mcm9tX21kNSgkMSk7Cit9CisKKyVhcHBs
eSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlldIHsKKyAgICB1bnNpZ25lZCBjaGFyICpkaWdlc3QK
K307CisKKyNpZm5kZWYgU1dJR1BFUkwKKyVhcHBseSB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtBTlld
IHsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfZGlnZXN0Cit9OworI2VuZGlmCisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgIHVzZWZ1bCBjb252ZXJ0b3JzIGZvciBzdm5fb3B0X3JldmlzaW9uX3QK
KyovCisldHlwZW1hcChwZXJsNSwgaW4pIHN2bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3Jl
dmlzaW9uX3QgcmV2KSB7CisgICAgJDEgPSAmcmV2OworICAgIGlmICgkaW5wdXQgPT0gTlVMTCB8
fCAkaW5wdXQgPT0gJlBMX3N2X3VuZGVmIHx8ICFTdk9LKCRpbnB1dCkpIHsKKyAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX3Vuc3BlY2lmaWVkOworICAgIH0KKyAgICBlbHNlIGlm
IChzdl9pc29iamVjdCgkaW5wdXQpICYmIHN2X2Rlcml2ZWRfZnJvbSgkaW5wdXQsICJfcF9zdm5f
b3B0X3JldmlzaW9uX3QiKSkgeworICAgICAgICBTV0lHX0NvbnZlcnRQdHIoJGlucHV0LCAodm9p
ZCAqKikmJDEsICQxX2Rlc2NyaXB0b3IsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChsb29rc19s
aWtlX251bWJlcigkaW5wdXQpKSB7CisgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lv
bl9udW1iZXI7CisgICAgICAgIHJldi52YWx1ZS5udW1iZXIgPSBTdklWKCRpbnB1dCk7CisgICAg
fQorICAgIGVsc2UgaWYgKFN2UE9LKCRpbnB1dCkpIHsKKyAgICAgICAgY2hhciAqaW5wdXQgPSBT
dlBWX25vbGVuKCRpbnB1dCk7CisgICAgICAgIGlmIChzdHJjYXNlY21wKGlucHV0LCAiQkFTRSIp
ID09IDApCisgICAgICAgICAgICByZXYua2luZCA9IHN2bl9vcHRfcmV2aXNpb25fYmFzZTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChpbnB1dCwgIkhFQUQiKSA9PSAwKQorICAgICAgICAg
ICAgcmV2LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2hlYWQ7CisgICAgICAgIGVsc2UgaWYgKHN0
cmNhc2VjbXAoaW5wdXQsICJXT1JLSU5HIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0g
c3ZuX29wdF9yZXZpc2lvbl93b3JraW5nOworICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKGlu
cHV0LCAiQ09NTUlUVEVEIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9y
ZXZpc2lvbl9jb21taXR0ZWQ7CisgICAgICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoaW5wdXQsICJQ
UkVWIikgPT0gMCkKKyAgICAgICAgICAgIHJldi5raW5kID0gc3ZuX29wdF9yZXZpc2lvbl9wcmV2
aW91czsKKyAgICAgICAgZWxzZSBpZiAoKmlucHV0ID09ICd7JykgeworICAgICAgICAgICAgc3Zu
X2Jvb2xlYW5fdCBtYXRjaGVkOworICAgICAgICAgICAgYXByX3RpbWVfdCB0bTsKKyAgICAgICAg
ICAgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgICAgICAgICAgIGNoYXIgKmVuZCA9IHN0cmNocihp
bnB1dCwnfScpOworICAgICAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgICAgICAgU1dJR19j
cm9haygidW5rbm93biBvcHRfcmV2aXNpb25fdCB0eXBlIik7CisgICAgICAgICAgICAqZW5kID0g
J1wwJzsKKyAgICAgICAgICAgIGVyciA9IHN2bl9wYXJzZV9kYXRlICgmbWF0Y2hlZCwgJnRtLCBp
bnB1dCArIDEsIGFwcl90aW1lX25vdygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN2bl9zd2lnX3BsX21ha2VfcG9vbCAoKFNWICopTlVMTCkpOworICAgICAgICAgICAgaWYg
KGVycikgeworICAgICAgICAgICAgICAgIHN2bl9lcnJvcl9jbGVhciAoZXJyKTsKKyAgICAgICAg
ICAgICAgICBTV0lHX2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgICAgICAgICBTV0lH
X2Nyb2FrKCJ1bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKKworICAgICAgICAgICAgcmV2
LmtpbmQgPSBzdm5fb3B0X3JldmlzaW9uX2RhdGU7CisgICAgICAgICAgICByZXYudmFsdWUuZGF0
ZSA9IHRtOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFNXSUdfY3JvYWsoInVua25vd24g
b3B0X3JldmlzaW9uX3QgdHlwZSIpOworICAgIH0gZWxzZQorICAgICAgICBTV0lHX2Nyb2FrKCJ1
bmtub3duIG9wdF9yZXZpc2lvbl90IHR5cGUiKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4pIHN2
bl9vcHRfcmV2aXNpb25fdCAqIChzdm5fb3B0X3JldmlzaW9uX3QgcmV2KSB7CisgICQxID0gJnJl
djsKKyAgc3ZuX3N3aWdfcmJfc2V0X3JldmlzaW9uKCZyZXYsICRpbnB1dCk7Cit9CisKKy8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqZGlyZW50cworICAgc3ZuX2NsaWVudF9scygp
CisgICBzdm5faW9fZ2V0X2RpcmVudHMoKQorICAgc3ZuX3JhIGdldF9kaXIoKQorKi8KKworJXR5
cGVtYXAocHl0aG9uLGluLG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9o
YXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChweXRob24sYXJnb3V0LGZyYWdtZW50PSJ0X291dHB1
dF9oZWxwZXIiKSBhcHJfaGFzaF90ICoqZGlyZW50cyB7CisgICRyZXN1bHQgPSB0X291dHB1dF9o
ZWxwZXIoJHJlc3VsdCwgc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKCokMSwgCisgICAgJGRlc2Ny
aXB0b3Ioc3ZuX2RpcmVudF90ICopLCBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wpKTsKK30KKwor
JXR5cGVtYXAocGVybDUsaW4sbnVtaW5wdXRzPTApIGFwcl9oYXNoX3QgKipkaXJlbnRzID0gYXBy
X2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHBlcmw1LGFyZ291dCkgYXByX2hhc2hfdCAqKmRp
cmVudHMgeworICAgIFNUKGFyZ3ZpKyspID0gc3ZuX3N3aWdfcGxfY29udmVydF9oYXNoCisJKCok
MSwgJGRlc2NyaXB0b3Ioc3ZuX2RpcmVudF90ICopKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4s
IG51bWlucHV0cz0wKSBhcHJfaGFzaF90ICoqZGlyZW50cyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7
CisldHlwZW1hcChydWJ5LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hh
c2hfdCAqKmRpcmVudHMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3N3aWdfcmJfYXByX2hhc2hfdG9faGFzaF9zd2ln
X3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiQxLCAic3ZuX2RpcmVudF90ICoi
KSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoqbG9ja3MKKyAgIHN2
bl9jbGllbnRfbHMzKCkKKyAgIHN2bl9yZXBvc19mc19nZXRfbG9ja3MoKQorICAgc3ZuX3JhX2dl
dF9sb2NrcygpCisqLworCisldHlwZW1hcChydWJ5LCBpbiwgbnVtaW5wdXRzPTApIGFwcl9oYXNo
X3QgKipsb2NrcyA9IGFwcl9oYXNoX3QgKipPVVRQVVQ7CisldHlwZW1hcChydWJ5LCBhcmdvdXQs
IGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2hhc2hfdCAqKmxvY2tzCit7CisgICRyZXN1
bHQgPSBvdXRwdXRfaGVscGVyKCRyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190eXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCokMSwgInN2bl9sb2NrX3QgKiIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25zCisgICBzdm5fcmVwb3Nf
dHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3JhX2dldF9sb2NhdGlvbnMoKQorKi8KKwor
JXR5cGVtYXAocnVieSwgaW4pIGFwcl9hcnJheV9oZWFkZXJfdCAqbG9jYXRpb25fcmV2aXNpb25z
Cit7CisgICQxID0gc3ZuX3N3aWdfcmJfYXJyYXlfdG9fYXByX2FycmF5X3Jldm51bSgkaW5wdXQs
IF9nbG9iYWxfcG9vbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcHJfaGFzaF90ICoq
bG9jYXRpb25zCisgICBzdm5fcmVwb3NfdHJhY2Vfbm9kZV9sb2NhdGlvbnMoKQorICAgc3ZuX3Jh
X2dldF9sb2NhdGlvbnMoKQorKi8KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBh
cHJfaGFzaF90ICoqbG9jYXRpb25zID0gYXByX2hhc2hfdCAqKk9VVFBVVDsKKyV0eXBlbWFwKHJ1
YnksIGFyZ291dCkgYXByX2hhc2hfdCAqKmxvY2F0aW9ucworeworICAkcmVzdWx0ID0gc3ZuX3N3
aWdfcmJfYXByX3Jldm51bV9rZXlfaGFzaF90b19oYXNoX3N0cmluZygqJDEpOworfQorCisvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgU3BlY2lhbCBib29sZWFuIG1hcHBpbmcgZm9yIHJ1YnkuCisqLwor
CisldHlwZW1hcChydWJ5LCBpbikgc3ZuX2Jvb2xlYW5fdCAiJDEgPSBSVEVTVCgkaW5wdXQpOyI7
CisldHlwZW1hcChydWJ5LCBvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgc3ZuX2Jvb2xl
YW5fdAoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAkMSA/IFF0cnVlIDog
UWZhbHNlKTsKK30KKworJXR5cGVtYXAocnVieSwgaW4sIG51bWlucHV0cz0wKSBzdm5fYm9vbGVh
bl90ICogKHN2bl9ib29sZWFuX3QgdGVtcCkKK3sKKyAgJDEgPSAmdGVtcDsKK30KKworJXR5cGVt
YXAocnVieSwgYXJnb3V0LCBmcmFnbWVudD0ib3V0cHV0X2hlbHBlciIpIHN2bl9ib29sZWFuX3Qg
KgoreworICAkcmVzdWx0ID0gb3V0cHV0X2hlbHBlcigkcmVzdWx0LCAqJDEgPyBRdHJ1ZSA6IFFm
YWxzZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBIYW5kbGUgcHl0aG9uIHRocmVhZCBs
b2NraW5nLgorCisgICBTd2lnIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc3BlY2lmeSBhIGxhbmd1YWdl
IGluIHRoZSAlZXhjZXB0aW9uIGNvbW1hbmQsCisgICBzbyB3ZSBoYXZlIHRvIHVzZSAjaWZkZWZz
IGZvciB0aGUgcHl0aG9uLXNwZWNpZmljIHBhcnRzLgorKi8KKworJWV4Y2VwdGlvbiB7CisjaWZk
ZWYgU1dJR1BZVEhPTgorICAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworI2VuZGlm
CisgICAgJGFjdGlvbgorI2lmZGVmIFNXSUdQWVRIT04KKyAgICBzdm5fc3dpZ19weV9hY3F1aXJl
X3B5X2xvY2soKTsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBoYW5kbGUg
Y29uZmlnIGFuZCBmc19jb25maWcgaW4gc3ZuX3tmcyxyZXBvc31fY3JlYXRlCisqLworCisKKyV0
eXBlbWFwKHJ1YnksIGluKSBhcHJfaGFzaF90ICpjb25maWcgKGFwcl9oYXNoX3QgKnRlbXApCit7
CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEgPSBOVUxMOworICB9IGVsc2UgeworICAg
ICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFzaF9zd2lnX3R5cGUoJGlucHV0LCAic3Zu
X2NvbmZpZ190ICoiLCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisldHlwZW1hcChydWJ5LCBpbikg
YXByX2hhc2hfdCAqZnNfY29uZmlnCit7CisgIGlmIChOSUxfUCgkaW5wdXQpKSB7CisgICAgJDEg
PSBOVUxMOworICB9IGVsc2UgeworICAgICQxID0gc3ZuX3N3aWdfcmJfaGFzaF90b19hcHJfaGFz
aF9zdHJpbmcoJGlucHV0LCBfZ2xvYmFsX3Bvb2wpOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5Lmgi
CisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIKKyNl
bmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxhcHJf
eGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5jbHVk
ZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX3R5cGVzX2guc3dnCmRpZmYgLU51ciBzdWJ2
ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdf
cHkvc3dpZ3V0aWxfcHkuYyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMKLS0tIHN1YnZlcnNpb24t
MS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2ln
dXRpbF9weS5jCTIwMDYtMDMtMDUgMjA6NTU6MTQuMDAwMDAwMDAwICswMDAwCisrKyBzdWJ2ZXJz
aW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2ln
X3B5L3N3aWd1dGlsX3B5LmMJMjAwNi0wNy0wNSAwMTowNTo0My4wMDAwMDAwMDAgKzAxMDAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhcHJfcG9ydGFibGUuaD4KICNpbmNsdWRlIDxhcHJf
dGhyZWFkX3Byb2MuaD4KIAorI2luY2x1ZGUgInN2bl9jbGllbnQuaCIKICNpbmNsdWRlICJzdm5f
c3RyaW5nLmgiCiAjaW5jbHVkZSAic3ZuX29wdC5oIgogI2luY2x1ZGUgInN2bl9kZWx0YS5oIgpA
QCAtNzIsMTEgKzczLDEzIEBACiAjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSwogICBQeVRocmVh
ZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAKLSAgaWYgKF9zYXZlZF90aHJlYWRfa2V5ID09IE5VTEwp
IHsKLSAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9wLWxldmVsIHBvb2wgZm9yIHRoaXMg
aXMgcHJldHR5IHN0dXBpZC4gKi8KLSAgICBhcHJfcG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRf
cG9vbCwgTlVMTCk7Ci0gICAgYXByX3RocmVhZGtleV9wcml2YXRlX2NyZWF0ZSgmX3NhdmVkX3Ro
cmVhZF9rZXksIE5VTEwsIF9zYXZlZF90aHJlYWRfcG9vbCk7Ci0gIH0KKyAgaWYgKF9zYXZlZF90
aHJlYWRfa2V5ID09IE5VTEwpCisgICAgeworICAgICAgLyogT2J2aW91c2x5LCBjcmVhdGluZyBh
IHRvcC1sZXZlbCBwb29sIGZvciB0aGlzIGlzIHByZXR0eSBzdHVwaWQuICovCisgICAgICBhcHJf
cG9vbF9jcmVhdGUoJl9zYXZlZF90aHJlYWRfcG9vbCwgTlVMTCk7CisgICAgICBhcHJfdGhyZWFk
a2V5X3ByaXZhdGVfY3JlYXRlKCZfc2F2ZWRfdGhyZWFkX2tleSwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVkX3RocmVhZF9wb29sKTsKKyAgICB9CiAKICAg
dGhyZWFkX3N0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsKICAgYXByX3RocmVhZGtleV9wcml2
YXRlX3NldCh0aHJlYWRfc3RhdGUsIF9zYXZlZF90aHJlYWRfa2V5KTsKQEAgLTEwMyw2ICsxMDYs
OCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2wgPSBOVUxMOwog
c3RhdGljIGNoYXIgYXNzZXJ0VmFsaWRbXSA9ICJhc3NlcnRfdmFsaWQiOwogc3RhdGljIGNoYXIg
cGFyZW50UG9vbFtdID0gIl9wYXJlbnRfcG9vbCI7CitzdGF0aWMgY2hhciBhZGRPd25lZFJlZltd
ID0gIl9hZGRfb3duZWRfcmVmIjsKK3N0YXRpYyBjaGFyIHJlbW92ZU93bmVkUmVmW10gPSAiX3Jl
bW92ZV9vd25lZF9yZWYiOwogc3RhdGljIGNoYXIgd3JhcFtdID0gIl93cmFwIjsKIHN0YXRpYyBj
aGFyIHVud3JhcFtdID0gIl91bndyYXAiOwogc3RhdGljIGNoYXIgc2V0UGFyZW50UG9vbFtdID0g
InNldF9wYXJlbnRfcG9vbCI7CkBAIC0xMjIsNyArMTI3LDcgQEAKIH0KIAogLyogU2V0IHRoZSBh
cHBsaWNhdGlvbiBwb29sICovCi12b2lkIHN2bl9zd2lnX3B5X3NldF9hcHBsaWNhdGlvbl9wb29s
KFB5T2JqZWN0ICpweV9wb29sLCBhcHJfcG9vbF90ICpwb29sKSAKK3ZvaWQgc3ZuX3N3aWdfcHlf
c2V0X2FwcGxpY2F0aW9uX3Bvb2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wp
CiB7CiAgIF9nbG9iYWxfcG9vbCA9IHBvb2w7CiAgIF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9
IHB5X3Bvb2w7CkBAIC0xNDcsNTUgKzE1MiwxMDYgQEAKIHsKICAgUHlPYmplY3QgKnJlc3VsdDsK
IAotICBpZiAoKnByb3h5ICE9IE5VTEwpIHsKLSAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAg
ICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygqcHJveHksIHNldFBhcmVudFBvb2wpKSB7Ci0g
ICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKnByb3h5LCBzZXRQYXJlbnRQb29s
LCBlbXB0eVR1cGxlKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgICAg
cmV0dXJuIDE7CisgIGlmICgqcHJveHkgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAocG9vbCA9
PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
KnByb3h5LCBzZXRQYXJlbnRQb29sKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgqcHJveHksIHNldFBhcmVudFBvb2wsIGVtcHR5VHVw
bGUpOworICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQgPSBQ
eU9iamVjdF9DYWxsTWV0aG9kKHBvb2wsIHdyYXAsIG9iamVjdFR1cGxlLCAqcHJveHkpOworICAg
ICAgICAgIFB5X0RFQ1JFRigqcHJveHkpOworICAgICAgICAgICpwcm94eSA9IHJlc3VsdDsKICAg
ICAgICAgfQotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChwb29sLCB3cmFwLCBvYmplY3RU
dXBsZSwgKnByb3h5KTsKLSAgICAgIFB5X0RFQ1JFRigqcHJveHkpOwotICAgICAgKnByb3h5ID0g
cmVzdWx0OwogICAgIH0KLSAgfQogCiAgIHJldHVybiAwOwogfQorCisvKiBHZXQgdGhlIHBhcmVu
dCBwb29sIG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlv
bgorICogcG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVu
Y2UhICovCitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkK
K3sKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJv
eHksIHBhcmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJT
dHJpbmcocHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29s
OworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZl
cmVuY2UnIGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYg
b2xkUmVmIGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94
eSwgaXQgaXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl
ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOwor
ICBQeU9iamVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xk
UmVmICE9IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlf
cG9vbCwgcmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRl
bXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RF
Q1JFRih0ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0
ZW1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVw
bGUsIG5ld1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7
Cit9CiAMCiAvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLwogI2RlZmluZSBzdm5fc3dp
Z19UeXBlUXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKIAogLyoqIFdyYXBwZXIgZm9yIFNXSUdf
TmV3UG9pbnRlck9iaiAqLwotUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAq
b2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCitQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRl
ck9iaih2b2lkICpvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUHlPYmplY3QgKnBvb2wpCiB7CiAgIFB5T2JqZWN0ICpwcm94eSA9IFNX
SUdfTmV3UG9pbnRlck9iaihvYmosIHR5cGUsIDApOwogCi0gIGlmIChwcm94eSA9PSBOVUxMKSB7
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmIChwcm94eV9zZXRfcG9vbCgmcHJveHks
IHBvb2wpKSB7Ci0gICAgUHlfREVDUkVGKHByb3h5KTsKKyAgaWYgKHByb3h5ID09IE5VTEwpCiAg
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KKworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29s
KSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQogCiAgIHJldHVybiBwcm94eTsKIH0KIAogLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmos
IGV4Y2VwdCBhIHN0cmluZyBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCi1zdGF0aWMg
UHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBj
aGFyICp0eXBlLCAKK3N0YXRpYyBQeU9iamVjdCAqc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmlu
Zyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCiB7CiAgIHN3aWdfdHlwZV9p
bmZvICp0eXBlaW5mbyA9IHN2bl9zd2lnX1R5cGVRdWVyeSh0eXBlKTsKLSAgaWYgKHR5cGVpbmZv
ID09IE5VTEwpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90
IGZpbmQgcmVxdWlyZWQgdHlwZW9iamVjdCIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlm
ICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKICAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5mbyBhdCBz
b21lIHBvaW50PyAqLwogICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIsIHR5cGVp
bmZvLCBweV9wb29sKTsKIH0KQEAgLTIwMywyMCArMjU5LDIxIEBACiAvKiogV3JhcHBlciBmb3Ig
U1dJR19Db252ZXJ0UHRyICovCiBpbnQgc3ZuX3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5w
dXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9pbmZvICp0eXBlKQogewotICBpZiAoUHlPYmplY3Rf
SGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKSB7Ci0gICAgUHlPYmplY3QgKnJlc3Vs
dCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsK
LSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBQ
eV9ERUNSRUYocmVzdWx0KTsKLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1
dCwgdW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53
cmFwLCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJu
IDE7CisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisg
ICAgeworICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQs
IGFzc2VydFZhbGlkLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIGlmIChQ
eU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAg
IGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihp
bnB1dCk7CiAgICAgfQotICAgIFB5X0RFQ1JFRihpbnB1dCk7Ci0gIH0KKwogICByZXR1cm4gU1dJ
R19Db252ZXJ0UHRyKGlucHV0LCBvYmosIHR5cGUsIFNXSUdfUE9JTlRFUl9FWENFUFRJT04gfCAw
KTsKIH0KIApAQCAtMjMxLDMxICsyODgsMjggQEAKIHZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIo
dm9pZCAqaW5wdXQsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpCiB7Ci0gIGlmIChQeU9iamVjdF9I
YXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOwot
ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7CisgIGlmIChQeU9i
amVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCBhc3NlcnRWYWxpZCkpCisgICAgeworICAgICAgUHlP
YmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW5wdXQsIGFzc2VydFZhbGlkLCBl
bXB0eVR1cGxlKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHJlc3Vs
dCk7Ci0gIH0KLSAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkgewotICAgIGlmIChQeU9iamVjdF9IYXNB
dHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKSkgewotICAgICAgKnB5X3Bvb2wgPSBQeU9iamVj
dF9HZXRBdHRyU3RyaW5nKGlucHV0LCBwYXJlbnRQb29sKTsKLSAgICAgIFB5X0RFQ1JFRigqcHlf
cG9vbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICpweV9wb29sID0gX2dsb2JhbF9zdm5fc3dpZ19w
eV9wb29sOwotICAgIH0KLSAgfQotICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwg
dW53cmFwKSkgewotICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgdW53cmFw
LCBlbXB0eVR1cGxlKTsKLSAgICBpZiAoaW5wdXQgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5V
TEw7CisKKyAgaWYgKHB5X3Bvb2wgIT0gTlVMTCkKKyAgICAqcHlfcG9vbCA9IHByb3h5X2dldF9w
b29sKChQeU9iamVjdCAqKSBpbnB1dCk7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
aW5wdXQsIHVud3JhcCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9k
KGlucHV0LCB1bndyYXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKSBpbnB1dCk7
CiAgICAgfQotICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOwotICB9CisKICAgcmV0
dXJuIFNXSUdfTXVzdEdldFB0cihpbnB1dCwgdHlwZSwgYXJnbnVtLCBTV0lHX1BPSU5URVJfRVhD
RVBUSU9OIHwgMCk7CiB9Ci0gIAorCiAMCiAvKioqIEN1c3RvbSBTdWJ2ZXJzaW9uRXhjZXB0aW9u
IHN0dWZmcy4gKioqLwogCkBAIC0yODMsNyArMzM3LDcgQEAKIH0KIAogdm9pZCBzdm5fc3dpZ19w
eV9zdm5fZXhjZXB0aW9uKHN2bl9lcnJvcl90ICplcnIpCi17IAorewogICBQeU9iamVjdCAqZXhj
X29iLCAqYXByX2Vycl9vYjsKIAogICBpZiAoZXJyID09IE5VTEwpCkBAIC0yOTUsNyArMzQ5LDcg
QEAKICAgICByZXR1cm47CiAKICAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9u
IG9iamVjdC4gKi8KLSAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25F
eGNlcHRpb24sIChjaGFyICopInNPIiwgCisgIGV4Y19vYiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihTdWJ2ZXJzaW9uRXhjZXB0aW9uLCAoY2hhciAqKSJzTyIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UsIGFwcl9lcnJfb2IpOwogICBpZiAoZXhjX29iID09
IE5VTEwpCiAgICAgewpAQCAtMzQwLDcgKzM5NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKm1ha2Vf
b2JfZnNfcm9vdChzdm5fZnNfcm9vdF90ICpwdHIsIFB5T2JqZWN0ICpweV9wb29sKQogewogICBy
ZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9ialN0cmluZyhwdHIsICJzdm5fZnNfcm9vdF90ICoi
LCBweV9wb29sKTsKLX0gCit9CiAvKioqLwogCiAvKiBDb252ZXJzaW9uIGZyb20gUHl0aG9uIHNp
bmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCkBAIC0zNDksMjAgKzQwMywy
MiBAQAogewogICBpZiAob2IgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKLSAgaWYgKCEg
UHlTdHJpbmdfQ2hlY2sob2IpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIHN0cmluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgIGlmICghIFB5U3Ry
aW5nX0NoZWNrKG9iKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy
cm9yLCAibm90IGEgc3RyaW5nIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgIHJldHVy
biBhcHJfcHN0cmR1cChwb29sLCBQeVN0cmluZ19BU19TVFJJTkcob2IpKTsKIH0KIHN0YXRpYyBz
dm5fc3RyaW5nX3QgKm1ha2Vfc3ZuX3N0cmluZ19mcm9tX29iKFB5T2JqZWN0ICpvYiwgYXByX3Bv
b2xfdCAqcG9vbCkKIHsKICAgaWYgKG9iID09IFB5X05vbmUpCiAgICAgcmV0dXJuIE5VTEw7Ci0g
IGlmICghIFB5U3RyaW5nX0NoZWNrKG9iKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorICBpZiAo
ISBQeVN0cmluZ19DaGVjayhvYikpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj
X1R5cGVFcnJvciwgIm5vdCBhIHN0cmluZyIpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
ICByZXR1cm4gc3ZuX3N0cmluZ19jcmVhdGUoUHlTdHJpbmdfQVNfU1RSSU5HKG9iKSwgcG9vbCk7
CiB9CiAKQEAgLTM4MSwyNSArNDM3LDI4IEBACiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAg
ICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaGFz
aCk7IGhpOyBoaSA9IGFwcl9oYXNoX25leHQoaGkpKSB7CisgICAgZm9yIChoaSA9IGFwcl9oYXNo
X2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAgICAgIHsK
ICAgICAgICAgY29uc3Qgdm9pZCAqa2V5OwogICAgICAgICB2b2lkICp2YWw7CiAgICAgICAgIFB5
T2JqZWN0ICp2YWx1ZTsKIAogICAgICAgICBhcHJfaGFzaF90aGlzKGhpLCAma2V5LCBOVUxMLCAm
dmFsKTsKICAgICAgICAgdmFsdWUgPSAoKmNvbnZlcnRlcl9mdW5jKSh2YWwsIGN0eCwgcHlfcG9v
bCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBO
VUxMKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICAvKiAjIyMg
Z290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9lc24ndCB1c2UgImNvbnN0IiAqLwot
ICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIgKilrZXksIHZhbHVl
KSA9PSAtMSkgeworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKGNoYXIg
KilrZXksIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYo
dmFsdWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7
Ci0gICAgfQorICAgICAgfQogCiAgICAgcmV0dXJuIGRpY3Q7CiB9CkBAIC00NDYsNyArNTA1LDcg
QEAKICAgICAgIHVybCA9IFB5X05vbmU7CiAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAg
fQotICAgICAgICAKKwogICBpZiAoaXRlbS0+Y29weWZyb21fdXJsKQogICAgIGNmX3VybCA9IFB5
U3RyaW5nX0Zyb21TdHJpbmcoaXRlbS0+Y29weWZyb21fdXJsKTsKICAgZWxzZQpAQCAtNDU0LDcg
KzUxMyw3IEBACiAgICAgICBjZl91cmwgPSBQeV9Ob25lOwogICAgICAgUHlfSU5DUkVGKFB5X05v
bmUpOwogICAgIH0KLSAgICAgICAgCisKICAga2luZCA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPmtp
bmQpOwogICByZXYgPSBQeUludF9Gcm9tTG9uZyhpdGVtLT5yZXZpc2lvbik7CiAgIHN0YXRlID0g
UHlJbnRfRnJvbUxvbmcoaXRlbS0+c3RhdGVfZmxhZ3MpOwpAQCAtNDg1LDYgKzU0NCw1MiBAQAog
ICByZXR1cm4gY29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfc3ZuX3N0cmluZ190LCBOVUxMLCBO
VUxMKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpwcm9wYXJyYXlfdG9fZGljdChjb25zdCBhcHJf
YXJyYXlfaGVhZGVyX3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0ID0gUHlEaWN0X05l
dygpOworICAgIGludCBpOworCisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgIHJldHVybiBO
VUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewor
ICAgICAgICBzdm5fcHJvcF90IHByb3A7CisgICAgICAgIFB5T2JqZWN0ICpweV9rZXksICpweV92
YWx1ZTsKKworICAgICAgICBwcm9wID0gQVBSX0FSUkFZX0lEWChhcnJheSwgaSwgc3ZuX3Byb3Bf
dCk7CisKKyAgICAgICAgcHlfa2V5ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwcm9wLm5hbWUpOwor
ICAgICAgICBpZiAocHlfa2V5ID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKworICAg
ICAgICBpZiAocHJvcC52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBw
eV92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgICBweV92YWx1
ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCh2b2lkICopcHJvcC52YWx1ZS0+ZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Au
dmFsdWUtPmxlbik7CisgICAgICAgICAgICAgaWYgKHB5X3ZhbHVlID09IE5VTEwpCisgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihweV9rZXkpOworICAgICAgICAg
ICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAg
ICAgICAgUHlEaWN0X1NldEl0ZW0oZGljdCwgcHlfa2V5LCBweV92YWx1ZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpY3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJl
dHVybiBOVUxMOworCit9CisKIAogUHlPYmplY3QgKnN2bl9zd2lnX3B5X2xvY2F0aW9uaGFzaF90
b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCiB7CkBAIC00OTYsNyArNjAxLDcgQEAKICAgICBpZiAo
ZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZvciAoaGkgPSBhcHJf
aGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4dChoaSkpIAorICAg
IGZvciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hf
bmV4dChoaSkpCiAgICAgICB7CiAgICAgICAgIGNvbnN0IHZvaWQgKms7CiAgICAgICAgIHZvaWQg
KnY7CkBAIC01MTAsMTIgKzYxNSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAg
ICAgICAgfQogICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsK
LSAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwp
CisgICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQ
eV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgPT0gLTEpIAorICAgICAg
ICAgIH0KKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgdmFsdWUpID09IC0x
KQogICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAg
ICBQeV9ERUNSRUYoZGljdCk7CkBAIC01MjcsMTEgKzYzMywxMSBAQAogICAgIHJldHVybiBkaWN0
OwogfQogCi1QeU9iamVjdCAqc3ZuX3N3aWdfcHlfY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhh
c2gsIHN3aWdfdHlwZV9pbmZvICp0eXBlLCAKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0
X2hhc2goYXByX2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQogewogICByZXR1cm4g
Y29udmVydF9oYXNoKGhhc2gsIGNvbnZlcnRfdG9fc3dpZ3R5cGUsIHR5cGUsIHB5X3Bvb2wpOwot
fSAgCit9CiAKICNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1cCkgXAog
c3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXApAQCAtNTQzLDEz
ICs2NDksMTYgQEAKICAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcobmV3X3Zh
bHVlLCAic3ZuXyIgI3R5cGUgIl90ICoiLCBcCiAgICAgICBuZXdfcHlfcG9vbCk7IFwKIH0KLSAK
KwogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR4ZGVsdGFfd2luZG93LCBzdm5fdHhkZWx0YV93
aW5kb3dfZHVwKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvZ19jaGFuZ2VkX3BhdGgsIHN2
bl9sb2dfY2hhbmdlZF9wYXRoX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih3Y19zdGF0
dXMsIHN2bl93Y19kdXBfc3RhdHVzKQogREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKGxvY2ssIHN2
bl9sb2NrX2R1cCkKIERFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihhdXRoX3NzbF9zZXJ2ZXJfY2Vy
dF9pbmZvLAogICAgIHN2bl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvX2R1cCkKK0RFQ0xBUkVf
U1dJR19DT05TVFJVQ1RPUihpbmZvLCBzdm5faW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RS
VUNUT1IoY29tbWl0X2luZm8sIHN2bl9jb21taXRfaW5mb19kdXApCitERUNMQVJFX1NXSUdfQ09O
U1RSVUNUT1Iod2Nfbm90aWZ5LCBzdm5fd2NfZHVwX25vdGlmeSkKIAogc3RhdGljIFB5T2JqZWN0
ICpjb252ZXJ0X2xvZ19jaGFuZ2VkX3BhdGgodm9pZCAqdmFsdWUsIHZvaWQgKmN0eCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQpA
QCAtNTYyLDE0ICs2NzEsMTUgQEAKICAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7
CiAgICAgY2hhciAqczsKIAotICAgIHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpIHsK
KyAgICB3aGlsZSAoKHMgPSAqc3RyaW5ncysrKSAhPSBOVUxMKQorICAgICAgewogICAgICAgICBQ
eU9iamVjdCAqb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMpOwogCiAgICAgICAgIGlmIChvYiA9
PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBl
bmQobGlzdCwgb2IpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9CisgICAg
ICB9CiAKICAgICByZXR1cm4gbGlzdDsKIApAQCAtNTg0LDE2ICs2OTQsMTcgQEAKICAgYXByX2hh
c2hfdCAqaGFzaDsKICAgUHlPYmplY3QgKmtleXM7CiAgIGludCBpLCBudW1fa2V5czsKLSAgCisK
ICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1cm4gTlVMTDsKIAotICBpZiAoIVB5RGlj
dF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu
b3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgaWYgKCFQeURpY3Rf
Q2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICBo
YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29s
KTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwogICBudW1fa2V5cyA9IFB5TGlzdF9TaXpl
KGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXM7IGkrKykKQEAgLTYwNiw3ICs3MTcs
NyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgIGlmICghIChwcm9wbmFtZSAmJiBw
cm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBl
RXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJp
bmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwogICAgICAgICAgIHJldHVybiBOVUxM
OwpAQCAtNjI4LDEyICs3MzksMTMgQEAKICAgaWYgKGRpY3QgPT0gUHlfTm9uZSkKICAgICByZXR1
cm4gTlVMTDsKIAotICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgewotICAgIFB5RXJyX1NldFN0
cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBkaWN0aW9uYXJ5Iik7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KKyAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpCisgICAgeworICAgICAgUHlFcnJf
U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KIAotICBoYXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsgIAorICBo
YXNoID0gYXByX2hhc2hfbWFrZShwb29sKTsKICAga2V5cyA9IFB5RGljdF9LZXlzKGRpY3QpOwog
ICBudW1fa2V5cyA9IFB5TGlzdF9TaXplKGtleXMpOwogICBmb3IgKGkgPSAwOyBpIDwgbnVtX2tl
eXM7IGkrKykKQEAgLTY0Niw3ICs3NTgsNyBAQAogICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAg
ICAgIGlmICghIChwcm9wbmFtZSAmJiBwcm9wdmFsKSkKICAgICAgICAgewotICAgICAgICAgIFB5
RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsIAorICAgICAgICAgIFB5RXJyX1NldFN0cmlu
ZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5
IGtleXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CiAgICAgICAgICAgUHlfREVDUkVGKGtleXMp
OwogICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjY0LDI3ICs3NzYsMzAgQEAKICAgICBpbnQg
dGFyZ2xlbjsKICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXA7CiAKLSAgICBpZiAoIVB5U2Vx
dWVuY2VfQ2hlY2soc291cmNlKSkgeworICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzb3VyY2Up
KQorICAgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90
IGEgc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgICAgfQogICAg
IHRhcmdsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChzb3VyY2UpOwogICAgIHRlbXAgPSBhcHJfYXJy
YXlfbWFrZShwb29sLCB0YXJnbGVuLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CiAgICAgLyogQVBS
X0FSUkFZX0lEWCBkb2Vzbid0IGFjdHVhbGx5IGluY3JlbWVudCB0aGUgYXJyYXkgaXRlbSBjb3Vu
dAogICAgICAgIChsaWtlLCBzYXksIGFwcl9hcnJheV9wdXNoIHdvdWxkKS4gKi8KICAgICB0ZW1w
LT5uZWx0cyA9IHRhcmdsZW47Ci0gICAgd2hpbGUgKHRhcmdsZW4tLSkgeworICAgIHdoaWxlICh0
YXJnbGVuLS0pCisgICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJ
dGVtKHNvdXJjZSwgdGFyZ2xlbik7CiAgICAgICAgIGlmIChvID09IE5VTEwpCiAgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkgeworICAgICAg
ICBpZiAoIVB5U3RyaW5nX0NoZWNrKG8pKQorICAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RF
Q1JFRihvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJu
b3QgYSBzdHJpbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAg
ICAgICAgfQogICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIGNvbnN0IGNoYXIg
KikgPSBQeVN0cmluZ19BU19TVFJJTkcobyk7CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICB9
CisgICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CiB9CiAKQEAgLTY5NSwzMiArODEwLDM3IEBACiAg
ICAgaW50IHRhcmdsZW47CiAgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOwogCi0gICAgaWYg
KCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpIHsKKyAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2so
c291cmNlKSkKKyAgICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv
ciwgIm5vdCBhIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAg
IH0KICAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKICAgICB0ZW1wID0g
YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9yZXZudW1fdCkpOwogICAg
IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0
ZW0gY291bnQKICAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCiAg
ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOwotICAgIHdoaWxlICh0YXJnbGVuLS0pIHsKKyAgICB3
aGlsZSAodGFyZ2xlbi0tKQorICAgICAgewogICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVu
Y2VfR2V0SXRlbShzb3VyY2UsIHRhcmdsZW4pOwogICAgICAgICBpZiAobyA9PSBOVUxMKQogICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sobykpIHsKLSAg
ICAgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9IAor
ICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEFQ
Ul9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgc3ZuX3Jldm51bV90KSA9CiAgICAgICAgICAgICAg
IChzdm5fcmV2bnVtX3QpUHlMb25nX0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChQeUludF9DaGVjayhvKSkgewotICAgICAgICAgICAgQVBSX0FSUkFZX0lEWCh0ZW1wLCB0
YXJnbGVuLCBzdm5fcmV2bnVtX3QpID0gCisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQ
eUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRl
bXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQogICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90
KVB5SW50X0FzTG9uZyhvKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAg
ICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVn
ZXIgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAg
ICB9CiAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICB9CiAgICAgcmV0dXJuIHRlbXA7CkBAIC03
MzcsMTMgKzg1NywxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+
bmVsdHMpOwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsg
KytpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYiA9IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJh
eS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iID0KICAgICAgICAg
ICBQeVN0cmluZ19Gcm9tU3RyaW5nKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIGNvbnN0IGNoYXIg
KikpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwogICAg
ICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAgICBy
ZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTc1NywxMyArODc4LDE0IEBACiAgICAgUHlPYmpl
Y3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CiAgICAgaW50IGk7CiAKLSAgICBm
b3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpIHsKLSAgICAgICAgUHlPYmplY3QgKm9i
IAorICAgIGZvciAoaSA9IDA7IGkgPCBhcnJheS0+bmVsdHM7ICsraSkKKyAgICAgIHsKKyAgICAg
ICAgUHlPYmplY3QgKm9iCiAgICAgICAgICAgPSBQeUludF9Gcm9tTG9uZyhBUFJfQVJSQVlfSURY
KGFycmF5LCBpLCBzdm5fcmV2bnVtX3QpKTsKICAgICAgICAgaWYgKG9iID09IE5VTEwpCiAgICAg
ICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGksIG9iKTsK
LSAgICB9CisgICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiAKICAgZXJyb3I6CkBAIC03NzgsMTMg
KzkwMCwxNCBAQAogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMp
OwogICAgIGludCBpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKSB7
CisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgewogICAgICAg
ICBQeU9iamVjdCAqb2IgPSBjb252ZXJ0X3N2bl9jbGllbnRfY29tbWl0X2l0ZW1fdAogICAgICAg
ICAgIChBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fY2xpZW50X2NvbW1pdF9pdGVtX3QgKiks
IE5VTEwpOwogICAgICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgICBnb3RvIGVycm9yOwog
ICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2IpOwotICAgIH0KKyAgICAgIH0KICAg
ICByZXR1cm4gbGlzdDsKIAogICBlcnJvcjoKQEAgLTgyOSw4ICs5NTIsOCBAQAogICBQeU9iamVj
dCAqYmF0b247ICAgICAgLyogdGhlIGRpci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJh
dG9uKSAqLwogfSBpdGVtX2JhdG9uOwogCi1zdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihh
cHJfcG9vbF90ICpwb29sLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0
ICplZGl0b3IsIAorc3RhdGljIGl0ZW1fYmF0b24gKm1ha2VfYmF0b24oYXByX3Bvb2xfdCAqcG9v
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplZGl0b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYmF0b24pCiB7CiAgIGl0ZW1fYmF0
b24gKm5ld2IgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZigqbmV3YikpOwpAQCAtODQ2LDcgKzk2
OSw3IEBACiAgIHJldHVybiBuZXdiOwogfQogCi1zdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2Jh
dG9uKHZvaWQgKmJhdG9uLCAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2xvc2VfYmF0b24odm9pZCAq
YmF0b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhv
ZCkKIHsKICAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKQEAgLTkwNyw3ICsxMDMwLDcgQEAKICAg
LyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0IHRvc3MgdGhpcyBvYmplY3QgKHBy
b2JhYmx5IFB5X05vbmUpICovCiAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICBlcnIgPSBTVk5fTk9f
RVJST1I7Ci0gIAorCiAgZmluaXNoZWQ6CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygp
OwogICByZXR1cm4gZXJyOwpAQCAtMTAyOCw3ICsxMTUxLDcgQEAKICAgLyogbWFrZV9iYXRvbiB0
YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCiAgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0
b24oZGlyX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsK
LSAgCisKICBmaW5pc2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJl
dHVybiBlcnI7CkBAIC0xMDQ4LDcgKzExNzEsNyBAQAogICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg
aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCiAgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJjaGFuZ2VfZGly
X3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT3Nz
I08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAg
ICB7CkBAIC0xMTEzLDcgKzEyMzYsNyBAQAogICBpdGVtX2JhdG9uICppYiA9IHBhcmVudF9iYXRv
bjsKICAgUHlPYmplY3QgKnJlc3VsdDsKICAgc3ZuX2Vycm9yX3QgKmVycjsKLSAgCisKICAgc3Zu
X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKICAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhh
dmUgJ2NvbnN0JyBvbiB0aGUgbWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLwpAQCAtMTE1OSw3ICsx
MjgyLDcgQEAKICAgICB7CiAgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgd2lu
ZG93ICovCiAgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBm
b3JtYXQgKi8KLSAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLCAo
Y2hhciAqKSJPJiIsIAorICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRs
ZXIsIChjaGFyICopIk8mIiwKICAgICAgICAgbWFrZV9vYl90eGRlbHRhX3dpbmRvdywgd2luZG93
KTsKICAgICB9CiAKQEAgLTExNzgsNyArMTMwMSw3IEBACiAgIHJldHVybiBlcnI7CiB9CiAKLXN0
YXRpYyBzdm5fZXJyb3JfdCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sIAorc3Rh
dGljIHN2bl9lcnJvcl90ICphcHBseV90ZXh0ZGVsdGEodm9pZCAqZmlsZV9iYXRvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VfY2hlY2tzdW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hh
bmRsZXJfdCAqaGFuZGxlciwKQEAgLTEyMzgsNyArMTM2MSw3IEBACiAgIC8qICMjIyBweXRob24g
ZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KICAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImNo
YW5nZV9maWxlX3Byb3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0g
TlVMTCkKICAgICB7CkBAIC0xMjQ5LDcgKzEzNzIsNyBAQAogICAvKiB0aGVyZSBpcyBubyByZXR1
cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFibHkgUHlfTm9uZSkgKi8K
ICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgIGVyciA9IFNWTl9OT19FUlJPUjsKLSAgCisKICBmaW5p
c2hlZDoKICAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CiAgIHJldHVybiBlcnI7CkBA
IC0xNDQ2LDE5ICsxNTY5LDMwIEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzdm5fZXJy
b3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7CisgIFB5T2JqZWN0ICpw
eV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1cm4gU1ZOX05PX0VSUk9S
OworfQorCisKIHN2bl9zdHJlYW1fdCAqCiBzdm5fc3dpZ19weV9tYWtlX3N0cmVhbSAoUHlPYmpl
Y3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQogewogICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsK
IAogICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBweV9pbyAtIHRoaXMgaXMg
c2FmZSBvbmx5IGJlY2F1c2UgdGhlCi0gICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2Ug
aW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlIAorICAgKiBjYWxsZXIgbXVzdCBo
YXZlIGEgcmVmZXJlbmNlIGluIG9yZGVyIHRvIHBhc3MgdGhlIG9iamVjdCBpbnRvIHRoZQogICAg
KiBiaW5kaW5ncywgYW5kIHdlIHdpbGwgYmUgZmluaXNoZWQgd2l0aCB0aGUgcHlfaW8gb2JqZWN0
IGJlZm9yZSB3ZSByZXR1cm4KICAgICogdG8gcHl0aG9uLiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZ
IFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9yIHVzZQogICAgKiBvdmVyIG11bHRpcGxl
IGNhbGxzIGludG8gdGhlIGJpbmRpbmdzLiAqLworICBQeV9JTkNSRUYocHlfaW8pOwogICBzdHJl
YW0gPSBzdm5fc3RyZWFtX2NyZWF0ZSAocHlfaW8sIHBvb2wpOwogICBzdm5fc3RyZWFtX3NldF9y
ZWFkIChzdHJlYW0sIHJlYWRfaGFuZGxlcl9weWlvKTsKICAgc3ZuX3N0cmVhbV9zZXRfd3JpdGUg
KHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKyAgc3ZuX3N0cmVhbV9zZXRfY2xvc2UgKHN0
cmVhbSwgY2xvc2VfaGFuZGxlcl9weWlvKTsKIAogICByZXR1cm4gc3RyZWFtOwogfQpAQCAtMTQ4
MSwxMSArMTYxNSwxMSBAQAogICAgIHJldHVybjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKLSAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24s
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSIoc2lpc2lp
aSkiLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2lu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0
YXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9zdGF0
ZSwgcHJvcF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2
aXNpb24pKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9l
cnJvcigpOwpAQCAtMTUwNiw2ICsxNjQwLDQxIEBACiB9CiAKIAordm9pZCBzdm5fc3dpZ19weV9u
b3RpZnlfZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0
dXJuOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5n
IGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIg
PSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVG
KHJlc3VsdCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDot
KCAqLworICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2ln
X3B5X3JlbGVhc2VfcHlfbG9jaygpOworfQorCiB2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5j
KHZvaWQgKmJhdG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpw
YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1
cykKQEAgLTE1MzQsNyArMTcwMyw3IEBACiAgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8g
Z28uIDotKCAqLwogICBpZiAoZXJyKQogICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOwotICAgIAor
CiAgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwogfQogCkBAIC0xNTg3LDcgKzE3NTYs
NyBAQAogICAgIHJldHVybiBTVk5fTk9fRVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKCk7Ci0gIAorCiAgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTYzNyw3ICsxODA2LDcg
QEAKICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9CiAKLSAgaWYgKChyZXN1bHQgPSBQ
eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0
X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNoYXIgKikiT08mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY210X2l0ZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl
X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQpAQCAtMTY1NSw3ICsxODI0LDcgQEAKICAgICAgICps
b2dfbXNnID0gTlVMTDsKICAgICAgIGVyciA9IFNWTl9OT19FUlJPUjsKICAgICB9Ci0gIGVsc2Ug
aWYgKFB5U3RyaW5nX0NoZWNrKHJlc3VsdCkpIAorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhy
ZXN1bHQpKQogICAgIHsKICAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJp
bmdfQVNfU1RSSU5HKHJlc3VsdCkpOwogICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC0xNjkw
LDIxICsxODU5LDIzIEBACiAgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19w
eV9hY3F1aXJlX3B5X2xvY2soKTsKLSAgCisKICAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29s
KTsKLSAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkgewotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KKyAgaWYgKHB5X3Bvb2wgPT0gTlVM
TCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAg
IGdvdG8gZmluaXNoZWQ7CisgICAgfQogICBweV9yb290ID0gbWFrZV9vYl9mc19yb290KHJvb3Qs
IHB5X3Bvb2wpOwotICBpZiAocHlfcm9vdCA9PSBOVUxMKSB7Ci0gICAgUHlfREVDUkVGKHB5X3Bv
b2wpOwotICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwotICAgIGdvdG8gZmlu
aXNoZWQ7IAotICB9CisgIGlmIChweV9yb290ID09IE5VTEwpCisgICAgeworICAgICAgUHlfREVD
UkVGKHB5X3Bvb2wpOworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0Nh
bGxGdW5jdGlvbihmdW5jdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjaGFyICopIk9zTyIsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv
bihmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIg
KikiT3NPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfcm9vdCwg
cGF0aCwgcHlfcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhj
ZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzQwLDkgKzE5MTEsOSBAQAogICAgIHJldHVybiBTVk5fTk9f
RVJST1I7CiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7Ci0gIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmpl
Y3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0aCwgcmV2aXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCiAgICAgewogICAgICAgZXJyID0gY2Fs
bGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xNzcwLDE3ICsxOTQxLDE4IEBACiAgIFB5T2Jq
ZWN0ICpyZXN1bHQsICpweV9wb29sOwogICBQeU9iamVjdCAqY2hwYXRoczsKICAgc3ZuX2Vycm9y
X3QgKmVyciA9IFNWTl9OT19FUlJPUjsKLSAKKwogICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8
IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKICAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwogCiAgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCiAgIHB5X3Bvb2wgPSBtYWtlX29iX3Bvb2wo
cG9vbCk7Ci0gIGlmIChweV9wb29sID09IE5VTEwpIHsKLSAgICBlcnIgPSBjYWxsYmFja19leGNl
cHRpb25fZXJyb3IoKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9CisgIGlmIChweV9wb29sID09
IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7Cisg
ICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KIAogICBpZiAoY2hhbmdlZF9wYXRocykKICAgICB7
CkBAIC0xNzkzLDkgKzE5NjUsOSBAQAogICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0K
IAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHBhdGhzLCByZXYsIGF1dGhvciwg
ZGF0ZSwgbXNnLCAKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9sc3Nz
TyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocGF0aHMsIHJldiwg
YXV0aG9yLCBkYXRlLCBtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB5X3Bvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlv
bl9lcnJvcigpOwpAQCAtMTgxNCw2ICsxOTg2LDM4IEBACiAgIHJldHVybiBlcnI7CiB9CiAKK3N2
bl9lcnJvcl90ICpzdm5fc3dpZ19weV9pbmZvX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBh
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2
bl9pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOwor
CisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAg
IHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7
CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPJk8mIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgbWFrZV9vYl9pbmZvLCBpbmZv
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv
b2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkK
KyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAg
ICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5
X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQogCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf
Y2xpZW50X2JsYW1lX3JlY2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2ludDY0X3QgbGluZV9ubywK
QEAgLTE4MjYsMTYgKzIwMzAsMTYgQEAKICAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0b247CiAg
IFB5T2JqZWN0ICpyZXN1bHQ7CiAgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7Ci0g
CisKICAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkpCiAg
ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwgCisg
IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoU1ZOX0FQUl9JTlQ2NF9UX1BZQ0ZNVCAibHNzc08mIiksIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwg
YXV0aG9yLCBkYXRlLCBsaW5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgImxzc3NPJiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lX25vLCByZXZpc2lvbiwgYXV0aG9yLCBkYXRlLCBsaW5l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBv
b2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJv
cigpOwpAQCAtMTg3MCw5ICsyMDc0LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNzbE8mIiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwg
bWF5X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic3NsTyYi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgdXNlcm5hbWUs
IG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i
X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw
dGlvbl9lcnJvcigpOwpAQCAtMTg4Miw3ICsyMDg2LDcgQEAKICAgICAgIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKnRt
cF9jcmVkcyA9IE5VTEw7Ci0gICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmco
cmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRzLCAKKyAgICAgICAgICBpZiAoc3ZuX3N3aWdfQ29u
dmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAg
ICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfc2ltcGxlX3Qg
KiIpOwpAQCAtMTkyMSw5ICsyMTI1LDkgQEAKIAogICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKIAotICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLCAK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5X3NhdmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwp
CiAgICAgewogICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CkBAIC0xOTMz
LDcgKzIxMzcsNyBAQAogICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQogICAgICAgICB7CiAg
ICAgICAgICAgc3ZuX2F1dGhfY3JlZF91c2VybmFtZV90ICp0bXBfY3JlZHMgPSBOVUxMOwotICAg
ICAgICAgIGlmIChzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nKHJlc3VsdCwgKHZvaWQgKiopJnRt
cF9jcmVkcywgCisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcocmVzdWx0
LCAodm9pZCAqKikmdG1wX2NyZWRzLAogICAgICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3Vz
ZXJuYW1lX3QgKiIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2Nv
bnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIik7CkBAIC0xOTc0LDcg
KzIxNzgsNyBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwogCi0gIGlmICgo
cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJzbE8mbE8m
IiwgCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hh
ciAqKSJzbE8mbE8mIiwKICAgICAgICAgICAgICAgICAgIHJlYWxtLCBmYWlsdXJlcywgbWFrZV9v
Yl9hdXRoX3NzbF9zZXJ2ZXJfY2VydF9pbmZvLAogICAgICAgICAgICAgICAgICAgY2VydF9pbmZv
LCBtYXlfc2F2ZSwgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKICAgICB7CkBAIC0xOTg2
LDcgKzIxOTAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2Vy
dmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0Nv
bnZlcnRQdHJTdHJpbmcKLSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVk
cywgCisgICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAg
ICAgICAgICAic3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IKQEAgLTIwMjQs
OSArMjIyOCw5IEBACiAKICAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CiAKLSAgaWYg
KChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwgCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQogICAgIHsKICAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOwpAQCAtMjAzNyw3ICsyMjQxLDcgQEAK
ICAgICAgICAgewogICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKnRt
cF9jcmVkcyA9IE5VTEw7CiAgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcK
LSAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywgCisgICAgICAgICAg
ICAgIChyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3JlZHMsCiAgICAgICAgICAgICAgICAic3ZuX2F1
dGhfY3JlZF9zc2xfY2xpZW50X2NlcnRfdCAqIikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3ZuX2F1dGhfY3JlZF9zc2xfY2xpZW50
X2NlcnRfdCAqIik7CkBAIC0yMDc1LDkgKzIyNzksOSBAQAogCiAgIHN2bl9zd2lnX3B5X2FjcXVp
cmVfcHlfbG9jaygpOwogCi0gIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiki
c2xPJiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgbWF5
X3NhdmUsIAorICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPJiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBtYXlfc2F2ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg
PT0gTlVMTCkKICAgICB7CiAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
QEAgLTIwODgsNyArMjI5Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICBzdm5fYXV0aF9jcmVk
X3NzbF9jbGllbnRfY2VydF9wd190ICp0bXBfY3JlZHMgPSBOVUxMOwogICAgICAgICAgIGlmIChz
dm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5nCi0gICAgICAgICAgICAgIChyZXN1bHQsICh2b2lkICoq
KSZ0bXBfY3JlZHMsIAorICAgICAgICAgICAgICAocmVzdWx0LCAodm9pZCAqKikmdG1wX2NyZWRz
LAogICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKiIp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJy
b3IKQEAgLTIxMDgsMyArMjMxMiwzNzcgQEAKICAgKmNyZWQgPSBjcmVkczsKICAgcmV0dXJuIGVy
cjsKIH0KKworLyogc3ZuX3JhX2NhbGxiYWNrc190ICovCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgor
cmFfY2FsbGJhY2tzX29wZW5fdG1wX2ZpbGUoYXByX2ZpbGVfdCAqKmZwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAqY2FsbGJhY2tzID0gKFB5
T2JqZWN0ICopY2FsbGJhY2tfYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJv
cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2Nr
KCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGNhbGxiYWNrcywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3Blbl90bXBfZmlsZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkK
KyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9Cisg
IGVsc2UgaWYgKHJlc3VsdCA9PSBQeV9Ob25lKQorICAgIHsKKyAgICAgICpmcCA9IE5VTEw7Cisg
ICAgfQorICBlbHNlIAorICAgIHsKKyAgICAgICpmcCA9IHN2bl9zd2lnX3B5X21ha2VfZmlsZShy
ZXN1bHQsIHBvb2wpOworICAgICAgaWYgKCpmcCA9PSBOVUxMKQorICAgICAgIHsKKyAgICAgIAkg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgIH0KKyAgICB9CisKKyAg
UHlfWERFQ1JFRihyZXN1bHQpOworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAg
cmV0dXJuIGVycjsKK30KKwordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2
bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq
ZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bv
b2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IHN2bl9yYV9jcmVhdGVfY2FsbGJh
Y2tzKGNhbGxiYWNrcywgcG9vbCk7CisgIFB5T2JqZWN0ICpweV9hdXRoX2JhdG9uOworCisgIGlm
IChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAoKmNhbGxiYWNrcyktPm9wZW5fdG1wX2ZpbGUgPSByYV9j
YWxsYmFja3Nfb3Blbl90bXBfZmlsZTsKKworICBweV9hdXRoX2JhdG9uID0gUHlPYmplY3RfR2V0
QXR0clN0cmluZyhweV9jYWxsYmFja3MsICJhdXRoX2JhdG9uIik7CisKKyAgaWYgKHN2bl9zd2ln
X0NvbnZlcnRQdHJTdHJpbmcocHlfYXV0aF9iYXRvbiwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2b2lkICoqKSYoKCpjYWxsYmFja3MpLT5hdXRoX2JhdG9uKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN2bl9hdXRoX2JhdG9uX3QgKiIpKSAKKyAgICB7Cisg
ICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoInN2bl9hdXRoX2JhdG9uX3QgKiIpOwor
ICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihlcnIpOworICAgICAgUHlfREVDUkVGKHB5
X2F1dGhfYmF0b24pOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisgIFB5X1hERUNSRUYocHlf
YXV0aF9iYXRvbik7CisKKyAgKmJhdG9uID0gcHlfY2FsbGJhY2tzOworfQorCitzdm5fZXJyb3Jf
dCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrMihjb25zdCBzdm5fY29tbWl0X2luZm9fdCAq
Y29tbWl0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9i
amVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlm
ICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVy
biBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAg
aWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk8mTyYiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX2NvbW1pdF9pbmZvLCBjb21taXRfaW5m
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBw
b29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy
b3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUp
CisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7Cisg
ICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w
eV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5
X2NvbW1pdF9jYWxsYmFjayhzdm5fcmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKQoreworICBQ
eU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vy
cm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKHJlY2VpdmVyID09IE5VTEwpIHx8
IChyZWNlaXZlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKHJlY2VpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKSJsc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdfcmV2aXNpb24sIGRhdGUsIGF1dGhvcikpID09IE5VTEwpCisgICAgeworICAgICAgZXJy
ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAg
ICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0
dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQor
CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisK
K3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAgICAg
ICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAgICAg
IHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXByX2Fy
cmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKQoreworICBQeU9iamVjdCAqaGFuZGxlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz
dWx0LCAqcHlfcmV2X3Byb3BzID0gTlVMTCwgKnB5X3Byb3BfZGlmZnMgPSBOVUxMOworICBzdm5f
ZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgoaGFuZGxlciA9PSBOVUxMKSB8
fCAoaGFuZGxlciA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2
bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIHB5X3Jldl9wcm9wcyA9IHN2bl9zd2ln
X3B5X3Byb3BoYXNoX3RvX2RpY3QocmV2X3Byb3BzKTsKKyAgaWYgKHB5X3Jldl9wcm9wcyA9PSBO
VUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigiYXByX2hhc2hf
dCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBweV9wcm9wX2RpZmZzID0gcHJv
cGFycmF5X3RvX2RpY3QocHJvcF9kaWZmcyk7CisKKyAgaWYgKHB5X3Byb3BfZGlmZnMgPT0gTlVM
TCkKKyAgICB7CisgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3IoImFwcl9hcnJheV9o
ZWFkZXJfdCAqIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICBpZiAoKHJlc3VsdCA9
IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKSJzbE9PTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXRoLCByZXYsIHB5X3Jldl9wcm9wcywgcHlfcHJvcF9kaWZmcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkg
PT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsK
KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAg
ICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisKKyAgICAg
IC8qIEZJWE1FOiBTdXBwb3J0IHJldHVybmVkIFR4RGVsdGFXaW5kb3cgb2JqZWN0IGFuZAorICAg
ICAgICogc2V0IGRlbHRhX2hhbmRsZXIgYW5kIGRlbHRhX2JhdG9uICovCisgICAgICAqZGVsdGFf
aGFuZGxlciA9IE5VTEw7CisgICAgICAqZGVsdGFfYmF0b24gPSBOVUxMOworCisgICAgICBQeV9Y
REVDUkVGKHJlc3VsdCk7CisgICAgfQorCitlcnJvcjoKKworICBQeV9YREVDUkVGKHB5X3Jldl9w
cm9wcyk7CisgIFB5X1hERUNSRUYocHlfcHJvcF9kaWZmcyk7CisKKyAgc3ZuX3N3aWdfcHlfcmVs
ZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90
ICpyZXBvcnRlcl9zZXRfcGF0aCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jv
b2xlYW5fdCBzdGFydF9lbXB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAq
cHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVy
ID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VS
Uk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaGFyICopInNldF9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjaGFyICopInNsYnNPJiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJl
c3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5f
ZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBz
dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0
aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2RlbGV0ZV9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNW
Tl9OT19FUlJPUjsKKyAgUHlPYmplY3QgKnB5X3JlcG9ydGVyID0gcmVwb3J0X2JhdG9uLCAqcmVz
dWx0OworCisgIGlmIChweV9yZXBvcnRlciA9PSBOVUxMIHx8IHB5X3JlcG9ydGVyID09IFB5X05v
bmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcmVwb3J0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJkZWxldGVf
cGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzTyYi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAg
ZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf
YmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1
bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7
Cit9CisgICAgCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2xpbmtfcGF0aCh2b2lkICpy
ZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN2bl9ib29sZWFuX3Qgc3RhcnRfZW1wdHksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZO
X05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1
bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9u
ZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf
bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImxpbmtfcGF0
aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xic08m
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHVybCwgcmV2aXNp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9lbXB0eSwgbG9j
a190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9v
bCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u
X2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0K
KworICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr
KCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpyZXBvcnRlcl9m
aW5pc2hfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9O
T19FUlJPUjsKKworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1
bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9u
ZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlf
bG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImZpbmlzaF9y
ZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyYi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29s
KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3Io
KTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgIHsKKyAgICAgIGVy
ciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgfQorCisgIFB5
X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKwor
ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX2Fib3J0X3Jl
cG9ydCh2b2lkICpyZXBvcnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsK
KworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBvcnRfYmF0b24sICpyZXN1bHQ7CisKKyAg
aWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVwb3J0ZXIgPT0gUHlfTm9uZSkKKyAgICBy
ZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9yZXBvcnRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImFib3J0X3JlcG9ydCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJPJiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM
KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K
KyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh
Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihy
ZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl
cnI7Cit9CisKK2NvbnN0IHN2bl9yYV9yZXBvcnRlcjJfdCBzd2lnX3B5X3JhX3JlcG9ydGVyMiA9
IHsKKyAgICByZXBvcnRlcl9zZXRfcGF0aCwKKyAgICByZXBvcnRlcl9kZWxldGVfcGF0aCwKKyAg
ICByZXBvcnRlcl9saW5rX3BhdGgsCisgICAgcmVwb3J0ZXJfZmluaXNoX3JlcG9ydCwKKyAgICBy
ZXBvcnRlcl9hYm9ydF9yZXBvcnQKK307CmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5v
cmlnIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24v
bGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHku
Yy5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9u
LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5
L3N3aWd1dGlsX3B5LmMub3JpZwkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApA
QCAtMCwwICsxLDI2MzQgQEAKKy8qCisgKiBzd2lndXRpbF9weS5jOiB1dGlsaXR5IGZ1bmN0aW9u
cyBmb3IgdGhlIFNXSUcgUHl0aG9uIGJpbmRpbmdzCisgKgorICogPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENv
cHlyaWdodCAoYykgMjAwMC0yMDA0IENvbGxhYk5ldC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpbGUg
Q09QWUlORywgd2hpY2gKKyAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhcyBwYXJ0IG9mIHRo
aXMgZGlzdHJpYnV0aW9uLiAgVGhlIHRlcm1zCisgKiBhcmUgYWxzbyBhdmFpbGFibGUgYXQgaHR0
cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy9saWNlbnNlLTEuaHRtbC4KKyAqIElmIG5ld2VyIHZl
cnNpb25zIG9mIHRoaXMgbGljZW5zZSBhcmUgcG9zdGVkIHRoZXJlLCB5b3UgbWF5IHVzZSBhCisg
KiBuZXdlciB2ZXJzaW9uIGluc3RlYWQsIGF0IHlvdXIgb3B0aW9uLgorICoKKyAqIFRoaXMgc29m
dHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Cisg
KiBpbmRpdmlkdWFscy4gIEZvciBleGFjdCBjb250cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSBy
ZXZpc2lvbgorICogaGlzdG9yeSBhbmQgbG9ncywgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJz
aW9uLnRpZ3Jpcy5vcmcvLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKiBUZWxsIHN3aWd1dGls
X3B5LmggdGhhdCB3ZSdyZSBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIFNW
Tl9TV0lHX1NXSUdVVElMX1BZX0MKKworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8
c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgor
CisjaW5jbHVkZSA8YXByX3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX2hhc2guaD4KKyNpbmNsdWRl
IDxhcHJfcG9ydGFibGUuaD4KKyNpbmNsdWRlIDxhcHJfdGhyZWFkX3Byb2MuaD4KKworI2luY2x1
ZGUgInN2bl9jbGllbnQuaCIKKyNpbmNsdWRlICJzdm5fc3RyaW5nLmgiCisjaW5jbHVkZSAic3Zu
X29wdC5oIgorI2luY2x1ZGUgInN2bl9kZWx0YS5oIgorI2luY2x1ZGUgInN2bl9hdXRoLmgiCisj
aW5jbHVkZSAic3ZuX3Bvb2xzLmgiCisKKyNpbmNsdWRlICJzdm5fcHJpdmF0ZV9jb25maWcuaCIg
LyogZm9yIFNWTl9BUFJfSU5UNjRfVF9QWUNGTVQgKi8KKworI2luY2x1ZGUgInN3aWdfcHl0aG9u
X2V4dGVybmFsX3J1bnRpbWUuc3dnIgorI2luY2x1ZGUgInN3aWd1dGlsX3B5LmgiCisKKwwKKwor
LyoqKiBNYW5hZ2UgdGhlIEdsb2JhbCBJbnRlcnByZXRlciBMb2NrICoqKi8KKworLyogSWYgYm90
aCBQeXRob24gYW5kIEFQUiBoYXZlIHRocmVhZHMgYXZhaWxhYmxlLCB3ZSBjYW4gb3B0aW1pemUg
b3Vyc2VsdmVzCisgKiBieSByZWxlYXNpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIHdo
ZW4gd2UgZHJvcCBpbnRvIG91ciBTVk4gY2FsbHMuCisgKgorICogSW4gc3ZuX3R5cGVzLmksIHN2
bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jayBpcyBjYWxsZWQgYmVmb3JlIGV2ZXJ5CisgKiBmdW5j
dGlvbiwgdGhlbiBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2sgaXMgY2FsbGVkIGFmdGVyIGV2
ZXJ5CisgKiBmdW5jdGlvbi4gIFNvLCBpZiB0aGVzZSBmdW5jdGlvbnMgYmVjb21lIG5vLW9wcywg
dGhlbiBQeXRob24gd2lsbAorICogc3RhcnQgdG8gYmxvY2suLi4KKyAqCisgKiBUaGUgU3VidmVy
c2lvbiBsaWJyYXJpZXMgY2FuIGJlIGFzc3VtZWQgdG8gYmUgdGhyZWFkLXNhZmUgKm9ubHkqIHdo
ZW4KKyAqIEFQUl9IQVNfVEhSRUFEIGlzIDEuICBUaGUgQVBSIHBvb2wgYWxsb2NhdGlvbnMgYXJl
bid0IHRocmVhZC1zYWZlIHVubGVzcworICogQVBSX0hBU19USFJFQUQgaXMgMS4KKyAqLworCisj
aWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgQVBSX0hBU19USFJFQURTCisjZGVmaW5lIEFDUVVJ
UkVfUFlUSE9OX0xPQ0sKKyNlbmRpZgorCisjaWZkZWYgQUNRVUlSRV9QWVRIT05fTE9DSworc3Rh
dGljIGFwcl90aHJlYWRrZXlfdCAqX3NhdmVkX3RocmVhZF9rZXkgPSBOVUxMOworc3RhdGljIGFw
cl9wb29sX3QgKl9zYXZlZF90aHJlYWRfcG9vbCA9IE5VTEw7CisjZW5kaWYKKwordm9pZCBzdm5f
c3dpZ19weV9yZWxlYXNlX3B5X2xvY2sodm9pZCkKK3sKKyNpZmRlZiBBQ1FVSVJFX1BZVEhPTl9M
T0NLCisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKworICBpZiAoX3NhdmVkX3RocmVh
ZF9rZXkgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBPYnZpb3VzbHksIGNyZWF0aW5nIGEgdG9w
LWxldmVsIHBvb2wgZm9yIHRoaXMgaXMgcHJldHR5IHN0dXBpZC4gKi8KKyAgICAgIGFwcl9wb29s
X2NyZWF0ZSgmX3NhdmVkX3RocmVhZF9wb29sLCBOVUxMKTsKKyAgICAgIGFwcl90aHJlYWRrZXlf
cHJpdmF0ZV9jcmVhdGUoJl9zYXZlZF90aHJlYWRfa2V5LCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfc2F2ZWRfdGhyZWFkX3Bvb2wpOworICAgIH0KKworICB0aHJl
YWRfc3RhdGUgPSBQeUV2YWxfU2F2ZVRocmVhZCgpOworICBhcHJfdGhyZWFka2V5X3ByaXZhdGVf
c2V0KHRocmVhZF9zdGF0ZSwgX3NhdmVkX3RocmVhZF9rZXkpOworI2VuZGlmCit9CisKK3ZvaWQg
c3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKHZvaWQpCit7CisjaWZkZWYgQUNRVUlSRV9QWVRI
T05fTE9DSworICB2b2lkICp2YWw7CisgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKKyAg
YXByX3RocmVhZGtleV9wcml2YXRlX2dldCgmdmFsLCBfc2F2ZWRfdGhyZWFkX2tleSk7CisgIHRo
cmVhZF9zdGF0ZSA9IHZhbDsKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQodGhyZWFkX3N0YXRlKTsK
KyNlbmRpZgorfQorCisKKwwKKy8qKiogQXV0b21hdGljIFBvb2wgTWFuYWdlbWVudCBGdW5jdGlv
bnMgKioqLworCisvKiBUaGUgYXBwbGljYXRpb24gcG9vbCAqLworc3RhdGljIGFwcl9wb29sX3Qg
Kl9nbG9iYWxfcG9vbCA9IE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKl9nbG9iYWxfc3ZuX3N3aWdf
cHlfcG9vbCA9IE5VTEw7CitzdGF0aWMgY2hhciBhc3NlcnRWYWxpZFtdID0gImFzc2VydF92YWxp
ZCI7CitzdGF0aWMgY2hhciBwYXJlbnRQb29sW10gPSAiX3BhcmVudF9wb29sIjsKK3N0YXRpYyBj
aGFyIGFkZE93bmVkUmVmW10gPSAiX2FkZF9vd25lZF9yZWYiOworc3RhdGljIGNoYXIgcmVtb3Zl
T3duZWRSZWZbXSA9ICJfcmVtb3ZlX293bmVkX3JlZiI7CitzdGF0aWMgY2hhciB3cmFwW10gPSAi
X3dyYXAiOworc3RhdGljIGNoYXIgdW53cmFwW10gPSAiX3Vud3JhcCI7CitzdGF0aWMgY2hhciBz
ZXRQYXJlbnRQb29sW10gPSAic2V0X3BhcmVudF9wb29sIjsKK3N0YXRpYyBjaGFyIGVtcHR5VHVw
bGVbXSA9ICIoKSI7CitzdGF0aWMgY2hhciBvYmplY3RUdXBsZVtdID0gIihPKSI7CisKKworYXBy
X3N0YXR1c190IHN2bl9zd2lnX3B5X2luaXRpYWxpemUodm9pZCkKK3sKKyAgYXByX3N0YXR1c190
IHN0YXR1czsKKworICBpZiAoKHN0YXR1cyA9IGFwcl9pbml0aWFsaXplKCkpICE9IEFQUl9TVUND
RVNTKQorICAgIHJldHVybiBzdGF0dXM7CisgIGlmIChhdGV4aXQoYXByX3Rlcm1pbmF0ZSkgIT0g
MCkKKyAgICByZXR1cm4gQVBSX0VHRU5FUkFMOworICByZXR1cm4gQVBSX1NVQ0NFU1M7Cit9CisK
Ky8qIFNldCB0aGUgYXBwbGljYXRpb24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19weV9zZXRfYXBw
bGljYXRpb25fcG9vbChQeU9iamVjdCAqcHlfcG9vbCwgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAg
X2dsb2JhbF9wb29sID0gcG9vbDsKKyAgX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sID0gcHlfcG9v
bDsKK30KKworLyogQ2xlYXIgdGhlIGFwcGxpY2F0aW9uIHBvb2wgKi8KK3ZvaWQgc3ZuX3N3aWdf
cHlfY2xlYXJfYXBwbGljYXRpb25fcG9vbCgpCit7CisgIF9nbG9iYWxfcG9vbCA9IE5VTEw7Cisg
IF9nbG9iYWxfc3ZuX3N3aWdfcHlfcG9vbCA9IE5VTEw7Cit9CisKKy8qIEdldCB0aGUgYXBwbGlj
YXRpb24gcG9vbCAqLwordm9pZCBzdm5fc3dpZ19nZXRfYXBwbGljYXRpb25fcG9vbChQeU9iamVj
dCAqKnB5X3Bvb2wsIGFwcl9wb29sX3QgKipwb29sKQoreworICAqcG9vbCA9IF9nbG9iYWxfcG9v
bDsKKyAgKnB5X3Bvb2wgPSBfZ2xvYmFsX3N2bl9zd2lnX3B5X3Bvb2w7Cit9CisKKy8qIFNldCB0
aGUgcGFyZW50IHBvb2wgb2YgYSBwcm94eSBvYmplY3QgKi8KK3N0YXRpYyBpbnQgcHJveHlfc2V0
X3Bvb2woUHlPYmplY3QgKipwcm94eSwgUHlPYmplY3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpy
ZXN1bHQ7CisKKyAgaWYgKCpwcm94eSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwb29sID09
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygq
cHJveHksIHNldFBhcmVudFBvb2wpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1
bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKCpwcm94eSwgc2V0UGFyZW50UG9vbCwgZW1wdHlUdXBs
ZSk7CisgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IFB5
T2JqZWN0X0NhbGxNZXRob2QocG9vbCwgd3JhcCwgb2JqZWN0VHVwbGUsICpwcm94eSk7CisgICAg
ICAgICAgUHlfREVDUkVGKCpwcm94eSk7CisgICAgICAgICAgKnByb3h5ID0gcmVzdWx0OworICAg
ICAgICB9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHBhcmVudCBwb29s
IG9mIGEgcHJveHkgb2JqZWN0LCBvciByZXR1cm4gdGhlIGdsb2JhbCBhcHBsaWNhdGlvbgorICog
cG9vbCBpZiBvbmUgaXMgbm90IHNldC4gIFJldHVybnMgYSBCT1JST1dFRCByZWZlcmVuY2UhICov
CitzdGF0aWMgUHlPYmplY3QgKnByb3h5X2dldF9wb29sKFB5T2JqZWN0ICpwcm94eSkKK3sKKyAg
UHlPYmplY3QgKnJlc3VsdDsKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocHJveHksIHBh
cmVudFBvb2wpKQorICAgIHsKKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmco
cHJveHksIHBhcmVudFBvb2wpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgcmVzdWx0ID0gX2dsb2JhbF9zdm5fc3dpZ19weV9wb29sOworICAg
IH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ2hhbmdlIGFuICdvd25lZCByZWZlcmVuY2Un
IGFsbG9jYXRlZCBpbiBhIHBvb2wgZnJvbSBvbGRSZWYgdG8gbmV3UmVmLgorICogSWYgb2xkUmVm
IGlzIG5vbi1OVUxMIGFuZCBwcmVzZW50IGluIHRoZSBwYXJlbnQgcG9vbCBvZiBwcm94eSwgaXQg
aXMgcmVtb3ZlZC4KKyAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9i
amVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFB5T2JqZWN0ICpuZXdSZWYpCit7CisgIFB5T2JqZWN0ICp0ZW1wOworICBQeU9i
amVjdCAqcHlfcG9vbCA9IHByb3h5X2dldF9wb29sKHByb3h5KTsKKworICBpZiAob2xkUmVmICE9
IE5VTEwpCisgICAgeworICAgICAgdGVtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocHlfcG9vbCwg
cmVtb3ZlT3duZWRSZWYsIG9iamVjdFR1cGxlLCBvbGRSZWYpOworICAgICAgaWYgKHRlbXAgPT0g
TlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRih0
ZW1wKTsKKyAgICB9CisgIGlmIChuZXdSZWYgIT0gTlVMTCkKKyAgICB7CisgICAgICB0ZW1wID0g
UHlPYmplY3RfQ2FsbE1ldGhvZChweV9wb29sLCBhZGRPd25lZFJlZiwgb2JqZWN0VHVwbGUsIG5l
d1JlZik7CisgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg
IGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisM
CisvKiBXcmFwcGVyIGZvciBTV0lHX1R5cGVRdWVyeSAqLworI2RlZmluZSBzdm5fc3dpZ19UeXBl
UXVlcnkoeCkgU1dJR19UeXBlUXVlcnkoeCkKKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfTmV3UG9p
bnRlck9iaiAqLworUHlPYmplY3QgKnN2bl9zd2lnX05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBz
d2lnX3R5cGVfaW5mbyAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5
T2JqZWN0ICpwb29sKQoreworICBQeU9iamVjdCAqcHJveHkgPSBTV0lHX05ld1BvaW50ZXJPYmoo
b2JqLCB0eXBlLCAwKTsKKworICBpZiAocHJveHkgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsK
KworICBpZiAocHJveHlfc2V0X3Bvb2woJnByb3h5LCBwb29sKSkKKyAgICB7CisgICAgICBQeV9E
RUNSRUYocHJveHkpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBwcm94
eTsKK30KKworLyoqIHN2bl9zd2lnX05ld1BvaW50ZXJPYmosIGV4Y2VwdCBhIHN0cmluZyBpcyB1
c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlICovCitzdGF0aWMgUHlPYmplY3QgKnN2bl9zd2lnX05l
d1BvaW50ZXJPYmpTdHJpbmcodm9pZCAqcHRyLCBjb25zdCBjaGFyICp0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKQor
eworICBzd2lnX3R5cGVfaW5mbyAqdHlwZWluZm8gPSBzdm5fc3dpZ19UeXBlUXVlcnkodHlwZSk7
CisgIGlmICh0eXBlaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQ
eUV4Y19UeXBlRXJyb3IsICJDYW5ub3QgZmluZCByZXF1aXJlZCB0eXBlb2JqZWN0Iik7CisgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgLyogIyMjIGNhY2hlIHRoZSBzd2lnX3R5cGVfaW5m
byBhdCBzb21lIHBvaW50PyAqLworICByZXR1cm4gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihwdHIs
IHR5cGVpbmZvLCBweV9wb29sKTsKK30KKworLyoqIFdyYXBwZXIgZm9yIFNXSUdfQ29udmVydFB0
ciAqLworaW50IHN2bl9zd2lnX0NvbnZlcnRQdHIoUHlPYmplY3QgKmlucHV0LCB2b2lkICoqb2Jq
LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSkKK3sKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmco
aW5wdXQsIGFzc2VydFZhbGlkKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlP
YmplY3RfQ2FsbE1ldGhvZChpbnB1dCwgYXNzZXJ0VmFsaWQsIGVtcHR5VHVwbGUpOworICAgICAg
aWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIFB5X0RFQ1JFRihy
ZXN1bHQpOworICAgIH0KKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoaW5wdXQsIHVud3Jh
cCkpCisgICAgeworICAgICAgaW5wdXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0LCB1bndy
YXAsIGVtcHR5VHVwbGUpOworICAgICAgaWYgKGlucHV0ID09IE5VTEwpCisgICAgICAgIHJldHVy
biAxOworICAgICAgUHlfREVDUkVGKGlucHV0KTsKKyAgICB9CisKKyAgcmV0dXJuIFNXSUdfQ29u
dmVydFB0cihpbnB1dCwgb2JqLCB0eXBlLCBTV0lHX1BPSU5URVJfRVhDRVBUSU9OIHwgMCk7Cit9
CisKKy8qKiBzdm5fc3dpZ19Db252ZXJ0UHRyLCBleGNlcHQgYSBzdHJpbmcgaXMgdXNlZCB0byBk
ZXNjcmliZSB0aGUgdHlwZSAqLworc3RhdGljIGludCBzdm5fc3dpZ19Db252ZXJ0UHRyU3RyaW5n
KFB5T2JqZWN0ICppbnB1dCwKKyAgICB2b2lkICoqb2JqLCBjb25zdCBjaGFyICp0eXBlKQorewor
ICByZXR1cm4gc3ZuX3N3aWdfQ29udmVydFB0cihpbnB1dCwgb2JqLCBzdm5fc3dpZ19UeXBlUXVl
cnkodHlwZSkpOworfQorCisvKiogV3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCit2b2lk
ICpzdm5fc3dpZ19NdXN0R2V0UHRyKHZvaWQgKmlucHV0LCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwg
aW50IGFyZ251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipweV9wb29s
KQoreworICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhpbnB1dCwgYXNzZXJ0VmFsaWQpKQor
ICAgIHsKKyAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGlucHV0
LCBhc3NlcnRWYWxpZCwgZW1wdHlUdXBsZSk7CisgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisg
IGlmIChweV9wb29sICE9IE5VTEwpCisgICAgKnB5X3Bvb2wgPSBwcm94eV9nZXRfcG9vbCgoUHlP
YmplY3QgKikgaW5wdXQpOworCisgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGlucHV0LCB1
bndyYXApKQorICAgIHsKKyAgICAgIGlucHV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnB1dCwg
dW53cmFwLCBlbXB0eVR1cGxlKTsKKyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKikgaW5wdXQpOworICAgIH0K
KworICByZXR1cm4gU1dJR19NdXN0R2V0UHRyKGlucHV0LCB0eXBlLCBhcmdudW0sIFNXSUdfUE9J
TlRFUl9FWENFUFRJT04gfCAwKTsKK30KKworDAorLyoqKiBDdXN0b20gU3VidmVyc2lvbkV4Y2Vw
dGlvbiBzdHVmZnMuICoqKi8KKworLyogR2xvYmFsIFN1YnZlcnNpb25FeGNlcHRpb24gY2xhc3Mg
b2JqZWN0LiAqLworc3RhdGljIFB5T2JqZWN0ICpTdWJ2ZXJzaW9uRXhjZXB0aW9uID0gTlVMTDsK
KworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfZXhjZXB0aW9uX3R5cGUodm9pZCkKK3sKKyAgUHlf
SU5DUkVGKFN1YnZlcnNpb25FeGNlcHRpb24pOworICByZXR1cm4gU3VidmVyc2lvbkV4Y2VwdGlv
bjsKK30KKworUHlPYmplY3QgKnN2bl9zd2lnX3B5X3JlZ2lzdGVyX2V4Y2VwdGlvbih2b2lkKQor
eworICAvKiBJZiB3ZSBoYXZlbid0IGNyZWF0ZWQgb3VyIGV4Y2VwdGlvbiBjbGFzcywgZG8gc28u
ICovCisgIGlmIChTdWJ2ZXJzaW9uRXhjZXB0aW9uID09IE5VTEwpCisgICAgeworICAgICAgU3Vi
dmVyc2lvbkV4Y2VwdGlvbiA9IFB5RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICAoKGNoYXIgKiki
bGlic3ZuLl9jb3JlLlN1YnZlcnNpb25FeGNlcHRpb24iLCBOVUxMLCBOVUxMKTsKKyAgICB9CisK
KyAgLyogUmVnYXJkbGVzcywgcmV0dXJuIHRoZSBleGNlcHRpb24gY2xhc3MuICovCisgIHJldHVy
biBzdm5fc3dpZ19weV9leGNlcHRpb25fdHlwZSgpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N2
bl9leGNlcHRpb24oc3ZuX2Vycm9yX3QgKmVycikKK3sKKyAgUHlPYmplY3QgKmV4Y19vYiwgKmFw
cl9lcnJfb2I7CisKKyAgaWYgKGVyciA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBNYWtl
IGFuIGludGVnZXIgZm9yIHRoZSBlcnJvciBjb2RlLiAqLworICBhcHJfZXJyX29iID0gUHlJbnRf
RnJvbUxvbmcoZXJyLT5hcHJfZXJyKTsKKyAgaWYgKGFwcl9lcnJfb2IgPT0gTlVMTCkKKyAgICBy
ZXR1cm47CisKKyAgLyogSW5zdGFudGlhdGUgYSBTdWJ2ZXJzaW9uRXhjZXB0aW9uIG9iamVjdC4g
Ki8KKyAgZXhjX29iID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFN1YnZlcnNpb25FeGNlcHRpb24s
IChjaGFyICopInNPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci0+bWVz
c2FnZSwgYXByX2Vycl9vYik7CisgIGlmIChleGNfb2IgPT0gTlVMTCkKKyAgICB7CisgICAgICBQ
eV9ERUNSRUYoYXByX2Vycl9vYik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIFNldCB0
aGUgImFwcl9lcnIiIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIHRvIG91ciBlcnJvciBjb2Rl
LiAqLworICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhleGNfb2IsIChjaGFyICopImFwcl9l
cnIiLCBhcHJfZXJyX29iKSA9PSAtMSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYoYXByX2Vycl9v
Yik7CisgICAgICBQeV9ERUNSRUYoZXhjX29iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
LyogRmluaXNoZWQgd2l0aCB0aGUgYXByX2VyciBvYmplY3QuICovCisgIFB5X0RFQ1JFRihhcHJf
ZXJyX29iKTsKKworICAvKiBTZXQgdGhlIGVycm9yIHN0YXRlIHRvIG91ciBleGNlcHRpb24gb2Jq
ZWN0LiAqLworICBQeUVycl9TZXRPYmplY3QoU3VidmVyc2lvbkV4Y2VwdGlvbiwgZXhjX29iKTsK
KworICAvKiBGaW5pc2hlZCB3aXRoIHRoZSBleGNfb2Igb2JqZWN0LiAqLworICBQeV9ERUNSRUYo
ZXhjX29iKTsKK30KKworCisMCisvKioqIEhlbHBlci9Db252ZXJzaW9uIFJvdXRpbmVzICoqKi8K
KworLyogRnVuY3Rpb25zIGZvciBtYWtpbmcgUHl0aG9uIHdyYXBwZXJzIGFyb3VuZCBTdWJ2ZXJz
aW9uIHN0cnVjdHMgKi8KK3N0YXRpYyBQeU9iamVjdCAqbWFrZV9vYl9wb29sKHZvaWQgKnBvb2wp
Cit7CisgIC8qIFJldHVybiBhIGJyYW5kIG5ldyBkZWZhdWx0IHBvb2wgdG8gUHl0aG9uLiBUaGlz
IHBvb2wgaXNuJ3QKKyAgICogbm9ybWFsbHkgdXNlZCBmb3IgYW55dGhpbmcuIEl0J3MganVzdCBo
ZXJlIGZvciBjb21wYXRpYmlsaXR5CisgICAqIHdpdGggU3VidmVyc2lvbiAxLjIuICovCisgIGFw
cl9wb29sX3QgKm5ld19wb29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7CisgIFB5
T2JqZWN0ICpuZXdfcHlfcG9vbCA9IHN2bl9zd2lnX05ld1BvaW50ZXJPYmoobmV3X3Bvb2wsCisg
ICAgc3ZuX3N3aWdfVHlwZVF1ZXJ5KCJhcHJfcG9vbF90ICoiKSwgX2dsb2JhbF9zdm5fc3dpZ19w
eV9wb29sKTsKKyAgKHZvaWQpIHBvb2w7IC8qIFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MgYWJv
dXQgdW51c2VkIHBhcmFtZXRlci4gKi8KKyAgcmV0dXJuIG5ld19weV9wb29sOworfQorc3RhdGlj
IFB5T2JqZWN0ICptYWtlX29iX2ZzX3Jvb3Qoc3ZuX2ZzX3Jvb3RfdCAqcHRyLCBQeU9iamVjdCAq
cHlfcG9vbCkKK3sKKyAgcmV0dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmpTdHJpbmcocHRyLCAi
c3ZuX2ZzX3Jvb3RfdCAqIiwgcHlfcG9vbCk7Cit9CisvKioqLworCisvKiBDb252ZXJzaW9uIGZy
b20gUHl0aG9uIHNpbmdsZSBvYmplY3RzIChub3QgaGFzaGVzL2xpc3RzL2V0Yy4pIHRvCisgICBT
dWJ2ZXJzaW9uIHR5cGVzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKm1ha2Vfc3RyaW5nX2Zyb21f
b2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAob2IgPT0gUHlfTm9u
ZSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2sob2IpKQorICAgIHsK
KyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzdHJpbmciKTsK
KyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIGFwcl9wc3RyZHVwKHBvb2wsIFB5
U3RyaW5nX0FTX1NUUklORyhvYikpOworfQorc3RhdGljIHN2bl9zdHJpbmdfdCAqbWFrZV9zdm5f
c3RyaW5nX2Zyb21fb2IoUHlPYmplY3QgKm9iLCBhcHJfcG9vbF90ICpwb29sKQoreworICBpZiAo
b2IgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCEgUHlTdHJpbmdfQ2hlY2so
b2IpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3Qg
YSBzdHJpbmciKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHN2bl9zdHJp
bmdfY3JlYXRlKFB5U3RyaW5nX0FTX1NUUklORyhvYiksIHBvb2wpOworfQorCisKKy8qKiovCisK
K3N0YXRpYyBQeU9iamVjdCAqY29udmVydF9oYXNoKGFwcl9oYXNoX3QgKmhhc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqICgqY29udmVydGVyX2Z1bmMpKHZvaWQg
KnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9wb29sKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKmN0eCwgUHlPYmplY3QgKnB5X3Bvb2wpCit7CisgICAg
YXByX2hhc2hfaW5kZXhfdCAqaGk7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7
CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZv
ciAoaGkgPSBhcHJfaGFzaF9maXJzdChOVUxMLCBoYXNoKTsgaGk7IGhpID0gYXByX2hhc2hfbmV4
dChoaSkpCisgICAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICAgICAgdm9pZCAq
dmFsOworICAgICAgICBQeU9iamVjdCAqdmFsdWU7CisKKyAgICAgICAgYXByX2hhc2hfdGhpcyho
aSwgJmtleSwgTlVMTCwgJnZhbCk7CisgICAgICAgIHZhbHVlID0gKCpjb252ZXJ0ZXJfZnVuYyko
dmFsLCBjdHgsIHB5X3Bvb2wpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAg
ICB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICB9CisgICAgICAgIC8qICMjIyBnb3R0YSBjYXN0IHRoaXMgdGhpbmcgY3V6
IFB5dGhvbiBkb2Vzbid0IHVzZSAiY29uc3QiICovCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRl
bVN0cmluZyhkaWN0LCAoY2hhciAqKWtleSwgdmFsdWUpID09IC0xKQorICAgICAgICAgIHsKKyAg
ICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7
CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JF
Rih2YWx1ZSk7CisgICAgICB9CisKKyAgICByZXR1cm4gZGljdDsKK30KKworc3RhdGljIFB5T2Jq
ZWN0ICpjb252ZXJ0X3RvX3N3aWd0eXBlKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsIFB5T2JqZWN0
ICpweV9wb29sKQoreworICAvKiBjdHggaXMgYSAnc3dpZ190eXBlX2luZm8gKicgKi8KKyAgcmV0
dXJuIHN2bl9zd2lnX05ld1BvaW50ZXJPYmoodmFsdWUsIGN0eCwgcHlfcG9vbCk7Cit9CisKK3N0
YXRpYyBQeU9iamVjdCAqY29udmVydF9zdm5fc3RyaW5nX3Qodm9pZCAqdmFsdWUsIHZvaWQgKmN0
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bv
b2wpCit7CisgIC8qIGN0eCBpcyB1bnVzZWQgKi8KKworICBjb25zdCBzdm5fc3RyaW5nX3QgKnMg
PSB2YWx1ZTsKKworICAvKiAjIyMgZ290dGEgY2FzdCB0aGlzIHRoaW5nIGN1eiBQeXRob24gZG9l
c24ndCB1c2UgImNvbnN0IiAqLworICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUo
KHZvaWQgKilzLT5kYXRhLCBzLT5sZW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKmNvbnZlcnRf
c3ZuX2NsaWVudF9jb21taXRfaXRlbV90KHZvaWQgKnZhbHVlLCB2b2lkICpjdHgpCit7CisgIFB5
T2JqZWN0ICpsaXN0OworICBQeU9iamVjdCAqcGF0aCwgKmtpbmQsICp1cmwsICpyZXYsICpjZl91
cmwsICpzdGF0ZTsKKyAgc3ZuX2NsaWVudF9jb21taXRfaXRlbV90ICppdGVtID0gdmFsdWU7CisK
KyAgLyogY3R4IGlzIHVudXNlZCAqLworCisgIGxpc3QgPSBQeUxpc3RfTmV3KDYpOworCisgIGlm
IChpdGVtLT5wYXRoKQorICAgIHBhdGggPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPnBhdGgp
OworICBlbHNlCisgICAgeworICAgICAgcGF0aCA9IFB5X05vbmU7CisgICAgICBQeV9JTkNSRUYo
UHlfTm9uZSk7CisgICAgfQorCisgIGlmIChpdGVtLT51cmwpCisgICAgdXJsID0gUHlTdHJpbmdf
RnJvbVN0cmluZyhpdGVtLT51cmwpOworICBlbHNlCisgICAgeworICAgICAgdXJsID0gUHlfTm9u
ZTsKKyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKGl0ZW0tPmNvcHlm
cm9tX3VybCkKKyAgICBjZl91cmwgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGl0ZW0tPmNvcHlmcm9t
X3VybCk7CisgIGVsc2UKKyAgICB7CisgICAgICBjZl91cmwgPSBQeV9Ob25lOworICAgICAgUHlf
SU5DUkVGKFB5X05vbmUpOworICAgIH0KKworICBraW5kID0gUHlJbnRfRnJvbUxvbmcoaXRlbS0+
a2luZCk7CisgIHJldiA9IFB5SW50X0Zyb21Mb25nKGl0ZW0tPnJldmlzaW9uKTsKKyAgc3RhdGUg
PSBQeUludF9Gcm9tTG9uZyhpdGVtLT5zdGF0ZV9mbGFncyk7CisKKyAgaWYgKCEgKGxpc3QgJiYg
cGF0aCAmJiBraW5kICYmIHVybCAmJiByZXYgJiYgY2ZfdXJsICYmIHN0YXRlKSkKKyAgICB7Cisg
ICAgICBQeV9YREVDUkVGKGxpc3QpOworICAgICAgUHlfWERFQ1JFRihwYXRoKTsKKyAgICAgIFB5
X1hERUNSRUYoa2luZCk7CisgICAgICBQeV9YREVDUkVGKHVybCk7CisgICAgICBQeV9YREVDUkVG
KHJldik7CisgICAgICBQeV9YREVDUkVGKGNmX3VybCk7CisgICAgICBQeV9YREVDUkVGKHN0YXRl
KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBQeUxpc3RfU0VUX0lURU0obGlzdCwg
MCwgcGF0aCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAxLCBraW5kKTsKKyAgUHlMaXN0X1NF
VF9JVEVNKGxpc3QsIDIsIHVybCk7CisgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAzLCByZXYpOwor
ICBQeUxpc3RfU0VUX0lURU0obGlzdCwgNCwgY2ZfdXJsKTsKKyAgUHlMaXN0X1NFVF9JVEVNKGxp
c3QsIDUsIHN0YXRlKTsKKyAgcmV0dXJuIGxpc3Q7Cit9CisKK1B5T2JqZWN0ICpzdm5fc3dpZ19w
eV9wcm9waGFzaF90b19kaWN0KGFwcl9oYXNoX3QgKmhhc2gpCit7CisgIHJldHVybiBjb252ZXJ0
X2hhc2goaGFzaCwgY29udmVydF9zdm5fc3RyaW5nX3QsIE5VTEwsIE5VTEwpOworfQorCitzdGF0
aWMgUHlPYmplY3QgKnByb3BhcnJheV90b19kaWN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAq
YXJyYXkpCit7CisgICAgUHlPYmplY3QgKmRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaW50IGk7
CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7CisgICAgICAgIHN2bl9wcm9w
X3QgcHJvcDsKKyAgICAgICAgUHlPYmplY3QgKnB5X2tleSwgKnB5X3ZhbHVlOworCisgICAgICAg
IHByb3AgPSBBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBzdm5fcHJvcF90KTsKKworICAgICAgICBw
eV9rZXkgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHByb3AubmFtZSk7CisgICAgICAgIGlmIChweV9r
ZXkgPT0gTlVMTCkKKyAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChwcm9wLnZh
bHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlfTm9u
ZTsKKyAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgIHB5X3ZhbHVlID0gUHlTdHJpbmdfRnJv
bVN0cmluZ0FuZFNpemUoKHZvaWQgKilwcm9wLnZhbHVlLT5kYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC52YWx1ZS0+bGVuKTsKKyAg
ICAgICAgICAgICBpZiAocHlfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgUHlfREVDUkVGKHB5X2tleSk7CisgICAgICAgICAgICAgICAgICBnb3RvIGVy
cm9yOworICAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBQeURpY3RfU2V0
SXRlbShkaWN0LCBweV9rZXksIHB5X3ZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGljdDsK
KworICBlcnJvcjoKKyAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CisKK30K
KworCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9jYXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hf
dCAqaGFzaCkKK3sKKyAgICAvKiBOZWVkIHNwZWNpYWwgY29kZSBmb3IgdGhpcyBiZWNhdXNlIG9m
IHRoZSBkYXJuZWQgc3ZuX3Jldm51bV90CisgICAgICAga2V5cy4gKi8KKyAgICBhcHJfaGFzaF9p
bmRleF90ICpoaTsKKyAgICBQeU9iamVjdCAqZGljdCA9IFB5RGljdF9OZXcoKTsKKworICAgIGlm
IChkaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoaSA9IGFw
cl9oYXNoX2ZpcnN0KE5VTEwsIGhhc2gpOyBoaTsgaGkgPSBhcHJfaGFzaF9uZXh0KGhpKSkKKyAg
ICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqazsKKyAgICAgICAgdm9pZCAqdjsKKyAgICAgICAg
UHlPYmplY3QgKmtleSwgKnZhbHVlOworCisgICAgICAgIGFwcl9oYXNoX3RoaXMoaGksICZrLCBO
VUxMLCAmdik7CisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZygqKHN2bl9yZXZudW1fdCAq
KWspOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAg
UHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQor
ICAgICAgICB2YWx1ZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoKGNoYXIgKil2KTsKKyAgICAgICAg
aWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKGtl
eSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIHZh
bHVlKSA9PSAtMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwor
ICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYo
a2V5KTsKKyAgICAgIH0KKyAgICByZXR1cm4gZGljdDsKK30KKworUHlPYmplY3QgKnN2bl9zd2ln
X3B5X2NvbnZlcnRfaGFzaChhcHJfaGFzaF90ICpoYXNoLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB5X3Bvb2wpCit7
CisgIHJldHVybiBjb252ZXJ0X2hhc2goaGFzaCwgY29udmVydF90b19zd2lndHlwZSwgdHlwZSwg
cHlfcG9vbCk7Cit9CisKKyNkZWZpbmUgREVDTEFSRV9TV0lHX0NPTlNUUlVDVE9SKHR5cGUsIGR1
cCkgXAorc3RhdGljIFB5T2JqZWN0ICptYWtlX29iXyMjdHlwZSh2b2lkICp2YWx1ZSkgXAoreyBc
CisgIGFwcl9wb29sX3QgKm5ld19wb29sID0gc3ZuX3Bvb2xfY3JlYXRlKF9nbG9iYWxfcG9vbCk7
IFwKKyAgUHlPYmplY3QgKm5ld19weV9wb29sID0gc3ZuX3N3aWdfTmV3UG9pbnRlck9iaihuZXdf
cG9vbCwgXAorICAgIHN2bl9zd2lnX1R5cGVRdWVyeSgiYXByX3Bvb2xfdCAqIiksIF9nbG9iYWxf
c3ZuX3N3aWdfcHlfcG9vbCk7IFwKKyAgc3ZuXyMjdHlwZSMjX3QgKm5ld192YWx1ZSA9IGR1cCh2
YWx1ZSwgbmV3X3Bvb2wpOyBcCisgIHJldHVybiBzdm5fc3dpZ19OZXdQb2ludGVyT2JqU3RyaW5n
KG5ld192YWx1ZSwgInN2bl8iICN0eXBlICJfdCAqIiwgXAorICAgICAgbmV3X3B5X3Bvb2wpOyBc
Cit9CisKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUih0eGRlbHRhX3dpbmRvdywgc3ZuX3R4ZGVs
dGFfd2luZG93X2R1cCkKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2dfY2hhbmdlZF9wYXRo
LCBzdm5fbG9nX2NoYW5nZWRfcGF0aF9kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1Iod2Nf
c3RhdHVzLCBzdm5fd2NfZHVwX3N0YXR1cykKK0RFQ0xBUkVfU1dJR19DT05TVFJVQ1RPUihsb2Nr
LCBzdm5fbG9ja19kdXApCitERUNMQVJFX1NXSUdfQ09OU1RSVUNUT1IoYXV0aF9zc2xfc2VydmVy
X2NlcnRfaW5mbywKKyAgICBzdm5fYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mb19kdXApCitERUNM
QVJFX1NXSUdfQ09OU1RSVUNUT1IoaW5mbywgc3ZuX2luZm9fZHVwKQorREVDTEFSRV9TV0lHX0NP
TlNUUlVDVE9SKGNvbW1pdF9pbmZvLCBzdm5fY29tbWl0X2luZm9fZHVwKQorREVDTEFSRV9TV0lH
X0NPTlNUUlVDVE9SKHdjX25vdGlmeSwgc3ZuX3djX2R1cF9ub3RpZnkpCisKK3N0YXRpYyBQeU9i
amVjdCAqY29udmVydF9sb2dfY2hhbmdlZF9wYXRoKHZvaWQgKnZhbHVlLCB2b2lkICpjdHgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9v
bCkKK3sKKyAgcmV0dXJuIG1ha2Vfb2JfbG9nX2NoYW5nZWRfcGF0aCh2YWx1ZSk7Cit9CisKK1B5
T2JqZWN0ICpzdm5fc3dpZ19weV9jX3N0cmluZ3NfdG9fbGlzdChjaGFyICoqc3RyaW5ncykKK3sK
KyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgY2hhciAqczsKKworICAg
IHdoaWxlICgocyA9ICpzdHJpbmdzKyspICE9IE5VTEwpCisgICAgICB7CisgICAgICAgIFB5T2Jq
ZWN0ICpvYiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocyk7CisKKyAgICAgICAgaWYgKG9iID09IE5V
TEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChs
aXN0LCBvYikgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorCisgICAg
cmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVy
biBOVUxMOworfQorCithcHJfaGFzaF90ICpzdm5fc3dpZ19weV9zdHJpbmdoYXNoX2Zyb21fZGlj
dChQeU9iamVjdCAqZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGFwcl9oYXNoX3QgKmhhc2g7CisgIFB5T2Jq
ZWN0ICprZXlzOworICBpbnQgaSwgbnVtX2tleXM7CisKKyAgaWYgKGRpY3QgPT0gUHlfTm9uZSkK
KyAgICByZXR1cm4gTlVMTDsKKworICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkKKyAgICB7Cisg
ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGEgZGljdGlvbmFyeSIp
OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGhhc2ggPSBhcHJfaGFzaF9tYWtlKHBv
b2wpOworICBrZXlzID0gUHlEaWN0X0tleXMoZGljdCk7CisgIG51bV9rZXlzID0gUHlMaXN0X1Np
emUoa2V5cyk7CisgIGZvciAoaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKQorICAgIHsKKyAgICAg
IFB5T2JqZWN0ICprZXkgPSBQeUxpc3RfR2V0SXRlbShrZXlzLCBpKTsKKyAgICAgIFB5T2JqZWN0
ICp2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIGtleSk7CisgICAgICBjb25zdCBjaGFyICpw
cm9wbmFtZSA9IG1ha2Vfc3RyaW5nX2Zyb21fb2Ioa2V5LCBwb29sKTsKKyAgICAgIGNvbnN0IGNo
YXIgKnByb3B2YWwgPSBtYWtlX3N0cmluZ19mcm9tX29iKHZhbHVlLCBwb29sKTsKKyAgICAgIFB5
X0RFQ1JFRihrZXkpOworICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgIGlmICghIChwcm9w
bmFtZSAmJiBwcm9wdmFsKSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQ
eUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWN0aW9uYXJ5IGtl
eXMvdmFsdWVzIGFyZW4ndCBzdHJpbmdzIik7CisgICAgICAgICAgUHlfREVDUkVGKGtleXMpOwor
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICBhcHJfaGFzaF9zZXQoaGFz
aCwgcHJvcG5hbWUsIEFQUl9IQVNIX0tFWV9TVFJJTkcsIHByb3B2YWwpOworICAgIH0KKyAgUHlf
REVDUkVGKGtleXMpOworICByZXR1cm4gaGFzaDsKK30KKworCithcHJfaGFzaF90ICpzdm5fc3dp
Z19weV9wcm9waGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgYXByX2hh
c2hfdCAqaGFzaDsKKyAgUHlPYmplY3QgKmtleXM7CisgIGludCBpLCBudW1fa2V5czsKKworICBp
ZiAoZGljdCA9PSBQeV9Ob25lKQorICAgIHJldHVybiBOVUxMOworCisgIGlmICghUHlEaWN0X0No
ZWNrKGRpY3QpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is
ICJub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaGFz
aCA9IGFwcl9oYXNoX21ha2UocG9vbCk7CisgIGtleXMgPSBQeURpY3RfS2V5cyhkaWN0KTsKKyAg
bnVtX2tleXMgPSBQeUxpc3RfU2l6ZShrZXlzKTsKKyAgZm9yIChpID0gMDsgaSA8IG51bV9rZXlz
OyBpKyspCisgICAgeworICAgICAgUHlPYmplY3QgKmtleSA9IFB5TGlzdF9HZXRJdGVtKGtleXMs
IGkpOworICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZGljdCwga2V5KTsK
KyAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lID0gbWFrZV9zdHJpbmdfZnJvbV9vYihrZXksIHBv
b2wpOworICAgICAgc3ZuX3N0cmluZ190ICpwcm9wdmFsID0gbWFrZV9zdm5fc3RyaW5nX2Zyb21f
b2IodmFsdWUsIHBvb2wpOworICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICBQeV9ERUNSRUYo
dmFsdWUpOworICAgICAgaWYgKCEgKHByb3BuYW1lICYmIHByb3B2YWwpKQorICAgICAgICB7Cisg
ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRpY3Rpb25hcnkga2V5cy92YWx1ZXMgYXJlbid0IHN0cmluZ3MiKTsKKyAg
ICAgICAgICBQeV9ERUNSRUYoa2V5cyk7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAg
IH0KKyAgICAgIGFwcl9oYXNoX3NldChoYXNoLCBwcm9wbmFtZSwgQVBSX0hBU0hfS0VZX1NUUklO
RywgcHJvcHZhbCk7CisgICAgfQorICBQeV9ERUNSRUYoa2V5cyk7CisgIHJldHVybiBoYXNoOwor
fQorCisKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdfcHlfc3RyaW5nc190b19h
cnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgICAgaW50IHRhcmds
ZW47CisgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAgaWYgKCFQeVNlcXVlbmNl
X0NoZWNrKHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U
eXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
IH0KKyAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNlKTsKKyAgICB0ZW1wID0g
YXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworICAg
IC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1lbnQgdGhlIGFycmF5IGl0
ZW0gY291bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVzaCB3b3VsZCkuICovCisg
ICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJnbGVuLS0pCisgICAgICB7
CisgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVtKHNvdXJjZSwgdGFyZ2xl
bik7CisgICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBQ
eV9ERUNSRUYobyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9y
LCAibm90IGEgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICB9
CisgICAgICAgIEFQUl9BUlJBWV9JRFgodGVtcCwgdGFyZ2xlbiwgY29uc3QgY2hhciAqKSA9IFB5
U3RyaW5nX0FTX1NUUklORyhvKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgfQorICAg
IHJldHVybiB0ZW1wOworfQorCisKK2NvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqc3ZuX3N3aWdf
cHlfcmV2bnVtc190b19hcnJheShQeU9iamVjdCAqc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7
CisgICAgaW50IHRhcmdsZW47CisgICAgYXByX2FycmF5X2hlYWRlcl90ICp0ZW1wOworCisgICAg
aWYgKCFQeVNlcXVlbmNlX0NoZWNrKHNvdXJjZSkpCisgICAgICB7CisgICAgICAgIFB5RXJyX1Nl
dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJub3QgYSBzZXF1ZW5jZSIpOworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICAgIH0KKyAgICB0YXJnbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc291cmNl
KTsKKyAgICB0ZW1wID0gYXByX2FycmF5X21ha2UocG9vbCwgdGFyZ2xlbiwgc2l6ZW9mKHN2bl9y
ZXZudW1fdCkpOworICAgIC8qIEFQUl9BUlJBWV9JRFggZG9lc24ndCBhY3R1YWxseSBpbmNyZW1l
bnQgdGhlIGFycmF5IGl0ZW0gY291bnQKKyAgICAgICAobGlrZSwgc2F5LCBhcHJfYXJyYXlfcHVz
aCB3b3VsZCkuICovCisgICAgdGVtcC0+bmVsdHMgPSB0YXJnbGVuOworICAgIHdoaWxlICh0YXJn
bGVuLS0pCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvID0gUHlTZXF1ZW5jZV9HZXRJdGVt
KHNvdXJjZSwgdGFyZ2xlbik7CisgICAgICAgIGlmIChvID09IE5VTEwpCisgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhvKSkKKyAgICAgICAgICB7Cisg
ICAgICAgICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQor
ICAgICAgICAgICAgICAoc3ZuX3Jldm51bV90KVB5TG9uZ19Bc0xvbmcobyk7CisgICAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChQeUludF9DaGVjayhvKSkKKyAgICAgICAgICB7CisgICAgICAg
ICAgICBBUFJfQVJSQVlfSURYKHRlbXAsIHRhcmdsZW4sIHN2bl9yZXZudW1fdCkgPQorICAgICAg
ICAgICAgICAoc3ZuX3Jldm51bV90KVB5SW50X0FzTG9uZyhvKTsKKyAgICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAg
ICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibm90IGFuIGludGVnZXIgdHlw
ZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgfQorICAgICAgICBQeV9E
RUNSRUYobyk7CisgICAgfQorICAgIHJldHVybiB0ZW1wOworfQorCisKKwwKKy8qKiogYXByX2Fy
cmF5X2hlYWRlcl90IGNvbnZlcnNpb25zLiAgVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YKKyAgICAg
Y29udmVydGVyLCBzaW1wbHkgY29weS1uLXBhc3RlIG9uZSBvZiB0aGVzZSBmdW5jdGlvbiBhbmQg
dHdlYWsKKyAgICAgdGhlIGNyZWF0aW9uIG9mIHRoZSBQeU9iamVjdCAqb2IuICAqKiovCisKK1B5
T2JqZWN0ICpzdm5fc3dpZ19weV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJf
dCAqYXJyYXkpCit7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0
cyk7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kp
CisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYiA9CisgICAgICAgICAgUHlTdHJpbmdfRnJv
bVN0cmluZyhBUFJfQVJSQVlfSURYKGFycmF5LCBpLCBjb25zdCBjaGFyICopKTsKKyAgICAgICAg
aWYgKG9iID09IE5VTEwpCisgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlMaXN0X1NF
VF9JVEVNKGxpc3QsIGksIG9iKTsKKyAgICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKworICBlcnJv
cjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEZvcm1l
cmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3ZuX3N3aWdf
cHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKmFycmF5KQorewor
ICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhhcnJheS0+bmVsdHMpOworICAgIGludCBp
OworCisgICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uZWx0czsgKytpKQorICAgICAgeworICAg
ICAgICBQeU9iamVjdCAqb2IKKyAgICAgICAgICA9IFB5SW50X0Zyb21Mb25nKEFQUl9BUlJBWV9J
RFgoYXJyYXksIGksIHN2bl9yZXZudW1fdCkpOworICAgICAgICBpZiAob2IgPT0gTlVMTCkKKyAg
ICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgb2Ip
OworICAgICAgfQorICAgIHJldHVybiBsaXN0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihs
aXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21t
aXRfaXRlbV9hcnJheV90b19saXN0KGNvbnN0IGFwcl9hcnJheV9oZWFkZXJfdCAqYXJyYXkpCit7
CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KGFycmF5LT5uZWx0cyk7CisgICAgaW50
IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5lbHRzOyArK2kpCisgICAgICB7Cisg
ICAgICAgIFB5T2JqZWN0ICpvYiA9IGNvbnZlcnRfc3ZuX2NsaWVudF9jb21taXRfaXRlbV90Cisg
ICAgICAgICAgKEFQUl9BUlJBWV9JRFgoYXJyYXksIGksIHN2bl9jbGllbnRfY29tbWl0X2l0ZW1f
dCAqKSwgTlVMTCk7CisgICAgICAgIGlmIChvYiA9PSBOVUxMKQorICAgICAgICAgIGdvdG8gZXJy
b3I7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBvYik7CisgICAgICB9CisgICAg
cmV0dXJuIGxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVy
biBOVUxMOworfQorCisKKwwKKy8qKiogRXJyb3JzICoqKi8KKworLyogUmV0dXJuIGEgU3VidmVy
c2lvbiBlcnJvciBhYm91dCBhIGZhaWxlZCBjYWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3Jf
dCAqY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKHZvaWQpCit7CisgIHJldHVybiBzdm5fZXJyb3Jf
Y3JlYXRlKFNWTl9FUlJfU1dJR19QWV9FWENFUFRJT05fU0VULCBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24iKTsKK30K
KworLyogUmFpc2UgYSBUeXBlRXJyb3IgZXhjZXB0aW9uIHdpdGggTUVTU0FHRSwgYW5kIHJldHVy
biBhIFN1YnZlcnNpb24KKyAgIGVycm9yIGFib3V0IGFuIGludmFsaWQgcmV0dXJuIGZyb20gYSBj
YWxsYmFjay4gKi8KK3N0YXRpYyBzdm5fZXJyb3JfdCAqY2FsbGJhY2tfYmFkX3JldHVybl9lcnJv
cihjb25zdCBjaGFyICptZXNzYWdlKQoreworICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVy
cm9yLCBtZXNzYWdlKTsKKyAgcmV0dXJuIHN2bl9lcnJvcl9jcmVhdGUoQVBSX0VHRU5FUkFMLCBO
VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGNhbGxiYWNrIHJldHVybmVk
IGFuIGludmFsaWQgb2JqZWN0Iik7Cit9CisKKy8qIFJldHVybiBhIGdlbmVyaWMgZXJyb3IgYWJv
dXQgbm90IGJlaW5nIGFibGUgdG8gbWFwIHR5cGVzLiAqLworc3RhdGljIHN2bl9lcnJvcl90ICp0
eXBlX2NvbnZlcnNpb25fZXJyb3IoY29uc3QgY2hhciAqZGF0YXR5cGUpCit7CisgIHJldHVybiBz
dm5fZXJyb3JfY3JlYXRlZihBUFJfRUdFTkVSQUwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiRXJyb3IgY29udmVydGluZyBvYmplY3Qgb2YgdHlwZSAnJXMnIiwgZGF0YXR5cGUp
OworfQorCisKKwwKKy8qKiogRWRpdG9yIFdyYXBwaW5nICoqKi8KKworLyogdGhpcyBiYXRvbiBp
cyB1c2VkIGZvciB0aGUgZWRpdG9yLCBkaXJlY3RvcnksIGFuZCBmaWxlIGJhdG9ucy4gKi8KK3R5
cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmVkaXRvcjsgICAgIC8qIHRoZSBlZGl0b3IgaGFu
ZGxpbmcgdGhlIGNhbGxiYWNrcyAqLworICBQeU9iamVjdCAqYmF0b247ICAgICAgLyogdGhlIGRp
ci9maWxlIGJhdG9uIChvciBOVUxMIGZvciBlZGl0IGJhdG9uKSAqLworfSBpdGVtX2JhdG9uOwor
CitzdGF0aWMgaXRlbV9iYXRvbiAqbWFrZV9iYXRvbihhcHJfcG9vbF90ICpwb29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVkaXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpiYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqbmV3YiA9
IGFwcl9wYWxsb2MocG9vbCwgc2l6ZW9mKCpuZXdiKSk7CisKKyAgLyogTm90ZTogV2Ugc3RlYWwg
dGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byAnYmF0b24nLiBBbHNvLCB0byBhdm9pZAorICAgICBt
ZW1vcnkgbGVha3MsIHdlIGJvcnJvdyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRvICdlZGl0b3In
LiBJbiB0aGlzCisgICAgIGNhc2UsIGJvcnJvd2luZyB0aGUgcmVmZXJlbmNlIHRvICdlZGl0b3In
IGlzIHNhZmUgYmVjYXVzZSB0aGUgY29udGVudHMKKyAgICAgb2YgYW4gaXRlbV9iYXRvbiBzdHJ1
Y3QgYXJlIG9ubHkgdXNlZCBieSBmdW5jdGlubyBjYWxscyB3aGljaCBvcGVyYXRlIG9uCisgICAg
IHRoZSBlZGl0b3IgaXRzZWxmLiAqLworICBuZXdiLT5lZGl0b3IgPSBlZGl0b3I7CisgIG5ld2It
PmJhdG9uID0gYmF0b247CisKKyAgcmV0dXJuIG5ld2I7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf
dCAqY2xvc2VfYmF0b24odm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm1ldGhvZCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBiYXRvbjsKKyAg
UHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBzdm5fc3dpZ19weV9h
Y3F1aXJlX3B5X2xvY2soKTsKKworICAvKiBJZiB0aGVyZSBpcyBubyBiYXRvbiBvYmplY3QsIHRo
ZW4gaXQgaXMgYW4gZWRpdF9iYXRvbiwgYW5kIHdlIHNob3VsZAorICAgICBub3QgYm90aGVyIHRv
IHBhc3MgYW4gb2JqZWN0LiBOb3RlIHRoYXQgd2Ugc3RpbGwgc2hvdmUgYSBOVUxMIG9udG8KKyAg
ICAgdGhlIHN0YWNrLCBidXQgdGhlIGZvcm1hdCBzcGVjaWZpZWQganVzdCB3b24ndCByZWZlcmVu
Y2UgaXQuICAqLworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBt
ZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l
dGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKW1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGliLT5iYXRvbiA/IChjaGFyICopIihPKSIgOiBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWItPmJhdG9uKSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNo
ZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3Nz
IHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsK
KworICAvKiBXZSdyZSBub3cgZG9uZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3Qg
cmVhbGx5IGEgZnJlZSwgYWxsCisgICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBv
YmplY3RzIGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLwor
ICBQeV9YREVDUkVGKGliLT5iYXRvbik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRv
ciA9IGliLT5iYXRvbiA9IE5VTEw7CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisK
KyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBl
cnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqc2V0X3RhcmdldF9yZXZpc2lvbih2b2lkICpl
ZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9y
ZXZudW1fdCB0YXJnZXRfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2Jh
dG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9z
d2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZl
ICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQg
PSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopInNldF90YXJnZXRfcmV2
aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikibCIs
IHRhcmdldF9yZXZpc2lvbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tf
ZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICAvKiB0
aGVyZSBpcyBubyByZXR1cm4gdmFsdWUsIHNvIGp1c3QgdG9zcyB0aGlzIG9iamVjdCAocHJvYmFi
bHkgUHlfTm9uZSkgKi8KKyAgUHlfREVDUkVGKHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJP
UjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0
dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICpvcGVuX3Jvb3Qodm9pZCAqZWRpdF9i
YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCBiYXNlX3Jl
dmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bv
b2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqcm9vdF9iYXRvbikKK3sK
KyAgaXRlbV9iYXRvbiAqaWIgPSBlZGl0X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBz
dm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisg
IC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFu
ZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0
b3IsIChjaGFyICopIm9wZW5fcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY2hhciAqKSJsTyYiLCBiYXNlX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAgewor
ICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlz
aGVkOworICAgIH0KKworICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZlcmVu
Y2UgKi8KKyAgKnJvb3RfYmF0b24gPSBtYWtlX2JhdG9uKGRpcl9wb29sLCBpYi0+ZWRpdG9yLCBy
ZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdf
cHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJy
b3JfdCAqZGVsZXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpwYXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2JhdG9uICppYiA9IHBhcmVu
dF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKworICBz
dm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3Qg
aGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgocmVz
dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJkZWxldGVfZW50
cnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xPTyYi
LCBwYXRoLCByZXZpc2lvbiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAg
fQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2Jq
ZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0g
U1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9j
aygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFkZF9kaXJlY3Rv
cnkoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpwYXJlbnRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqY29weWZyb21fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdm5fcmV2bnVtX3QgY29weWZyb21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqZGlyX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqKmNoaWxkX2JhdG9uKQoreworICBpdGVtX2JhdG9uICppYiA9IHBh
cmVudF9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVycjsKKwor
ICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0aG9uIGRvZXNu
J3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICovCisgIGlmICgo
cmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAqKSJhZGRfZGly
ZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNP
c2xPJiIsIHBhdGgsIGliLT5iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlmcm9tX3BhdGgsIGNvcHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBkaXJfcG9vbCkpID09IE5VTEwpCisgICAg
eworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZp
bmlzaGVkOworICAgIH0KKworICAvKiBtYWtlX2JhdG9uIHRha2VzIG91ciAncmVzdWx0JyByZWZl
cmVuY2UgKi8KKyAgKmNoaWxkX2JhdG9uID0gbWFrZV9iYXRvbihkaXJfcG9vbCwgaWItPmVkaXRv
ciwgcmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9z
d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3Zu
X2Vycm9yX3QgKm9wZW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmVudF9iYXRvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKmRpcl9wb29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqY2hpbGRfYmF0b24pCit7CisgIGl0
ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5f
ZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8q
ICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBm
b3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3Is
IChjaGFyICopIm9wZW5fZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjaGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZGlyX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsK
KyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5p
c2hlZDsKKyAgICB9CisKKyAgLyogbWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJl
bmNlICovCisgICpjaGlsZF9iYXRvbiA9IG1ha2VfYmF0b24oZGlyX3Bvb2wsIGliLT5lZGl0b3Is
IHJlc3VsdCk7CisgIGVyciA9IFNWTl9OT19FUlJPUjsKKworIGZpbmlzaGVkOgorICBzdm5fc3dp
Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9l
cnJvcl90ICpjaGFuZ2VfZGlyX3Byb3Aodm9pZCAqZGlyX2JhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBpdGVtX2Jh
dG9uICppYiA9IGRpcl9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3Qg
KmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMgcHl0
aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0ICov
CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hhciAq
KSJjaGFuZ2VfZGlyX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNoYXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4gOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkK
KyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdv
dG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28g
anVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYo
cmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2ln
X3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vy
cm9yX3QgKmNsb3NlX2RpcmVjdG9yeSh2b2lkICpkaXJfYmF0b24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2Vf
YmF0b24oZGlyX2JhdG9uLCAiY2xvc2VfZGlyZWN0b3J5Iik7Cit9CisKK3N0YXRpYyBzdm5fZXJy
b3JfdCAqYWRkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpjb3B5ZnJvbV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dm5fcmV2bnVtX3QgY29weWZyb21fcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKmZpbGVfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqKmZpbGVfYmF0b24pCit7CisgIGl0ZW1fYmF0b24gKmliID0gcGFyZW50X2JhdG9uOwor
ICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5
X2FjcXVpcmVfcHlfbG9jaygpOworCisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25z
dCcgb24gdGhlIG1ldGhvZCBuYW1lIGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9i
amVjdF9DYWxsTWV0aG9kKGliLT5lZGl0b3IsIChjaGFyICopImFkZF9maWxlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPc2xPJiIsIHBhdGgsIGliLT5i
YXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlmcm9tX3BhdGgs
IGNvcHlmcm9tX3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFrZV9vYl9wb29sLCBmaWxlX3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNh
bGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisK
KyAgLyogbWFrZV9iYXRvbiB0YWtlcyBvdXIgJ3Jlc3VsdCcgcmVmZXJlbmNlICovCisgICpmaWxl
X2JhdG9uID0gbWFrZV9iYXRvbihmaWxlX3Bvb2wsIGliLT5lZGl0b3IsIHJlc3VsdCk7CisKKyAg
ZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf
cHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKm9wZW5f
ZmlsZShjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqcGFyZW50X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51
bV90IGJhc2VfcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v
bF90ICpmaWxlX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZmls
ZV9iYXRvbikKK3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBwYXJlbnRfYmF0b247CisgIFB5T2JqZWN0
ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9w
eV9sb2NrKCk7CisKKyAgLyogIyMjIHB5dGhvbiBkb2Vzbid0IGhhdmUgJ2NvbnN0JyBvbiB0aGUg
bWV0aG9kIG5hbWUgYW5kIGZvcm1hdCAqLworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxN
ZXRob2QoaWItPmVkaXRvciwgKGNoYXIgKikib3Blbl9maWxlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopInNPbE8mIiwgcGF0aCwgaWItPmJhdG9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgZmlsZV9wb29sKSkgPT0g
TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAg
ICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIG1ha2VfYmF0b24gdGFrZXMgb3VyICdy
ZXN1bHQnIHJlZmVyZW5jZSAqLworICAqZmlsZV9iYXRvbiA9IG1ha2VfYmF0b24oZmlsZV9wb29s
LCBpYi0+ZWRpdG9yLCByZXN1bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hl
ZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisK
K3N0YXRpYyBzdm5fZXJyb3JfdCAqd2luZG93X2hhbmRsZXIoc3ZuX3R4ZGVsdGFfd2luZG93X3Qg
KndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24p
Cit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7Cisg
IHN2bl9lcnJvcl90ICplcnI7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgaWYgKHdpbmRvdyA9PSBOVUxMKQorICAgIHsKKyAgICAgIC8qIHRoZSBsYXN0IGNhbGw7IGl0
IGNsb3NlcyB0aGUgaGFuZGxlciAqLworCisgICAgICAvKiBpbnZva2UgdGhlIGhhbmRsZXIgd2l0
aCBOb25lIGZvciB0aGUgd2luZG93ICovCisgICAgICAvKiAjIyMgcHl0aG9uIGRvZXNuJ3QgaGF2
ZSAnY29uc3QnIG9uIHRoZSBmb3JtYXQgKi8KKyAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxG
dW5jdGlvbihoYW5kbGVyLCAoY2hhciAqKSJPIiwgUHlfTm9uZSk7CisKKyAgICAgIC8qIHdlIG5v
IGxvbmdlciBuZWVkIHRvIHJlZmVyIHRvIHRoZSBoYW5kbGVyIG9iamVjdCAqLworICAgICAgUHlf
REVDUkVGKGhhbmRsZXIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGludm9rZSB0
aGUgaGFuZGxlciB3aXRoIHRoZSB3aW5kb3cgKi8KKyAgICAgIC8qICMjIyBweXRob24gZG9lc24n
dCBoYXZlICdjb25zdCcgb24gdGhlIGZvcm1hdCAqLworICAgICAgcmVzdWx0ID0gUHlPYmplY3Rf
Q2FsbEZ1bmN0aW9uKGhhbmRsZXIsIChjaGFyICopIk8mIiwKKyAgICAgICAgbWFrZV9vYl90eGRl
bHRhX3dpbmRvdywgd2luZG93KTsKKyAgICB9CisKKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBm
aW5pc2hlZDsKKyAgICB9CisKKyAgLyogdGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLCBzbyBqdXN0
IHRvc3MgdGhpcyBvYmplY3QgKHByb2JhYmx5IFB5X05vbmUpICovCisgIFB5X0RFQ1JFRihyZXN1
bHQpOworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlf
cmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3Jf
dCAqYXBwbHlfdGV4dGRlbHRhKHZvaWQgKmZpbGVfYmF0b24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiYXNlX2NoZWNrc3VtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmhhbmRs
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqaF9iYXRvbikK
K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor
ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l
IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l
ZGl0b3IsIChjaGFyICopImFwcGx5X3RleHRkZWx0YSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hhciAqKSIoT3MpIiwgaWItPmJhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZV9jaGVja3N1bSkpID09IE5VTEwpCisgICAgeworICAg
ICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVk
OworICAgIH0KKworICAvKiBJbnRlcnByZXQgTm9uZSB0byBtZWFuIHN2bl9kZWx0YV9ub29wX3dp
bmRvd19oYW5kbGVyLiBUaGlzIGlzIG11Y2gKKyAgICAgZWFzaWVyL2Zhc3RlciB0aGFuIG1ha2lu
ZyBjb2RlIGFsd2F5cyBoYXZlIHRvIHdyaXRlIGEgTk9PUCBoYW5kbGVyCisgICAgIGluIFB5dGhv
bi4gICovCisgIGlmIChyZXN1bHQgPT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBQeV9ERUNSRUYo
cmVzdWx0KTsKKworICAgICAgKmhhbmRsZXIgPSBzdm5fZGVsdGFfbm9vcF93aW5kb3dfaGFuZGxl
cjsKKyAgICAgICpoX2JhdG9uID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAv
KiByZXR1cm4gdGhlIHRodW5rIGZvciBpbnZva2luZyB0aGUgaGFuZGxlci4gdGhlIGJhdG9uIHRh
a2VzIG91cgorICAgICAgICAgJ3Jlc3VsdCcgcmVmZXJlbmNlLCB3aGljaCBpcyB0aGUgaGFuZGxl
ci4gKi8KKyAgICAgICpoYW5kbGVyID0gd2luZG93X2hhbmRsZXI7CisgICAgICAqaF9iYXRvbiA9
IHJlc3VsdDsKKyAgICB9CisKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNoZWQ6Cisg
IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdGF0
aWMgc3ZuX2Vycm9yX3QgKmNoYW5nZV9maWxlX3Byb3Aodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl9zdHJpbmdfdCAqdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkK
K3sKKyAgaXRlbV9iYXRvbiAqaWIgPSBmaWxlX2JhdG9uOworICBQeU9iamVjdCAqcmVzdWx0Owor
ICBzdm5fZXJyb3JfdCAqZXJyOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOwor
CisgIC8qICMjIyBweXRob24gZG9lc24ndCBoYXZlICdjb25zdCcgb24gdGhlIG1ldGhvZCBuYW1l
IGFuZCBmb3JtYXQgKi8KKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGliLT5l
ZGl0b3IsIChjaGFyICopImNoYW5nZV9maWxlX3Byb3AiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoYXIgKikiT3NzI08mIiwgaWItPmJhdG9uLCBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB2YWx1ZS0+ZGF0YSA6IE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IHZhbHVlLT5sZW4g
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9wb29sLCBw
b29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy
b3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8qIHRoZXJlIGlzIG5vIHJl
dHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9iYWJseSBQeV9Ob25lKSAq
LworICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgZXJyID0gU1ZOX05PX0VSUk9SOworCisgZmluaXNo
ZWQ6CisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQor
CitzdGF0aWMgc3ZuX2Vycm9yX3QgKmNsb3NlX2ZpbGUodm9pZCAqZmlsZV9iYXRvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZXh0X2NoZWNrc3VtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIGl0ZW1f
YmF0b24gKmliID0gZmlsZV9iYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9y
X3QgKmVycjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKworICAvKiAjIyMg
cHl0aG9uIGRvZXNuJ3QgaGF2ZSAnY29uc3QnIG9uIHRoZSBtZXRob2QgbmFtZSBhbmQgZm9ybWF0
ICovCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpYi0+ZWRpdG9yLCAoY2hh
ciAqKSJjbG9zZV9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
aGFyICopIihPcykiLCBpYi0+YmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0X2NoZWNrc3VtKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFj
a19leGNlcHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIC8q
IHRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSwgc28ganVzdCB0b3NzIHRoaXMgb2JqZWN0IChwcm9i
YWJseSBQeV9Ob25lKSAqLworICBQeV9ERUNSRUYocmVzdWx0KTsKKworICAvKiBXZSdyZSBub3cg
ZG9uZSB3aXRoIHRoZSBiYXRvbi4gU2luY2UgdGhlcmUgaXNuJ3QgcmVhbGx5IGEgZnJlZSwgYWxs
CisgICAgIHdlIG5lZWQgdG8gZG8gaXMgbm90ZSB0aGF0IGl0cyBvYmplY3RzIGFyZSBubyBsb25n
ZXIgcmVmZXJlbmNlZCBieQorICAgICB0aGUgYmF0b24uICAqLworICBQeV9YREVDUkVGKGliLT5i
YXRvbik7CisKKyNpZmRlZiBTVk5fREVCVUcKKyAgaWItPmVkaXRvciA9IGliLT5iYXRvbiA9IE5V
TEw7CisjZW5kaWYKKworICBlcnIgPSBTVk5fTk9fRVJST1I7CisKKyBmaW5pc2hlZDoKKyAgc3Zu
X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBz
dm5fZXJyb3JfdCAqY2xvc2VfZWRpdCh2b2lkICplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHJldHVybiBjbG9zZV9iYXRv
bihlZGl0X2JhdG9uLCAiY2xvc2VfZWRpdCIpOworfQorCitzdGF0aWMgc3ZuX2Vycm9yX3QgKmFi
b3J0X2VkaXQodm9pZCAqZWRpdF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHJfcG9vbF90ICpwb29sKQoreworICByZXR1cm4gY2xvc2VfYmF0b24oZWRpdF9iYXRvbiwg
ImFib3J0X2VkaXQiKTsKK30KKwordm9pZCBzdm5fc3dpZ19weV9tYWtlX2VkaXRvcihjb25zdCBz
dm5fZGVsdGFfZWRpdG9yX3QgKiplZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKiplZGl0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVj
dCAqcHlfZWRpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKQoreworICBzdm5fZGVsdGFfZWRpdG9yX3QgKnRodW5rX2VkaXRvciA9IHN2bl9kZWx0YV9k
ZWZhdWx0X2VkaXRvciAocG9vbCk7CisgIAorICB0aHVua19lZGl0b3ItPnNldF90YXJnZXRfcmV2
aXNpb24gPSBzZXRfdGFyZ2V0X3JldmlzaW9uOworICB0aHVua19lZGl0b3ItPm9wZW5fcm9vdCA9
IG9wZW5fcm9vdDsKKyAgdGh1bmtfZWRpdG9yLT5kZWxldGVfZW50cnkgPSBkZWxldGVfZW50cnk7
CisgIHRodW5rX2VkaXRvci0+YWRkX2RpcmVjdG9yeSA9IGFkZF9kaXJlY3Rvcnk7CisgIHRodW5r
X2VkaXRvci0+b3Blbl9kaXJlY3RvcnkgPSBvcGVuX2RpcmVjdG9yeTsKKyAgdGh1bmtfZWRpdG9y
LT5jaGFuZ2VfZGlyX3Byb3AgPSBjaGFuZ2VfZGlyX3Byb3A7CisgIHRodW5rX2VkaXRvci0+Y2xv
c2VfZGlyZWN0b3J5ID0gY2xvc2VfZGlyZWN0b3J5OworICB0aHVua19lZGl0b3ItPmFkZF9maWxl
ID0gYWRkX2ZpbGU7CisgIHRodW5rX2VkaXRvci0+b3Blbl9maWxlID0gb3Blbl9maWxlOworICB0
aHVua19lZGl0b3ItPmFwcGx5X3RleHRkZWx0YSA9IGFwcGx5X3RleHRkZWx0YTsKKyAgdGh1bmtf
ZWRpdG9yLT5jaGFuZ2VfZmlsZV9wcm9wID0gY2hhbmdlX2ZpbGVfcHJvcDsKKyAgdGh1bmtfZWRp
dG9yLT5jbG9zZV9maWxlID0gY2xvc2VfZmlsZTsKKyAgdGh1bmtfZWRpdG9yLT5jbG9zZV9lZGl0
ID0gY2xvc2VfZWRpdDsKKyAgdGh1bmtfZWRpdG9yLT5hYm9ydF9lZGl0ID0gYWJvcnRfZWRpdDsK
KworICAqZWRpdG9yID0gdGh1bmtfZWRpdG9yOworICAqZWRpdF9iYXRvbiA9IG1ha2VfYmF0b24o
cG9vbCwgcHlfZWRpdG9yLCBOVUxMKTsKK30KKworCisMCisvKioqIE90aGVyIFdyYXBwZXJzIGZv
ciBTVk4gRnVuY3Rpb25zICoqKi8KKworCithcHJfZmlsZV90ICpzdm5fc3dpZ19weV9tYWtlX2Zp
bGUgKFB5T2JqZWN0ICpweV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHJfcG9vbF90ICpwb29sKQoreworICBhcHJfZmlsZV90ICphcHJfZmlsZSA9IE5VTEw7Cisg
IGFwcl9zdGF0dXNfdCBhcHJfZXJyOworCisgIGlmIChweV9maWxlID09IE5VTEwgfHwgcHlfZmls
ZSA9PSBQeV9Ob25lKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChQeVN0cmluZ19DaGVjayAo
cHlfZmlsZSkpCisgICAgeworICAgICAgLyogaW5wdXQgaXMgYSBwYXRoIC0tIGp1c3Qgb3BlbiBh
biBhcHJfZmlsZV90ICovCisgICAgICBjaGFyKiBmbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyAo
cHlfZmlsZSk7CisgICAgICBhcHJfZXJyID0gYXByX2ZpbGVfb3BlbiAoJmFwcl9maWxlLCBmbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUl9DUkVBVEUgfCBBUFJfUkVBRCB8
IEFQUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUl9PU19ERUZBVUxU
LCBwb29sKTsKKyAgICAgIGlmIChhcHJfZXJyKQorICAgICAgICB7CisgICAgICAgICAgY2hhciBi
dWZbMjU2XTsKKyAgICAgICAgICBhcHJfc3RyZXJyb3IgKGFwcl9lcnIsIGJ1Ziwgc2l6ZW9mKGJ1
ZikpOworICAgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfSU9FcnJvciwgImFwcl9maWxlX29w
ZW4gZmFpbGVkOiAlczogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGZuYW1l
KTsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAo
UHlGaWxlX0NoZWNrIChweV9maWxlKSkKKyAgICB7CisgICAgICBGSUxFICpmaWxlOworICAgICAg
YXByX29zX2ZpbGVfdCBvc2ZpbGU7CisKKyAgICAgIC8qIGlucHV0IGlzIGEgZmlsZSBvYmplY3Qg
LS0gY29udmVydCB0byBhcHJfZmlsZV90ICovCisgICAgICBmaWxlID0gUHlGaWxlX0FzRmlsZShw
eV9maWxlKTsKKyNpZmRlZiBXSU4zMgorICAgICAgb3NmaWxlID0gKGFwcl9vc19maWxlX3QpX2dl
dF9vc2ZoYW5kbGUoX2ZpbGVubyhmaWxlKSk7CisjZWxzZQorICAgICAgb3NmaWxlID0gKGFwcl9v
c19maWxlX3QpZmlsZW5vKGZpbGUpOworI2VuZGlmCisgICAgICBhcHJfZXJyID0gYXByX29zX2Zp
bGVfcHV0ICgmYXByX2ZpbGUsICZvc2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSwgcG9vbCk7Cisg
ICAgICBpZiAoYXByX2VycikKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgYnVmWzI1Nl07Cisg
ICAgICAgICAgYXByX3N0cmVycm9yIChhcHJfZXJyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAg
ICAgICBQeUVycl9Gb3JtYXQgKFB5RXhjX0lPRXJyb3IsICJhcHJfb3NfZmlsZV9wdXQgZmFpbGVk
OiAlcyIsIGJ1Zik7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9Cisg
IHJldHVybiBhcHJfZmlsZTsKK30KKworCitzdGF0aWMgc3ZuX2Vycm9yX3QgKgorcmVhZF9oYW5k
bGVyX3B5aW8gKHZvaWQgKmJhdG9uLCBjaGFyICpidWZmZXIsIGFwcl9zaXplX3QgKmxlbikKK3sK
KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIGFwcl9z
aXplX3QgYnl0ZXM7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgc3Zu
X3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2Fs
bE1ldGhvZChweV9pbywgKGNoYXIgKikicmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSJpIiwgKmxlbikpID09IE5VTEwpCisgICAgeworICAgICAgZXJy
ID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmlu
Z19DaGVjayhyZXN1bHQpKQorICAgIHsKKyAgICAgIGJ5dGVzID0gUHlTdHJpbmdfR0VUX1NJWkUo
cmVzdWx0KTsKKyAgICAgIGlmIChieXRlcyA+ICpsZW4pCisgICAgICAgIHsKKyAgICAgICAgICBl
cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJUb28gbWFueSBieXRlcyIpOworICAgICAg
ICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBXcml0ZWJhY2ssIGluIGNh
c2UgdGhpcyB3YXMgYSBzaG9ydCByZWFkLCBpbmRpY2F0aW5nIEVPRiAqLworICAgICAgICAgICps
ZW4gPSBieXRlczsKKyAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBQeVN0cmluZ19BU19TVFJJTkco
cmVzdWx0KSwgKmxlbik7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJpbmciKTsKKyAgICB9Cisg
IFB5X1hERUNSRUYocmVzdWx0KTsKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK
KyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN2bl9lcnJvcl90ICoKK3dyaXRlX2hhbmRsZXJf
cHlpbyAodm9pZCAqYmF0b24sIGNvbnN0IGNoYXIgKmRhdGEsIGFwcl9zaXplX3QgKmxlbikKK3sK
KyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKnB5X2lvID0gYmF0b247CisgIHN2bl9l
cnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICB7
CisgICAgICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgICAgIGlmICgocmVzdWx0
ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChweV9pbywgKGNoYXIgKikid3JpdGUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInMjIiwgZGF0YSwgKmxlbikp
ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25f
ZXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgc3Zu
X3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisK
K3N0YXRpYyBzdm5fZXJyb3JfdCAqCitjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24pCit7
CisgIFB5T2JqZWN0ICpweV9pbyA9IGJhdG9uOworICBQeV9ERUNSRUYocHlfaW8pOworICByZXR1
cm4gU1ZOX05PX0VSUk9SOworfQorCisKK3N2bl9zdHJlYW1fdCAqCitzdm5fc3dpZ19weV9tYWtl
X3N0cmVhbSAoUHlPYmplY3QgKnB5X2lvLCBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fc3Ry
ZWFtX3QgKnN0cmVhbTsKKworICAvKiBCb3Jyb3cgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSB0byBw
eV9pbyAtIHRoaXMgaXMgc2FmZSBvbmx5IGJlY2F1c2UgdGhlCisgICAqIGNhbGxlciBtdXN0IGhh
dmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGludG8gdGhlCisgICAq
IGJpbmRpbmdzLCBhbmQgd2Ugd2lsbCBiZSBmaW5pc2hlZCB3aXRoIHRoZSBweV9pbyBvYmplY3Qg
YmVmb3JlIHdlIHJldHVybgorICAgKiB0byBweXRob24uIEkuZS4gRE8gTk9UIFNUT1JFIEFXQVkg
VEhFIFJFU1VMVElORyBzdm5fc3RyZWFtX3QgKiBmb3IgdXNlCisgICAqIG92ZXIgbXVsdGlwbGUg
Y2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisgIFB5X0lOQ1JFRihweV9pbyk7CisgIHN0cmVh
bSA9IHN2bl9zdHJlYW1fY3JlYXRlIChweV9pbywgcG9vbCk7CisgIHN2bl9zdHJlYW1fc2V0X3Jl
YWQgKHN0cmVhbSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF93cml0ZSAo
c3RyZWFtLCB3cml0ZV9oYW5kbGVyX3B5aW8pOworICBzdm5fc3RyZWFtX3NldF9jbG9zZSAoc3Ry
ZWFtLCBjbG9zZV9oYW5kbGVyX3B5aW8pOworCisgIHJldHVybiBzdHJlYW07Cit9CisKKwordm9p
ZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3ZuX3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl93Y19ub3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKQoreworICBQeU9iamVjdCAqZnVu
Y3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9
IFNWTl9OT19FUlJPUjsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlvbiA9PSBQ
eV9Ob25lKQorICAgIHJldHVybjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIihzaWlzaWlpKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGFjdGlvbiwga2luZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3N0YXRlLCBwcm9wX3N0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbikpID09IE5VTEwp
CisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQor
ICBlbHNlCisgICAgeworICAgICAgLyogVGhlIGNhbGxiYWNrIHNob3VsZG4ndCBiZSByZXR1cm5p
bmcgYW55dGhpbmcuICovCisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVy
ciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNS
RUYocmVzdWx0KTsKKyAgICB9CisKKyAgLyogT3VyIGVycm9yIGhhcyBubyBwbGFjZSB0byBnby4g
Oi0oICovCisgIGlmIChlcnIpCisgICAgc3ZuX2Vycm9yX2NsZWFyKGVycik7CisKKyAgc3ZuX3N3
aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7Cit9CisKKwordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlf
ZnVuYzIodm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dm5fd2Nfbm90aWZ5X3QgKm5vdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9i
amVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlm
IChmdW5jdGlvbiA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP
YmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2hhciAqKSIoTyZPJikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWtlX29iX3djX25vdGlmeSwgbm90aWZ5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsK
KyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQor
ICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGFueXRo
aW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBlcnIgPSBjYWxs
YmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVDUkVGKHJlc3Vs
dCk7CisgICAgfQorCisgIC8qIE91ciBlcnJvciBoYXMgbm8gcGxhY2UgdG8gZ28uIDotKCAqLwor
ICBpZiAoZXJyKQorICAgIHN2bl9lcnJvcl9jbGVhcihlcnIpOworCisgIHN2bl9zd2lnX3B5X3Jl
bGVhc2VfcHlfbG9jaygpOworfQorCit2b2lkIHN2bl9zd2lnX3B5X3N0YXR1c19mdW5jKHZvaWQg
KmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfc3RhdHVzX3QgKnN0YXR1cykKK3sK
KyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2
bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwg
fHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm47CisKKyAgc3ZuX3N3aWdfcHlfYWNx
dWlyZV9weV9sb2NrKCk7CisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1
bmN0aW9uLCAoY2hhciAqKSJzTyYiLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWtlX29iX3djX3N0YXR1cywgc3RhdHVzKSkgPT0gTlVMTCkKKyAgICB7Cisg
ICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAg
ICB7CisgICAgICAvKiBUaGUgY2FsbGJhY2sgc2hvdWxkbid0IGJlIHJldHVybmluZyBhbnl0aGlu
Zy4gKi8KKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJh
Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQp
OworICAgIH0KKworICAvKiBPdXIgZXJyb3IgaGFzIG5vIHBsYWNlIHRvIGdvLiA6LSggKi8KKyAg
aWYgKGVycikKKyAgICBzdm5fZXJyb3JfY2xlYXIoZXJyKTsKKworICBzdm5fc3dpZ19weV9yZWxl
YXNlX3B5X2xvY2soKTsKK30KKworCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1
bmModm9pZCAqY2FuY2VsX2JhdG9uKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBjYW5jZWxf
YmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f
RVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkK
KyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9j
aygpOworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwgTlVM
TCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y
KCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKFB5SW50X0NoZWNrKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoUHlJbnRfQXNMb25nKHJlc3VsdCkpCisgICAgICAg
ICAgICBlcnIgPSBzdm5fZXJyb3JfY3JlYXRlKFNWTl9FUlJfQ0FOQ0VMTEVELCAwLCBOVUxMKTsK
KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkpCisgICAgICAg
IHsKKyAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhyZXN1bHQpKQorICAgICAgICAgICAgZXJy
ID0gc3ZuX2Vycm9yX2NyZWF0ZShTVk5fRVJSX0NBTkNFTExFRCwgMCwgTlVMTCk7CisgICAgICAg
IH0KKyAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAg
ICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IGFuIGludGVnZXIgb3IgTm9u
ZSIpOworICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgIHN2bl9z
d2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3Jf
dCAqc3ZuX3N3aWdfcHlfZnNfZ2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9v
bCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7
CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKGZ1bmN0aW9uID09
IE5VTEwgfHwgZnVuY3Rpb24gPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOwor
CisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlP
YmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCAoY2hhciAqKSJPJk8mIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9vYl9sb2NrLCBsb2NrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM
KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K
KyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsYmFjayBzaG91bGRuJ3QgYmUgcmV0dXJu
aW5nIGFueXRoaW5nLiAqLworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICBl
cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgICAgUHlfREVD
UkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOwor
ICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9s
b2dfZnVuYyhjb25zdCBjaGFyICoqbG9nX21zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0
X2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHJfcG9vbF90ICpwb29sKQoreworICBQeU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlP
YmplY3QgKnJlc3VsdDsKKyAgUHlPYmplY3QgKmNtdF9pdGVtczsKKyAgc3ZuX2Vycm9yX3QgKmVy
cjsKKworICAqbG9nX21zZyA9IE5VTEw7CisgICp0bXBfZmlsZSA9IE5VTEw7CisKKyAgLyogIyMj
IHRvZG86IGZvciBub3csIGp1c3QgaWdub3JlIHRoZSB3aG9sZSB0bXBfZmlsZSB0aGluZy4gICov
CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0gUHlfTm9uZSkpCisg
ICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2so
KTsKKworICBpZiAoY29tbWl0X2l0ZW1zKQorICAgIHsKKyAgICAgIGNtdF9pdGVtcyA9IGNvbW1p
dF9pdGVtX2FycmF5X3RvX2xpc3QoY29tbWl0X2l0ZW1zKTsKKyAgICB9CisgIGVsc2UKKyAgICB7
CisgICAgICBjbXRfaXRlbXMgPSBQeV9Ob25lOworICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwor
ICAgIH0KKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiT08mIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY210X2l0ZW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM
KQorICAgIHsKKyAgICAgIFB5X0RFQ1JFRihjbXRfaXRlbXMpOworICAgICAgZXJyID0gY2FsbGJh
Y2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgICBnb3RvIGZpbmlzaGVkOworICAgIH0KKworICBQ
eV9ERUNSRUYoY210X2l0ZW1zKTsKKworICBpZiAocmVzdWx0ID09IFB5X05vbmUpCisgICAgewor
ICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAqbG9nX21zZyA9IE5VTEw7CisgICAgICBl
cnIgPSBTVk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhyZXN1
bHQpKQorICAgIHsKKyAgICAgICpsb2dfbXNnID0gYXByX3BzdHJkdXAocG9vbCwgUHlTdHJpbmdf
QVNfU1RSSU5HKHJlc3VsdCkpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICBlcnIg
PSBTVk5fTk9fRVJST1I7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgUHlfREVDUkVGKHJl
c3VsdCk7CisgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYSBzdHJp
bmciKTsKKyAgICB9CisKKyBmaW5pc2hlZDoKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2Nr
KCk7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JlcG9z
X2F1dGh6X2Z1bmMoc3ZuX2Jvb2xlYW5fdCAqYWxsb3dlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN2bl9mc19yb290X3QgKnJvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBQ
eU9iamVjdCAqZnVuY3Rpb24gPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgUHlPYmpl
Y3QgKnB5X3Bvb2wsICpweV9yb290OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S
OworCisgICphbGxvd2VkID0gVFJVRTsKKworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5j
dGlvbiA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf
cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsK
KyAgaWYgKHB5X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNl
cHRpb25fZXJyb3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorICBweV9yb290ID0g
bWFrZV9vYl9mc19yb290KHJvb3QsIHB5X3Bvb2wpOworICBpZiAocHlfcm9vdCA9PSBOVUxMKQor
ICAgIHsKKyAgICAgIFB5X0RFQ1JFRihweV9wb29sKTsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4
Y2VwdGlvbl9lcnJvcigpOworICAgICAgZ290byBmaW5pc2hlZDsKKyAgICB9CisKKyAgaWYgKChy
ZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIk9zTyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB5X3Jvb3QsIHBhdGgsIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIGlmIChQeUludF9DaGVjayhyZXN1bHQpKQorICAgICAgICAqYWxsb3dl
ZCA9IFB5SW50X0FzTG9uZyhyZXN1bHQpOworICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJl
c3VsdCkpCisgICAgICAgICphbGxvd2VkID0gUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAg
ZWxzZQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgYW4gaW50
ZWdlciIpOworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICBQeV9ERUNSRUYocHlf
cm9vdCk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2ZpbmlzaGVkOgorICBzdm5fc3dpZ19weV9y
ZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30KKworCitzdm5fZXJyb3JfdCAqc3Zu
X3N3aWdfcHlfcmVwb3NfaGlzdG9yeV9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3Qg
KnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz
dWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmIChmdW5jdGlv
biA9PSBOVUxMIHx8IGZ1bmN0aW9uID09IFB5X05vbmUpCisgICAgcmV0dXJuIFNWTl9OT19FUlJP
UjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xvY2soKTsKKyAgaWYgKChyZXN1bHQgPSBQ
eU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGFyICopInNsTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg
ICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1
cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9Cisg
IHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworICByZXR1cm4gZXJyOworfQorCisKK3N2
bl9lcnJvcl90ICpzdm5fc3dpZ19weV9sb2dfcmVjZWl2ZXIodm9pZCAqYmF0b24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKmNoYW5nZWRfcGF0aHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1fdCByZXYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29s
KQoreworICBQeU9iamVjdCAqcmVjZWl2ZXIgPSBiYXRvbjsKKyAgUHlPYmplY3QgKnJlc3VsdCwg
KnB5X3Bvb2w7CisgIFB5T2JqZWN0ICpjaHBhdGhzOworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZO
X05PX0VSUk9SOworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5
X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly
ZV9weV9sb2NrKCk7CisKKyAgcHlfcG9vbCA9IG1ha2Vfb2JfcG9vbChwb29sKTsKKyAgaWYgKHB5
X3Bvb2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJy
b3IoKTsKKyAgICAgIGdvdG8gZmluaXNoZWQ7CisgICAgfQorCisgIGlmIChjaGFuZ2VkX3BhdGhz
KQorICAgIHsKKyAgICAgIGNocGF0aHMgPSBjb252ZXJ0X2hhc2goY2hhbmdlZF9wYXRocywgY29u
dmVydF9sb2dfY2hhbmdlZF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LCBOVUxMKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjaHBhdGhzID0gUHlfTm9uZTsK
KyAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICB9CisKKyAgaWYgKChyZXN1bHQgPSBQeU9i
amVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjaGFyICopIk9sc3NzTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNocGF0aHMsIHJldiwgYXV0aG9yLCBkYXRlLCBtc2csCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB5X3Bvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAg
IGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsK
KyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFk
X3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAg
IH0KKworICBQeV9ERUNSRUYoY2hwYXRocyk7CisgIFB5X0RFQ1JFRihweV9wb29sKTsKK2Zpbmlz
aGVkOgorICBzdm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKyAgcmV0dXJuIGVycjsKK30K
Kworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3ZuX2luZm9fdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0gYmF0
b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJS
T1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9uZSkp
CisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5X2xv
Y2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic08mTyYiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBtYWtlX29iX2luZm8s
IGluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9v
bCwgcG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9u
X2Vycm9yKCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9O
b25lKQorICAgICAgICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIp
OworICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisgIHN2bl9zd2lnX3B5X3JlbGVh
c2VfcHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICpzdm5fc3dp
Z19weV9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfaW50NjRfdCBsaW5l
X25vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN2bl9yZXZudW1fdCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9u
OworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9S
OworCisgIGlmICgocmVjZWl2ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQor
ICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2Nr
KCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTVk5fQVBSX0lOVDY0X1RfUFlDRk1UICJsc3Nz
TyYiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9ubywgcmV2
aXNpb24sIGF1dGhvciwgZGF0ZSwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIg
PSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAg
ICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1
cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisK
KyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgIHJldHVybiBlcnI7Cit9CisKKwor
c3ZuX2Vycm9yX3QgKgorc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0X2Z1bmMgKHN2bl9h
dXRoX2NyZWRfc2ltcGxlX3QgKipjcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0
b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKmNyZWRz
ID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1
bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZO
X05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgo
cmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzc2xPJiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCB1c2VybmFtZSwgbWF5X3NhdmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5V
TEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7
CisgICAgICAgICAgc3ZuX2F1dGhfY3JlZF9zaW1wbGVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAg
ICAgICAgICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0
bXBfY3JlZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSB0eXBlX2NvbnZlcnNpb25fZXJyb3Io
InN2bl9hdXRoX2NyZWRfc2ltcGxlX3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29s
LCBzaXplb2YgKCpjcmVkcykpOworICAgICAgICAgICAgICBjcmVkcy0+dXNlcm5hbWUgPSB0bXBf
Y3JlZHMtPnVzZXJuYW1lID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBvb2wsIHRt
cF9jcmVkcy0+dXNlcm5hbWUpIDogTlVMTDsKKyAgICAgICAgICAgICAgY3JlZHMtPnBhc3N3b3Jk
ID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChw
b29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t
YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w
eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJv
cl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmMgKHN2bl9hdXRoX2Ny
ZWRfdXNlcm5hbWVfdCAqKmNyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3ZuX2Jvb2xlYW5fdCBtYXlfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IGJh
dG9uOworICBQeU9iamVjdCAqcmVzdWx0OworICBzdm5fYXV0aF9jcmVkX3VzZXJuYW1lX3QgKmNy
ZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAo
KGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4g
U1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlm
ICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAg
IHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxz
ZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgeworICAgICAg
ICAgIHN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqdG1wX2NyZWRzID0gTlVMTDsKKyAgICAgICAg
ICBpZiAoc3ZuX3N3aWdfQ29udmVydFB0clN0cmluZyhyZXN1bHQsICh2b2lkICoqKSZ0bXBfY3Jl
ZHMsCisgICAgICAgICAgICAgICAgInN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqIikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcigic3Zu
X2F1dGhfY3JlZF91c2VybmFtZV90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2MocG9vbCwg
c2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnVzZXJuYW1lID0gdG1wX2Ny
ZWRzLT51c2VybmFtZSA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0cmR1cChwb29sLCB0bXBf
Y3JlZHMtPnVzZXJuYW1lKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5tYXlfc2F2ZSA9
IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIFB5
X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7
CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKKworc3ZuX2Vycm9yX3QgKgor
c3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9h
dXRoX2NyZWRfc3NsX3NlcnZlcl90cnVzdF90ICoqY3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAg
ICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBhcHJfdWludDMyX3QgZmFpbHVyZXMsCisgICAgY29u
c3Qgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2luZm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9i
b29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3Qg
KmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRf
c3NsX3NlcnZlcl90cnVzdF90ICpjcmVkcyA9IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBT
Vk5fTk9fRVJST1I7CisKKyAgaWYgKChmdW5jdGlvbiA9PSBOVUxMKSB8fCAoZnVuY3Rpb24gPT0g
UHlfTm9uZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1
aXJlX3B5X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihm
dW5jdGlvbiwgKGNoYXIgKikic2xPJmxPJiIsCisgICAgICAgICAgICAgICAgICByZWFsbSwgZmFp
bHVyZXMsIG1ha2Vfb2JfYXV0aF9zc2xfc2VydmVyX2NlcnRfaW5mbywKKyAgICAgICAgICAgICAg
ICAgIGNlcnRfaW5mbywgbWF5X3NhdmUsIG1ha2Vfb2JfcG9vbCwgcG9vbCkpID09IE5VTEwpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9yKCk7CisgICAgfQorICBl
bHNlCisgICAgeworICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKQorICAgICAgICB7CisgICAg
ICAgICAgc3ZuX2F1dGhfY3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKnRtcF9jcmVkcyA9IE5VTEw7
CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAgICAgICAgICAg
KHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJzdm5fYXV0aF9j
cmVkX3NzbF9zZXJ2ZXJfdHJ1c3RfdCAqIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJvcgorICAgICAgICAgICAgICAgICgic3ZuX2F1dGhf
Y3JlZF9zc2xfc2VydmVyX3RydXN0X3QgKiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3JlZHMgPSBhcHJfcGNhbGxvYyhwb29s
LCBzaXplb2YgKCpjcmVkcykpOworICAgICAgICAgICAgICAqY3JlZHMgPSAqdG1wX2NyZWRzOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9
CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7Cisg
IHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJvcl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2Ns
aWVudF9jZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0
X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAg
IHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlP
YmplY3QgKmZ1bmN0aW9uID0gYmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRo
X2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVy
ciA9IFNWTl9OT19FUlJPUjsKKworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlv
biA9PSBQeV9Ob25lKSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5
X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0
aW9uKGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh
ciAqKSJzbE8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0s
IG1heV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i
X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw
dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKKyAgICAgICAgeworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9j
ZXJ0X3QgKnRtcF9jcmVkcyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQ
dHJTdHJpbmcKKyAgICAgICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAg
ICAgICAgICAgICAgICJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yKCJzdm5f
YXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF90ICoiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXByX3BjYWxsb2Mo
cG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPmNlcnRfZmlsZSA9
IHRtcF9jcmVkcy0+Y2VydF9maWxlID8gXAorICAgICAgICAgICAgICAgIGFwcl9wc3RyZHVwKHBv
b2wsIHRtcF9jcmVkcy0+Y2VydF9maWxlKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNyZWRzLT5t
YXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9w
eV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3N2bl9lcnJv
cl90ICoKK3N2bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAor
ICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQg
KmJhdG9uLAorICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3Nh
dmUsCisgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKmZ1bmN0aW9uID0gYmF0
b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0
X3B3X3QgKmNyZWRzID0gTlVMTDsKKyAgc3ZuX2Vycm9yX3QgKmVyciA9IFNWTl9OT19FUlJPUjsK
KworICBpZiAoKGZ1bmN0aW9uID09IE5VTEwpIHx8IChmdW5jdGlvbiA9PSBQeV9Ob25lKSkKKyAg
ICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2lnX3B5X2FjcXVpcmVfcHlfbG9jaygp
OworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSJzbE8mIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIG1heV9zYXZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBO
VUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAg
IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICAgICAg
eworICAgICAgICAgIHN2bl9hdXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKnRtcF9jcmVk
cyA9IE5VTEw7CisgICAgICAgICAgaWYgKHN2bl9zd2lnX0NvbnZlcnRQdHJTdHJpbmcKKyAgICAg
ICAgICAgICAgKHJlc3VsdCwgKHZvaWQgKiopJnRtcF9jcmVkcywKKyAgICAgICAgICAgICAgICJz
dm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vycm9yCisgICAgICAgICAgICAgICAg
KCJzdm5fYXV0aF9jcmVkX3NzbF9jbGllbnRfY2VydF9wd190ICoiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNyZWRzID0gYXBy
X3BjYWxsb2MocG9vbCwgc2l6ZW9mICgqY3JlZHMpKTsKKyAgICAgICAgICAgICAgY3JlZHMtPnBh
c3N3b3JkID0gdG1wX2NyZWRzLT5wYXNzd29yZCA/IFwKKyAgICAgICAgICAgICAgICBhcHJfcHN0
cmR1cChwb29sLCB0bXBfY3JlZHMtPnBhc3N3b3JkKSA6IE5VTEw7CisgICAgICAgICAgICAgIGNy
ZWRzLT5tYXlfc2F2ZSA9IHRtcF9jcmVkcy0+bWF5X3NhdmU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgc3ZuX3N3aWdfcHlfcmVs
ZWFzZV9weV9sb2NrKCk7CisgICpjcmVkID0gY3JlZHM7CisgIHJldHVybiBlcnI7Cit9CisKK3Zv
aWQKK3N2bl9zd2lnX3B5X3NldHVwX3JhX2NhbGxiYWNrcyhzdm5fcmFfY2FsbGJhY2tzMl90ICoq
Y2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipiYXRvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfY2FsbGJhY2tzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2
bl9lcnJvcl90ICplcnIgPSBzdm5fcmFfY3JlYXRlX2NhbGxiYWNrcyhjYWxsYmFja3MsIHBvb2wp
OworCisgIGlmIChlcnIpCisgICAgeworICAgICAgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihl
cnIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAqYmF0b24gPSBweV9jYWxsYmFja3M7Cit9
CisKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNvbnN0IHN2bl9j
b21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCkKK3sKKyAgUHlPYmplY3QgKnJlY2VpdmVyID0g
YmF0b247CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9f
RVJST1I7CisKKyAgaWYgKChyZWNlaXZlciA9PSBOVUxMKSB8fCAocmVjZWl2ZXIgPT0gUHlfTm9u
ZSkpCisgICAgcmV0dXJuIFNWTl9OT19FUlJPUjsKKworICBzdm5fc3dpZ19weV9hY3F1aXJlX3B5
X2xvY2soKTsKKworICBpZiAoKHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWNlaXZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiTyZPJiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfY29tbWl0X2lu
Zm8sIGNvbW1pdF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNr
X2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1
bHQgIT0gUHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigi
Tm90IE5vbmUiKTsKKyAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICBzdm5fc3dp
Z19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdm5fZXJyb3Jf
dCAqc3ZuX3N3aWdfcHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
YmF0b24pCit7CisgIFB5T2JqZWN0ICpyZWNlaXZlciA9IGJhdG9uOworICBQeU9iamVjdCAqcmVz
dWx0OworICBzdm5fZXJyb3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIGlmICgocmVjZWl2
ZXIgPT0gTlVMTCkgfHwgKHJlY2VpdmVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f
RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1
bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaGFyICopImxzcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld19yZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKSkgPT0gTlVMTCkKKyAg
ICB7CisgICAgICBlcnIgPSBjYWxsYmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVs
c2UKKyAgICB7CisgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgICAgIGVyciA9IGNh
bGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBOb25lIik7CisgICAgICBQeV9ERUNSRUYocmVz
dWx0KTsKKyAgICB9CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisKKyAgcmV0
dXJuIGVycjsKK30KKworc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2ZpbGVfcmV2X2hhbmRs
ZXJfZnVuYygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgIHN2bl9yZXZudW1f
dCByZXYsCisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9wcm9wcywKKyAgICAg
ICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAqZGVsdGFfaGFuZGxl
ciwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAorICAgICAgICAgICAg
ICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIFB5T2JqZWN0ICpoYW5kbGVyID0gYmF0b247Cisg
IFB5T2JqZWN0ICpyZXN1bHQsICpweV9yZXZfcHJvcHMgPSBOVUxMLCAqcHlfcHJvcF9kaWZmcyA9
IE5VTEw7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisKKyAgaWYgKChoYW5k
bGVyID09IE5VTEwpIHx8IChoYW5kbGVyID09IFB5X05vbmUpKQorICAgIHJldHVybiBTVk5fTk9f
RVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgcHlfcmV2X3By
b3BzID0gc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChyZXZfcHJvcHMpOworICBpZiAocHlf
cmV2X3Byb3BzID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gdHlwZV9jb252ZXJzaW9uX2Vy
cm9yKCJhcHJfaGFzaF90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgIHB5X3By
b3BfZGlmZnMgPSBwcm9wYXJyYXlfdG9fZGljdChwcm9wX2RpZmZzKTsKKworICBpZiAocHlfcHJv
cF9kaWZmcyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IHR5cGVfY29udmVyc2lvbl9lcnJv
cigiYXByX2FycmF5X2hlYWRlcl90ICoiKTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisg
IGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGhhbmRsZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopInNsT09PJiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldiwgcHlfcmV2X3Byb3BzLCBweV9w
cm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29i
X3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2Vw
dGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZXN1bHQgIT0g
UHlfTm9uZSkKKyAgICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5v
bmUiKTsKKworICAgICAgLyogRklYTUU6IFN1cHBvcnQgcmV0dXJuZWQgVHhEZWx0YVdpbmRvdyBv
YmplY3QgYW5kCisgICAgICAgKiBzZXQgZGVsdGFfaGFuZGxlciBhbmQgZGVsdGFfYmF0b24gKi8K
KyAgICAgICpkZWx0YV9oYW5kbGVyID0gTlVMTDsKKyAgICAgICpkZWx0YV9iYXRvbiA9IE5VTEw7
CisKKyAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICB9CisKK2Vycm9yOgorCisgIFB5X1hE
RUNSRUYocHlfcmV2X3Byb3BzKTsKKyAgUHlfWERFQ1JFRihweV9wcm9wX2RpZmZzKTsKKworICBz
dm5fc3dpZ19weV9yZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0
aWMgc3ZuX2Vycm9yX3QgKnJlcG9ydGVyX3NldF9wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdm5fYm9vbGVhbl90IHN0YXJ0X2VtcHR5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbG9ja190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJvcl90ICplcnIgPSBTVk5fTk9fRVJST1I7
CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwgKnJlc3VsdDsKKworICBp
ZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQeV9Ob25lKQorICAgIHJl
dHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWlyZV9weV9sb2NrKCk7CisK
KyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3JlcG9ydGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2V0X3BhdGgiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikic2xic08mIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHJldmlzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxM
KQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4Y2VwdGlvbl9lcnJvcigpOworICAgIH0K
KyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisgICAgeworICAgICAgZXJyID0gY2FsbGJh
Y2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsKKyAgICB9CisKKyAgUHlfWERFQ1JFRihy
ZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2VfcHlfbG9jaygpOworCisgIHJldHVybiBl
cnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfZGVsZXRlX3BhdGgodm9pZCAq
cmVwb3J0X2JhdG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJy
b3JfdCAqZXJyID0gU1ZOX05PX0VSUk9SOworICBQeU9iamVjdCAqcHlfcmVwb3J0ZXIgPSByZXBv
cnRfYmF0b24sICpyZXN1bHQ7CisKKyAgaWYgKHB5X3JlcG9ydGVyID09IE5VTEwgfHwgcHlfcmVw
b3J0ZXIgPT0gUHlfTm9uZSkKKyAgICByZXR1cm4gU1ZOX05PX0VSUk9SOworCisgIHN2bl9zd2ln
X3B5X2FjcXVpcmVfcHlfbG9jaygpOworCisgIGlmICgocmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l
dGhvZChweV9yZXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
aGFyICopImRlbGV0ZV9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjaGFyICopInNPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwgcG9v
bCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vycm9y
KCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAgICBl
cnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKworICBQ
eV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7CisK
KyAgcmV0dXJuIGVycjsKK30KKyAgICAKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVwb3J0ZXJfbGlu
a19wYXRoKHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX2Jvb2xlYW5fdCBzdGFydF9lbXB0eSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NrX3Rva2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpCit7CisgIHN2bl9lcnJv
cl90ICplcnIgPSBTVk5fTk9fRVJST1I7CisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9y
dF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBv
cnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf
cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0
aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKikibGlua19wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
aGFyICopInNzbGJzTyYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0
aCwgdXJsLCByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0X2VtcHR5LCBsb2NrX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZV9vYl9wb29sLCBwb29sKSkgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBjYWxs
YmFja19leGNlcHRpb25fZXJyb3IoKTsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBQeV9O
b25lKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2JhZF9yZXR1cm5fZXJyb3IoIk5vdCBO
b25lIik7CisgICAgfQorCisgIFB5X1hERUNSRUYocmVzdWx0KTsKKworICBzdm5fc3dpZ19weV9y
ZWxlYXNlX3B5X2xvY2soKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3ZuX2Vycm9y
X3QgKnJlcG9ydGVyX2ZpbmlzaF9yZXBvcnQodm9pZCAqcmVwb3J0X2JhdG9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3Jf
dCAqZXJyID0gU1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9y
dF9iYXRvbiwgKnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBv
cnRlciA9PSBQeV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdf
cHlfYWNxdWlyZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0
aG9kKHB5X3JlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo
YXIgKikiZmluaXNoX3JlcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY2hhciAqKSJPJiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtl
X29iX3Bvb2wsIHBvb2wpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGNhbGxiYWNrX2V4
Y2VwdGlvbl9lcnJvcigpOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IFB5X05vbmUpCisg
ICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfYmFkX3JldHVybl9lcnJvcigiTm90IE5vbmUiKTsK
KyAgICB9CisKKyAgUHlfWERFQ1JFRihyZXN1bHQpOworCisgIHN2bl9zd2lnX3B5X3JlbGVhc2Vf
cHlfbG9jaygpOworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdm5fZXJyb3JfdCAqcmVw
b3J0ZXJfYWJvcnRfcmVwb3J0KHZvaWQgKnJlcG9ydF9iYXRvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKQoreworICBzdm5fZXJyb3JfdCAqZXJyID0g
U1ZOX05PX0VSUk9SOworCisgIFB5T2JqZWN0ICpweV9yZXBvcnRlciA9IHJlcG9ydF9iYXRvbiwg
KnJlc3VsdDsKKworICBpZiAocHlfcmVwb3J0ZXIgPT0gTlVMTCB8fCBweV9yZXBvcnRlciA9PSBQ
eV9Ob25lKQorICAgIHJldHVybiBTVk5fTk9fRVJST1I7CisKKyAgc3ZuX3N3aWdfcHlfYWNxdWly
ZV9weV9sb2NrKCk7CisKKyAgaWYgKChyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHB5X3Jl
cG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikiYWJv
cnRfcmVwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICop
Ik8mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Vfb2JfcG9vbCwg
cG9vbCkpID09IE5VTEwpCisgICAgeworICAgICAgZXJyID0gY2FsbGJhY2tfZXhjZXB0aW9uX2Vy
cm9yKCk7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkKKyAgICB7CisgICAg
ICBlcnIgPSBjYWxsYmFja19iYWRfcmV0dXJuX2Vycm9yKCJOb3QgTm9uZSIpOworICAgIH0KKwor
ICBQeV9YREVDUkVGKHJlc3VsdCk7CisKKyAgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9sb2NrKCk7
CisKKyAgcmV0dXJuIGVycjsKK30KKworY29uc3Qgc3ZuX3JhX3JlcG9ydGVyMl90IHN3aWdfcHlf
cmFfcmVwb3J0ZXIyID0geworICAgIHJlcG9ydGVyX3NldF9wYXRoLAorICAgIHJlcG9ydGVyX2Rl
bGV0ZV9wYXRoLAorICAgIHJlcG9ydGVyX2xpbmtfcGF0aCwKKyAgICByZXBvcnRlcl9maW5pc2hf
cmVwb3J0LAorICAgIHJlcG9ydGVyX2Fib3J0X3JlcG9ydAorfTsKZGlmZiAtTnVyIHN1YnZlcnNp
b24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9z
d2lndXRpbF9weS5jLnJlaiBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdz
L3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmMucmVqCi0tLSBzdWJ2ZXJz
aW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv
c3dpZ3V0aWxfcHkuYy5yZWoJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr
IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGli
c3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuYy5yZWoJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAw
MDAgKzAxMDAKQEAgLTAsMCArMSw0NiBAQAorKioqKioqKioqKioqKioqCisqKiogMTU2OSwxNTg3
ICoqKioKKyAgICByZXR1cm4gZXJyOworICB9CisgIAorICBzdm5fc3RyZWFtX3QgKgorICBzdm5f
c3dpZ19weV9tYWtlX3N0cmVhbShQeU9iamVjdCAqcHlfaW8sIGFwcl9wb29sX3QgKnBvb2wpCisg
IHsKKyAgICBzdm5fc3RyZWFtX3QgKnN0cmVhbTsKKyAgCistICAgLyogQm9ycm93IHRoZSBjYWxs
ZXIncyByZWZlcmVuY2UgdG8gcHlfaW8gLSB0aGlzIGlzIHNhZmUgb25seSBiZWNhdXNlIHRoZQor
LSAgICAqIGNhbGxlciBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaW4gb3JkZXIgdG8gcGFzcyB0aGUg
b2JqZWN0IGludG8gdGhlCistICAgICogYmluZGluZ3MsIGFuZCB3ZSB3aWxsIGJlIGZpbmlzaGVk
IHdpdGggdGhlIHB5X2lvIG9iamVjdCBiZWZvcmUgd2UgcmV0dXJuCistICAgICogdG8gcHl0aG9u
LiBJLmUuIERPIE5PVCBTVE9SRSBBV0FZIFRIRSBSRVNVTFRJTkcgc3ZuX3N0cmVhbV90ICogZm9y
IHVzZQorLSAgICAqIG92ZXIgbXVsdGlwbGUgY2FsbHMgaW50byB0aGUgYmluZGluZ3MuICovCisg
ICAgc3RyZWFtID0gc3ZuX3N0cmVhbV9jcmVhdGUocHlfaW8sIHBvb2wpOworICAgIHN2bl9zdHJl
YW1fc2V0X3JlYWQoc3RyZWFtLCByZWFkX2hhbmRsZXJfcHlpbyk7CisgICAgc3ZuX3N0cmVhbV9z
ZXRfd3JpdGUoc3RyZWFtLCB3cml0ZV9oYW5kbGVyX3B5aW8pOworICAKKyAgICByZXR1cm4gc3Ry
ZWFtOworICB9CistLS0gMTU2OSwxNTkyIC0tLS0KKyAgICByZXR1cm4gZXJyOworICB9CisgIAor
KyBzdGF0aWMgc3ZuX2Vycm9yX3QgKgorKyBjbG9zZV9oYW5kbGVyX3B5aW8odm9pZCAqYmF0b24p
CisrIHsKKysgICBQeU9iamVjdCAqcHlfaW8gPSBiYXRvbjsKKysgICBQeV9ERUNSRUYocHlfaW8p
OworKyAgIHJldHVybiBTVk5fTk9fRVJST1I7CisrIH0KKysgCisgIHN2bl9zdHJlYW1fdCAqCisg
IHN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2JqZWN0ICpweV9pbywgYXByX3Bvb2xfdCAqcG9v
bCkKKyAgeworICAgIHN2bl9zdHJlYW1fdCAqc3RyZWFtOworICAKKysgICBQeV9JTkNSRUYocHlf
aW8pOworICAgIHN0cmVhbSA9IHN2bl9zdHJlYW1fY3JlYXRlKHB5X2lvLCBwb29sKTsKKyAgICBz
dm5fc3RyZWFtX3NldF9yZWFkKHN0cmVhbSwgcmVhZF9oYW5kbGVyX3B5aW8pOworICAgIHN2bl9z
dHJlYW1fc2V0X3dyaXRlKHN0cmVhbSwgd3JpdGVfaGFuZGxlcl9weWlvKTsKKysgICBzdm5fc3Ry
ZWFtX3NldF9jbG9zZShzdHJlYW0sIGNsb3NlX2hhbmRsZXJfcHlpbyk7CisgIAorICAgIHJldHVy
biBzdHJlYW07CisgIH0KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi9saWJzdm5fc3dpZ19weS9zd2lndXRpbF9weS5oIHN1YnZlcnNpb24t
MS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkv
c3dpZ3V0aWxfcHkuaAotLS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3
aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3aWd1dGlsX3B5LmgJMjAwNS0xMC0yMCAyMzoxNzox
OS4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmlu
ZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaAkyMDA2LTA3LTA1
IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtNzksNiArNzksOSBAQAogU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCiB2b2lkIHN2bl9zd2lnX2dldF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0
ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wpOwogCisvKiBTZXQgYSBQeXRob24gJ293bmVk
JyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhlIGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50
IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3JlZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0
ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOworCiAMCiAvKioqIFNXSUcgV3JhcHBlcnMgKioq
LwogCkBAIC0xOTgsNiArMjAxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2
bl93Y19ub3RpZnlfc3RhdGVfdCBwcm9wX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdm5fcmV2bnVtX3QgcmV2aXNpb24pOwogCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQK
K3ZvaWQgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmMyKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX3djX25vdGlmeV90ICpub3RpZnksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKwogLyogYSBzdGF0dXMg
ZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBhIFB5dGhvbiBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCBp
bgogICAgdmlhIHRoZSBiYXRvbiBhcmd1bWVudCAqLwogU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
CkBAIC0yNDksNiArMjU3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXByX3Bvb2xfdCAqcG9vbCk7CiAKKy8qIHRodW5rZWQgaW5mbyByZWNlaXZlciBmdW5jdGlv
biAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlf
aW5mb19yZWNlaXZlcl9mdW5jKHZvaWQgKnB5X3JlY2VpdmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdm5faW5mb190ICppbmZvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKTsKKwogLyogdGh1bmtlZCBibGFtZSByZWNlaXZlciBmdW5jdGlvbiAqLwogU1ZOX1NXSUdf
U1dJR1VUSUxfRVhQT1JUCiBzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1lX3Jl
Y2VpdmVyX2Z1bmModm9pZCAqYmF0b24sCkBAIC0zMDMsNiArMzE4LDQ1IEBACiAgICAgc3ZuX2Jv
b2xlYW5fdCBtYXlfc2F2ZSwKICAgICBhcHJfcG9vbF90ICpwb29sKTsKIAorU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCit2b2lkCitzdm5fc3dpZ19weV9zZXR1cF9yYV9jYWxsYmFja3Moc3ZuX3Jh
X2NhbGxiYWNrczJfdCAqKmNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICoqYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg
KnB5X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90
ICpwb29sKTsKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2ln
X3B5X2NvbW1pdF9jYWxsYmFjazIoY29uc3Qgc3ZuX2NvbW1pdF9pbmZvX3QgKmNvbW1pdF9pbmZv
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpw
b29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdf
cHlfY29tbWl0X2NhbGxiYWNrKHN2bl9yZXZudW1fdCBuZXdfcmV2aXNpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24pOworCisK
K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X3JhX2Zp
bGVfcmV2X2hhbmRsZXJfZnVuYygKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAg
IHN2bl9yZXZudW1fdCByZXYsCisgICAgICAgICAgICAgICAgICAgIGFwcl9oYXNoX3QgKnJldl9w
cm9wcywKKyAgICAgICAgICAgICAgICAgICAgc3ZuX3R4ZGVsdGFfd2luZG93X2hhbmRsZXJfdCAq
ZGVsdGFfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmRlbHRhX2JhdG9uLAor
ICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKnByb3BfZGlmZnMsCisgICAg
ICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCitTVk5fU1dJR19TV0lHVVRJTF9F
WFBPUlQKK2V4dGVybiBjb25zdCBzdm5fcmFfcmVwb3J0ZXIyX3Qgc3dpZ19weV9yYV9yZXBvcnRl
cjI7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAorc3ZuX3N3aWdfcHlfc2V0dXBf
cmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFja3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2Vu
ZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmln
IHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGli
c3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZl
cnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vbGlic3ZuX3N3aWdfcHkvc3dpZ3V0aWxfcHkuaC5v
cmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9uLTEu
My4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL2xpYnN2bl9zd2lnX3B5L3N3
aWd1dGlsX3B5Lmgub3JpZwkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAt
MCwwICsxLDM1NyBAQAorLyoKKyAqIHN3aWd1dGlsX3B5LmggOiAgdXRpbGl0eSBmdW5jdGlvbnMg
YW5kIHN0dWZmIGZvciB0aGUgU1dJRyBQeXRob24gYmluZGluZ3MKKyAqCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgQ29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIGFzIGRlc2NyaWJlZCBpbiB0
aGUgZmlsZSBDT1BZSU5HLCB3aGljaAorICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGFzIHBh
cnQgb2YgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgdGVybXMKKyAqIGFyZSBhbHNvIGF2YWlsYWJs
ZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnL2xpY2Vuc2UtMS5odG1sLgorICogSWYg
bmV3ZXIgdmVyc2lvbnMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwb3N0ZWQgdGhlcmUsIHlvdSBtYXkg
dXNlIGEKKyAqIG5ld2VyIHZlcnNpb24gaW5zdGVhZCwgYXQgeW91ciBvcHRpb24uCisgKgorICog
VGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5
IG1hbnkKKyAqIGluZGl2aWR1YWxzLiAgRm9yIGV4YWN0IGNvbnRyaWJ1dGlvbiBoaXN0b3J5LCBz
ZWUgdGhlIHJldmlzaW9uCisgKiBoaXN0b3J5IGFuZCBsb2dzLCBhdmFpbGFibGUgYXQgaHR0cDov
L3N1YnZlcnNpb24udGlncmlzLm9yZy8uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKworI2lmbmRl
ZiBTVk5fU1dJR19TV0lHVVRJTF9QWV9ICisjZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX1BZX0gK
KworI2luY2x1ZGUgPFB5dGhvbi5oPgorCisjaW5jbHVkZSA8YXByLmg+CisjaW5jbHVkZSA8YXBy
X3Bvb2xzLmg+CisjaW5jbHVkZSA8YXByX3N0cmluZ3MuaD4KKyNpbmNsdWRlIDxhcHJfaGFzaC5o
PgorI2luY2x1ZGUgPGFwcl90YWJsZXMuaD4KKworI2luY2x1ZGUgInN2bl90eXBlcy5oIgorI2lu
Y2x1ZGUgInN2bl9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdm5fZGVsdGEuaCIKKyNpbmNsdWRlICJz
dm5fY2xpZW50LmgiCisjaW5jbHVkZSAic3ZuX3JlcG9zLmgiCisKKy8qIERlZmluZSBETEwgZXhw
b3J0IG1hZ2ljIG9uIFdpbmRvd3MuICovCisjaWZkZWYgV0lOMzIKKyMgIGlmZGVmIFNWTl9TV0lH
X1NXSUdVVElMX1BZX0MKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVCBfX2Rl
Y2xzcGVjKGRsbGV4cG9ydCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFNWTl9TV0lHX1NXSUdVVElM
X0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5l
IFNWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworDAorCisvKiBJbml0aWFs
aXplIHRoZSBsaWJzdm5fc3dpZ19weSBsaWJyYXJ5LiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQ
T1JUCithcHJfc3RhdHVzX3Qgc3ZuX3N3aWdfcHlfaW5pdGlhbGl6ZSh2b2lkKTsKKworDAorCisv
KiBGdW5jdGlvbnMgdG8gbWFuYWdlIHB5dGhvbidzIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrICov
CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfcmVsZWFzZV9weV9s
b2NrKHZvaWQpOworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlf
YWNxdWlyZV9weV9sb2NrKHZvaWQpOworCisMCisvKioqIEF1dG9tYXRpYyBQb29sIE1hbmFnZW1l
bnQgRnVuY3Rpb25zICoqKi8KKworLyogU2V0IHRoZSBhcHBsaWNhdGlvbiBwb29sICovCitTVk5f
U1dJR19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc2V0X2FwcGxpY2F0aW9uX3Bv
b2woUHlPYmplY3QgKnB5X3Bvb2wsIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBDbGVhciB0aGUg
YXBwbGljYXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9z
d2lnX3B5X2NsZWFyX2FwcGxpY2F0aW9uX3Bvb2wodm9pZCk7CisKKy8qIEdldCB0aGUgYXBwbGlj
YXRpb24gcG9vbCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX2dl
dF9hcHBsaWNhdGlvbl9wb29sKFB5T2JqZWN0ICoqcHlfcG9vbCwgYXByX3Bvb2xfdCAqKnBvb2wp
OworCisvKiBTZXQgYSBQeXRob24gJ293bmVkJyByZWZlcmVuY2Ugb24gdGhlIHBvb2wgb2YgdGhl
IGdpdmVuIHByb3h5IG9iamVjdCAqLworaW50IHN2bl9zd2lnX3B5X3Bvb2xfc2V0X293bmVkX3Jl
ZihQeU9iamVjdCAqcHJveHksIFB5T2JqZWN0ICpvbGRSZWYsIFB5T2JqZWN0ICpuZXdSZWYpOwor
CisMCisvKioqIFNXSUcgV3JhcHBlcnMgKioqLworCisvKiBXcmFwcGVyIGZvciBTV0lHX05ld1Bv
aW50ZXJPYmogKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2ln
X05ld1BvaW50ZXJPYmoodm9pZCAqb2JqLCBzd2lnX3R5cGVfaW5mbyAqdHlwZSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcG9vbCk7CisKKy8qIFdyYXBwZXIg
Zm9yIFNXSUdfQ29udmVydFB0ciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitpbnQgc3Zu
X3N3aWdfQ29udmVydFB0cihQeU9iamVjdCAqaW5wdXQsIHZvaWQgKipvYmosIHN3aWdfdHlwZV9p
bmZvICp0eXBlKTsKKworLyogV3JhcHBlciBmb3IgU1dJR19NdXN0R2V0UHRyICovCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3ZvaWQgKnN2bl9zd2lnX011c3RHZXRQdHIodm9pZCAqaW5wdXQs
IHN3aWdfdHlwZV9pbmZvICp0eXBlLCBpbnQgYXJnbnVtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBQeU9iamVjdCAqKnB5X3Bvb2wpOworDAorLyoqKiBGdW5jdGlvbnMgdG8gZXhwb3NlIGEg
Y3VzdG9tIFN1YnZlcnNpb25FeGNlcHRpb24gKioqLworCisvKiByZWdpc3RlciBhIG5ldyBzdWJ2
ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9i
amVjdCAqc3ZuX3N3aWdfcHlfcmVnaXN0ZXJfZXhjZXB0aW9uKHZvaWQpOworCisvKiBnZXQgdGhl
IG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBzdWJ2ZXJzaW9uIGV4Y2VwdGlvbiBjbGFzcyAq
LworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfZXhjZXB0
aW9uX3R5cGUodm9pZCk7CisKKy8qIHJhaXNlIGEgc3VidmVyc2lvbiBleGNlcHRpb24sIGNyZWF0
ZWQgZnJvbSBhIG5vcm1hbCBzdWJ2ZXJzaW9uIGVycm9yICovCitTVk5fU1dJR19TV0lHVVRJTF9F
WFBPUlQKK3ZvaWQgc3ZuX3N3aWdfcHlfc3ZuX2V4Y2VwdGlvbihzdm5fZXJyb3JfdCAqZXJyKTsK
KworCisMCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhbiBhcHJfaGFzaF90KiAoY2hh
ciogLT4gc3Zuc3RyaW5nX3QqKSB0bworICAgYSBQeXRob24gZGljdCAqLworU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfdG9fZGljdChhcHJf
aGFzaF90ICpoYXNoKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXByX2hh
c2hfdCogKHN2bl9yZXZudW1fdCogLT4gY29uc3QKKyAgIGNoYXIgKikgdG8gYSBQeXRob24gZGlj
dCAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitQeU9iamVjdCAqc3ZuX3N3aWdfcHlfbG9j
YXRpb25oYXNoX3RvX2RpY3QoYXByX2hhc2hfdCAqaGFzaCk7CisKKy8qIGNvbnZlcnQgYSBoYXNo
IG9mICdjb25zdCBjaGFyIConIC0+IFRZUEUgaW50byBhIFB5dGhvbiBkaWN0ICovCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK1B5T2JqZWN0ICpzdm5fc3dpZ19weV9jb252ZXJ0X2hhc2goYXBy
X2hhc2hfdCAqaGFzaCwgc3dpZ190eXBlX2luZm8gKnR5cGUsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlfcG9vbCk7CisKKy8qIGhlbHBlciBmdW5jdGlv
biB0byBjb252ZXJ0IGEgJ2NoYXIgKionIGludG8gYSBQeXRob24gbGlzdCBvZiBzdHJpbmcKKyAg
IG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlPYmplY3QgKnN2bl9zd2ln
X3B5X2Nfc3RyaW5nc190b19saXN0KGNoYXIgKipzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0
aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2YgJ2NvbnN0IGNoYXIgKicgdG8gYSBQeXRob24gbGlz
dAorICAgb2Ygc3RyaW5nIG9iamVjdHMgKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorUHlP
YmplY3QgKnN2bl9zd2lnX3B5X2FycmF5X3RvX2xpc3QoY29uc3QgYXByX2FycmF5X2hlYWRlcl90
ICpzdHJpbmdzKTsKKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gYXJyYXkgb2Yg
J3N2bl9yZXZudW1fdCcgdG8gYSBQeXRob24gbGlzdAorICAgb2YgaW50IG9iamVjdHMgKi8KKy8q
IEZvcm1lcmx5IHVzZWQgYnkgcHJlLTEuMCBBUElzLiBOb3cgdW51c2VkCitQeU9iamVjdCAqc3Zu
X3N3aWdfcHlfcmV2YXJyYXlfdG9fbGlzdChjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnJldnMp
OworKi8KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFy
eSBtYXBwaW5nIHN0cmluZ3MgdG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBp
bmcgY29uc3QgY2hhciAqJ3MgdG8gY29uc3QgY2hhciAqJ3MsCisgICBhbGxvY2F0ZWQgaW4gUE9P
TC4gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlf
c3RyaW5naGFzaF9mcm9tX2RpY3QoUHlPYmplY3QgKmRpY3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogaGVscGVy
IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBQeXRob24gZGljdGlvbmFyeSBtYXBwaW5nIHN0cmluZ3Mg
dG8KKyAgIHN0cmluZ3MgaW50byBhbiBhcHJfaGFzaF90IG1hcHBpbmcgY29uc3QgY2hhciAqJ3Mg
dG8gc3ZuX3N0cmluZ190J3MsCisgICBhbGxvY2F0ZWQgaW4gUE9PTC4gKi8KK1NWTl9TV0lHX1NX
SUdVVElMX0VYUE9SVAorYXByX2hhc2hfdCAqc3ZuX3N3aWdfcHlfcHJvcGhhc2hfZnJvbV9kaWN0
KFB5T2JqZWN0ICpkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBh
IFB5dGhvbiBzZXF1ZW5jZSBvZiBzdHJpbmdzIGludG8gYW4KKyAgICdhcHJfYXJyYXlfaGVhZGVy
X3QgKicgb2YgJ2NvbnN0IGNoYXIgKicgb2JqZWN0cy4gIE5vdGUgdGhhdCB0aGUKKyAgIG9iamVj
dHMgbXVzdCByZW1haW4gYWxpdmUgLS0gdGhlIHZhbHVlcyBhcmUgbm90IGNvcGllZC4gVGhpcyBp
cworICAgYXBwcm9wcmlhdGUgZm9yIGluY29taW5nIGFyZ3VtZW50cyB3aGljaCBhcmUgZGVmaW5l
ZCB0byBsYXN0IHRoZQorICAgZHVyYXRpb24gb2YgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uLiAg
Ki8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpz
dm5fc3dpZ19weV9zdHJpbmdzX3RvX2FycmF5KFB5T2JqZWN0ICpzb3VyY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAq
cG9vbCk7CisKKy8qIGxpa2Ugc3ZuX3N3aWdfcHlfc3RyaW5nc190b19hcnJheSgpLCBidXQgZm9y
IGFycmF5J3Mgb2YgJ3N2bl9yZXZudW1fdCdzLiAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JU
Citjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnN2bl9zd2lnX3B5X3Jldm51bXNfdG9fYXJyYXko
UHlPYmplY3QgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogbWFrZSBhbiBlZGl0b3Ig
dGhhdCAidGh1bmtzIiBmcm9tIEMgY2FsbGJhY2tzIHVwIHRvIFB5dGhvbiAqLworU1ZOX1NXSUdf
U1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X21ha2VfZWRpdG9yKGNvbnN0IHN2bl9k
ZWx0YV9lZGl0b3JfdCAqKmVkaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqKmVkaXRfYmF0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpw
eV9lZGl0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wp
OworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK2Fwcl9maWxlX3QgKnN2bl9zd2lnX3B5X21h
a2VfZmlsZShQeU9iamVjdCAqcHlfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5f
c3RyZWFtX3QgKnN2bl9zd2lnX3B5X21ha2Vfc3RyZWFtKFB5T2JqZWN0ICpweV9pbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKKy8q
IGEgbm90aWZ5IGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRob24gZnVuY3Rpb24gdGhhdCBp
cyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQgKi8KK1NWTl9TV0lHX1NXSUdV
VElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9ub3RpZnlfZnVuYyh2b2lkICpiYXRvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ZuX3djX25vdGlmeV9hY3Rpb25fdCBhY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN2bl9ub2RlX2tpbmRfdCBraW5kLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptaW1lX3R5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN2bl93Y19ub3RpZnlfc3RhdGVfdCBjb250ZW50X3N0YXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fd2Nfbm90aWZ5X3N0YXRlX3QgcHJvcF9zdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlzaW9uKTsKKwor
U1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCit2b2lkIHN2bl9zd2lnX3B5X25vdGlmeV9mdW5jMih2
b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2bl93Y19u
b3RpZnlfdCAqbm90aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xf
dCAqcG9vbCk7CisKKy8qIGEgc3RhdHVzIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgYSBQeXRob24g
ZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4KKyAgIHZpYSB0aGUgYmF0b24gYXJndW1lbnQgKi8K
K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZCBzdm5fc3dpZ19weV9zdGF0dXNfZnVuYyh2
b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3djX3N0YXR1c190ICpzdGF0dXMp
OworCisvKiBhIGNhbmNlbCBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIGEgUHl0aG9uIGZ1bmN0aW9u
IHBhc3NlZCBpbiB2aWEgdGhlCisgICBjYW5jZWxfYmF0b24gYXJndW1lbnQuICovCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jYW5jZWxfZnVuYyh2
b2lkICpjYW5jZWxfYmF0b24pOworCisvKiB0aHVua2VkIGZzIGdldF9sb2NrcyBmdW5jdGlvbiAq
LworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfZnNf
Z2V0X2xvY2tzX2Z1bmMgKHZvaWQgKmJhdG9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ZuX2xvY2tfdCAqbG9jaywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2Vk
IGNvbW1pdCBsb2cgZmV0Y2hlciAqLworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitzdm5fZXJy
b3JfdCAqc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYyhjb25zdCBjaGFyICoqbG9nX21z
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKip0bXBfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqY29tbWl0X2l0ZW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmF0b24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9vbF90ICpwb29sKTsKKworLyogdGh1
bmtlZCByZXBvcyBhdXRoeiBjYWxsYmFjayBmdW5jdGlvbiAqLworU1ZOX1NXSUdfU1dJR1VUSUxf
RVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfcmVwb3NfYXV0aHpfZnVuYyhzdm5fYm9v
bGVhbl90ICphbGxvd2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3ZuX2ZzX3Jvb3RfdCAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpiYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2VkIGhpc3RvcnkgY2Fs
bGJhY2sgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3Qg
KnN2bl9zd2lnX3B5X3JlcG9zX2hpc3RvcnlfZnVuYyh2b2lkICpiYXRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldmlz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcG9v
bF90ICpwb29sKTsKKworLyogdGh1bmtlZCBsb2cgcmVjZWl2ZXIgZnVuY3Rpb24gKi8KK1NWTl9T
V0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2xvZ19yZWNlaXZl
cih2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXByX2hhc2hfdCAqY2hhbmdlZF9wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ZuX3Jldm51bV90IHJldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqYXV0aG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcl9wb29sX3QgKnBvb2wpOworCisvKiB0aHVua2VkIGluZm8gcmVjZWl2
ZXIgZnVuY3Rpb24gKi8KK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2
bl9zd2lnX3B5X2luZm9fcmVjZWl2ZXJfZnVuYyh2b2lkICpweV9yZWNlaXZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZuX2luZm9f
dCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy
X3Bvb2xfdCAqcG9vbCk7CisKKy8qIHRodW5rZWQgYmxhbWUgcmVjZWl2ZXIgZnVuY3Rpb24gKi8K
K1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NsaWVu
dF9ibGFtZV9yZWNlaXZlcl9mdW5jKHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9pbnQ2NF90IGxpbmVfbm8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3Jldm51
bV90IHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBy
X3Bvb2xfdCAqcG9vbCk7CisKKy8qIGF1dGggcHJvdmlkZXIgY2FsbGJhY2tzICovCitTVk5fU1dJ
R19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRoX3NpbXBsZV9w
cm9tcHRfZnVuYygKKyAgICBzdm5fYXV0aF9jcmVkX3NpbXBsZV90ICoqY3JlZCwKKyAgICB2b2lk
ICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBjb25zdCBjaGFyICp1c2VybmFt
ZSwKKyAgICBzdm5fYm9vbGVhbl90IG1heV9zYXZlLAorICAgIGFwcl9wb29sX3QgKnBvb2wpOwor
CitTVk5fU1dJR19TV0lHVVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9hdXRo
X3VzZXJuYW1lX3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfdXNlcm5hbWVfdCAqKmNy
ZWQsCisgICAgdm9pZCAqYmF0b24sCisgICAgY29uc3QgY2hhciAqcmVhbG0sCisgICAgc3ZuX2Jv
b2xlYW5fdCBtYXlfc2F2ZSwKKyAgICBhcHJfcG9vbF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJ
R1VUSUxfRVhQT1JUCitzdm5fZXJyb3JfdCAqc3ZuX3N3aWdfcHlfYXV0aF9zc2xfc2VydmVyX3Ry
dXN0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRoX2NyZWRfc3NsX3NlcnZlcl90cnVzdF90ICoq
Y3JlZCwKKyAgICB2b2lkICpiYXRvbiwKKyAgICBjb25zdCBjaGFyICpyZWFsbSwKKyAgICBhcHJf
dWludDMyX3QgZmFpbHVyZXMsCisgICAgY29uc3Qgc3ZuX2F1dGhfc3NsX3NlcnZlcl9jZXJ0X2lu
Zm9fdCAqY2VydF9pbmZvLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bv
b2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2
bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9mdW5jKAorICAgIHN2bl9hdXRo
X2NyZWRfc3NsX2NsaWVudF9jZXJ0X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAorICAgIGNv
bnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAgYXByX3Bv
b2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2
bl9zd2lnX3B5X2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jKAorICAgIHN2bl9h
dXRoX2NyZWRfc3NsX2NsaWVudF9jZXJ0X3B3X3QgKipjcmVkLAorICAgIHZvaWQgKmJhdG9uLAor
ICAgIGNvbnN0IGNoYXIgKnJlYWxtLAorICAgIHN2bl9ib29sZWFuX3QgbWF5X3NhdmUsCisgICAg
YXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdVVElMX0VYUE9SVAordm9pZAorc3Zu
X3N3aWdfcHlfc2V0dXBfcmFfY2FsbGJhY2tzKHN2bl9yYV9jYWxsYmFja3MyX3QgKipjYWxsYmFj
a3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmJhdG9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9jYWxsYmFja3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CitTVk5fU1dJR19TV0lH
VVRJTF9FWFBPUlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9jb21taXRfY2FsbGJhY2syKGNv
bnN0IHN2bl9jb21taXRfaW5mb190ICpjb21taXRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXByX3Bvb2xfdCAqcG9vbCk7CisKK1NWTl9TV0lHX1NXSUdV
VElMX0VYUE9SVAorc3ZuX2Vycm9yX3QgKnN2bl9zd2lnX3B5X2NvbW1pdF9jYWxsYmFjayhzdm5f
cmV2bnVtX3QgbmV3X3JldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphdXRob3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uKTsKKworCitTVk5fU1dJR19TV0lHVVRJTF9FWFBP
UlQKK3N2bl9lcnJvcl90ICpzdm5fc3dpZ19weV9yYV9maWxlX3Jldl9oYW5kbGVyX2Z1bmMoCisg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhdG9uLAorICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICBzdm5fcmV2bnVtX3QgcmV2LAorICAg
ICAgICAgICAgICAgICAgICBhcHJfaGFzaF90ICpyZXZfcHJvcHMsCisgICAgICAgICAgICAgICAg
ICAgIHN2bl90eGRlbHRhX3dpbmRvd19oYW5kbGVyX3QgKmRlbHRhX2hhbmRsZXIsCisgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKipkZWx0YV9iYXRvbiwKKyAgICAgICAgICAgICAgICAgICAgYXBy
X2FycmF5X2hlYWRlcl90ICpwcm9wX2RpZmZzLAorICAgICAgICAgICAgICAgICAgICBhcHJfcG9v
bF90ICpwb29sKTsKKworU1ZOX1NXSUdfU1dJR1VUSUxfRVhQT1JUCitleHRlcm4gY29uc3Qgc3Zu
X3JhX3JlcG9ydGVyMl90IHN3aWdfcHlfcmFfcmVwb3J0ZXIyOworCisjaWZkZWYgX19jcGx1c3Bs
dXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgIC8qIFNWTl9TV0lHX1NX
SUdVVElMX1BZX0ggKi8KZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3Vi
dmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkKLS0tIHN1YnZlcnNp
b24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkJ
MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1YnZlcnNpb24tMS4zLjEu
bmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvY2xpZW50LnB5CTIwMDYt
MDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTExIEBACitpbXBvcnQg
dW5pdHRlc3QsIG9zLCB0ZW1wZmlsZSwgdHlwZXMKKworZnJvbSBzdm4gaW1wb3J0IGNvcmUsIHJl
cG9zLCBmcywgZGVsdGEsIGNsaWVudCwgd2MKKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRl
c3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQ
T1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJz
aW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNl
cyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRlZiBzZXRVcChz
ZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisgICAgc2VsZi5j
bGllbnRfY3R4ID0gY2xpZW50LnN2bl9jbGllbnRfY3JlYXRlX2NvbnRleHQoKQorCisgICAgcHJv
dmlkZXJzID0gWworICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF9zaW1wbGVfcHJvdmlkZXIo
KSwKKyAgICAgICBjbGllbnQuc3ZuX2NsaWVudF9nZXRfdXNlcm5hbWVfcHJvdmlkZXIoKSwKKyAg
ICBdCisKKyAgICBzZWxmLmNsaWVudF9jdHguYXV0aF9iYXRvbiA9IGNvcmUuc3ZuX2F1dGhfb3Bl
bihwcm92aWRlcnMpCisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1
cmwoUkVQT1NfUEFUSCkKKworICBkZWYgaW5mb19yZWNlaXZlcihzZWxmLCBwYXRoLCBpbmZvLCBw
b29sKToKKyAgICAiIiJTcXVpcnJlbCBhd2F5IHRoZSBvdXRwdXQgZnJvbSAnc3ZuIGluZm8nIHNv
IHRoYXQgdGhlIHVuaXQgdGVzdHMKKyAgICAgICBjYW4gZ2V0IGF0IHRoZW0uIiIiCisgICAgc2Vs
Zi5wYXRoID0gcGF0aAorICAgIHNlbGYuaW5mbyA9IGluZm8KKworICBkZWYgdGVzdF9jaGVja291
dChzZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfY2hlY2tvdXQyLiIiIgorCisgICAgcmV2
ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0
X3JldmlzaW9uX2hlYWQKKworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVt
cGRpcigpLCAnY2hlY2tvdXQnKQorCisgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwg
Y2xpZW50LmNoZWNrb3V0MiwgCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc191cmws
IHBhdGgsIE5vbmUsIE5vbmUsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuY2xpZW50X2N0eCkKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBh
dGgsIHJldiwgcmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkK
KworICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICIiIlRlc3Qgc2NvcGUgb2YgZ2V0X2xvZ3Mg
Y2FsbGJhY2tzIiIiCisKKyAgICAjIFJ1biBpbmZvCisgICAgcmV2dCA9IGNvcmUuc3ZuX29wdF9y
ZXZpc2lvbl90KCkKKyAgICByZXZ0LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor
ICAgIHJlcG9zX3VybCA9ICJmaWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorICAg
IGNsaWVudC5pbmZvKHJlcG9zX3VybCwgcmV2dCwgcmV2dCwgc2VsZi5pbmZvX3JlY2VpdmVyLAor
ICAgICAgICAgICAgICAgIEZhbHNlLCBzZWxmLmNsaWVudF9jdHgpCisKKyAgICAjIENoZWNrIG91
dHB1dCBmcm9tIHJ1bm5pbmcgaW5mby4gVGhpcyBhbHNvIHNlcnZlcyB0byB2ZXJpZnkgdGhhdAor
ICAgICMgdGhlIGludGVybmFsICdpbmZvJyBvYmplY3QgaXMgc3RpbGwgdmFsaWQKKyAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYucGF0aCwgb3MucGF0aC5iYXNlbmFtZShSRVBPU19QQVRIKSkKKyAg
ICBzZWxmLmluZm8uYXNzZXJ0X3ZhbGlkKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5m
by5VUkwsIHJlcG9zX3VybCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW5mby5yZXBvc19y
b290X1VSTCwgcmVwb3NfdXJsKQorCisKKyAgZGVmIHRlc3RfdXVpZF9mcm9tX3VybChzZWxmKToK
KyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3VybCBvbiBhIGZpbGU6Ly8gVVJMIiIi
CisgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoCisgICAgICAgICAgICAgICAgIGNsaWVudC51
dWlkX2Zyb21fdXJsKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNsaWVudF9jdHgpLAorICAgICAgICAg
ICAgICAgICB0eXBlcy5TdHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3RfdXJsX2Zyb21fcGF0aChz
ZWxmKToKKyAgICAiIiJUZXN0IHN2bl9jbGllbnRfdXJsX2Zyb21fcGF0aCBmb3IgYSBmaWxlOi8v
IFVSTCIiIgorICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHNlbGYu
cmVwb3NfdXJsKSwgc2VsZi5yZXBvc191cmwpCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2
aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisg
ICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICd1cmxfZnJvbV9w
YXRoJykKKworICAgIGNsaWVudC5jaGVja291dDIoc2VsZi5yZXBvc191cmwsIHBhdGgsIHJldiwg
cmV2LCBUcnVlLCBUcnVlLCAKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2N0eCkK
KworICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNsaWVudC51cmxfZnJvbV9wYXRoKHBhdGgpLCBzZWxm
LnJlcG9zX3VybCkKKworICBkZWYgdGVzdF91dWlkX2Zyb21fcGF0aChzZWxmKToKKyAgICAiIiJU
ZXN0IHN2bl9jbGllbnRfdXVpZF9mcm9tX3BhdGguIiIiCisgICAgcmV2ID0gY29yZS5zdm5fb3B0
X3JldmlzaW9uX3QoKQorICAgIHJldi5raW5kID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX2hlYWQK
KworICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLCAndXVpZF9m
cm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgcGF0aCwg
cmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRf
Y3R4KQorCisgICAgd2NfYWRtID0gd2MuYWRtX29wZW4zKE5vbmUsIHBhdGgsIEZhbHNlLCAwLCBO
b25lKQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnV1aWRfZnJvbV9wYXRoKHBhdGgs
IHdjX2FkbSwgc2VsZi5jbGllbnRfY3R4KSwgCisgICAgICAgICAgICAgICAgICAgICAgY2xpZW50
LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xpZW50X2N0eCkpCisKKyAgICBz
ZWxmLmFzc2VydF8oaXNpbnN0YW5jZShjbGllbnQudXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRt
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9jdHgpLCB0eXBlcy5T
dHJpbmdUeXBlcykpCisKKyAgZGVmIHRlc3Rfb3Blbl9yYV9zZXNzaW9uKHNlbGYpOgorICAgICAg
IiIiVGVzdCBzdm5fY2xpZW50X29wZW5fcmFfc2Vzc2lvbigpLiIiIgorICAgICAgY2xpZW50Lm9w
ZW5fcmFfc2Vzc2lvbihzZWxmLnJlcG9zX3VybCwgc2VsZi5jbGllbnRfY3R4KQorCitkZWYgc3Vp
dGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFN1YnZlcnNpb25SZXBvc2l0b3J5
VGVzdENhc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xh
c3M9U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXApCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5l
ci5ydW4oc3VpdGUoKSkKZGlmZiAtTnVyIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9jbGllbnQucHkub3JpZyBzdWJ2ZXJzaW9uLTEuMy4xLm5l
dy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL2NsaWVudC5weS5vcmlnCi0t
LSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMv
Y2xpZW50LnB5Lm9yaWcJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIHN1
YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMv
Y2xpZW50LnB5Lm9yaWcJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAKQEAgLTAs
MCArMSwxMTEgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIHRlbXBmaWxlLCB0eXBlcworCitmcm9t
IHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0YSwgY2xpZW50LCB3YworCitmcm9tIHRy
YWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGltcG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9y
eVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9tIHVybGxpYiBpbXBvcnQgcGF0aG5hbWUy
dXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdENhc2UodW5pdHRlc3QuVGVzdENh
c2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5IGxheWVy
IiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9z
aXRvcnkiIiIKKyAgICBzZWxmLmNsaWVudF9jdHggPSBjbGllbnQuc3ZuX2NsaWVudF9jcmVhdGVf
Y29udGV4dCgpCisKKyAgICBwcm92aWRlcnMgPSBbCisgICAgICAgY2xpZW50LnN2bl9jbGllbnRf
Z2V0X3NpbXBsZV9wcm92aWRlcigpLAorICAgICAgIGNsaWVudC5zdm5fY2xpZW50X2dldF91c2Vy
bmFtZV9wcm92aWRlcigpLAorICAgIF0KKworICAgIHNlbGYuY2xpZW50X2N0eC5hdXRoX2JhdG9u
ID0gY29yZS5zdm5fYXV0aF9vcGVuKHByb3ZpZGVycykKKyAgICBzZWxmLnJlcG9zX3VybCA9ICJm
aWxlOi8vIiArIHBhdGhuYW1lMnVybChSRVBPU19QQVRIKQorCisgIGRlZiBpbmZvX3JlY2VpdmVy
KHNlbGYsIHBhdGgsIGluZm8sIHBvb2wpOgorICAgICIiIlNxdWlycmVsIGF3YXkgdGhlIG91dHB1
dCBmcm9tICdzdm4gaW5mbycgc28gdGhhdCB0aGUgdW5pdCB0ZXN0cworICAgICAgIGNhbiBnZXQg
YXQgdGhlbS4iIiIKKyAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgc2VsZi5pbmZvID0gaW5mbwor
CisgIGRlZiB0ZXN0X2NoZWNrb3V0KHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF9jaGVj
a291dDIuIiIiCisKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2
LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGgu
am9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICdjaGVja291dCcpCisKKyAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhWYWx1ZUVycm9yLCBjbGllbnQuY2hlY2tvdXQyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJlcG9zX3VybCwgcGF0aCwgTm9uZSwgTm9uZSwgVHJ1ZSwgVHJ1ZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgY2xpZW50LmNoZWNrb3V0
MihzZWxmLnJlcG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAg
ICAgc2VsZi5jbGllbnRfY3R4KQorCisgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgIiIiVGVz
dCBzY29wZSBvZiBnZXRfbG9ncyBjYWxsYmFja3MiIiIKKworICAgICMgUnVuIGluZm8KKyAgICBy
ZXZ0ID0gY29yZS5zdm5fb3B0X3JldmlzaW9uX3QoKQorICAgIHJldnQua2luZCA9IGNvcmUuc3Zu
X29wdF9yZXZpc2lvbl9oZWFkCisgICAgcmVwb3NfdXJsID0gImZpbGU6Ly8iICsgcGF0aG5hbWUy
dXJsKFJFUE9TX1BBVEgpCisgICAgY2xpZW50LmluZm8ocmVwb3NfdXJsLCByZXZ0LCByZXZ0LCBz
ZWxmLmluZm9fcmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgRmFsc2UsIHNlbGYuY2xpZW50X2N0
eCkKKworICAgICMgQ2hlY2sgb3V0cHV0IGZyb20gcnVubmluZyBpbmZvLiBUaGlzIGFsc28gc2Vy
dmVzIHRvIHZlcmlmeSB0aGF0CisgICAgIyB0aGUgaW50ZXJuYWwgJ2luZm8nIG9iamVjdCBpcyBz
dGlsbCB2YWxpZAorICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRoLCBvcy5wYXRoLmJhc2Vu
YW1lKFJFUE9TX1BBVEgpKQorICAgIHNlbGYuaW5mby5hc3NlcnRfdmFsaWQoKQorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5pbmZvLlVSTCwgcmVwb3NfdXJsKQorICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5pbmZvLnJlcG9zX3Jvb3RfVVJMLCByZXBvc191cmwpCisKKworICBkZWYgdGVzdF91
dWlkX2Zyb21fdXJsKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fdXJs
IG9uIGEgZmlsZTovLyBVUkwiIiIKKyAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSgKKyAgICAg
ICAgICAgICAgICAgY2xpZW50LnV1aWRfZnJvbV91cmwoc2VsZi5yZXBvc191cmwsIHNlbGYuY2xp
ZW50X2N0eCksCisgICAgICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYg
dGVzdF91cmxfZnJvbV9wYXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91cmxfZnJv
bV9wYXRoIGZvciBhIGZpbGU6Ly8gVVJMIiIiCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50
LnVybF9mcm9tX3BhdGgoc2VsZi5yZXBvc191cmwpLCBzZWxmLnJlcG9zX3VybCkKKworICAgIHJl
diA9IGNvcmUuc3ZuX29wdF9yZXZpc2lvbl90KCkKKyAgICByZXYua2luZCA9IGNvcmUuc3ZuX29w
dF9yZXZpc2lvbl9oZWFkCisKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRl
bXBkaXIoKSwgJ3VybF9mcm9tX3BhdGgnKQorCisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJl
cG9zX3VybCwgcGF0aCwgcmV2LCByZXYsIFRydWUsIFRydWUsIAorICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5jbGllbnRfY3R4KQorCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2xpZW50LnVybF9m
cm9tX3BhdGgocGF0aCksIHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X3V1aWRfZnJvbV9w
YXRoKHNlbGYpOgorICAgICIiIlRlc3Qgc3ZuX2NsaWVudF91dWlkX2Zyb21fcGF0aC4iIiIKKyAg
ICByZXYgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2
bl9vcHRfcmV2aXNpb25faGVhZAorCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5n
ZXR0ZW1wZGlyKCksICd1dWlkX2Zyb21fcGF0aCcpCisKKyAgICBjbGllbnQuY2hlY2tvdXQyKHNl
bGYucmVwb3NfdXJsLCBwYXRoLCByZXYsIHJldiwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmNsaWVudF9jdHgpCisKKyAgICB3Y19hZG0gPSB3Yy5hZG1fb3BlbjMoTm9u
ZSwgcGF0aCwgRmFsc2UsIDAsIE5vbmUpCisKKyAgICBzZWxmLmFzc2VydEVxdWFscyhjbGllbnQu
dXVpZF9mcm9tX3BhdGgocGF0aCwgd2NfYWRtLCBzZWxmLmNsaWVudF9jdHgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICBjbGllbnQudXVpZF9mcm9tX3VybChzZWxmLnJlcG9zX3VybCwgc2VsZi5j
bGllbnRfY3R4KSkKKworICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGNsaWVudC51dWlkX2Zy
b21fcGF0aChwYXRoLCB3Y19hZG0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
Y2xpZW50X2N0eCksIHR5cGVzLlN0cmluZ1R5cGVzKSkKKworICBkZWYgdGVzdF9vcGVuX3JhX3Nl
c3Npb24oc2VsZik6CisgICAgICAiIiJUZXN0IHN2bl9jbGllbnRfb3Blbl9yYV9zZXNzaW9uKCku
IiIiCisgICAgICBjbGllbnQub3Blbl9yYV9zZXNzaW9uKHNlbGYucmVwb3NfdXJsLCBzZWxmLmNs
aWVudF9jdHgpCisKK2RlZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUo
U3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVz
dFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0x
LjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3JhLnB5IHN1YnZlcnNp
b24tMS4zLjEubmV3L3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkK
LS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0
cy9yYS5weQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9yYS5weQky
MDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDEzNiBAQAoraW1w
b3J0IHVuaXR0ZXN0LCBvcworCitmcm9tIHN2biBpbXBvcnQgY29yZSwgcmVwb3MsIGZzLCBkZWx0
YSwgY2xpZW50LCByYQorCitmcm9tIHRyYWMudmVyc2lvbmNvbnRyb2wudGVzdHMuc3ZuX2ZzIGlt
cG9ydCBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCwgXAorICBSRVBPU19QQVRICitmcm9t
IHVybGxpYiBpbXBvcnQgcGF0aG5hbWUydXJsCisKK2NsYXNzIFN1YnZlcnNpb25SZXBvc2l0b3J5
VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAiIiJUZXN0IGNhc2VzIGZvciB0aGUgU3Vi
dmVyc2lvbiByZXBvc2l0b3J5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgICIi
IkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHJhLmluaXRpYWxpemUoKQor
CisgICAgc2VsZi5yZXBvc191cmwgPSAiZmlsZTovLyIgKyBwYXRobmFtZTJ1cmwoUkVQT1NfUEFU
SCkKKyAgICAKKyAgICAjIE9wZW4gcmVwb3NpdG9yeSBkaXJlY3RseSBmb3IgY3Jvc3MtY2hlY2tp
bmcKKyAgICBzZWxmLnJlcG9zID0gcmVwb3Mub3BlbihSRVBPU19QQVRIKQorICAgIHNlbGYuZnMg
PSByZXBvcy5mcyhzZWxmLnJlcG9zKQorCisgICAgY2FsbGJhY2tzID0gcmEuY2FsbGJhY2tzMl90
KCkKKworICAgIHNlbGYucmFfY3R4ID0gcmEub3BlbjIoc2VsZi5yZXBvc191cmwsIGNhbGxiYWNr
cywgTm9uZSwgTm9uZSkKKworICBkZWYgdGVzdF9nZXRfcmVwb3Nfcm9vdChzZWxmKToKKyAgICBy
b290ID0gcmEuZ2V0X3JlcG9zX3Jvb3Qoc2VsZi5yYV9jdHgpCisgICAgc2VsZi5hc3NlcnRFcXVh
bChyb290LHNlbGYucmVwb3NfdXJsKQorCisgIGRlZiB0ZXN0X2dldF91dWlkKHNlbGYpOgorICAg
IHJhX3V1aWQgPSByYS5nZXRfdXVpZChzZWxmLnJhX2N0eCkKKyAgICBmc191dWlkID0gZnMuZ2V0
X3V1aWQoc2VsZi5mcykKKyAgICBzZWxmLmFzc2VydEVxdWFsKHJhX3V1aWQsZnNfdXVpZCkKKwor
ICBkZWYgdGVzdF9nZXRfbGFzdGVzdF9yZXZudW0oc2VsZik6CisgICAgcmFfcmV2bnVtID0gcmEu
Z2V0X2xhdGVzdF9yZXZudW0oc2VsZi5yYV9jdHgpCisgICAgZnNfcmV2bnVtID0gZnMueW91bmdl
c3RfcmV2KHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVhbChyYV9yZXZudW0sZnNfcmV2bnVt
KQorCisgIGRlZiB0ZXN0X2dldF9kaXIoc2VsZik6CisgICAgKGRpcmVudHMsXyxwcm9wcykgPSBy
YS5nZXRfZGlyKHNlbGYucmFfY3R4LCAnJywgMSkKKyAgICBzZWxmLmFzc2VydFRydWUoZGlyZW50
cy5oYXNfa2V5KCd0cnVuaycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRzLmhhc19rZXko
J2JyYW5jaGVzJykpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndGFncycp
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50c1sndHJ1bmsnXS5raW5kLCBjb3JlLnN2bl9u
b2RlX2RpcikKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ2JyYW5jaGVzJ10ua2luZCwg
Y29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWyd0YWdzJ10u
a2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19r
ZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9VVUlEKSkKKyAgICBzZWxmLmFzc2VydFRydWUocHJvcHMu
aGFzX2tleShjb3JlLlNWTl9QUk9QX0VOVFJZX0xBU1RfQVVUSE9SKSkKKworICAgIChkaXJlbnRz
LF8sXykgPSByYS5nZXRfZGlyKHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxKQorCisgICAgc2VsZi5h
c3NlcnRFcXVhbChkaXJlbnRzLCB7fSkKKworICAgIChkaXJlbnRzLF8sXykgPSByYS5nZXRfZGly
KHNlbGYucmFfY3R4LCAndHJ1bmsnLCAxMCkKKworICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlbnRz
Lmhhc19rZXkoJ1JFQURNRTIudHh0JykpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJlbnRzWydS
RUFETUUyLnR4dCddLmtpbmQsY29yZS5zdm5fbm9kZV9maWxlKQorCisgIGRlZiB0ZXN0X2NvbW1p
dChzZWxmKToKKyAgICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvciwgYmF0
b24pOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ucmV2aXNpb24sIGZzLnlvdW5nZXN0
X3JldihzZWxmLmZzKSkKKworICAgIGVkaXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRf
ZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9vYmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQor
ICAgIHJvb3QgPSBkZWx0YS5lZGl0b3JfaW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0
b24sIDQpCisgICAgY2hpbGQgPSBkZWx0YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRp
dG9yLCAiYmxhIiwgcm9vdCwgTm9uZSwgMCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3Nl
X2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9uKQorCisgIGRlZiB0ZXN0X2NvbW1pdChzZWxmKToKKyAg
ICBkZWYgbXlfY2FsbGJhY2socmV2aXNpb24sIGRhdGUsIGF1dGhvcik6CisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmV2aXNpb24sIGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKSkKKworICAgIGVk
aXRvciwgZWRpdF9iYXRvbiA9IHJhLmdldF9jb21taXRfZWRpdG9yKHNlbGYucmFfY3R4LCAiZm9v
YmFyIiwgbXlfY2FsbGJhY2ssIE5vbmUsIEZhbHNlKQorICAgIHJvb3QgPSBkZWx0YS5lZGl0b3Jf
aW52b2tlX29wZW5fcm9vdChlZGl0b3IsIGVkaXRfYmF0b24sIDQpCisgICAgY2hpbGQgPSBkZWx0
YS5lZGl0b3JfaW52b2tlX2FkZF9kaXJlY3RvcnkoZWRpdG9yLCAiYmxhaCIsIHJvb3QsIE5vbmUs
IDApCisgICAgZGVsdGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRv
bikKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlz
aW9uLCBkYXRlLCBhdXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBm
cy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5n
ZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25l
LCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9y
LCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGly
ZWN0b3J5KGVkaXRvciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9p
bnZva2VfY2xvc2VfZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfZ2V0X2xv
Y2F0aW9ucyhzZWxmKToKKyAgICBsb2NhdGlvbnMgPSByYS5nZXRfbG9jYXRpb25zKHNlbGYucmFf
Y3R4LCAiL3RydW5rL1JFQURNRS50eHQiLCAyLCByYW5nZSgxLDUpKQorICAgIHNlbGYuYXNzZXJ0
RXF1YWwobG9jYXRpb25zLCB7CisgICAgICAgIDI6ICcvdHJ1bmsvUkVBRE1FLnR4dCcsIAorICAg
ICAgICAzOiAnL3RydW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgNDogJy90cnVuay9SRUFETUUu
dHh0J30pCisKKyAgZGVmIHRlc3RfZ2V0X2ZpbGVfcmV2cyhzZWxmKToKKyAgICBkZWYgcmV2X2hh
bmRsZXIocGF0aCwgcmV2LCByZXZfcHJvcHMsIHByb3BfZGlmZnMsIHBvb2wpOgorICAgICAgICBz
ZWxmLmFzc2VydF8ocmV2ID09IDIgb3IgcmV2ID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocGF0aCwgIi90cnVuay9SRUFETUUudHh0IikKKyAgICAgICAgaWYgcmV2ID09IDI6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAnc3Zu
OmxvZyc6ICdBZGRlZCBSRUFETUUuJywKKyAgICAgICAgICAgICAgJ3N2bjphdXRob3InOiAnam9o
bicsCisgICAgICAgICAgICAgICdzdm46ZGF0ZSc6ICcyMDA1LTA0LTAxVDEzOjEyOjE4LjIxNjI2
N1onCisgICAgICAgICAgICB9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9wX2Rp
ZmZzLCB7fSkKKyAgICAgICAgZWxpZiByZXYgPT0gMzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmV2X3Byb3BzLCB7CisgICAgICAgICAgICAgICdzdm46bG9nJzogJ0ZpeGVkIFJFQURN
RS5cbicsCisgICAgICAgICAgICAgICdzdm46YXV0aG9yJzogJ2thdGUnLAorICAgICAgICAgICAg
ICAnc3ZuOmRhdGUnOiAnMjAwNS0wNC0wMVQxMzoyNDo1OC4yMzQ2NDNaJworICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywgeydzdm46bWltZS10
eXBlJzogJ3RleHQvcGxhaW4nLCAnc3ZuOmVvbC1zdHlsZSc6ICduYXRpdmUnfSkKKworICAgIHJh
LmdldF9maWxlX3JldnMoc2VsZi5yYV9jdHgsICJ0cnVuay9SRUFETUUudHh0IiwgMCwgMTAsIHJl
dl9oYW5kbGVyKQorCisgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICBjbGFzcyBUZXN0RWRp
dG9yKGRlbHRhLkVkaXRvcik6CisgICAgICAgIHBhc3MKKworICAgIGVkaXRvciA9IFRlc3RFZGl0
b3IoKQorCisgICAgZV9wdHIsIGVfYmF0b24gPSBkZWx0YS5tYWtlX2VkaXRvcihlZGl0b3IpCisg
ICAgCisgICAgcmVwb3J0ZXIsIHJlcG9ydGVyX2JhdG9uID0gcmEuZG9fdXBkYXRlKHNlbGYucmFf
Y3R4LCAxMCwgIiIsIFRydWUsIGVfcHRyLCBlX2JhdG9uKQorCisgICAgcmEucmVwb3J0ZXIyX2lu
dm9rZV9zZXRfcGF0aChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24sICIiLCAwLCBUcnVlLCBOb25l
KQorCisgICAgcmEucmVwb3J0ZXIyX2ludm9rZV9maW5pc2hfcmVwb3J0KHJlcG9ydGVyLCByZXBv
cnRlcl9iYXRvbikKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0
ZShTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlLCAndGVzdCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWl0ZUNsYXNzPVN1YnZlcnNpb25SZXBvc2l0b3J5VGVzdFNldHVwKQor
CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRU
ZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCmRpZmYgLU51ciBzdWJ2ZXJzaW9u
LTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcmEucHkub3JpZyBz
dWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz
L3JhLnB5Lm9yaWcKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2ln
L3B5dGhvbi90ZXN0cy9yYS5weS5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw
MTAwCisrKyBzdWJ2ZXJzaW9uLTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0
aG9uL3Rlc3RzL3JhLnB5Lm9yaWcJMjAwNi0wNy0wNSAwMTowNDowNi4wMDAwMDAwMDAgKzAxMDAK
QEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MKKworZnJvbSBzdm4gaW1wb3J0
IGNvcmUsIHJlcG9zLCBmcywgZGVsdGEsIGNsaWVudCwgcmEKKworZnJvbSB0cmFjLnZlcnNpb25j
b250cm9sLnRlc3RzLnN2bl9mcyBpbXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAs
IFwKKyAgUkVQT1NfUEFUSAorZnJvbSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFz
cyBTdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIi
VGVzdCBjYXNlcyBmb3IgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBsYXllciIiIgorCisgIGRl
ZiBzZXRVcChzZWxmKToKKyAgICAiIiJMb2FkIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IiIiCisK
KyAgICByYS5pbml0aWFsaXplKCkKKworICAgIHNlbGYucmVwb3NfdXJsID0gImZpbGU6Ly8iICsg
cGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBPcGVuIHJlcG9zaXRvcnkgZGly
ZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBvcyA9IHJlcG9zLm9wZW4oUkVQ
T1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5yZXBvcykKKworICAgIGNhbGxi
YWNrcyA9IHJhLmNhbGxiYWNrczJfdCgpCisKKyAgICBzZWxmLnJhX2N0eCA9IHJhLm9wZW4yKHNl
bGYucmVwb3NfdXJsLCBjYWxsYmFja3MsIE5vbmUsIE5vbmUpCisKKyAgZGVmIHRlc3RfZ2V0X3Jl
cG9zX3Jvb3Qoc2VsZik6CisgICAgcm9vdCA9IHJhLmdldF9yZXBvc19yb290KHNlbGYucmFfY3R4
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwocm9vdCxzZWxmLnJlcG9zX3VybCkKKworICBkZWYgdGVz
dF9nZXRfdXVpZChzZWxmKToKKyAgICByYV91dWlkID0gcmEuZ2V0X3V1aWQoc2VsZi5yYV9jdHgp
CisgICAgZnNfdXVpZCA9IGZzLmdldF91dWlkKHNlbGYuZnMpCisgICAgc2VsZi5hc3NlcnRFcXVh
bChyYV91dWlkLGZzX3V1aWQpCisKKyAgZGVmIHRlc3RfZ2V0X2xhc3Rlc3RfcmV2bnVtKHNlbGYp
OgorICAgIHJhX3Jldm51bSA9IHJhLmdldF9sYXRlc3RfcmV2bnVtKHNlbGYucmFfY3R4KQorICAg
IGZzX3Jldm51bSA9IGZzLnlvdW5nZXN0X3JldihzZWxmLmZzKQorICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmFfcmV2bnVtLGZzX3Jldm51bSkKKworICBkZWYgdGVzdF9nZXRfZGlyKHNlbGYpOgorICAg
IChkaXJlbnRzLF8scHJvcHMpID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJycsIDEpCisgICAg
c2VsZi5hc3NlcnRUcnVlKGRpcmVudHMuaGFzX2tleSgndHJ1bmsnKSkKKyAgICBzZWxmLmFzc2Vy
dFRydWUoZGlyZW50cy5oYXNfa2V5KCdicmFuY2hlcycpKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShk
aXJlbnRzLmhhc19rZXkoJ3RhZ3MnKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGRpcmVudHNbJ3Ry
dW5rJ10ua2luZCwgY29yZS5zdm5fbm9kZV9kaXIpCisgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJl
bnRzWydicmFuY2hlcyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGlyKQorICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZGlyZW50c1sndGFncyddLmtpbmQsIGNvcmUuc3ZuX25vZGVfZGlyKQorICAgIHNlbGYu
YXNzZXJ0VHJ1ZShwcm9wcy5oYXNfa2V5KGNvcmUuU1ZOX1BST1BfRU5UUllfVVVJRCkpCisgICAg
c2VsZi5hc3NlcnRUcnVlKHByb3BzLmhhc19rZXkoY29yZS5TVk5fUFJPUF9FTlRSWV9MQVNUX0FV
VEhPUikpCisKKyAgICAoZGlyZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3Ry
dW5rJywgMSkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyZW50cywge30pCisKKyAgICAoZGly
ZW50cyxfLF8pID0gcmEuZ2V0X2RpcihzZWxmLnJhX2N0eCwgJ3RydW5rJywgMTApCisKKyAgICBz
ZWxmLmFzc2VydFRydWUoZGlyZW50cy5oYXNfa2V5KCdSRUFETUUyLnR4dCcpKQorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZGlyZW50c1snUkVBRE1FMi50eHQnXS5raW5kLGNvcmUuc3ZuX25vZGVfZmls
ZSkKKworICBkZWYgdGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlz
aW9uLCBkYXRlLCBhdXRob3IsIGJhdG9uKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZv
LnJldmlzaW9uLCBmcy55b3VuZ2VzdF9yZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRf
YmF0b24gPSByYS5nZXRfY29tbWl0X2VkaXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2Nh
bGxiYWNrLCBOb25lLCBGYWxzZSkKKyAgICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVu
X3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9uLCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2lu
dm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRvciwgImJsYSIsIHJvb3QsIE5vbmUsIDApCisgICAgZGVs
dGEuZWRpdG9yX2ludm9rZV9jbG9zZV9lZGl0KGVkaXRvciwgZWRpdF9iYXRvbikKKworICBkZWYg
dGVzdF9jb21taXQoc2VsZik6CisgICAgZGVmIG15X2NhbGxiYWNrKHJldmlzaW9uLCBkYXRlLCBh
dXRob3IpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCBmcy55b3VuZ2VzdF9y
ZXYoc2VsZi5mcykpCisKKyAgICBlZGl0b3IsIGVkaXRfYmF0b24gPSByYS5nZXRfY29tbWl0X2Vk
aXRvcihzZWxmLnJhX2N0eCwgImZvb2JhciIsIG15X2NhbGxiYWNrLCBOb25lLCBGYWxzZSkKKyAg
ICByb290ID0gZGVsdGEuZWRpdG9yX2ludm9rZV9vcGVuX3Jvb3QoZWRpdG9yLCBlZGl0X2JhdG9u
LCA0KQorICAgIGNoaWxkID0gZGVsdGEuZWRpdG9yX2ludm9rZV9hZGRfZGlyZWN0b3J5KGVkaXRv
ciwgImJsYWgiLCByb290LCBOb25lLCAwKQorICAgIGRlbHRhLmVkaXRvcl9pbnZva2VfY2xvc2Vf
ZWRpdChlZGl0b3IsIGVkaXRfYmF0b24pCisKKyAgZGVmIHRlc3RfY29tbWl0KHNlbGYpOgorICAg
IGRlZiBteV9jYWxsYmFjayhyZXZpc2lvbiwgZGF0ZSwgYXV0aG9yKToKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChyZXZpc2lvbiwgZnMueW91bmdlc3RfcmV2KHNlbGYuZnMpKQorCisgICAgZWRp
dG9yLCBlZGl0X2JhdG9uID0gcmEuZ2V0X2NvbW1pdF9lZGl0b3Ioc2VsZi5yYV9jdHgsICJmb29i
YXIiLCBteV9jYWxsYmFjaywgTm9uZSwgRmFsc2UpCisgICAgcm9vdCA9IGRlbHRhLmVkaXRvcl9p
bnZva2Vfb3Blbl9yb290KGVkaXRvciwgZWRpdF9iYXRvbiwgNCkKKyAgICBjaGlsZCA9IGRlbHRh
LmVkaXRvcl9pbnZva2VfYWRkX2RpcmVjdG9yeShlZGl0b3IsICJibGFoIiwgcm9vdCwgTm9uZSwg
MCkKKyAgICBkZWx0YS5lZGl0b3JfaW52b2tlX2Nsb3NlX2VkaXQoZWRpdG9yLCBlZGl0X2JhdG9u
KQorCisgIGRlZiB0ZXN0X2dldF9sb2NhdGlvbnMoc2VsZik6CisgICAgbG9jYXRpb25zID0gcmEu
Z2V0X2xvY2F0aW9ucyhzZWxmLnJhX2N0eCwgIi90cnVuay9SRUFETUUudHh0IiwgMiwgcmFuZ2Uo
MSw1KSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2F0aW9ucywgeworICAgICAgICAyOiAnL3Ry
dW5rL1JFQURNRS50eHQnLCAKKyAgICAgICAgMzogJy90cnVuay9SRUFETUUudHh0JywgCisgICAg
ICAgIDQ6ICcvdHJ1bmsvUkVBRE1FLnR4dCd9KQorCisgIGRlZiB0ZXN0X2dldF9maWxlX3JldnMo
c2VsZik6CisgICAgZGVmIHJldl9oYW5kbGVyKHBhdGgsIHJldiwgcmV2X3Byb3BzLCBwcm9wX2Rp
ZmZzLCBwb29sKToKKyAgICAgICAgc2VsZi5hc3NlcnRfKHJldiA9PSAyIG9yIHJldiA9PSAzKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsICIvdHJ1bmsvUkVBRE1FLnR4dCIpCisgICAg
ICAgIGlmIHJldiA9PSAyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZfcHJvcHMs
IHsKKyAgICAgICAgICAgICAgJ3N2bjpsb2cnOiAnQWRkZWQgUkVBRE1FLicsCisgICAgICAgICAg
ICAgICdzdm46YXV0aG9yJzogJ2pvaG4nLAorICAgICAgICAgICAgICAnc3ZuOmRhdGUnOiAnMjAw
NS0wNC0wMVQxMzoxMjoxOC4yMTYyNjdaJworICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocHJvcF9kaWZmcywge30pCisgICAgICAgIGVsaWYgcmV2ID09IDM6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldl9wcm9wcywgeworICAgICAgICAgICAgICAn
c3ZuOmxvZyc6ICdGaXhlZCBSRUFETUUuXG4nLAorICAgICAgICAgICAgICAnc3ZuOmF1dGhvcic6
ICdrYXRlJywKKyAgICAgICAgICAgICAgJ3N2bjpkYXRlJzogJzIwMDUtMDQtMDFUMTM6MjQ6NTgu
MjM0NjQzWicKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBy
b3BfZGlmZnMsIHsnc3ZuOm1pbWUtdHlwZSc6ICd0ZXh0L3BsYWluJywgJ3N2bjplb2wtc3R5bGUn
OiAnbmF0aXZlJ30pCisKKyAgICByYS5nZXRfZmlsZV9yZXZzKHNlbGYucmFfY3R4LCAidHJ1bmsv
UkVBRE1FLnR4dCIsIDAsIDEwLCByZXZfaGFuZGxlcikKKworICBkZWYgdGVzdF91cGRhdGUoc2Vs
Zik6CisgICAgY2xhc3MgVGVzdEVkaXRvcihkZWx0YS5FZGl0b3IpOgorICAgICAgICBwYXNzCisK
KyAgICBlZGl0b3IgPSBUZXN0RWRpdG9yKCkKKworICAgIGVfcHRyLCBlX2JhdG9uID0gZGVsdGEu
bWFrZV9lZGl0b3IoZWRpdG9yKQorICAgIAorICAgIHJlcG9ydGVyLCByZXBvcnRlcl9iYXRvbiA9
IHJhLmRvX3VwZGF0ZShzZWxmLnJhX2N0eCwgMTAsICIiLCBUcnVlLCBlX3B0ciwgZV9iYXRvbikK
KworICAgIHJhLnJlcG9ydGVyMl9pbnZva2Vfc2V0X3BhdGgocmVwb3J0ZXIsIHJlcG9ydGVyX2Jh
dG9uLCAiIiwgMCwgVHJ1ZSwgTm9uZSkKKworICAgIHJhLnJlcG9ydGVyMl9pbnZva2VfZmluaXNo
X3JlcG9ydChyZXBvcnRlciwgcmVwb3J0ZXJfYmF0b24pCisKK2RlZiBzdWl0ZSgpOgorICAgIHJl
dHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0Q2FzZSwgJ3Rl
c3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1TdWJ2ZXJzaW9u
UmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBy
dW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgp
KQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0
aG9uL3Rlc3RzL3J1bl9hbGwucHkgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5k
aW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5Ci0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1
YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvcnVuX2FsbC5weQkyMDA1LTEwLTAy
IDA1OjE4OjI1LjAwMDAwMDAwMCArMDEwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy9ydW5fYWxsLnB5CTIwMDYtMDctMDUgMDE6
MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHN5cywgb3MKIGJp
bmRpciA9IG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkKLXN5cy5wYXRoWzA6MF0gPSBbIG9z
LmdldGN3ZCgpLCAiJXMvLmxpYnMiICUgb3MuZ2V0Y3dkKCksIFwKK3N5cy5wYXRoWzA6MF0gPSBb
IGJpbmRpciwgb3MuZ2V0Y3dkKCksICIlcy8ubGlicyIgJSBvcy5nZXRjd2QoKSwgXAogICAgICAg
ICAgICAgICAgICAgIiVzLy4uIiAlIGJpbmRpciwgIiVzLy4uLy5saWJzIiAlIGJpbmRpciBdCiAK
ICMgT1NlcyB3aXRob3V0IFJQQVRIIHN1cHBvcnQgYXJlIGdvaW5nIHRvIGhhdmUgdG8gZG8gdGhp
bmdzIGhlcmUgdG8gbWFrZQpAQCAtMTcsNiArMTcsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBv
cnQgcG9vbAogaW1wb3J0IHJlcG9zaXRvcnkKK2ltcG9ydCBjbGllbnQKK2ltcG9ydCByYQoraW1w
b3J0IHdjCiBpbXBvcnQgdHJhYy52ZXJzaW9uY29udHJvbC50ZXN0cwogCiAjIFJ1biBhbGwgdGVz
dHMKQEAgLTI0LDcgKzI3LDEwIEBACiBkZWYgc3VpdGUoKToKICAgIiIiUnVuIGFsbCB0ZXN0cyIi
IgogICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgIHN1aXRlLmFkZFRlc3QoY2xpZW50
LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QocG9vbC5zdWl0ZSgpKQorICBzdWl0ZS5hZGRUZXN0
KHJhLnN1aXRlKCkpCisgIHN1aXRlLmFkZFRlc3Qod2Muc3VpdGUoKSkKICAgc3VpdGUuYWRkVGVz
dChyZXBvc2l0b3J5LnN1aXRlKCkpCiAgIHN1aXRlLmFkZFRlc3QodHJhYy52ZXJzaW9uY29udHJv
bC50ZXN0cy5zdWl0ZSgpKTsKICAgcmV0dXJuIHN1aXRlCmRpZmYgLU51ciBzdWJ2ZXJzaW9uLTEu
My4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9weXRob24vdGVzdHMvd2MucHkgc3VidmVyc2lv
bi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3B5dGhvbi90ZXN0cy93Yy5weQot
LS0gc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3Rz
L3djLnB5CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKyBzdWJ2ZXJzaW9u
LTEuMy4xLm5ldy9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcHl0aG9uL3Rlc3RzL3djLnB5CTIw
MDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMTc1IEBACitpbXBv
cnQgdW5pdHRlc3QsIG9zLCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHN2biBpbXBv
cnQgY29yZSwgcmVwb3MsIHdjLCBjbGllbnQKK2Zyb20gbGlic3ZuLmNvcmUgaW1wb3J0IFN1YnZl
cnNpb25FeGNlcHRpb24KKworZnJvbSB0cmFjLnZlcnNpb25jb250cm9sLnRlc3RzLnN2bl9mcyBp
bXBvcnQgU3VidmVyc2lvblJlcG9zaXRvcnlUZXN0U2V0dXAsIFwKKyAgUkVQT1NfUEFUSAorZnJv
bSB1cmxsaWIgaW1wb3J0IHBhdGhuYW1lMnVybAorCitjbGFzcyBTdWJ2ZXJzaW9uUmVwb3NpdG9y
eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIiIiVGVzdCBjYXNlcyBmb3IgdGhlIFN1
YnZlcnNpb24gd29ya2luZyBjb3B5IGxheWVyIiIiCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAg
ICIiIkxvYWQgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkiIiIKKworICAgIHNlbGYucmVwb3NfdXJs
ID0gImZpbGU6Ly8iICsgcGF0aG5hbWUydXJsKFJFUE9TX1BBVEgpCisgICAgCisgICAgIyBPcGVu
IHJlcG9zaXRvcnkgZGlyZWN0bHkgZm9yIGNyb3NzLWNoZWNraW5nCisgICAgc2VsZi5yZXBvcyA9
IHJlcG9zLm9wZW4oUkVQT1NfUEFUSCkKKyAgICBzZWxmLmZzID0gcmVwb3MuZnMoc2VsZi5yZXBv
cykKKworICAgIHNlbGYucGF0aCA9IHRlbXBmaWxlLm1rdGVtcCgpCisKKyAgICBjbGllbnRfY3R4
ID0gY2xpZW50LmNyZWF0ZV9jb250ZXh0KCkKKyAgICAKKyAgICByZXYgPSBjb3JlLnN2bl9vcHRf
cmV2aXNpb25fdCgpCisgICAgcmV2LmtpbmQgPSBjb3JlLnN2bl9vcHRfcmV2aXNpb25faGVhZAor
CisgICAgY2xpZW50LmNoZWNrb3V0MihzZWxmLnJlcG9zX3VybCwgc2VsZi5wYXRoLCByZXYsIHJl
diwgVHJ1ZSwgVHJ1ZSwgCisgICAgICAgICAgICBjbGllbnRfY3R4KQorCisgICAgc2VsZi53YyA9
IHdjLmFkbV9vcGVuMyhOb25lLCBzZWxmLnBhdGgsIFRydWUsIC0xLCBOb25lKQorCisgIGRlZiB0
ZXN0X2VudHJ5KHNlbGYpOgorICAgICAgd2NfZW50cnkgPSB3Yy5lbnRyeShzZWxmLnBhdGgsIHNl
bGYud2MsIFRydWUpCisKKyAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgIGxvY2sgPSB3Yy5h
ZGRfbG9jayhzZWxmLnBhdGgsIGNvcmUuc3ZuX2xvY2tfY3JlYXRlKGNvcmUuUG9vbCgpKSwgc2Vs
Zi53YykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MuYWRtX2xvY2tlZChzZWxmLndj
KSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgd2MubG9ja2VkKHNlbGYucGF0aCkpCisg
ICAgICB3Yy5yZW1vdmVfbG9jayhzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfdmVy
c2lvbihzZWxmKToKKyAgICAgIHdjLnZlcnNpb24oKQorCisgIGRlZiB0ZXN0X2FjY2Vzc19wYXRo
KHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGgsIHdjLmFkbV9hY2Nlc3Nf
cGF0aChzZWxmLndjKSkKKworICBkZWYgdGVzdF9pc19hZG1fZGlyKHNlbGYpOgorICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RmFs
c2Uod2MuaXNfYWRtX2RpcigiLmZvb3N2biIpKQorCisgIGRlZiB0ZXN0X2dldF9hZG1fZGlyKHNl
bGYpOgorICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uod2MuZ2V0X2FkbV9kaXIoKSwg
YmFzZXN0cmluZykpCisKKyAgZGVmIHRlc3Rfc2V0X2FkbV9kaXIoc2VsZik6CisgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhTdWJ2ZXJzaW9uRXhjZXB0aW9uLCB3Yy5zZXRfYWRtX2RpciwgIi5mb29i
YXIiKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKHdjLmlzX2FkbV9kaXIoIi5zdm4iKSkKKyAgICAg
IHNlbGYuYXNzZXJ0RmFsc2Uod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh3Yy5pc19hZG1fZGlyKCIuZm9vYmFyIikpCisgICAgICB3Yy5zZXRfYWRtX2Rpcigi
X3N2biIpCisgICAgICBzZWxmLmFzc2VydFRydWUod2MuaXNfYWRtX2RpcigiX3N2biIpKQorICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgiX3N2biIsIHdjLmdldF9hZG1fZGlyKCkpCisgICAgICB3Yy5z
ZXRfYWRtX2RpcigiLnN2biIpCisgICAgICBzZWxmLmFzc2VydEZhbHNlKHdjLmlzX2FkbV9kaXIo
Il9zdm4iKSkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi5zdm4iLCB3Yy5nZXRfYWRtX2Rpcigp
KQorCisgIGRlZiB0ZXN0X2luaXRfdHJhdmVyc2FsX2luZm8oc2VsZik6CisgICAgICB3Yy5pbml0
X3RyYXZlcnNhbF9pbmZvKCkKKworICBkZWYgdGVzdF9jcmF3bF9yZXZpc2lvbnMyKHNlbGYpOgor
ICAgICAgaW5mb3MgPSBbXQorICAgICAgc2V0X3BhdGhzID0gW10KKworICAgICAgZGVmIG5vdGlm
eShpbmZvLCBwb29sKToKKyAgICAgICAgICBpbmZvcy5hcHBlbmQoaW5mbykKKworICAgICAgY2xh
c3MgTXlSZXBvcnRlcjoKKyAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAg
ICAgIHNlbGYuX2ZpbmlzaGVkX3JlcG9ydCA9IEZhbHNlCisKKyAgICAgICAgICBkZWYgYWJvcnRf
cmVwb3J0KHNlbGYsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICBkZWYg
ZmluaXNoX3JlcG9ydChzZWxmLCBwb29sKToKKyAgICAgICAgICAgICAgc2VsZi5fZmluaXNoZWRf
cmVwb3J0ID0gVHJ1ZQorCisgICAgICAgICAgZGVmIHNldF9wYXRoKHNlbGYsIHBhdGgsIHJldmlz
aW9uLCBzdGFydF9lbXB0eSwgbG9ja190b2tlbiwgcG9vbCk6CisgICAgICAgICAgICAgIHNldF9w
YXRocy5hcHBlbmQocGF0aCkKKworICAgICAgICAgIGRlZiBsaW5rX3BhdGgoc2VsZiwgcGF0aCwg
dXJsLCByZXZpc2lvbiwgc3RhcnRfZW1wdHksIGxvY2tfdG9rZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBwb29sKToKKyAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgZGVmIGRlbGV0
ZV9wYXRoKHNlbGYsIHBhdGgsIHBvb2wpOgorICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICMg
UmVtb3ZlIHRydW5rL1JFQURNRS50eHQKKyAgICAgIHJlYWRtZV9wYXRoID0gb3MucGF0aC5qb2lu
KHNlbGYucGF0aCwgInRydW5rIiwgIlJFQURNRS50eHQiKQorICAgICAgc2VsZi5hc3NlcnRfKG9z
LnBhdGguZXhpc3RzKHJlYWRtZV9wYXRoKSkKKyAgICAgIG9zLnJlbW92ZShyZWFkbWVfcGF0aCkK
KworICAgICAgIyBSZXN0b3JlIHRydW5rL1JFQURNRS50eHQgdXNpbmcgY3Jhd2xfcmV2aXNpb24y
CisgICAgICBpbmZvID0gd2MuaW5pdF90cmF2ZXJzYWxfaW5mbygpCisgICAgICByZXBvcnRlciA9
IE15UmVwb3J0ZXIoKQorICAgICAgd2MuY3Jhd2xfcmV2aXNpb25zMihzZWxmLnBhdGgsIHNlbGYu
d2MsIHJlcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBUcnVlLCBGYWxz
ZSwgbm90aWZ5LCBpbmZvKQorCisgICAgICAjIENoZWNrIHRoYXQgdGhlIHJlcG9ydCBmaW5pc2hl
ZAorICAgICAgc2VsZi5hc3NlcnRfKHJlcG9ydGVyLl9maW5pc2hlZF9yZXBvcnQpCisgICAgICBz
ZWxmLmFzc2VydEVxdWFsKFsnJ10sIHNldF9wYXRocykKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MSwgbGVuKGluZm9zKSkKKworICAgICAgIyBDaGVjayBjb250ZW50IG9mIGluZm9zIG9iamVjdAor
ICAgICAgW2luZm9dID0gaW5mb3MKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZG1lX3BhdGgs
IGluZm8ucGF0aCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29yZS5zdm5fbm9kZV9maWxlLCBp
bmZvLmtpbmQpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBpbmZvLnJldmlzaW9uKQorCisg
IGRlZiB0ZXN0X2NyZWF0ZV9ub3RpZnkoc2VsZik6CisgICAgICB3Yy5jcmVhdGVfbm90aWZ5KHNl
bGYucGF0aCwgd2Mubm90aWZ5X2FkZCkKKworICBkZWYgdGVzdF9jaGVja193YyhzZWxmKToKKyAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Yy5jaGVja193YyhzZWxmLnBhdGgpID4gMCkKKworICBkZWYg
dGVzdF9nZXRfYW5jZXN0cnkoc2VsZik6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzZWxmLnJl
cG9zX3VybCwgMTJdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgd2MuZ2V0X2FuY2VzdHJ5KHNl
bGYucGF0aCwgc2VsZi53YykpCisKKyAgZGVmIHRlc3Rfc3RhdHVzKHNlbGYpOgorICAgICAgd2Mu
c3RhdHVzMihzZWxmLnBhdGgsIHNlbGYud2MpCisKKyAgZGVmIHRlc3RfaXNfbm9ybWFsX3Byb3Ao
c2VsZik6CisgICAgICBzZWxmLmZhaWxJZih3Yy5pc19ub3JtYWxfcHJvcCgnc3ZuOndjOmZvbzpi
YXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46ZW50cnk6Zm9v
OmJhcicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdzdm46Zm9vOmJh
cicpKQorICAgICAgc2VsZi5hc3NlcnRfKHdjLmlzX25vcm1hbF9wcm9wKCdmb3JlaWduOmZvbzpi
YXInKSkKKworICBkZWYgdGVzdF9pc193Y19wcm9wKHNlbGYpOgorICAgICAgc2VsZi5hc3NlcnRf
KHdjLmlzX3djX3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisgICAgICBzZWxmLmZhaWxJZih3Yy5p
c193Y19wcm9wKCdzdm46ZW50cnk6Zm9vOmJhcicpKQorICAgICAgc2VsZi5mYWlsSWYod2MuaXNf
d2NfcHJvcCgnc3ZuOmZvbzpiYXInKSkKKyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX3djX3Byb3Ao
J2ZvcmVpZ246Zm9vOmJhcicpKQorCisgIGRlZiB0ZXN0X2lzX2VudHJ5X3Byb3Aoc2VsZik6Cisg
ICAgICBzZWxmLmFzc2VydF8od2MuaXNfZW50cnlfcHJvcCgnc3ZuOmVudHJ5OmZvbzpiYXInKSkK
KyAgICAgIHNlbGYuZmFpbElmKHdjLmlzX2VudHJ5X3Byb3AoJ3N2bjp3Yzpmb286YmFyJykpCisg
ICAgICBzZWxmLmZhaWxJZih3Yy5pc19lbnRyeV9wcm9wKCdzdm46Zm9vOmJhcicpKQorICAgICAg
c2VsZi5mYWlsSWYod2MuaXNfZW50cnlfcHJvcCgnZm9yZWlnbjpmb286YmFyJykpCisKKyAgZGVm
IHRlc3RfZ2V0X3ByaXN0aW5lX2NvcHlfcGF0aChzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCisgICAgICAgIHdjLmdldF9wcmlzdGluZV9jb3B5X3BhdGgob3MucGF0aC5qb2luKHNlbGYu
cGF0aCwgJ2ZvbycpKSwKKyAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgd2MuZ2V0X2Fk
bV9kaXIoKSwgJ3RleHQtYmFzZScsICdmb28uc3ZuLWJhc2UnKSkKKworICBkZWYgdGVzdF9nZXRf
aWdub3JlcyhzZWxmKToKKyAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHdjLmdldF9pZ25v
cmVzKE5vbmUsIHNlbGYud2MpLCBsaXN0KSkKKworICBkZWYgdGVzdF9lbnRyaWVzX3JlYWQoc2Vs
Zik6CisgICAgICBlbnRyaWVzID0gd2MuZW50cmllc19yZWFkKHNlbGYud2MsIFRydWUpCisgICAg
ICAgIAorICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJycsICd0YWdzJywgJ2JyYW5jaGVzJywgJ3Ry
dW5rJ10sIGVudHJpZXMua2V5cygpKQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgIHdj
LmFkbV9jbG9zZShzZWxmLndjKQorICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnBhdGgpCisKK2Rl
ZiBzdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU3VidmVyc2lvblJlcG9z
aXRvcnlUZXN0Q2FzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vp
dGVDbGFzcz1TdWJ2ZXJzaW9uUmVwb3NpdG9yeVRlc3RTZXR1cCkKKworaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAg
cnVubmVyLnJ1bihzdWl0ZSgpKQpkaWZmIC1OdXIgc3VidmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9u
L2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pIHN1YnZlcnNpb24tMS4zLjEubmV3L3N1YnZlcnNp
b24vYmluZGluZ3Mvc3dpZy9zdm5fY2xpZW50LmkKLS0tIHN1YnZlcnNpb24tMS4zLjEvc3VidmVy
c2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaQkyMDA2LTAxLTA0IDE3OjIwOjA4LjAwMDAw
MDAwMCArMDAwMAorKysgc3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9z
d2lnL3N2bl9jbGllbnQuaQkyMDA2LTA3LTA1IDAxOjA0OjA2LjAwMDAwMDAwMCArMDEwMApAQCAt
MjUsNiArMjUsNyBAQAogI2VuZGlmCiAKICVpbmNsdWRlIHR5cGVtYXBzLmkKKyVpbmNsdWRlIGNv
bnN0cmFpbnRzLmkKIAogJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cKICVpbXBvcnQgY29yZS5pCkBA
IC00NCw2ICs0NSwxMSBAQAogICBzdm5fY2xpZW50X2N0eF90ICoqCiB9OwogCislYXBwbHkgUG9p
bnRlciBOT05OVUxMIHsgCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisg
IGNvbnN0IHN2bl9vcHRfcmV2aXNpb25fdCAqcGVnX3JldmlzaW9uCit9OworCiAlYXBwbHkgY29u
c3QgYXByX2FycmF5X2hlYWRlcl90ICpTVFJJTkdMSVNUIHsKICAgICBjb25zdCBhcHJfYXJyYXlf
aGVhZGVyX3QgKnRhcmdldHMsCiAgICAgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29w
dGlvbnMKQEAgLTY2LDYgKzcyLDE2IEBACiAKICNpZmRlZiBTV0lHUFlUSE9OCiAlYXBwbHkgc3Zu
X3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJlYW1fdCAqIH07CisKKy8qIG1lbWJl
cnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZvaWQgKlBZX0FTX1ZPSUQgeworICAg
IHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2dfbXNnX2JhdG9uLAorICAgIHZvaWQg
KmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0b24yLAorICAgIHZvaWQgKmxvZ19t
c2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9uCit9OwogI2VuZGlmCiAKIC8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0yMDAsNiArMjE2LDE4IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJfdAorICAgc3ZuX2NsaWVudF9pbmZvKCkK
KyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5faW5mb19yZWNlaXZlcl90IHJlY2VpdmVy
LCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNlaXZlcl9iYXRvbikgeworICAgICQx
ID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5jOworICAgICQyID0gKHZvaWQgKikkaW5w
dXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdlIHVzZSAnc3ZuX3djX3N0YXR1c190
IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBpc24ndCBpbiB0aGUKICAgIEFQSSBhbnl3
aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRlIGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQu
IGJ5CiAgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRpb24gaGVyZSwgU1dJRyB3aWxsIGluc2Vy
dCBhIG5hbWUgZm9yIGl0LgpAQCAtNDgzLDYgKzUxMSwyNCBAQAogJWluY2x1ZGUgc3ZuX3RpbWVf
aC5zd2cKICVpbmNsdWRlIHN2bl9jbGllbnRfaC5zd2cKIAorI2lmZGVmIFNXSUdQWVRIT04KKwor
LyogcHJvdmlkZSBQeXRob24gd2l0aCBhY2Nlc3MgdG8gc29tZSB0aHVua3MuICovCislY29uc3Rh
bnQgc3ZuX2NhbmNlbF9mdW5jX3Qgc3ZuX3N3aWdfcHlfY2FuY2VsX2Z1bmM7CislY29uc3RhbnQg
c3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJfdCBzdm5fc3dpZ19weV9nZXRfY29tbWl0X2xvZ19m
dW5jOworJWNvbnN0YW50IHN2bl93Y19ub3RpZnlfZnVuYzJfdCBzdm5fc3dpZ19weV9ub3RpZnlf
ZnVuYzsKKworI2VuZGlmCisKKyNpZmRlZiBTV0lHUFlUSE9OCisKKy8qIHByb3ZpZGUgUHl0aG9u
IHdpdGggYWNjZXNzIHRvIHNvbWUgdGh1bmtzLiAqLworJWNvbnN0YW50IHN2bl9jYW5jZWxfZnVu
Y190IHN2bl9zd2lnX3B5X2NhbmNlbF9mdW5jOworJWNvbnN0YW50IHN2bl9jbGllbnRfZ2V0X2Nv
bW1pdF9sb2cyX3Qgc3ZuX3N3aWdfcHlfZ2V0X2NvbW1pdF9sb2dfZnVuYzsKKyVjb25zdGFudCBz
dm5fd2Nfbm90aWZ5X2Z1bmMyX3Qgc3ZuX3N3aWdfcHlfbm90aWZ5X2Z1bmM7CisKKyNlbmRpZgor
CiAjaWZkZWYgU1dJR1JVQlkKICVpbmxpbmUgJXsKIHN0YXRpYyBWQUxVRQpkaWZmIC1OdXIgc3Vi
dmVyc2lvbi0xLjMuMS9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvc3ZuX2NsaWVudC5pLm9yaWcg
c3VidmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQu
aS5vcmlnCi0tLSBzdWJ2ZXJzaW9uLTEuMy4xL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9zdm5f
Y2xpZW50Lmkub3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgc3Vi
dmVyc2lvbi0xLjMuMS5uZXcvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3N2bl9jbGllbnQuaS5v
cmlnCTIwMDYtMDctMDUgMDE6MDQ6MDYuMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsNTU4IEBA
CisvKgorICogc3ZuX2NsaWVudC5pIDogIFNXSUcgaW50ZXJmYWNlIGZpbGUgZm9yIHN2bl9jbGll
bnQuaAorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBDb2xs
YWJOZXQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGlj
ZW5zZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlIENPUFlJTkcsIHdoaWNoCisgKiB5b3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYXMgcGFydCBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSB0ZXJt
cworICogYXJlIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcv
bGljZW5zZS0xLmh0bWwuCisgKiBJZiBuZXdlciB2ZXJzaW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXJl
IHBvc3RlZCB0aGVyZSwgeW91IG1heSB1c2UgYQorICogbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBh
dCB5b3VyIG9wdGlvbi4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFy
eSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMuICBGb3IgZXhhY3Qg
Y29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24KKyAqIGhpc3RvcnkgYW5kIGxv
Z3MsIGF2YWlsYWJsZSBhdCBodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnLy4KKyAqID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisgKi8KKworI2lmIGRlZmluZWQoU1dJR1BFUkwpCislbW9kdWxlICJTVk46Ol9DbGll
bnQiCisjZWxpZiBkZWZpbmVkKFNXSUdSVUJZKQorJW1vZHVsZSAic3ZuOjpleHQ6OmNsaWVudCIK
KyNlbHNlCislbW9kdWxlIGNsaWVudAorI2VuZGlmCisKKyVpbmNsdWRlIHR5cGVtYXBzLmkKKyVp
bmNsdWRlIGNvbnN0cmFpbnRzLmkKKworJWluY2x1ZGUgc3ZuX2dsb2JhbC5zd2cKKyVpbXBvcnQg
Y29yZS5pCislaW1wb3J0IGFwci5zd2cKKyVpbXBvcnQgc3ZuX3R5cGVzLnN3ZworJWltcG9ydCBz
dm5fc3RyaW5nLnN3ZworJWltcG9ydCBzdm5fZGVsdGEuaQorJWltcG9ydCBzdm5fd2MuaQorCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgJWFwcGx5LWluZyBvZiB0eXBlbWFwcyBkZWZpbmVkIGVsc2V3
aGVyZQorKi8KKworJWFwcGx5IFNXSUdUWVBFICoqT1VUUEFSQU0geworICBzdm5fY2xpZW50X2Nv
bW1pdF9pbmZvX3QgKiosCisgIHN2bl9hdXRoX3Byb3ZpZGVyX29iamVjdF90ICoqLAorICBzdm5f
Y2xpZW50X2N0eF90ICoqCit9OworCislYXBwbHkgUG9pbnRlciBOT05OVUxMIHsgCisgIGNvbnN0
IHN2bl9vcHRfcmV2aXNpb25fdCAqcmV2aXNpb24sCisgIGNvbnN0IHN2bl9vcHRfcmV2aXNpb25f
dCAqcGVnX3JldmlzaW9uCit9OworCislYXBwbHkgY29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpT
VFJJTkdMSVNUIHsKKyAgICBjb25zdCBhcHJfYXJyYXlfaGVhZGVyX3QgKnRhcmdldHMsCisgICAg
Y29uc3QgYXByX2FycmF5X2hlYWRlcl90ICpkaWZmX29wdGlvbnMKK307CisKKyVhcHBseSBjb25z
dCBjaGFyICpNQVlfQkVfTlVMTCB7CisgICAgY29uc3QgY2hhciAqbmF0aXZlX2VvbCwKKyAgICBj
b25zdCBjaGFyICpjb21tZW50Cit9OworCisvKiBzdm5fY2xpZW50X3Byb3BnZXQoKSwgc3ZuX2Ns
aWVudF9wcm9wbGlzdCgpLCBzdm5fY2xpZW50X3JldnByb3BfbGlzdCgpICovCislYXBwbHkgYXBy
X2hhc2hfdCAqKlBST1BIQVNIIHsgYXByX2hhc2hfdCAqKnByb3BzIH07CisKKy8qIHN2bl9jbGll
bnRfdXJsX2Zyb21fcGF0aCgpLCBzdm5fY2xpZW50X3V1aWRfZnJvbV91cmwoKQorICogc3ZuX2Ns
aWVudF91dWlkX2Zyb21fcGF0aCAqLworJWFwcGx5IGNvbnN0IGNoYXIgKipPVVRQVVQgeworICAg
IGNvbnN0IGNoYXIgKip1cmwsCisgICAgY29uc3QgY2hhciAqKnV1aWQKK307CisKKyNpZmRlZiBT
V0lHUFlUSE9OCislYXBwbHkgc3ZuX3N0cmVhbV90ICpXUkFQUEVEX1NUUkVBTSB7IHN2bl9zdHJl
YW1fdCAqIH07CisKKy8qIG1lbWJlcnMgb2Ygc3ZuX2NsaWVudF9jdHhfdCAqLworJWFwcGx5IHZv
aWQgKlBZX0FTX1ZPSUQgeworICAgIHZvaWQgKm5vdGlmeV9iYXRvbiwKKyAgICB2b2lkICpsb2df
bXNnX2JhdG9uLAorICAgIHZvaWQgKmNhbmNlbF9iYXRvbiwKKyAgICB2b2lkICpub3RpZnlfYmF0
b24yLAorICAgIHZvaWQgKmxvZ19tc2dfYmF0b24yLAorICAgIHZvaWQgKnByb2dyZXNzX2JhdG9u
Cit9OworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzdm5fY2xpZW50X3Byb3BsaXN0
KCkKKyAgIHJldHVybnMgYXByX2FycmF5X2hlYWRlcl90ICogPHN2bl9jbGllbnRfcHJvcGxpc3Rf
aXRlbV90ICo+CisqLworCisldHlwZW1hcChpbiwgbnVtaW5wdXRzPTApIGFwcl9hcnJheV9oZWFk
ZXJfdCAqKnByb3BzIChhcHJfYXJyYXlfaGVhZGVyX3QgKnRlbXApIHsKKyAgICAkMSA9ICZ0ZW1w
OworfQorCisvKiBzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCBpcyB1c2VkIGV4Y2x1c2l2ZWx5
IGZvciBzdm5fY2xpZW50X3Byb3BsaXN0KCkuCisgICBUaGUgcHl0aG9uIGJpbmRpbmdzIGNvbnZl
cnQgaXQgdG8gYSBuYXRpdmUgcHl0aG9uIHR1cGxlLiAqLworI2lmZGVmIFNXSUdQWVRIT04KKyAg
ICAlaWdub3JlIHN2bl9jbGllbnRfcHJvcGxpc3RfaXRlbV90OworI2VuZGlmCisldHlwZW1hcChw
eXRob24sIGFyZ291dCwgZnJhZ21lbnQ9InRfb3V0cHV0X2hlbHBlciIpIGFwcl9hcnJheV9oZWFk
ZXJfdCAqKnByb3BzCit7CisgICAgc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKipwcGl0ZW07
CisgICAgaW50IGk7CisgICAgaW50IG5lbHRzID0gKCokMSktPm5lbHRzOworICAgIFB5T2JqZWN0
ICpsaXN0ID0gUHlMaXN0X05ldyhuZWx0cyk7CisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAg
ICAgU1dJR19mYWlsOworICAgIHBwaXRlbSA9IChzdm5fY2xpZW50X3Byb3BsaXN0X2l0ZW1fdCAq
KikoKiQxKS0+ZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmVsdHM7ICsraSwgKytwcGl0ZW0p
IHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVR1cGxlX05ldygyKTsKKyAgICAgICAgUHlP
YmplY3QgKm5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoKnBwaXRlbSktPm5vZGVf
bmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKnBwaXRlbSktPm5vZGVfbmFtZS0+bGVuKTsKKyAgICAgICAgUHlPYmplY3QgKmhh
c2ggPSBzdm5fc3dpZ19weV9wcm9waGFzaF90b19kaWN0KCgqcHBpdGVtKS0+cHJvcF9oYXNoKTsK
KworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCB8fCBoYXNoID09IE5V
TEwpIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeV9YREVD
UkVGKG5hbWUpOworICAgICAgICAgICAgUHlfWERFQ1JFRihoYXNoKTsKKyAgICAgICAgICAgIFB5
X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgICAgIFNXSUdfZmFpbDsKKyAgICAgICAgfQorICAgICAg
ICBQeVR1cGxlX1NFVF9JVEVNKGl0ZW0sIDAsIG5hbWUpOworICAgICAgICBQeVR1cGxlX1NFVF9J
VEVNKGl0ZW0sIDEsIGhhc2gpOworCisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBp
dGVtKTsKKyAgICB9CisgICAgJHJlc3VsdCA9IHRfb3V0cHV0X2hlbHBlcigkcmVzdWx0LCBsaXN0
KTsKK30KKworJXR5cGVtYXAocnVieSwgYXJnb3V0KSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9w
cworeworICAkcmVzdWx0ID0gc3ZuX3N3aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3Byb3BsaXN0
X2l0ZW0oKiQxKTsKK30KKworJXR5cGVtYXAocnVieSwgb3V0KSBhcHJfaGFzaF90ICpwcm9wX2hh
c2gKK3sKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX3Byb3BfaGFzaF90b19oYXNoKCQxKTsKK30K
KworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBhcHJfYXJyYXlfaGVhZGVyX3QgKipwcm9wcyB7Cisg
ICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfYXJyYXkoKiQxLAorICAgICAgJGRlc2Ny
aXB0b3Ioc3ZuX2NsaWVudF9wcm9wbGlzdF9pdGVtX3QgKikpOworICAgIGFyZ3ZpKys7Cit9CisK
KyV0eXBlbWFwKHBlcmw1LG91dCkgYXByX2hhc2hfdCAqcHJvcF9oYXNoIHsKKyAgICAkcmVzdWx0
ID0gc3ZuX3N3aWdfcGxfcHJvcGhhc2hfdG9faGFzaCgkMSk7CisgICAgYXJndmkrKzsKK30KKwor
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fY2xpZW50X2dldF9jb21taXRfbG9n
X3QKKyAgIHN2bl9jbGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHB5dGhvbixpbikgKHN2bl9j
bGllbnRfZ2V0X2NvbW1pdF9sb2dfdCBsb2dfbXNnX2Z1bmMsIAorICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqbG9nX21zZ19iYXRvbikgeworCisgICQxID0gc3ZuX3N3aWdfcHlfZ2V0X2NvbW1p
dF9sb2dfZnVuYzsKKyAgJDIgPSAkaW5wdXQ7IC8qIG91ciBmdW5jdGlvbiBpcyB0aGUgYmF0b24u
ICovCit9CisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2NsaWVudF9nZXRfY29tbWl0X2xvZzJf
dCBsb2dfbXNnX2Z1bmMyLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpsb2dfbXNnX2JhdG9u
MikKK3sKKyAgJDEgPSBzdm5fc3dpZ19yYl9nZXRfY29tbWl0X2xvZ19mdW5jMjsKKyAgJDIgPSAo
dm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBfZ2xvYmFsX3N2bl9zd2lnX3Ji
X3Bvb2wpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jYW5jZWxf
ZnVuY190CisgICBzdm5fY2xpZW50X2N0eF90CisqLworCisldHlwZW1hcChydWJ5LCBpbikgKHN2
bl9jYW5jZWxfZnVuY190IGNhbmNlbF9mdW5jLCB2b2lkICpjYW5jZWxfYmF0b24pCit7CisgICQx
ID0gc3ZuX3N3aWdfcmJfY2FuY2VsX2Z1bmM7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9t
YWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgIENhbGxiYWNrOiBzdm5fd2Nfbm90aWZ5X2Z1bmMyX3QKKyAgIHN2bl9j
bGllbnRfY3R4X3QKKyovCisKKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX3djX25vdGlmeV9mdW5j
Ml90IG5vdGlmeV9mdW5jMiwgdm9pZCAqbm90aWZ5X2JhdG9uMikKK3sKKyAgJDEgPSBzdm5fc3dp
Z19yYl9ub3RpZnlfZnVuYzI7CisgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9u
KCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworCisvKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgQ2FsbGJhY2s6IHN2bl9jbGllbnRfYmxhbWVfcmVjZWl2ZXJfdAorICAgc3ZuX2Ns
aWVudF9ibGFtZSgpCisqLworCisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2NsaWVudF9ibGFt
ZV9yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWNl
aXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfY2xpZW50X2JsYW1lX3JlY2VpdmVy
X2Z1bmM7CisgICAgJDIgPSAodm9pZCAqKSRpbnB1dDsKK30KKworJXR5cGVtYXAocGVybDUsIGlu
KSAoc3ZuX2NsaWVudF9ibGFtZV9yZWNlaXZlcl90IHJlY2VpdmVyLAorICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqcmVjZWl2ZXJfYmF0b24pIHsKKyAgJDEgPSBzdm5fc3dpZ19wbF9ibGFtZV9m
dW5jOworICAkMiA9ICRpbnB1dDsgLyogb3VyIGZ1bmN0aW9uIGlzIHRoZSBiYXRvbi4gKi8KK30K
KworJXR5cGVtYXAocnVieSwgaW4pIChzdm5fY2xpZW50X2JsYW1lX3JlY2VpdmVyX3QgcmVjZWl2
ZXIsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY2VpdmVyX2JhdG9uKQoreworICAkMSA9
IHN2bl9zd2lnX3JiX2NsaWVudF9ibGFtZV9yZWNlaXZlcl9mdW5jOworICAkMiA9ICh2b2lkICop
c3ZuX3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDYWxsYmFjazogc3ZuX2luZm9fcmVjZWl2ZXJf
dAorICAgc3ZuX2NsaWVudF9pbmZvKCkKKyovCisKKyV0eXBlbWFwKHB5dGhvbiwgaW4pIChzdm5f
aW5mb19yZWNlaXZlcl90IHJlY2VpdmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpy
ZWNlaXZlcl9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfaW5mb19yZWNlaXZlcl9mdW5j
OworICAgICQyID0gKHZvaWQgKikkaW5wdXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
IFdlIHVzZSAnc3ZuX3djX3N0YXR1c190IConIGluIHNvbWUgY3VzdG9tIGNvZGUsIGJ1dCBpdCBp
c24ndCBpbiB0aGUKKyAgIEFQSSBhbnl3aGVyZS4gVGh1cywgU1dJRyBkb2Vzbid0IGdlbmVyYXRl
IGEgdHlwZW1hcCBlbnRyeSBmb3IgaXQuIGJ5CisgICBhZGRpbmcgYSBzaW1wbGUgZGVjbGFyYXRp
b24gaGVyZSwgU1dJRyB3aWxsIGluc2VydCBhIG5hbWUgZm9yIGl0LgorICAgRklYTUU6IFRoaXMg
bWF5IGJlIHVudHJ1ZS4gU2VlIHN2bl93Y19zdGF0dXMsIGV0Yy4KKyovCisldHlwZXMoc3ZuX3dj
X3N0YXR1c190ICopOworCisvKiBXZSBhbHNvIG5lZWQgU1dJRyB0byB3cmFwIHN2bl9kaXJlbnRf
dCBhbmQgc3ZuX2xvY2tfdCBmb3IgdXMuICBUaGV5CisgICBkb24ndCBhcHBlYXIgaW4gYW55IEFQ
SSwgYnV0IHN2bl9jbGllbnRfbHMgcmV0dXJucyBhIGhhc2ggb2YgcG9pbnRlcnMKKyAgIHRvIGRp
cmVudHMgYW5kIGxvY2tzLiAqLworJXR5cGVzKHN2bl9kaXJlbnRfdCAqKTsKKyV0eXBlcyhzdm5f
bG9ja190ICopOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0aHVuayB0aGUgdmFyaW91cyBhdXRo
ZW50aWNhdGlvbiBwcm9tcHQgZnVuY3Rpb25zLgorICBQRVJMIE5PVEU6IHN0b3JlIHRoZSBpbnB1
dGVkIFNWIGluIF9nbG9iYWxfY2FsbGJhY2sgZm9yIHVzZSBpbiB0aGUKKyAgICAgICAgICAgICBs
YXRlciBhcmdvdXQgdHlwZW1hcAorKi8KKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3Np
bXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zaW1wbGVfcHJv
bXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIgPSAodm9pZCAqKSBf
Z2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2bl9hdXRoX3NpbXBs
ZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcHlfYXV0aF9zaW1wbGVfcHJvbXB0
X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRo
X3NpbXBsZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICB2
b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3JiX2F1dGhfc2ltcGxlX3By
b21wdF9mdW5jOworICAgICQyID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1
dCwgX2dsb2JhbF9zdm5fc3dpZ19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAo
c3ZuX2F1dGhfdXNlcm5hbWVfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1
bmtfdXNlcm5hbWVfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAg
JDIgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikg
KHN2bl9hdXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9h
dXRoX3VzZXJuYW1lX3Byb21wdF9mdW5jOworICAgICQyID0gJGlucHV0OworfQorJXR5cGVtYXAo
cnVieSwgaW4pIChzdm5fYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAor
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3Zu
X3N3aWdfcmJfYXV0aF91c2VybmFtZV9wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3Zu
X3N3aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9
CisKKyV0eXBlbWFwKHBlcmw1LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0
X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9i
YXRvbikgeworICAgICQxID0gc3ZuX3N3aWdfcGxfdGh1bmtfc3NsX3NlcnZlcl90cnVzdF9wcm9t
cHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9n
bG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1hcChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX3Nl
cnZlcl90cnVzdF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9z
ZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9CisldHlwZW1hcChy
dWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0X2Z1bmNfdCBwcm9tcHRf
ZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQx
ID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfc2VydmVyX3RydXN0X3Byb21wdF9mdW5jOworICAgICQy
ID0gKHZvaWQgKilzdm5fc3dpZ19yYl9tYWtlX2JhdG9uKCRpbnB1dCwgX2dsb2JhbF9zdm5fc3dp
Z19yYl9wb29sKTsKK30KKworJXR5cGVtYXAocGVybDUsIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVu
dF9jZXJ0X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19wbF90aHVua19zc2xfY2xp
ZW50X2NlcnRfcHJvbXB0OworICAgIF9nbG9iYWxfY2FsbGJhY2sgPSAkaW5wdXQ7CisgICAgJDIg
PSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNrOworfQorJXR5cGVtYXAocHl0aG9uLCBpbikgKHN2
bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVuY190IHByb21wdF9mdW5jLAorICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRvbikgeworICAgICQxID0gc3ZuX3N3aWdf
cHlfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1bmM7CisgICAgJDIgPSAkaW5wdXQ7Cit9
CisldHlwZW1hcChydWJ5LCBpbikgKHN2bl9hdXRoX3NzbF9jbGllbnRfY2VydF9wcm9tcHRfZnVu
Y190IHByb21wdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnByb21wdF9iYXRv
bikgeworICAgICQxID0gc3ZuX3N3aWdfcmJfYXV0aF9zc2xfY2xpZW50X2NlcnRfcHJvbXB0X2Z1
bmM7CisgICAgJDIgPSAodm9pZCAqKXN2bl9zd2lnX3JiX21ha2VfYmF0b24oJGlucHV0LCBfZ2xv
YmFsX3N2bl9zd2lnX3JiX3Bvb2wpOworfQorCisldHlwZW1hcChwZXJsNSwgaW4pIChzdm5fYXV0
aF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X2Z1bmNfdCBwcm9tcHRfZnVuYywKKyAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpwcm9tcHRfYmF0b24pIHsKKyAgICAkMSA9IHN2bl9zd2lnX3Bs
X3RodW5rX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHQ7CisgICAgX2dsb2JhbF9jYWxsYmFjayA9
ICRpbnB1dDsKKyAgICAkMiA9ICh2b2lkICopIF9nbG9iYWxfY2FsbGJhY2s7Cit9CisldHlwZW1h
cChweXRob24sIGluKSAoc3ZuX2F1dGhfc3NsX2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3Qg
cHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7
CisgICAgJDEgPSBzdm5fc3dpZ19weV9hdXRoX3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVu
YzsKKyAgICAkMiA9ICRpbnB1dDsKK30KKyV0eXBlbWFwKHJ1YnksIGluKSAoc3ZuX2F1dGhfc3Ns
X2NsaWVudF9jZXJ0X3B3X3Byb21wdF9mdW5jX3QgcHJvbXB0X2Z1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqcHJvbXB0X2JhdG9uKSB7CisgICAgJDEgPSBzdm5fc3dpZ19yYl9hdXRo
X3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfZnVuYzsKKyAgICAkMiA9ICh2b2lkICopc3ZuX3N3
aWdfcmJfbWFrZV9iYXRvbigkaW5wdXQsIF9nbG9iYWxfc3ZuX3N3aWdfcmJfcG9vbCk7Cit9CisK
Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGb3IgYWxsIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0
IHNldCBhIGNhbGxiYWNrIGJhdG9uIGNyZWF0ZSBhIHJlZmVyZW5jZQorICogZm9yIHRoZSBiYXRv
biAod2hpY2ggaW4gdGhpcyBjYXNlIGlzIGFuIFNWIHBvaW50aW5nIHRvIHRoZSBjYWxsYmFjaykK
KyAqIGFuZCBtYWtlIHRoYXQgYSByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24uICBUaGUgcGVybCBz
aWRlIHNob3VsZAorICogdGhlbiBzdG9yZSB0aGUgcmV0dXJuIGluIHRoZSBvYmplY3QgdGhlIGJh
dG9uIGlzIGF0dGFjaGVkIHRvLgorICogSWYgdGhlIGZ1bmN0aW9uIGFscmVhZHkgcmV0dXJucyBh
IHZhbHVlIHRoZW4gdGhpcyB2YWx1ZSBpcyBmb2xsb3dzIHRoYXQKKyAqIGZ1bmN0aW9uLiAgSW4g
dGhlIGNhc2Ugb2YgdGhlIHByb21wdCBmdW5jdGlvbnMgYXV0aF9vcGVuX2hlbHBlciBpbiBDb3Jl
LnBtCisgKiBpcyB1c2VkIHRvIHNwbGl0IHVwIHRoZXNlIHZhbHVlcy4KKyovCisldHlwZW1hcChw
ZXJsNSwgYXJnb3V0KSB2b2lkICpDQUxMQkFDS19CQVRPTiAoU1YgKiBfZ2xvYmFsX2NhbGxiYWNr
KSB7CisgIC8qIGNhbGxiYWNrIGJhdG9uICovCisgICRyZXN1bHQgPSBzdl8ybW9ydGFsIChuZXdS
Vl9pbmMgKF9nbG9iYWxfY2FsbGJhY2spKTsgYXJndmkrKzsgfQorCisldHlwZW1hcChwZXJsNSwg
aW4pIHZvaWQgKkNBTExCQUNLX0JBVE9OIChTViAqIF9nbG9iYWxfY2FsbGJhY2spIHsKKyAgX2ds
b2JhbF9jYWxsYmFjayA9ICRpbnB1dDsKKyAgJDEgPSAodm9pZCAqKSBfZ2xvYmFsX2NhbGxiYWNr
OworfQorCisjaWZkZWYgU1dJR1BFUkwKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTiB7Cisg
IHZvaWQgKnByb21wdF9iYXRvbiwKKyAgdm9pZCAqbm90aWZ5X2JhdG9uLAorICB2b2lkICpsb2df
bXNnX2JhdG9uLAorICB2b2lkICpjYW5jZWxfYmF0b24KK30KKyNlbmRpZgorCisjaWZkZWYgU1dJ
R1JVQlkKKyVhcHBseSB2b2lkICpDQUxMQkFDS19CQVRPTgoreworICB2b2lkICpub3RpZnlfYmF0
b24yLAorICB2b2lkICpsb2dfbXNnX2JhdG9uMiwKKyAgdm9pZCAqY2FuY2VsX2JhdG9uCit9Cisj
ZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgKiBDb252ZXJ0IHBlcmwgaGFzaGVzIGJhY2sg
aW50byBhcHJfaGFzaF90ICogZm9yIHNldHRpbmcgdGhlIGNvbmZpZworICogbWVtYmVyIG9mIHRo
ZSBzdm5fY2xpZW50X2N0eF90LiAgIFRoaXMgaXMgYW4gdWdseSBoYWNrLCBpdCB3aWxsCisgKiBh
bHdheXMgYWxsb2NhdGUgdGhlIG5ldyBhcHJfaGFzaF90IG91dCBvZiB0aGUgZ2xvYmFsIGN1cnJl
bnRfcG9vbAorICogSXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2UgYXByX2hhc2hfdCdzIGludG8g
bWFnaWMgdmFyaWFibGVzIGluCisgKiBwZXJsIHRoYXQgYXJlIHRpZWQgdG8gdGhlIGFwcl9oYXNo
X3QgaW50ZXJmYWNlLiAgVGhpcyB3b3VsZAorICogcmVtb3ZlIHRoZSBuZWVkIHRvIGNvbnZlcnQg
dG8gYW5kIGZyb20gcGVybCBoYXNocyBhbGwgdGhlIHRpbWUuCisgKi8KKyV0eXBlbWFwKHBlcmw1
LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5fc3dpZ19wbF9vYmpzX3RvX2hh
c2hfYnlfbmFtZSAoJGlucHV0LCAic3ZuX2NvbmZpZ190ICoiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdm5fc3dpZ19wbF9tYWtlX3Bvb2wgKChTViAqKU5VTEwp
KTsKK30KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJHJl
c3VsdCA9IHN2bl9zd2lnX3BsX2NvbnZlcnRfaGFzaCgkMSwgCisgICAgJGRlc2NyaXB0b3Ioc3Zu
X2NvbmZpZ190ICopKTsKKyAgYXJndmkrKzsKK30KKworI2lmZGVmIFNXSUdSVUJZCislcnVudGlt
ZSAleworICAjaW5jbHVkZSA8YXByLmg+CisgICNpbmNsdWRlIDxhcHJfcG9vbHMuaD4KKworICBz
dGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X3Bvb2wodm9pZCkgCisgIHsKKyAgICBz
dGF0aWMgYXByX3Bvb2xfdCAqX19zdm5fY2xpZW50X3Bvb2wgPSBOVUxMOworICAgIGlmICghX19z
dm5fY2xpZW50X3Bvb2wpIHsKKyAgICAgIGFwcl9wb29sX2NyZWF0ZSgmX19zdm5fY2xpZW50X3Bv
b2wsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X3Bvb2w7CisgIH0KKwor
ICBzdGF0aWMgYXByX3Bvb2xfdCAqCisgIF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKHZvaWQpIAor
ICB7CisgICAgc3RhdGljIGFwcl9wb29sX3QgKl9fc3ZuX2NsaWVudF9jb25maWdfcG9vbCA9IE5V
TEw7CisgICAgaWYgKCFfX3N2bl9jbGllbnRfY29uZmlnX3Bvb2wpIHsKKyAgICAgIGFwcl9wb29s
X2NyZWF0ZSgmX19zdm5fY2xpZW50X2NvbmZpZ19wb29sLCBfc3ZuX2NsaWVudF9wb29sKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gX19zdm5fY2xpZW50X2NvbmZpZ19wb29sOworICB9CislfQorI2Vu
ZGlmCisKKyV0eXBlbWFwKHJ1YnksIGFyZ291dCkgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgaWYg
KCQxKQorICAgIGFwcl9wb29sX2NsZWFyKF9zdm5fY2xpZW50X2NvbmZpZ19wb29sKCkpOworfQor
CisldHlwZW1hcChydWJ5LCBpbikgYXByX2hhc2hfdCAqY29uZmlnIHsKKyAgJDEgPSBzdm5fc3dp
Z19yYl9oYXNoX3RvX2Fwcl9oYXNoX3N3aWdfdHlwZSgkaW5wdXQsICJzdm5fY29uZmlnX3QgKiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3N2bl9jbGll
bnRfY29uZmlnX3Bvb2woKSk7Cit9CisKKyV0eXBlbWFwKHJ1YnksIG91dCkgYXByX2hhc2hfdCAq
Y29uZmlnIHsKKyAgJHJlc3VsdCA9IHN2bl9zd2lnX3JiX2Fwcl9oYXNoX3RvX2hhc2hfc3dpZ190
eXBlKCQxLCAic3ZuX2NvbmZpZ190ICoiKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG92
ZXJyaWRlIGRlZmF1bHQgdHlwZW1hcCBmb3Igc3ZuX2NsaWVudF9jb21taXRfaW5mb190IGZvciBw
ZXJsLiAgU29tZSBjYWxscworICogbmV2ZXIgYWxsb2NhdGUgYW5kIGZpbGwgdGhlIGNvbW1pdF9p
bmZvIHN0cnVjdC4gIFRoaXMgbGV0cyB1cyByZXR1cm4KKyAqIHVuZGVmIGZvciB0aGVtLiAgT3Ro
ZXJ3aXNlIHRoZSBvYmplY3Qgd2UgcGFzcyBiYWNrIGNhbiBjYXVzZSBjcmFzaGVzICovCisldHlw
ZW1hcChwZXJsNSwgaW4sIG51bWlucHV0cz0wKSBzdm5fY2xpZW50X2NvbW1pdF9pbmZvX3QgKiog
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN2bl9jbGllbnRfY29tbWl0X2lu
Zm9fdCAqIHRlbXAgKSB7CisgICAgdGVtcCA9IE5VTEw7CisgICAgJDEgPSAmdGVtcDsKK30KKwor
JXR5cGVtYXAocGVybDUsIGFyZ291dCkgc3ZuX2NsaWVudF9jb21taXRfaW5mb190ICoqIHsKKyAg
ICBpZiAoJDEgPT0gTlVMTCkgeworICAgICAgICAkcmVzdWx0ID0gJlBMX3N2X3VuZGVmOworICAg
ICAgICBhcmd2aSsrOworICAgIH0gIGVsc2UgeworICAgICAgICAkcmVzdWx0ID0gc3ZfbmV3bW9y
dGFsKCk7CisgICAgICAgIFNXSUdfTWFrZVB0cigkcmVzdWx0LCAodm9pZCAqKSokMSwKKyAgICAg
ICAgICAgICAgICAgICAgICQqMV9kZXNjcmlwdG9yLCAwKTsKKyAgICAgICAgYXJndmkrKzsKKyAg
ICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB3Y3Byb3BfY2hhbmdlcyBtZW1iZXIgb2Yg
c3ZuX2NsaWVudF9jb21taXRfaW5mbyBuZWVkcyB0byBiZQorICogY29udmVydGVkIGJhY2sgYW5k
IGZvcnRoIGZyb20gYW4gYXJyYXkgKi8KKworJXR5cGVtYXAocGVybDUsIG91dCkgYXByX2FycmF5
X2hlYWRlcl90ICp3Y3Byb3BfY2hhbmdlcyB7CisgICAgJHJlc3VsdCA9IHN2bl9zd2lnX3BsX2Nv
bnZlcnRfYXJyYXkoJDEsCisgICAgICAkZGVzY3JpcHRvcihzdm5fcHJvcF90ICopKTsKKyAgICBh
cmd2aSsrOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogd3JhcCBzdm5fY2xpZW50X2NyZWF0
ZV9jb250ZXh0ICovCisKKyV0eXBlbWFwKHBlcmw1LGluLG51bWlucHV0cz0wKSBzdm5fY2xpZW50
X2N0eF90ICoqIChzdm5fY2xpZW50X2N0eF90ICp0ZW1wKSB7CisgICAgJDEgPSAmdGVtcDsKK30K
KworJXR5cGVtYXAocGVybDUsYXJnb3V0KSBzdm5fY2xpZW50X2N0eF90ICoqIHsKKyAgKCokMSkt
Pm5vdGlmeV9mdW5jID0gc3ZuX3N3aWdfcGxfbm90aWZ5X2Z1bmM7CisgICgqJDEpLT5ub3RpZnlf
YmF0b24gPSAodm9pZCAqKSAmUExfc3ZfdW5kZWY7CisgICgqJDEpLT5sb2dfbXNnX2Z1bmMgPSBz
dm5fc3dpZ19wbF9nZXRfY29tbWl0X2xvZ19mdW5jOworICAoKiQxKS0+bG9nX21zZ19iYXRvbiA9
ICh2b2lkICopICZQTF9zdl91bmRlZjsKKyAgKCokMSktPmNhbmNlbF9mdW5jID0gc3ZuX3N3aWdf
cGxfY2FuY2VsX2Z1bmM7CisgICgqJDEpLT5jYW5jZWxfYmF0b24gPSAodm9pZCAqKSAmUExfc3Zf
dW5kZWY7CisgICRyZXN1bHQgPSBzdl9uZXdtb3J0YWwoKTsKKyAgU1dJR19NYWtlUHRyKCRyZXN1
bHQsICh2b2lkICopKiQxLAorICAgICAgICAgICAgICAgJCoxX2Rlc2NyaXB0b3IsIDApOworICBh
cmd2aSsrOworfSAgCisKKy8qIHN2bl9jbGllbnRfdXBkYXRlMiAqLworJXR5cGVtYXAocnVieSwg
aW4sIG51bWlucHV0cz0wKSBhcHJfYXJyYXlfaGVhZGVyX3QgKipyZXN1bHRfcmV2cyAoYXByX2Fy
cmF5X2hlYWRlcl90ICp0ZW1wKQoreworICAkMSA9ICZ0ZW1wOworfQorCisldHlwZW1hcChydWJ5
LCBhcmdvdXQsIGZyYWdtZW50PSJvdXRwdXRfaGVscGVyIikgYXByX2FycmF5X2hlYWRlcl90ICoq
cmVzdWx0X3JldnMKK3sKKyAgJHJlc3VsdCA9IG91dHB1dF9oZWxwZXIoJHJlc3VsdCwgc3ZuX3N3
aWdfcmJfYXByX2FycmF5X3RvX2FycmF5X3N2bl9yZXYoKiQxKSk7Cit9CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCisKKyV7CisjaWZkZWYgU1dJR1BZVEhPTgorI2luY2x1ZGUgInN3aWd1dGlsX3B5
LmgiCisjZW5kaWYKKworI2lmZGVmIFNXSUdQRVJMCisjaW5jbHVkZSAic3dpZ3V0aWxfcGwuaCIK
KyNlbmRpZgorCisjaWZkZWYgU1dJR1JVQlkKKyNpbmNsdWRlIDxhcHUuaD4KKyNpbmNsdWRlIDxh
cHJfeGxhdGUuaD4KKyNpbmNsdWRlICJzd2lndXRpbF9yYi5oIgorI2VuZGlmCislfQorCislaW5j
bHVkZSBzdm5fdGltZV9oLnN3ZworJWluY2x1ZGUgc3ZuX2NsaWVudF9oLnN3ZworCisjaWZkZWYg
U1dJR1BZVEhPTgorCisvKiBwcm92aWRlIFB5dGhvbiB3aXRoIGFjY2VzcyB0byBzb21lIHRodW5r
cy4gKi8KKyVjb25zdGFudCBzdm5fY2FuY2VsX2Z1bmNfdCBzdm5fc3dpZ19weV9jYW5jZWxfZnVu
YzsKKyVjb25zdGFudCBzdm5fY2xpZW50X2dldF9jb21taXRfbG9nMl90IHN2bl9zd2lnX3