<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>4313</bug_id>
          
          <creation_ts>2005-08-06 21:31:07 -0700</creation_ts>
          <short_desc>eliminate KJS::Value and KJS::Object smart pointer wrappers (for simplicity and speed)</short_desc>
          <delta_ts>2006-03-15 07:12:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>16058</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-06 21:31:07 -0700</bug_when>
    <thetext>Now that we don&apos;t get any benefit from the smartness of the KJS::Value and KJS::Object smart pointer 
classes, we should remove them.

This will make the API better since it will remove the ambiguity about when to use ValueImp and when to 
use Value, and it will also should make things a little faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16059</commentid>
    <comment_count>1</comment_count>
      <attachid>3251</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-06 22:02:52 -0700</bug_when>
    <thetext>Created attachment 3251
patch to remove the wrappers as of today

Here&apos;s the patch as of this moment. I know I&apos;ll have to redo a lot of it once
Maciej lands what he&apos;s currently working on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16153</commentid>
    <comment_count>2</comment_count>
      <attachid>3270</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-07 18:23:20 -0700</bug_when>
    <thetext>Created attachment 3270
patch, revised to work after Maciej&apos;s PropertySlot change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16159</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-07 20:18:09 -0700</bug_when>
    <thetext>My performance measurement today shows a 2% speedup in iBench JavaScript with this change. Earlier 
tests did not show a speed-up, so this is welcome news. Hooray!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16161</commentid>
    <comment_count>4</comment_count>
      <attachid>3270</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-08-07 20:59:50 -0700</bug_when>
    <thetext>Comment on attachment 3270
patch, revised to work after Maciej&apos;s PropertySlot change

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36439</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-03-15 07:12:36 -0800</bug_when>
    <thetext>NOTE: This bug also fixed Bug 4059.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3251</attachid>
            <date>2005-08-06 22:02:52 -0700</date>
            <delta_ts>2005-08-07 18:23:20 -0700</delta_ts>
            <desc>patch to remove the wrappers as of today</desc>
            <filename>NoSmartPatch4.txt</filename>
            <type>text/plain</type>
            <size>950616</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjE5IEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvTlBfanNvYmplY3QuY3BwCTI3IEFwciAyMDA1IDAxOjAzOjU3IC0wMDAwCTEuMTkK
KysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2JqZWN0LmNwcAk3IEF1ZyAyMDA1IDA0
OjQ0OjA1IC0wMDAwCkBAIC0xNDksMjQgKzE0OSwyNCBAQCBib29sIF9OUE5fSW52b2tlIChOUFAg
bnBwLCBOUE9iamVjdCAqbywgCiAJICAgIC8vIExvb2t1cCB0aGUgZnVuY3Rpb24gb2JqZWN0Lgog
CSAgICBFeGVjU3RhdGUgKmV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJldGVy
KCktPmdsb2JhbEV4ZWMoKTsKIAkgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLQkgICAgVmFsdWUg
ZnVuYyA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZlckZyb21OUElkZW50aWZpZXIoaS0+
dmFsdWUuc3RyaW5nKSk7CisJICAgIFZhbHVlSW1wICpmdW5jID0gb2JqLT5pbXAtPmdldCAoZXhl
YywgaWRlbnRpZmVyRnJvbU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKIAkgICAgSW50
ZXJwcmV0ZXI6OnVubG9jaygpOwogCi0JICAgIGlmIChmdW5jLmlzTnVsbCgpKSB7CisJICAgIGlm
ICghZnVuYyB8fCBmdW5jLT5pc051bGwoKSkgewogCQlOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc051
bGwocmVzdWx0KTsKIAkJcmV0dXJuIGZhbHNlOwogCSAgICB9Ci0JICAgIGVsc2UgaWYgKCBmdW5j
LnR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisJICAgIGVsc2UgaWYgKGZ1bmMtPmlzVW5kZWZp
bmVkKCkpIHsKIAkJTlBOX0luaXRpYWxpemVWYXJpYW50QXNVbmRlZmluZWQocmVzdWx0KTsKIAkJ
cmV0dXJuIGZhbHNlOwogCSAgICB9CiAJICAgIGVsc2UgewogCQkvLyBDYWxsIHRoZSBmdW5jdGlv
biBvYmplY3QuCi0JCU9iamVjdEltcCAqZnVuY0ltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+
KGZ1bmMuaW1wKCkpOwotCQlPYmplY3QgdGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVj
dEltcCo+KG9iai0+aW1wKSk7CisJCU9iamVjdEltcCAqZnVuY0ltcCA9IHN0YXRpY19jYXN0PE9i
amVjdEltcCo+KGZ1bmMpOworCQlPYmplY3RJbXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVj
dEltcCo+KG9iai0+aW1wKTsKIAkJTGlzdCBhcmdMaXN0ID0gbGlzdEZyb21WYXJpYW50QXJncyhl
eGVjLCBhcmdzLCBhcmdDb3VudCk7CiAJCUludGVycHJldGVyOjpsb2NrKCk7Ci0JCVZhbHVlIHJl
c3VsdFYgPSBmdW5jSW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKKwkJVmFsdWVJ
bXAgKnJlc3VsdFYgPSBmdW5jSW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKIAkJ
SW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAJCS8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVz
dWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgpAQCAtMTkzLDggKzE5Myw3IEBAIGJvb2wgX05QTl9F
dmFsdWF0ZSAoTlBQIG5wcCwgTlBPYmplY3QgKm8KIAkgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIo
KS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBPYmplY3QgdGhpc09iaiA9IE9iamVjdChjb25zdF9j
YXN0PE9iamVjdEltcCo+KG9iai0+aW1wKSk7Ci0gICAgICAgIFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgVmFsdWVJbXAgKnJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIEludGVycHJldGVyOjpsb2Nr
KCk7CiAgICAgICAgIE5QVVRGMTYgKnNjcmlwdFN0cmluZzsKQEAgLTIwNSw3ICsyMDQsNyBAQCBi
b29sIF9OUE5fRXZhbHVhdGUgKE5QUCBucHAsIE5QT2JqZWN0ICpvCiAgICAgICAgIAogICAgICAg
ICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBsZXRpb24u
dmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0OCw3ICsyNDcsNyBAQCBib29sIF9OUE5fR2V0
UHJvcGVydHkgKE5QUCBucHAsIE5QT2JqZWN0CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgIFZhbHVlIHJlc3VsdDsKKyAgICAgICAgVmFs
dWVJbXAgKnJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKSB7CiAgICAgICAgICAgICBy
ZXN1bHQgPSBvYmotPmltcC0+Z2V0IChleGVjLCBpZGVudGlmZXJGcm9tTlBJZGVudGlmaWVyKGkt
PnZhbHVlLnN0cmluZykpOwogICAgICAgICB9CkBAIC0yNTcsMTEgKzI1NiwxMSBAQCBib29sIF9O
UE5fR2V0UHJvcGVydHkgKE5QUCBucHAsIE5QT2JqZWN0CiAgICAgICAgIH0KICAgICAgICAgSW50
ZXJwcmV0ZXI6OnVubG9jaygpOwogCi0gICAgICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpIHsKKyAg
ICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc051bGwoKSkgewogICAgICAgICAgICAgTlBO
X0luaXRpYWxpemVWYXJpYW50QXNOdWxsKHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHJlc3VsdC50eXBlKCkgPT0gVW5kZWZp
bmVkVHlwZSkgeworICAgICAgICBlbHNlIGlmIChyZXN1bHQtPmlzVW5kZWZpbmVkKCkpIHsKICAg
ICAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudEFzVW5kZWZpbmVkKHZhcmlhbnQpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yOTIsNyArMjkxLDYgQEAgYm9v
bCBfTlBOX1NldFByb3BlcnR5IChOUFAgbnBwLCBOUE9iamVjdAogCiAgICAgICAgIEV4ZWNTdGF0
ZSAqZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhl
YygpOwogICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgICAgICBWYWx1ZSByZXN1bHQ7
CiAgICAgICAgIFByaXZhdGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopcHJv
cGVydHlOYW1lOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpIHsKICAgICAgICAgICAgIG9iai0+
aW1wLT5wdXQgKGV4ZWMsIGlkZW50aWZlckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5n
KSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCkpOwpAQCAtMzk0LDEwICsz
OTIsMTAgQEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAgbnBwLCBOUE9iamVjdCAqbwogICAgICAg
ICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICAgICAgRXhlY1N0YXRlICpleGVj
ID0gb2JqLT5leGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgIFZhbHVlIGZ1bmMgPSBvYmotPmlt
cC0+Z2V0IChleGVjLCBpZGVudGlmZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykp
OworICAgICAgICBWYWx1ZUltcCAqZnVuYyA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZl
ckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIEludGVycHJldGVy
Ojp1bmxvY2soKTsKIAotICAgICAgICBpZiAoZnVuYy5pc051bGwoKSB8fCBmdW5jLnR5cGUoKSA9
PSBVbmRlZmluZWRUeXBlKSB7CisgICAgICAgIGlmICghZnVuYyB8fCBmdW5jLT5pc1VuZGVmaW5l
ZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC00MTcsNyArNDE1LDcgQEAgdm9pZCBfTlBOX1NldEV4Y2VwdGlvbiAoTlBPYmplY3QgKm8sIGNv
bgogICAgICAgICBKYXZhU2NyaXB0T2JqZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKW87
IAogICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVy
cHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAg
ICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBtZXNz
YWdlKTsKKyAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVy
YWxFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbiAoZXJyKTsKICAg
ICAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OApkaWZmIC1wIC11IC11IC1wIC1yMS4xOCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1l
LmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAJMTIgRmViIDIwMDUg
MDA6NTg6MTMgLTAwMDAJMS4xOAorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5j
cHAJNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAtOTEsMTEgKzkxLDExIEBAIHN0YXRpYyBL
SlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgX0RpZEV4ZWMKIHZvaWQgSW5zdGFuY2U6OnNldERpZEV4
ZWN1dGVGdW5jdGlvbiAoS0pTRGlkRXhlY3V0ZUZ1bmN0aW9uUHRyIGZ1bmMpIHsgX0RpZEV4ZWN1
dGVGdW5jdGlvbiA9IGZ1bmM7IH0KIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBJbnN0YW5jZTo6
ZGlkRXhlY3V0ZUZ1bmN0aW9uICgpIHsgcmV0dXJuIF9EaWRFeGVjdXRlRnVuY3Rpb247IH0KIAot
VmFsdWUgSW5zdGFuY2U6OmdldFZhbHVlT2ZGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEZpZWxkICphRmllbGQpIGNvbnN0IHsgIAorVmFsdWVJbXAgKkluc3RhbmNlOjpnZXRWYWx1
ZU9mRmllbGQgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkKSBjb25z
dCB7ICAKICAgICByZXR1cm4gYUZpZWxkLT52YWx1ZUZyb21JbnN0YW5jZSAoZXhlYywgdGhpcyk7
CiB9CiAKLXZvaWQgSW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IEZpZWxkICphRmllbGQsIGNvbnN0IFZhbHVlICZhVmFsdWUpIGNvbnN0IHsgIAor
dm9pZCBJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgRmllbGQgKmFGaWVsZCwgVmFsdWVJbXAgKmFWYWx1ZSkgY29uc3QgeyAgCiAgICAgYUZpZWxk
LT5zZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIHRoaXMsIGFWYWx1ZSk7CiB9CiAKQEAgLTEyNiwy
NSArMTI2LDI1IEBAIEluc3RhbmNlICpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0ZvckxhbmcKICAg
ICByZXR1cm4gbmV3SW5zdGFuY2U7CiB9CiAKLU9iamVjdCBJbnN0YW5jZTo6Y3JlYXRlUnVudGlt
ZU9iamVjdCAoQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5jZSwg
Y29uc3QgUm9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCkKK09iamVjdEltcCAqSW5zdGFuY2U6
OmNyZWF0ZVJ1bnRpbWVPYmplY3QgKEJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgdm9pZCAqbmF0
aXZlSW5zdGFuY2UsIGNvbnN0IFJvb3RPYmplY3QgKmV4ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAg
SW5zdGFuY2UgKmludGVyZmFjZU9iamVjdCA9IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFu
Z3VhZ2VJbnN0YW5jZSAobGFuZ3VhZ2UsICh2b2lkICopbmF0aXZlSW5zdGFuY2UsIGV4ZWN1dGlv
bkNvbnRleHQpOwogICAgIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgT2JqZWN0IHRo
ZU9iamVjdChuZXcgUnVudGltZU9iamVjdEltcChpbnRlcmZhY2VPYmplY3QsdHJ1ZSkpOworICAg
IE9iamVjdEltcCAqdGhlT2JqZWN0KG5ldyBSdW50aW1lT2JqZWN0SW1wKGludGVyZmFjZU9iamVj
dCx0cnVlKSk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogICAgIAogICAgIHJldHVybiB0
aGVPYmplY3Q7CiB9CiAKLXZvaWQgKkluc3RhbmNlOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9y
VmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25zdCBP
YmplY3QgJnZhbHVlLCBjb25zdCBSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3Qg
KmN1cnJlbnQpCit2b2lkICpJbnN0YW5jZTo6Y3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVl
IChFeGVjU3RhdGUgKmV4ZWMsIEJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgT2JqZWN0SW1wICp2
YWx1ZSwgY29uc3QgUm9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBSb290T2JqZWN0ICpjdXJyZW50
KQogewogICAgIHZvaWQgKnJlc3VsdCA9IDA7CiAgICAgCi0gICAgaWYgKHZhbHVlLnR5cGUoKSAh
PSBPYmplY3RUeXBlKQorICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAJcmV0dXJuIDA7CiAK
LSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlLmltcCgp
KTsKKyAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsK
ICAgICAKICAgICBzd2l0Y2ggKGxhbmd1YWdlKSB7CiAJY2FzZSBJbnN0YW5jZTo6T2JqZWN0aXZl
Q0xhbmd1YWdlOiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC1wIC11IC11IC1wIC1yMS4yOSBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL3J1bnRpbWUuaAkxMiBGZWIgMjAwNSAwMDo1ODoxMyAtMDAwMAkxLjI5CisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgJNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAt
NTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXJhbWV0ZXIgKnBhcmFtZXRlckF0
KGxvbmcgaSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgbG9uZyBudW1QYXJhbWV0ZXJzKCkgY29u
c3QgPSAwOwogCi0gICAgdmlydHVhbCB+Q29uc3RydWN0b3IoKSB7fTsKKyAgICB2aXJ0dWFsIH5D
b25zdHJ1Y3RvcigpIHt9CiB9OwogCiBjbGFzcyBGaWVsZApAQCAtNjgsMjUgKzY4LDI1IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBLSlM6OlZh
bHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmlu
c3RhbmNlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgVmFsdWUgJmFW
YWx1ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSAqLCBjb25zdCBJbnN0YW5jZSAqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKiwgY29uc3QgSW5zdGFuY2UgKiwgVmFs
dWVJbXAgKikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB+RmllbGQoKSB7fTsKKyAgICB2aXJ0
dWFsIH5GaWVsZCgpIHt9CiB9OwogCiAKIGNsYXNzIE1ldGhvZExpc3QKIHsKIHB1YmxpYzoKLSAg
ICBNZXRob2RMaXN0KCkgOiBfbWV0aG9kcygwKSwgX2xlbmd0aCgwKSB7fTsKKyAgICBNZXRob2RM
aXN0KCkgOiBfbWV0aG9kcygwKSwgX2xlbmd0aCgwKSB7fQogICAgIAotICAgIHZvaWQgYWRkTWV0
aG9kIChNZXRob2QgKmFNZXRob2QpOworICAgIHZvaWQgYWRkTWV0aG9kKE1ldGhvZCAqYU1ldGhv
ZCk7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNvbnN0OwotICAgIE1ldGhvZCAqbWV0aG9k
QXQgKHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CisgICAgTWV0aG9kICptZXRob2RBdCh1bnNp
Z25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAgIAogICAgIH5NZXRob2RMaXN0KCk7CiAgICAgCi0g
ICAgTWV0aG9kTGlzdCAoY29uc3QgTWV0aG9kTGlzdCAmb3RoZXIpOworICAgIE1ldGhvZExpc3Qo
Y29uc3QgTWV0aG9kTGlzdCAmb3RoZXIpOwogICAgIE1ldGhvZExpc3QgJm9wZXJhdG9yPShjb25z
dCBNZXRob2RMaXN0ICZvdGhlcik7CiAKIHByaXZhdGU6CkBAIC0xMTcsOSArMTE3LDkgQEAgcHVi
bGljOgogICAgIAogICAgIHZpcnR1YWwgRmllbGQgKmZpZWxkTmFtZWQoY29uc3QgY2hhciAqbmFt
ZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGZh
bGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5j
ZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSB7IHJldHVybiBVbmRlZmluZWQoKTsg
fQorICAgIHZpcnR1YWwgVmFsdWVJbXAgKmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSAqLCBJbnN0
YW5jZSAqLCBjb25zdCBJZGVudGlmaWVyICYpIHsgcmV0dXJuIFVuZGVmaW5lZCgpOyB9CiAgICAg
Ci0gICAgdmlydHVhbCB+Q2xhc3MoKSB7fTsKKyAgICB2aXJ0dWFsIH5DbGFzcygpIHt9CiB9Owog
CiB0eXBlZGVmIHZvaWQgKCpLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICpyb290T2JqZWN0KTsKQEAgLTEzMywxNiArMTMzLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgQ0xhbmd1YWdlCiAgICAgfSBCaW5kaW5nTGFuZ3VhZ2U7CiAKLSAgICBzdGF0aWMg
dm9pZCBzZXREaWRFeGVjdXRlRnVuY3Rpb24gKEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBmdW5j
KTsKLSAgICBzdGF0aWMgS0pTRGlkRXhlY3V0ZUZ1bmN0aW9uUHRyIGRpZEV4ZWN1dGVGdW5jdGlv
biAoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREaWRFeGVjdXRlRnVuY3Rpb24oS0pTRGlkRXhlY3V0
ZUZ1bmN0aW9uUHRyIGZ1bmMpOworICAgIHN0YXRpYyBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIg
ZGlkRXhlY3V0ZUZ1bmN0aW9uKCk7CiAgICAgCi0gICAgc3RhdGljIEluc3RhbmNlICpjcmVhdGVC
aW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZSAoQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lk
ICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9iamVjdCAqciA9IDApOwotICAgIHN0YXRpYyB2
b2lkICpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgQmlu
ZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25zdCBPYmplY3QgJnZhbHVlLCBjb25zdCBSb290T2Jq
ZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpOwotICAgIHN0YXRpYyBPYmpl
Y3QgY3JlYXRlUnVudGltZU9iamVjdCAoQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lkICpu
YXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9iamVjdCAqciA9IDApOworICAgIHN0YXRpYyBJbnN0
YW5jZSAqY3JlYXRlQmluZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2UoQmluZGluZ0xhbmd1YWdlIGxh
bmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9iamVjdCAqciA9IDApOwor
ICAgIHN0YXRpYyB2b2lkICpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUoRXhlY1N0YXRl
ICpleGVjLCBCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3VhZ2UsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0
IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCk7CisgICAgc3Rh
dGljIE9iamVjdEltcCAqY3JlYXRlUnVudGltZU9iamVjdChCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3Vh
Z2UsIHZvaWQgKm5hdGl2ZUluc3RhbmNlLCBjb25zdCBSb290T2JqZWN0ICpyID0gMCk7CiAKLSAg
ICBJbnN0YW5jZSAoKSA6IF9leGVjdXRpb25Db250ZXh0KDApIHt9OworICAgIEluc3RhbmNlKCkg
OiBfZXhlY3V0aW9uQ29udGV4dCgwKSB7fTsKICAgICAKLSAgICBJbnN0YW5jZSAoY29uc3QgSW5z
dGFuY2UgJm90aGVyKTsKKyAgICBJbnN0YW5jZShjb25zdCBJbnN0YW5jZSAmb3RoZXIpOwogCiAg
ICAgSW5zdGFuY2UgJm9wZXJhdG9yPShjb25zdCBJbnN0YW5jZSAmb3RoZXIpOwogCkBAIC0xNTQs
MjMgKzE1NCwyMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3Mo
KSBjb25zdCA9IDA7CiAgICAgCi0gICAgdmlydHVhbCBWYWx1ZSBnZXRWYWx1ZU9mRmllbGQgKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmllbGQgKmFGaWVsZCkgY29uc3Q7Ci0gICAgdmlydHVhbCBW
YWx1ZSBnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHksIFR5cGUgaGludCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7
IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBGaWVsZCAqYUZpZWxkLCBjb25zdCBWYWx1ZSAmYVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgKCkgeyByZXR1cm4gZmFs
c2U7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgY29uc3QgVmFsdWUgJmFWYWx1
ZSkge307CisgICAgdmlydHVhbCBWYWx1ZUltcCAqZ2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgRmllbGQgKmFGaWVsZCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAq
Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHksIFR5cGUgaGludCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7IH07Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZGaWVsZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZp
ZWxkICphRmllbGQsIFZhbHVlSW1wICphVmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c1NldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCgpIHsgcmV0dXJuIGZhbHNlOyB9OworICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgVmFsdWVJbXAgKmFWYWx1ZSkge307CiAgICAgCi0g
ICAgdmlydHVhbCBWYWx1ZSBpbnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0
aG9kTGlzdCAmbWV0aG9kLCBjb25zdCBMaXN0ICZhcmdzKSA9IDA7Ci0gICAgdmlydHVhbCBWYWx1
ZSBpbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3Mp
ID0gMDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VNZXRob2QoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2QsIGNvbnN0IExpc3QgJmFyZ3MpID0gMDsKKyAgICB2
aXJ0dWFsIFZhbHVlSW1wICppbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgTGlzdCAmYXJncykgPSAwOwogICAgIAotICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVl
IChUeXBlIGhpbnQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFs
dWUoVHlwZSBoaW50KSBjb25zdCA9IDA7CiAgICAgCi0gICAgdmlydHVhbCBWYWx1ZSB2YWx1ZU9m
KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKGdldENsYXNzKCktPm5hbWUoKSk7IH07CisgICAgdmly
dHVhbCBWYWx1ZUltcCAqdmFsdWVPZigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZyhnZXRDbGFzcygp
LT5uYW1lKCkpOyB9OwogICAgIAotICAgIHZvaWQgc2V0RXhlY3V0aW9uQ29udGV4dCAoY29uc3Qg
Um9vdE9iamVjdCAqcikgeyBfZXhlY3V0aW9uQ29udGV4dCA9IHI7IH0KKyAgICB2b2lkIHNldEV4
ZWN1dGlvbkNvbnRleHQoY29uc3QgUm9vdE9iamVjdCAqcikgeyBfZXhlY3V0aW9uQ29udGV4dCA9
IHI7IH0KICAgICBjb25zdCBSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gX2V4ZWN1dGlvbkNvbnRleHQ7IH0KICAgICAKLSAgICB2aXJ0dWFsIH5JbnN0YW5jZSgp
IHt9OworICAgIHZpcnR1YWwgfkluc3RhbmNlKCkge30KIAogcHJvdGVjdGVkOgogICAgIGNvbnN0
IFJvb3RPYmplY3QgKl9leGVjdXRpb25Db250ZXh0OwpAQCAtMTc5LDEzICsxNzksMTMgQEAgcHJv
dGVjdGVkOgogY2xhc3MgQXJyYXkKIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3QgVmFsdWUgJmFW
YWx1ZSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVJbXAgKikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlQXQoRXhlY1N0YXRlICosIHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgfkFycmF5KCkge307CisgICAgdmlydHVhbCB+QXJyYXkoKSB7
fQogfTsKIAotY29uc3QgY2hhciAqc2lnbmF0dXJlRm9yUGFyYW1ldGVycyhjb25zdCBLSlM6Okxp
c3QgJmFMaXN0KTsKK2NvbnN0IGNoYXIgKnNpZ25hdHVyZUZvclBhcmFtZXRlcnMoY29uc3QgTGlz
dCAmYUxpc3QpOwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC11IC1wIC1yMS44IEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lX2FycmF5LmNwcAkyNSBKdWwgMjAwNSAyMjoxNzoxMCAtMDAwMAkxLjgKKysrIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MDUgLTAw
MDAKQEAgLTMyLDcgKzMyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIGNvbnN0IENsYXNzSW5m
byBSdW50aW1lQXJyYXlJbXA6OmluZm8gPSB7IlJ1bnRpbWVBcnJheSIsICZBcnJheUluc3RhbmNl
SW1wOjppbmZvLCAwLCAwfTsKIAogUnVudGltZUFycmF5SW1wOjpSdW50aW1lQXJyYXlJbXAoRXhl
Y1N0YXRlICpleGVjLCBCaW5kaW5nczo6QXJyYXkgKmEpCi0gICAgOiBBcnJheUluc3RhbmNlSW1w
IChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5UHJvdG90eXBlKCkuaW1w
KCksIGEtPmdldExlbmd0aCgpKQorICAgIDogQXJyYXlJbnN0YW5jZUltcChleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5UHJvdG90eXBlKCksIGEtPmdldExlbmd0aCgpKQog
ewogICAgIC8vIEFsd2F5cyB0YWtlcyBvd25lcnNoaXAgb2YgY29uY3JldGUgYXJyYXkuCiAgICAg
X2FycmF5ID0gYTsKQEAgLTQzLDcgKzQzLDcgQEAgUnVudGltZUFycmF5SW1wOjp+UnVudGltZUFy
cmF5SW1wKCkKICAgICBkZWxldGUgX2FycmF5OwogfQogCi1ib29sIFJ1bnRpbWVBcnJheUltcDo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIFJ1bnRpbWVBcnJheUltcDo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wIComIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGxl
bmd0aFByb3BlcnR5TmFtZSkgewogICAgICAgICByZXN1bHQgPSBOdW1iZXIoZ2V0TGVuZ3RoKCkp
OwpAQCAtNjMsNyArNjMsNyBAQCBib29sIFJ1bnRpbWVBcnJheUltcDo6Z2V0T3duUHJvcGVydHko
RXhlCiAgICAgcmV0dXJuIEFycmF5SW5zdGFuY2VJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgcmVzdWx0KTsKIH0KIAotYm9vbCBSdW50aW1lQXJyYXlJbXA6OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgsIFZhbHVlJiByZXN1bHQpIGNv
bnN0Citib29sIFJ1bnRpbWVBcnJheUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCB1bnNpZ25lZCBpbmRleCwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChp
bmRleCA+PSBnZXRMZW5ndGgoKSkKICAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CkBAIC03
MywxMCArNzMsMTAgQEAgYm9vbCBSdW50aW1lQXJyYXlJbXA6OmdldE93blByb3BlcnR5KEV4ZQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCBhdHRyKQordm9pZCBSdW50aW1lQXJyYXlJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cikKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkgewotICAg
ICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFJhbmdlRXJyb3IpOworICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxSYW5nZUVycm9yKTsKICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05
MSwxMCArOTEsMTAgQEAgdm9pZCBSdW50aW1lQXJyYXlJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZQog
ICAgIE9iamVjdEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwogfQog
Ci12b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2b2lkIFJ1bnRpbWVBcnJheUltcDo6
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgsIFZhbHVlSW1wICp2YWx1ZSwgaW50
IGF0dHIpCiB7CiAgICAgaWYgKGluZGV4ID49IGdldExlbmd0aCgpKSB7Ci0gICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsUmFuZ2VFcnJvcik7CisgICAgICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFJhbmdlRXJyb3IpOwogICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjEwIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9hcnJheS5oCTI1IEp1bCAyMDA1IDIyOjE3OjEwIC0wMDAwCTEuMTAKKysrIEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA1IC0wMDAwCkBA
IC0zNywxMCArMzcsMTAgQEAgcHVibGljOgogICAgIFJ1bnRpbWVBcnJheUltcChFeGVjU3RhdGUg
KmV4ZWMsIEJpbmRpbmdzOjpBcnJheSAqaSk7CiAgICAgflJ1bnRpbWVBcnJheUltcCgpOwogICAg
IAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgs
IFZhbHVlJiByZXN1bHQpIGNvbnN0IDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUs
IGludCBhdHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5v
bmUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbmRleCwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdCA7CisgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIgPSBOb25lKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkgY29uc3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZm
IC1wIC11IC11IC1wIC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhv
ZC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAkyNSBK
dWwgMjAwNSAyMjoxNzoxMCAtMDAwMAkxLjExCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5jcHAJNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAtNDAsNyArNDAs
NyBAQCBSdW50aW1lTWV0aG9kSW1wOjp+UnVudGltZU1ldGhvZEltcCgpCiB7CiB9CiAKLWJvb2wg
UnVudGltZU1ldGhvZEltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIFJ1bnRp
bWVNZXRob2RJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgLy8g
Q29tcHV0ZSBsZW5ndGggb2YgcGFyYW1ldGVycy4KICAgICBpZiAocHJvcGVydHlOYW1lID09IGxl
bmd0aFByb3BlcnR5TmFtZSkgewpAQCAtNjAsMjYgKzYwLDI2IEBAIGJvb2wgUnVudGltZU1ldGhv
ZEltcDo6aW1wbGVtZW50c0NhbGwoKSAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWUgUnVu
dGltZU1ldGhvZEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpSdW50aW1lTWV0aG9kSW1wOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
IHsKICAgICBpZiAoX21ldGhvZExpc3QubGVuZ3RoKCkgPiAwKSB7CiAJUnVudGltZU9iamVjdElt
cCAqaW1wOwogCQogCS8vIElmIHRoaXNPYmogaXMgdGhlIERPTSBvYmplY3QgZm9yIGEgcGx1Z2lu
LCBnZXQgdGhlIGNvcnJlc3BvbmRpbmcKIAkvLyBydW50aW1lIG9iamVjdCBmcm9tIHRoZSBET00g
b2JqZWN0LgotCWlmICh0aGlzT2JqLmNsYXNzSW5mbygpICE9ICZLSlM6OlJ1bnRpbWVPYmplY3RJ
bXA6OmluZm8pIHsKLQkgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IHRoaXNPYmouZ2V0KGV4ZWMs
ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0Iik7Ci0JICAgIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVPYmplY3RJbXAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKKwlpZiAodGhpc09iai0+Y2xhc3NJ
bmZvKCkgIT0gJktKUzo6UnVudGltZU9iamVjdEltcDo6aW5mbykgeworCSAgICBWYWx1ZUltcCAq
cnVudGltZU9iamVjdCA9IHRoaXNPYmotPmdldChleGVjLCAiX19hcHBsZV9ydW50aW1lX29iamVj
dCIpOworCSAgICBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4ocnVudGltZU9i
amVjdCk7CiAJfQogCWVsc2UgewotCSAgICBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0
SW1wKj4odGhpc09iai5pbXAoKSk7CisJICAgIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmpl
Y3RJbXAqPih0aGlzT2JqKTsKIAl9CiAgICAgICAgIGlmIChpbXApIHsKICAgICAgICAgICAgIElu
c3RhbmNlICppbnN0YW5jZSA9IGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgVmFsdWUgYVZhbHVlID0gaW5zdGFuY2UtPmludm9rZU1ldGhvZChleGVjLCBfbWV0aG9k
TGlzdCwgYXJncyk7CisgICAgICAgICAgICBWYWx1ZUltcCAqYVZhbHVlID0gaW5zdGFuY2UtPmlu
dm9rZU1ldGhvZChleGVjLCBfbWV0aG9kTGlzdCwgYXJncyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAgIApJbmRleDogSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjUgSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9tZXRob2QuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuaAkyNSBKdWwgMjAwNSAyMjoxNzoxMSAtMDAwMAkxLjUKKysrIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAt
MzgsMTAgKzM4LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5SdW50aW1lTWV0aG9k
SW1wKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKIAogICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUg
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7
CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgdmlydHVhbCBDb2Rl
VHlwZSBjb2RlVHlwZSgpIGNvbnN0OwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjYKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMjYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
cnVudGltZV9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29i
amVjdC5jcHAJMjUgSnVsIDIwMDUgMjI6MTc6MTEgLTAwMDAJMS4yNgorKysgSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MDUgLTAwMDAK
QEAgLTYwLDcgKzYwLDcgQEAgUnVudGltZU9iamVjdEltcDo6UnVudGltZU9iamVjdEltcChCaW5k
aQogICAgIGluc3RhbmNlID0gaTsKIH0KIAotYm9vbCBSdW50aW1lT2JqZWN0SW1wOjpnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
VmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgUnVudGltZU9iamVjdEltcDo6Z2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wIComIHJlc3VsdCkgY29uc3QKIHsKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKICAgICAKQEAg
LTc3LDEyICs3NywxMiBAQCBib29sIFJ1bnRpbWVPYmplY3RJbXA6OmdldE93blByb3BlcnR5KEV4
CiAgICAgICAgICAgICAvLyB0aGF0IG1ldGhvZC4KICAgICAgICAgICAgIE1ldGhvZExpc3QgbWV0
aG9kTGlzdCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZS5hc2NpaSgpLCBpbnN0
YW5jZSk7CiAgICAgICAgICAgICBpZiAobWV0aG9kTGlzdC5sZW5ndGgoKSA+IDApIHsKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBPYmplY3QobmV3IFJ1bnRpbWVNZXRob2RJbXAoZXhlYywgcHJv
cGVydHlOYW1lLCBtZXRob2RMaXN0KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFJ1
bnRpbWVNZXRob2RJbXAoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCQotICAgICAg
ICBpZiAocmVzdWx0LnR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisgICAgICAgIGlmIChyZXN1
bHQtPmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIC8vIFRyeSBhIGZhbGxiYWNrIG9iamVj
dC4KICAgICAgICAgICAgIHJlc3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5z
dGFuY2UsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk2LDcg
Kzk2LDcgQEAgYm9vbCBSdW50aW1lT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShFeAogfQogCiB2
b2lkIFJ1bnRpbWVPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWUgJnZhbHVl
LCBpbnQgYXR0cikKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cikKIHsKICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKIApAQCAtMTYwLDkgKzE2MCw5IEBAIGJvb2wg
UnVudGltZU9iamVjdEltcDo6ZGVsZXRlUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFJ1bnRpbWVPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMs
IFR5cGUgaGludCkgY29uc3QKK1ZhbHVlSW1wICpSdW50aW1lT2JqZWN0SW1wOjpkZWZhdWx0VmFs
dWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0CiB7Ci0gICAgVmFsdWUgcmVzdWx0
OworICAgIFZhbHVlSW1wICpyZXN1bHQ7CiAgICAgCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAK
QEAgLTE3OSwxMSArMTc5LDExIEBAIGJvb2wgUnVudGltZU9iamVjdEltcDo6aW1wbGVtZW50c0Nh
bGwoKSAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWUgUnVudGltZU9iamVjdEltcDo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpSdW50aW1lT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKICAgICBpbnN0YW5jZS0+
YmVnaW4oKTsKIAotICAgIFZhbHVlIGFWYWx1ZSA9IGdldEludGVybmFsSW5zdGFuY2UoKS0+aW52
b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKKyAgICBWYWx1ZUltcCAqYVZhbHVlID0gZ2V0
SW50ZXJuYWxJbnN0YW5jZSgpLT5pbnZva2VEZWZhdWx0TWV0aG9kKGV4ZWMsIGFyZ3MpOwogICAg
IAogICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL3J1bnRpbWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTQKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTQgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVu
dGltZV9vYmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3Qu
aAkyNSBKdWwgMjAwNSAyMjoxNzoxMSAtMDAwMAkxLjE0CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ydW50aW1lX29iamVjdC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDUgLTAwMDAKQEAgLTQxLDEw
ICs0MSwxMCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiBy
ZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgICAgICAgICAgICAgICAgICBWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuUHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKIApA
QCAtNTUsMTMgKzU1LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogCi0gICAgdmlydHVhbCBWYWx1ZSBkZWZhdWx0
VmFsdWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgVmFs
dWVJbXAgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGludCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldEludGVybmFsSW5zdGFuY2UgKEJpbmRpbmdzOjpJbnN0YW5jZSAqaSkgeyBp
bnN0YW5jZSA9IGk7IH0KICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmdldEludGVybmFsSW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBpbnN0YW5jZTsgfQogCiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncyk7CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5z
dGFuY2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXAgLXUgLXUgLXAgLXIx
LjEyIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAKLS0tIEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAJMTcgSmFuIDIwMDUgMjI6NDE6MjIgLTAw
MDAJMS4xMgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmNwcAk3IEF1
ZyAyMDA1IDA0OjQ0OjA1IC0wMDAwCkBAIC0zOSwxNSArMzksMTUgQEAKIH0KICNlbmRpZgogCi11
c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKLXVzaW5nIG5hbWVzcGFjZSBLSlM7CituYW1l
c3BhY2UgS0pTIHsKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIENJbnN0YW5jZTo6Q0luc3RhbmNl
IChOUE9iamVjdCAqbykgCiB7CiAgICAgX29iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0IChvKTsK
ICAgICBfY2xhc3MgPSAwOwogICAgIHNldEV4ZWN1dGlvbkNvbnRleHQgKDApOwotfTsKK30KIAog
Q0luc3RhbmNlOjp+Q0luc3RhbmNlICgpIAogewpAQCAtOTQsOSArOTQsOSBAQCB2b2lkIENJbnN0
YW5jZTo6ZW5kKCkKICAgICAvLyBEbyBub3RoaW5nLgogfQogCi1WYWx1ZSBDSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhv
ZExpc3QsIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ0luc3RhbmNlOjppbnZva2VNZXRo
b2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgICBWYWx1ZSByZXN1bHRWYWx1ZTsKKyAgICBWYWx1ZUltcCAqcmVz
dWx0VmFsdWU7CiAKICAgICAvLyBPdmVybG9hZGluZyBtZXRob2RzIGFyZSBub3QgYWxsb3dlZCBi
eSBOUE9iamVjdHMuICBTaG91bGQgb25seSBiZSBvbmUKICAgICAvLyBuYW1lIG1hdGNoIGZvciBh
IHBhcnRpY3VsYXIgbWV0aG9kLgpAQCAtMTQ2LDkgKzE0Niw5IEBAIFZhbHVlIENJbnN0YW5jZTo6
aW52b2tlTWV0aG9kIChLSlM6OkV4ZWMKIH0KIAogCi1WYWx1ZSBDSW5zdGFuY2U6Omludm9rZURl
ZmF1bHRNZXRob2QgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICAgIFZhbHVlIHJlc3VsdFZhbHVlOworICAgIFZhbHVlSW1w
ICpyZXN1bHRWYWx1ZTsKIAogICAgIGlmIChfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQp
IHsgICAgIAogICAgICAgICB1bnNpZ25lZCBpLCBjb3VudCA9IGFyZ3Muc2l6ZSgpOwpAQCAtMTg4
LDQ0ICsxODgsNDQgQEAgVmFsdWUgQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kIChLSgog
fQogCiAKLUtKUzo6VmFsdWUgQ0luc3RhbmNlOjpkZWZhdWx0VmFsdWUgKEtKUzo6VHlwZSBoaW50
KSBjb25zdAorVmFsdWVJbXAgKkNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIChUeXBlIGhpbnQpIGNv
bnN0CiB7Ci0gICAgaWYgKGhpbnQgPT0gS0pTOjpTdHJpbmdUeXBlKSB7CisgICAgaWYgKGhpbnQg
PT0gU3RyaW5nVHlwZSkgewogICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKICAgICB9Ci0g
ICAgZWxzZSBpZiAoaGludCA9PSBLSlM6Ok51bWJlclR5cGUpIHsKKyAgICBlbHNlIGlmIChoaW50
ID09IE51bWJlclR5cGUpIHsKICAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKCk7CiAgICAgfQot
ICAgIGVsc2UgaWYgKGhpbnQgPT0gS0pTOjpCb29sZWFuVHlwZSkgeworICAgIGVsc2UgaWYgKGhp
bnQgPT0gQm9vbGVhblR5cGUpIHsKICAgICAgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSgpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gdmFsdWVPZigpOwogfQogCi1LSlM6OlZhbHVlIENJbnN0YW5j
ZTo6c3RyaW5nVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKkNJbnN0YW5jZTo6c3RyaW5nVmFsdWUo
KSBjb25zdAogewogICAgIGNoYXIgYnVmWzEwMjRdOwotICAgIHNucHJpbnRmIChidWYsIDEwMjQs
ICJOUE9iamVjdCAlcCwgTlBDbGFzcyAlcCIsIF9vYmplY3QsIF9vYmplY3QtPl9jbGFzcyk7Ci0g
ICAgS0pTOjpTdHJpbmcgdihidWYpOwotICAgIHJldHVybiB2OworICAgIHNucHJpbnRmKGJ1Ziwg
MTAyNCwgIk5QT2JqZWN0ICVwLCBOUENsYXNzICVwIiwgX29iamVjdCwgX29iamVjdC0+X2NsYXNz
KTsKKyAgICByZXR1cm4ganNTdHJpbmcoYnVmKTsKIH0KIAotS0pTOjpWYWx1ZSBDSW5zdGFuY2U6
Om51bWJlclZhbHVlKCkgY29uc3QKK1ZhbHVlSW1wICpDSW5zdGFuY2U6Om51bWJlclZhbHVlKCkg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogIEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUKLSAg
ICBLSlM6Ok51bWJlciB2KDApOwotICAgIHJldHVybiB2OworICAgIHJldHVybiBqc051bWJlcigw
KTsKIH0KIAotS0pTOjpWYWx1ZSBDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CitWYWx1
ZUltcCAqQ0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiAg
SW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZQotICAgIEtKUzo6Qm9vbGVhbiB2KChib29sKTAp
OwotICAgIHJldHVybiB2OworICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwogfQogCi1LSlM6
OlZhbHVlIENJbnN0YW5jZTo6dmFsdWVPZigpIGNvbnN0IAorVmFsdWVJbXAgKkNJbnN0YW5jZTo6
dmFsdWVPZigpIGNvbnN0IAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwotfTsKK30KKwor
fQorfQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0
YW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuaAotLS0gSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvYy9jX2luc3RhbmNlLmgJMTcgSmFuIDIwMDUgMjI6NDE6MjIgLTAwMDAJMS42Cisr
KyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuaAk3IEF1ZyAyMDA1IDA0OjQ0
OjA1IC0wMDAwCkBAIC01MSwxNSArNTEsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbigpOwogICAgIHZpcnR1YWwgdm9pZCBlbmQoKTsKICAgICAKLSAgICB2aXJ0dWFsIFZhbHVl
IHZhbHVlT2YoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGRlZmF1bHRWYWx1ZSAoS0pTOjpU
eXBlIGhpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlT2YoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFsdWUgKEtKUzo6VHlwZSBoaW50KSBjb25z
dDsKIAotICAgIHZpcnR1YWwgVmFsdWUgaW52b2tlTWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAmYXJncyk7Ci0gICAgdmlydHVhbCBW
YWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2QsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1
YWwgVmFsdWVJbXAgKmludm9rZURlZmF1bHRNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncyk7CiAKLSAgICBWYWx1ZSBzdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIFZhbHVl
IG51bWJlclZhbHVlKCkgY29uc3Q7Ci0gICAgVmFsdWUgYm9vbGVhblZhbHVlKCkgY29uc3Q7Cisg
ICAgVmFsdWVJbXAgKnN0cmluZ1ZhbHVlKCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKm51bWJlclZh
bHVlKCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogICAgIAog
ICAgIE5QT2JqZWN0ICpnZXRPYmplY3QoKSBjb25zdCB7IHJldHVybiBfb2JqZWN0OyB9CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNiBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2MvY19ydW50aW1lLmNwcAkxIE5vdiAyMDA0IDIzOjQ2OjMxIC0wMDAwCTEuNgorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MDUg
LTAwMDAKQEAgLTQxLDExICs0MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1WYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBJbnN0YW5jZSAqaW5zdCkgY29uc3QKK1ZhbHVlSW1wICpDRmllbGQ6OnZhbHVlRnJv
bUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3QpIGNvbnN0CiB7
CiAgICAgY29uc3QgQ0luc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IENJbnN0
YW5jZSo+KGluc3QpOwogICAgIE5QT2JqZWN0ICpvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
Ci0gICAgVmFsdWUgYVZhbHVlOworICAgIFZhbHVlSW1wICphVmFsdWU7CiAgICAgTlBWYXJpYW50
IHByb3BlcnR5OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHByb3BlcnR5KTsKICAgICBpZiAob2Jq
LT5fY2xhc3MtPmdldFByb3BlcnR5KSB7CkBAIC01OCw3ICs1OCw3IEBAIFZhbHVlIENGaWVsZDo6
dmFsdWVGcm9tSW5zdGFuY2UoS0pTOjpFeGUKICAgICByZXR1cm4gYVZhbHVlOwogfQogCi12b2lk
IENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
bnN0YW5jZSAqaW5zdCwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdAordm9pZCBDRmll
bGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICpp
bnN0LCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdAogewogICAgIGNvbnN0IENJbnN0YW5jZSAqaW5z
dGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBDSW5zdGFuY2UqPihpbnN0KTsKICAgICBOUE9iamVj
dCAqb2JqID0gaW5zdGFuY2UtPmdldE9iamVjdCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvYy9jX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjUgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRp
bWUuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkzMCBTZXAgMjAw
NCAwMTozMjowNCAtMDAwMAkxLjUKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50
aW1lLmgJNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogCiBuYW1l
c3BhY2UgS0pTCiB7Ci1jbGFzcyBWYWx1ZTsKIAogbmFtZXNwYWNlIEJpbmRpbmdzCiB7CkBAIC00
OSw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICAgICAgX2ZpZWxkSWRlbnRpZmllciA9IGlkZW50Owog
ICAgIH07CiAgICAgCi0gICAgdmlydHVhbCBLSlM6OlZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwg
VmFsdWVJbXAgKmFWYWx1ZSkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpu
YW1lKCkgY29uc3QgeyByZXR1cm4gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIoX2ZpZWxkSWRlbnRp
Zmllcik7IH0KICAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiAi
IjsgfQpAQCAtODUsOCArODQsOCBAQCBwdWJsaWM6CiAKICAgICBDQXJyYXkgJm9wZXJhdG9yPShj
b25zdCBDQXJyYXkgJm90aGVyKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBLSlM6OlZhbHVl
ICZhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSB2YWx1ZUF0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBWYWx1ZUlt
cCAqYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZUF0KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRMZW5ndGgoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIH5DQXJyYXkoKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtdSAtcCAtcjEuOSBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2MvY191dGlsaXR5LmNwcAkxMiBGZWIgMjAwNSAwMDo1ODoxMyAtMDAwMAkxLjkKKysrIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA1
IC0wMDAwCkBAIC0zNyw1NSArMzcsNTUgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVzaW5nIG5h
bWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogCiAvLyBSZXF1aXJlcyBmcmVlKCkgb2YgcmV0dXJuZWQg
VVRGMTZDaGFycy4KLXZvaWQgY29udmVydE5QU3RyaW5nVG9VVEYxNiAoY29uc3QgTlBTdHJpbmcg
KnN0cmluZywgTlBVVEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVkIGludCAqVVRGMTZMZW5ndGgp
Cit2b2lkIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoY29uc3QgTlBTdHJpbmcgKnN0cmluZywgTlBV
VEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVkIGludCAqVVRGMTZMZW5ndGgpCiB7Ci0gICAgY29u
dmVydFVURjhUb1VURjE2IChzdHJpbmctPlVURjhDaGFyYWN0ZXJzLCBzdHJpbmctPlVURjhMZW5n
dGgsIFVURjE2Q2hhcnMsIFVURjE2TGVuZ3RoKTsKKyAgICBjb252ZXJ0VVRGOFRvVVRGMTYoc3Ry
aW5nLT5VVEY4Q2hhcmFjdGVycywgc3RyaW5nLT5VVEY4TGVuZ3RoLCBVVEYxNkNoYXJzLCBVVEYx
Nkxlbmd0aCk7CiB9CiAKIC8vIFJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBVVEYxNkNoYXJz
Lgotdm9pZCBjb252ZXJ0VVRGOFRvVVRGMTYgKGNvbnN0IE5QVVRGOCAqVVRGOENoYXJzLCBpbnQg
VVRGOExlbmd0aCwgTlBVVEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVkIGludCAqVVRGMTZMZW5n
dGgpCit2b2lkIGNvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBOUFVURjggKlVURjhDaGFycywgaW50
IFVURjhMZW5ndGgsIE5QVVRGMTYgKipVVEYxNkNoYXJzLCB1bnNpZ25lZCBpbnQgKlVURjE2TGVu
Z3RoKQogewotICAgIGFzc2VydCAoVVRGOENoYXJzKTsKKyAgICBhc3NlcnQoVVRGOENoYXJzKTsK
ICAgICAKICAgICBpZiAoVVRGOExlbmd0aCA9PSAtMSkKICAgICAgICAgVVRGOExlbmd0aCA9IHN0
cmxlbihVVEY4Q2hhcnMpOwogICAgICAgICAKLSAgICBDRlN0cmluZ1JlZiBzdHJpbmdSZWYgPSBD
RlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyAoTlVMTCwgKGNvbnN0IFVJbnQ4KilVVEY4Q2hhcnMsIChD
RkluZGV4KVVURjhMZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgZmFsc2UpOworICAgIENG
U3RyaW5nUmVmIHN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKE5VTEwsIChjb25z
dCBVSW50OCopVVRGOENoYXJzLCAoQ0ZJbmRleClVVEY4TGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGlu
Z1VURjgsIGZhbHNlKTsKIAotICAgICpVVEYxNkxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpQ0ZTdHJp
bmdHZXRMZW5ndGggKHN0cmluZ1JlZik7Ci0gICAgKlVURjE2Q2hhcnMgPSAoTlBVVEYxNiAqKW1h
bGxvYyAoc2l6ZW9mKE5QVVRGMTYpICogKCpVVEYxNkxlbmd0aCkpOworICAgICpVVEYxNkxlbmd0
aCA9ICh1bnNpZ25lZCBpbnQpQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nUmVmKTsKKyAgICAqVVRG
MTZDaGFycyA9IChOUFVURjE2ICopbWFsbG9jKHNpemVvZihOUFVURjE2KSAqICgqVVRGMTZMZW5n
dGgpKTsKIAogICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyB0byBVVEYxNi4KICAgICBDRlJhbmdl
IHJhbmdlID0geyAwLCAqVVRGMTZMZW5ndGggfTsKLSAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMg
KHN0cmluZ1JlZiwgcmFuZ2UsIChVbmlDaGFyICopKlVURjE2Q2hhcnMpOwotICAgIENGUmVsZWFz
ZSAoc3RyaW5nUmVmKTsKKyAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoc3RyaW5nUmVmLCByYW5n
ZSwgKFVuaUNoYXIgKikqVVRGMTZDaGFycyk7CisgICAgQ0ZSZWxlYXNlKHN0cmluZ1JlZik7CiB9
CiAKIC8vIFZhcmlhbnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5QUmVsZWFzZVZhcmlh
bnRWYWx1ZSgpCi12b2lkIGNvZXJjZVZhbHVlVG9OUFZhcmlhbnRTdHJpbmdUeXBlIChLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIE5QVmFyaWFudCAqcmVzdWx0
KQordm9pZCBjb2VyY2VWYWx1ZVRvTlBWYXJpYW50U3RyaW5nVHlwZShFeGVjU3RhdGUgKmV4ZWMs
IFZhbHVlSW1wICp2YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQpCiB7Ci0gICAgVVN0cmluZyB1c3Ry
aW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUt
PnRvU3RyaW5nKGV4ZWMpOwogICAgIENTdHJpbmcgY3N0cmluZyA9IHVzdHJpbmcuVVRGOFN0cmlu
ZygpOwogICAgIE5QU3RyaW5nIHN0cmluZyA9IHsgKGNvbnN0IE5QVVRGOCAqKWNzdHJpbmcuY19z
dHIoKSwgY3N0cmluZy5zaXplKCkgfTsKLSAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3Ry
aW5nQ29weSAocmVzdWx0LCAmc3RyaW5nKTsKKyAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRo
U3RyaW5nQ29weShyZXN1bHQsICZzdHJpbmcpOwogfQogCiAvLyBWYXJpYW50IHZhbHVlIG11c3Qg
YmUgcmVsZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQotdm9pZCBjb252ZXJ0VmFs
dWVUb05QVmFyaWFudCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJnZh
bHVlLCBOUFZhcmlhbnQgKnJlc3VsdCkKK3ZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhl
Y1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUsIE5QVmFyaWFudCAqcmVzdWx0KQogewotICAg
IFR5cGUgdHlwZSA9IHZhbHVlLnR5cGUoKTsKKyAgICBUeXBlIHR5cGUgPSB2YWx1ZS0+dHlwZSgp
OwogICAgIAogICAgIGlmICh0eXBlID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
IHZhbHVlLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgQ1N0cmluZyBjc3RyaW5nID0gdXN0cmlu
Zy5VVEY4U3RyaW5nKCk7CiAgICAgICAgIE5QU3RyaW5nIHN0cmluZyA9IHsgKGNvbnN0IE5QVVRG
OCAqKWNzdHJpbmcuY19zdHIoKSwgY3N0cmluZy5zaXplKCkgfTsKLSAgICAgICAgTlBOX0luaXRp
YWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkgKHJlc3VsdCwgJnN0cmluZyApOworICAgICAgICBO
UE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShyZXN1bHQsICZzdHJpbmcgKTsKICAg
ICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBOdW1iZXJUeXBlKSB7Ci0gICAgICAgIE5QTl9Jbml0
aWFsaXplVmFyaWFudFdpdGhEb3VibGUgKHJlc3VsdCwgdmFsdWUudG9OdW1iZXIoZXhlYykpOwor
ICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoRG91YmxlKHJlc3VsdCwgdmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBCb29sZWFuVHlwZSkg
ewotICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoQm9vbCAocmVzdWx0LCB2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOworICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoQm9vbChy
ZXN1bHQsIHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBl
ID09IFVuc3BlY2lmaWVkVHlwZSkgewogICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc1Vu
ZGVmaW5lZChyZXN1bHQpOwpAQCAtOTQsMjAgKzk0LDIwIEBAIHZvaWQgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQgKEtKUzo6RXhlY1MKICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50QXNOdWxs
KHJlc3VsdCk7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gT2JqZWN0VHlwZSkgewotICAg
ICAgICBLSlM6Ok9iamVjdEltcCAqb2JqZWN0SW1wID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJ
bXAqPih2YWx1ZS5pbXAoKSk7Ci0gICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09
ICZLSlM6OlJ1bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKLSAgICAgICAgICAgIEtKUzo6UnVudGlt
ZU9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8S0pTOjpSdW50aW1lT2JqZWN0SW1wICo+KHZh
bHVlLmltcCgpKTsKKyAgICAgICAgT2JqZWN0SW1wICpvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxP
YmplY3RJbXAqPih2YWx1ZSk7CisgICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09
ICZSdW50aW1lT2JqZWN0SW1wOjppbmZvKSB7CisgICAgICAgICAgICBSdW50aW1lT2JqZWN0SW1w
ICppbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wICo+KHZhbHVlKTsKICAgICAgICAg
ICAgIENJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxDSW5zdGFuY2UqPihpbXAtPmdl
dEludGVybmFsSW5zdGFuY2UoKSk7Ci0gICAgICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRX
aXRoT2JqZWN0IChyZXN1bHQsIGluc3RhbmNlLT5nZXRPYmplY3QoKSk7CisgICAgICAgICAgICBO
UE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoT2JqZWN0KHJlc3VsdCwgaW5zdGFuY2UtPmdldE9iamVj
dCgpKTsKICAgICAgICAgfQogCWVsc2UgewogCi0JICAgIEtKUzo6SW50ZXJwcmV0ZXIgKm9yaWdp
bkludGVycHJldGVyID0gZXhlYy0+aW50ZXJwcmV0ZXIoKTsKKwkgICAgSW50ZXJwcmV0ZXIgKm9y
aWdpbkludGVycHJldGVyID0gZXhlYy0+aW50ZXJwcmV0ZXIoKTsKICAgICAgICAgICAgIGNvbnN0
IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW5FeGVjdXRpb25Db250ZXh0ID0gcm9vdEZvcklu
dGVycHJldGVyKG9yaWdpbkludGVycHJldGVyKTsKIAotCSAgICBLSlM6OkludGVycHJldGVyICpp
bnRlcnByZXRlciA9IDA7CisJICAgIEludGVycHJldGVyICppbnRlcnByZXRlciA9IDA7CiAJICAg
IGlmIChvcmlnaW5JbnRlcnByZXRlci0+aXNHbG9iYWxPYmplY3QodmFsdWUpKSB7Ci0JCWludGVy
cHJldGVyID0gb3JpZ2luSW50ZXJwcmV0ZXItPmludGVycHJldGVyRm9yR2xvYmFsT2JqZWN0ICh2
YWx1ZS5pbXAoKSk7CisJCWludGVycHJldGVyID0gb3JpZ2luSW50ZXJwcmV0ZXItPmludGVycHJl
dGVyRm9yR2xvYmFsT2JqZWN0KHZhbHVlKTsKIAkgICAgfQogCiAJICAgIGlmICghaW50ZXJwcmV0
ZXIpCkBAIC0xMTUsMjkgKzExNSwyOSBAQCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50IChL
SlM6OkV4ZWNTCiAJCQogICAgICAgICAgICAgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmV4
ZWN1dGlvbkNvbnRleHQgPSByb290Rm9ySW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpOwogICAgICAg
ICAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgQmluZGluZ3M6
OlJvb3RPYmplY3QgKm5ld0V4ZWN1dGlvbkNvbnRleHQgPSBuZXcgS0pTOjpCaW5kaW5nczo6Um9v
dE9iamVjdCgwKTsKLSAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Db250ZXh0LT5zZXRJbnRl
cnByZXRlciAoaW50ZXJwcmV0ZXIpOworICAgICAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2Jq
ZWN0ICpuZXdFeGVjdXRpb25Db250ZXh0ID0gbmV3IEJpbmRpbmdzOjpSb290T2JqZWN0KDApOwor
ICAgICAgICAgICAgICAgIG5ld0V4ZWN1dGlvbkNvbnRleHQtPnNldEludGVycHJldGVyKGludGVy
cHJldGVyKTsKICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gbmV3RXhlY3V0aW9u
Q29udGV4dDsKICAgICAgICAgICAgIH0KICAgICAKLQkgICAgTlBPYmplY3QgKm9iaiA9IChOUE9i
amVjdCAqKWV4ZWMtPmludGVycHJldGVyKCktPmNyZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1
ZSAoZXhlYywgSW5zdGFuY2U6OkNMYW5ndWFnZSwgdmFsdWUudG9PYmplY3QoZXhlYyksIG9yaWdp
bkV4ZWN1dGlvbkNvbnRleHQsIGV4ZWN1dGlvbkNvbnRleHQpOwotCSAgICBOUE5fSW5pdGlhbGl6
ZVZhcmlhbnRXaXRoT2JqZWN0IChyZXN1bHQsIG9iaik7Ci0JICAgIF9OUE5fUmVsZWFzZU9iamVj
dCAob2JqKTsKKwkgICAgTlBPYmplY3QgKm9iaiA9IChOUE9iamVjdCAqKWV4ZWMtPmludGVycHJl
dGVyKCktPmNyZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1ZShleGVjLCBJbnN0YW5jZTo6Q0xh
bmd1YWdlLCB2YWx1ZS0+dG9PYmplY3QoZXhlYyksIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQsIGV4
ZWN1dGlvbkNvbnRleHQpOworCSAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoT2JqZWN0KHJl
c3VsdCwgb2JqKTsKKwkgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iaik7CiAJfQogICAgIH0KICAg
ICBlbHNlCiAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudEFzVW5kZWZpbmVkKHJlc3VsdCk7
CiB9CiAKLVZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQorVmFsdWVJbXAgKmNvbnZlcnROUFZhcmlhbnRU
b1ZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQogewogICAg
IE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKICAgICBpZiAodHlwZSA9PSBO
UFZhcmlhbnRUeXBlX0Jvb2wpIHsKICAgICAgICAgTlBCb29sIGFCb29sOwotICAgICAgICBpZiAo
TlBOX1ZhcmlhbnRUb0Jvb2wgKHZhcmlhbnQsICZhQm9vbCkpCi0gICAgICAgICAgICByZXR1cm4g
S0pTOjpCb29sZWFuIChhQm9vbCk7Ci0gICAgICAgIHJldHVybiBLSlM6OkJvb2xlYW4gKGZhbHNl
KTsKKyAgICAgICAgaWYgKE5QTl9WYXJpYW50VG9Cb29sKHZhcmlhbnQsICZhQm9vbCkpCisgICAg
ICAgICAgICByZXR1cm4ganNCb29sZWFuKGFCb29sKTsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihmYWxzZSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9OdWxs
KSB7CiAgICAgICAgIHJldHVybiBOdWxsKCk7CkBAIC0xNDcsMjMgKzE0NywyMyBAQCBWYWx1ZSBj
b252ZXJ0TlBWYXJpYW50VG9WYWx1ZSAoS0pTOjpFeGVjCiAgICAgfQogICAgIGVsc2UgaWYgKHR5
cGUgPT0gTlBWYXJpYW50VHlwZV9JbnQzMikgewogICAgICAgICBpbnQzMl90IGFuSW50OwotICAg
ICAgICBpZiAoTlBOX1ZhcmlhbnRUb0ludDMyICh2YXJpYW50LCAmYW5JbnQpKQotICAgICAgICAg
ICAgcmV0dXJuIE51bWJlciAoYW5JbnQpOwotICAgICAgICByZXR1cm4gTnVtYmVyICgwKTsKKyAg
ICAgICAgaWYgKE5QTl9WYXJpYW50VG9JbnQzMih2YXJpYW50LCAmYW5JbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihhbkludCk7CisgICAgICAgIHJldHVybiBOdW1iZXIoMCk7CiAgICAg
fQogICAgIGVsc2UgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9Eb3VibGUpIHsKICAgICAgICAg
ZG91YmxlIGFEb3VibGU7Ci0gICAgICAgIGlmIChOUE5fVmFyaWFudFRvRG91YmxlICh2YXJpYW50
LCAmYURvdWJsZSkpCi0gICAgICAgICAgICByZXR1cm4gTnVtYmVyIChhRG91YmxlKTsKLSAgICAg
ICAgcmV0dXJuIE51bWJlciAoMCk7CisgICAgICAgIGlmIChOUE5fVmFyaWFudFRvRG91YmxlKHZh
cmlhbnQsICZhRG91YmxlKSkKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXIoYURvdWJsZSk7Cisg
ICAgICAgIHJldHVybiBOdW1iZXIoMCk7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gTlBW
YXJpYW50VHlwZV9TdHJpbmcpIHsKICAgICAgICAgTlBVVEYxNiAqc3RyaW5nVmFsdWU7CiAgICAg
ICAgIHVuc2lnbmVkIGludCBVVEYxNkxlbmd0aDsKLSAgICAgICAgY29udmVydE5QU3RyaW5nVG9V
VEYxNiAoJnZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLCAmc3RyaW5nVmFsdWUsICZVVEYxNkxl
bmd0aCk7ICAgIC8vIHJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBtZW1vcnkuCi0gICAgICAg
IFN0cmluZyByZXN1bHRTdHJpbmcoVVN0cmluZygoY29uc3QgVUNoYXIgKilzdHJpbmdWYWx1ZSxV
VEYxNkxlbmd0aCkpOwotICAgICAgICBmcmVlIChzdHJpbmdWYWx1ZSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHRTdHJpbmc7CisgICAgICAgIGNvbnZlcnROUFN0cmluZ1RvVVRGMTYoJnZhcmlhbnQt
PnZhbHVlLnN0cmluZ1ZhbHVlLCAmc3RyaW5nVmFsdWUsICZVVEYxNkxlbmd0aCk7ICAgIC8vIHJl
cXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBtZW1vcnkuCisgICAgICAgIFVTdHJpbmcgcmVzdWx0
U3RyaW5nKChjb25zdCBVQ2hhciAqKXN0cmluZ1ZhbHVlLFVURjE2TGVuZ3RoKTsKKyAgICAgICAg
ZnJlZShzdHJpbmdWYWx1ZSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhyZXN1bHRTdHJpbmcp
OwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVfT2JqZWN0KSB7CiAg
ICAgICAgIE5QT2JqZWN0ICpvYmogPSB2YXJpYW50LT52YWx1ZS5vYmplY3RWYWx1ZTsKQEAgLTE3
MSw3ICsxNzEsNyBAQCBWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZSAoS0pTOjpFeGVjCiAg
ICAgICAgIGlmIChvYmotPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgICAg
ICAgICAvLyBHZXQgT2JqZWN0SW1wIGZyb20gTlBfSmF2YVNjcmlwdE9iamVjdC4KICAgICAgICAg
ICAgIEphdmFTY3JpcHRPYmplY3QgKm8gPSAoSmF2YVNjcmlwdE9iamVjdCAqKW9iajsKLSAgICAg
ICAgICAgIHJldHVybiBPYmplY3QoY29uc3RfY2FzdDxPYmplY3RJbXAqPihvLT5pbXApKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PE9iamVjdEltcCo+KG8tPmltcCk7CiAgICAgICAg
IH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyAgV3JhcCBOUE9iamVjdCBpbiBhIENJ
bnN0YW5jZS4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191
dGlsaXR5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC11IC1wIC1yMS42
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgKLS0tIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL2MvY191dGlsaXR5LmgJMjQgSnVuIDIwMDQgMDA6MzY6MzMgLTAwMDAJMS42Cisr
KyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5oCTcgQXVnIDIwMDUgMDQ6NDQ6
MDUgLTAwMDAKQEAgLTQ1LDEyICs0NSwxMSBAQCB0eXBlZGVmIGVudW0gCiAgICAgTlBfSW52YWxp
ZFZhbHVlVHlwZQogfSBOUF9WYWx1ZVR5cGU7CiAKLQotZXh0ZXJuIHZvaWQgY29udmVydE5QU3Ry
aW5nVG9VVEYxNiAoY29uc3QgTlBTdHJpbmcgKnN0cmluZywgTlBVVEYxNiAqKlVURjE2Q2hhcnMs
IHVuc2lnbmVkIGludCAqVVRGMTZMZW5ndGgpOwotZXh0ZXJuIHZvaWQgY29udmVydFVURjhUb1VU
RjE2IChjb25zdCBOUFVURjggKlVURjhDaGFycywgaW50IFVURjhMZW5ndGgsIE5QVVRGMTYgKipV
VEYxNkNoYXJzLCB1bnNpZ25lZCBpbnQgKlVURjE2TGVuZ3RoKTsKLWV4dGVybiB2b2lkIGNvZXJj
ZVZhbHVlVG9OUFZhcmlhbnRTdHJpbmdUeXBlIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKLWV4dGVybiB2b2lkIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50IChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKLWV4dGVybiBLSlM6OlZhbHVlIGNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTlBWYXJpYW50ICp2
YXJpYW50KTsKK3ZvaWQgY29udmVydE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyAqc3Ry
aW5nLCBOUFVURjE2ICoqVVRGMTZDaGFycywgdW5zaWduZWQgaW50ICpVVEYxNkxlbmd0aCk7Cit2
b2lkIGNvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBOUFVURjggKlVURjhDaGFycywgaW50IFVURjhM
ZW5ndGgsIE5QVVRGMTYgKipVVEYxNkNoYXJzLCB1bnNpZ25lZCBpbnQgKlVURjE2TGVuZ3RoKTsK
K3ZvaWQgY29lcmNlVmFsdWVUb05QVmFyaWFudFN0cmluZ1R5cGUoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit2b2lkIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQpOworS0pTOjpWYWx1ZUltcCAqY29udmVydE5QVmFyaWFu
dFRvVmFsdWUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCk7
CiAKIHR5cGVkZWYgc3RydWN0IAogewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5p
L2puaV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI1CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjI1IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2pu
aS9qbmlfaW5zdGFuY2UuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2lu
c3RhbmNlLmNwcAkxMiBGZWIgMjAwNSAwMDo1ODoxMyAtMDAwMAkxLjI1CisrKyBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA1IC0w
MDAwCkBAIC04MSwzNiArODEsMzMgQEAgQ2xhc3MgKkphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBj
b25zdCAKICAgICByZXR1cm4gX2NsYXNzOwogfQogCi1LSlM6OlZhbHVlIEphdmFJbnN0YW5jZTo6
c3RyaW5nVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKkphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUo
KSBjb25zdAogewogICAgIGpzdHJpbmcgc3RyaW5nVmFsdWUgPSAoanN0cmluZyljYWxsSk5JT2Jq
ZWN0TWV0aG9kIChfaW5zdGFuY2UtPl9pbnN0YW5jZSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFu
Zy9TdHJpbmc7Iik7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBjb25zdCBV
Q2hhciAqYyA9IChjb25zdCBVQ2hhciAqKWdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudiAo
ZW52LCBzdHJpbmdWYWx1ZSk7Ci0gICAgVVN0cmluZyB1KGMsIChpbnQpZW52LT5HZXRTdHJpbmdM
ZW5ndGgoc3RyaW5nVmFsdWUpKTsKLSAgICBTdHJpbmcgdih1KTsKLSAgICByZWxlYXNlVUNoYXJh
Y3RlcnNGb3JKU3RyaW5nSW5FbnYgKGVudiwgc3RyaW5nVmFsdWUsIChjb25zdCBqY2hhciAqKWMp
OwotICAgIHJldHVybiB2OworICAgIGNvbnN0IGpjaGFyICpjID0gZ2V0VUNoYXJhY3RlcnNGcm9t
SlN0cmluZ0luRW52KGVudiwgc3RyaW5nVmFsdWUpOworICAgIFVTdHJpbmcgdSgoY29uc3QgVUNo
YXIgKiljLCAoaW50KWVudi0+R2V0U3RyaW5nTGVuZ3RoKHN0cmluZ1ZhbHVlKSk7CisgICAgcmVs
ZWFzZVVDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52KGVudiwgc3RyaW5nVmFsdWUsIGMpOworICAg
IHJldHVybiBqc1N0cmluZyh1KTsKIH0KIAotS0pTOjpWYWx1ZSBKYXZhSW5zdGFuY2U6Om51bWJl
clZhbHVlKCkgY29uc3QKK1ZhbHVlSW1wICpKYXZhSW5zdGFuY2U6Om51bWJlclZhbHVlKCkgY29u
c3QKIHsKICAgICBqZG91YmxlIGRvdWJsZVZhbHVlID0gY2FsbEpOSURvdWJsZU1ldGhvZCAoX2lu
c3RhbmNlLT5faW5zdGFuY2UsICJkb3VibGVWYWx1ZSIsICIoKUQiKTsKLSAgICBLSlM6Ok51bWJl
ciB2KGRvdWJsZVZhbHVlKTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4ganNOdW1iZXIoZG91
YmxlVmFsdWUpOwogfQogCi1LSlM6OlZhbHVlIEphdmFJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkg
Y29uc3QKK1ZhbHVlSW1wICpKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAg
ICAgamJvb2xlYW4gYm9vbGVhblZhbHVlID0gY2FsbEpOSUJvb2xlYW5NZXRob2QgKF9pbnN0YW5j
ZS0+X2luc3RhbmNlLCAiYm9vbGVhblZhbHVlIiwgIigpWiIpOwotICAgIEtKUzo6Qm9vbGVhbiB2
KGJvb2xlYW5WYWx1ZSk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIGpzQm9vbGVhbihib29s
ZWFuVmFsdWUpOwogfQogCi1WYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgTGlzdCAmYXJncykKIHsK
ICAgICBpbnQgaSwgY291bnQgPSBhcmdzLnNpemUoKTsKICAgICBqdmFsdWUgKmpBcmdzOwotICAg
IFZhbHVlIHJlc3VsdFZhbHVlOworICAgIFZhbHVlSW1wICpyZXN1bHRWYWx1ZTsKICAgICBNZXRo
b2QgKm1ldGhvZCA9IDA7CiAgICAgdW5zaWduZWQgaW50IG51bU1ldGhvZHMgPSBtZXRob2RMaXN0
Lmxlbmd0aCgpOwogICAgIApAQCAtMTQ1LDcgKzE0Miw3IEBAIFZhbHVlIEphdmFJbnN0YW5jZTo6
aW52b2tlTWV0aG9kIChLSlM6OkUKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewog
ICAgICAgICBKYXZhUGFyYW1ldGVyICphUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8SmF2YVBhcmFt
ZXRlciAqPihqTWV0aG9kLT5wYXJhbWV0ZXJBdChpKSk7CiAgICAgICAgIGpBcmdzW2ldID0gY29u
dmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFyZ3MuYXQoaSksIGFQYXJhbWV0ZXItPmdldEpOSVR5
cGUoKSwgYVBhcmFtZXRlci0+dHlwZSgpKTsKLQlKU19MT0coImFyZ1slZF0gPSAlc1xuIiwgaSwg
YXJncy5hdChpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKwlKU19MT0coImFyZ1slZF0gPSAl
c1xuIiwgaSwgYXJncy5hdChpKS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAgICAgfQogICAg
ICAgICAKIApAQCAtMTU4LDEyICsxNTUsMTEgQEAgVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QgKEtKUzo6RQogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogICAgIGlmIChleGVjQ29u
dGV4dCAmJiBleGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCkpIHsKICAgICAgICAgam9iamVjdCBv
YmogPSBfaW5zdGFuY2UtPl9pbnN0YW5jZTsKLSAgICAgICAgVmFsdWUgZXhjZXB0aW9uRGVzY3Jp
cHRpb247CisgICAgICAgIFZhbHVlSW1wICpleGNlcHRpb25EZXNjcmlwdGlvbjsKICAgICAgICAg
Y29uc3QgY2hhciAqY2FsbGluZ1VSTCA9IDA7ICAvLyBGSVhNRSwgbmVlZCB0byBwcm9wYWdhdGUg
Y2FsbGluZyBVUkwgdG8gSmF2YQogICAgICAgICBoYW5kbGVkID0gZGlzcGF0Y2hKTklDYWxsIChl
eGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCksIG9iaiwgak1ldGhvZC0+aXNTdGF0aWMoKSwgak1l
dGhvZC0+Sk5JUmV0dXJuVHlwZSgpLCBqTWV0aG9kLT5tZXRob2RJRChvYmopLCBqQXJncywgcmVz
dWx0LCBjYWxsaW5nVVJMLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgIGlmICghZXhj
ZXB0aW9uRGVzY3JpcHRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIE9iamVjdCBlcnJvciA9
IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25EZXNjcmlwdGlvbi50
b1N0cmluZyhleGVjKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAKKyAgICAg
ICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBPYmplY3RJbXAgKmVy
cm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0
aW9uLT50b1N0cmluZyhleGVjKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmcmVl
IChqQXJncyk7CkBAIC0yNTYsNyArMjUyLDcgQEAgVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QgKEtKUzo6RQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGNhc2UgYm9v
bGVhbl90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHRWYWx1ZSA9IEtKUzo6Qm9vbGVhbihyZXN1
bHQueik7CisgICAgICAgICAgICByZXN1bHRWYWx1ZSA9IEJvb2xlYW4ocmVzdWx0LnopOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTMwNywxMyArMzAzLDEzIEBAIFZh
bHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChLSlM6OkUKICAgICByZXR1cm4gcmVzdWx0
VmFsdWU7CiB9CiAKLUtKUzo6VmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9k
IChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpMaXN0ICZhcmdzKQorVmFsdWVJbXAg
KkphdmFJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBMaXN0ICZhcmdzKQogewogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogCi1LSlM6OlZh
bHVlIEphdmFJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIChLSlM6OlR5cGUgaGludCkgY29uc3QKK1Zh
bHVlSW1wICpKYXZhSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZSAoVHlwZSBoaW50KSBjb25zdAogewog
ICAgIGlmIChoaW50ID09IFN0cmluZ1R5cGUpIHsKICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVl
KCk7CkBAIC0zNDAsNyArMzM2LDcgQEAgS0pTOjpWYWx1ZSBKYXZhSW5zdGFuY2U6OmRlZmF1bHRW
YWx1ZSAoSwogICAgIHJldHVybiB2YWx1ZU9mKCk7CiB9CiAKLUtKUzo6VmFsdWUgSmF2YUluc3Rh
bmNlOjp2YWx1ZU9mKCkgY29uc3QgCitWYWx1ZUltcCAqSmF2YUluc3RhbmNlOjp2YWx1ZU9mKCkg
Y29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7CiB9OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTcgSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9qbmkvam5pX2luc3RhbmNlLmgJMTcgSmFuIDIwMDUgMjI6NDE6MjIgLTAwMDAJMS4xNworKysg
SmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5oCTcgQXVnIDIwMDUgMDQ6
NDQ6MDUgLTAwMDAKQEAgLTkwLDE3ICs5MCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZCgpOwogICAgIAotICAgIHZpcnR1YWwgVmFs
dWUgdmFsdWVPZigpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVlIChUeXBl
IGhpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlT2YoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFsdWUgKFR5cGUgaGludCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIFZhbHVlIGludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRo
b2RMaXN0ICZtZXRob2QsIGNvbnN0IExpc3QgJmFyZ3MpOwotICAgIHZpcnR1YWwgVmFsdWUgaW52
b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TWV0aG9kTGlzdCAmbWV0aG9kLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICppbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MpOwogCiAgICAgam9iamVjdCBqYXZhSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBfaW5zdGFu
Y2UtPl9pbnN0YW5jZTsgfQogICAgIAotICAgIFZhbHVlIHN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0g
ICAgVmFsdWUgbnVtYmVyVmFsdWUoKSBjb25zdDsKLSAgICBWYWx1ZSBib29sZWFuVmFsdWUoKSBj
b25zdDsKKyAgICBWYWx1ZUltcCAqc3RyaW5nVmFsdWUoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAq
bnVtYmVyVmFsdWUoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqYm9vbGVhblZhbHVlKCkgY29uc3Q7
CiAgICAgICAgIAogcHJpdmF0ZToKICAgICBKT2JqZWN0V3JhcHBlciAqX2luc3RhbmNlOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNv
YmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXUgLXAgLXIx
LjExIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuY3BwCi0tLSBKYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2JqZWN0LmNwcAkyOSBBcHIgMjAwNSAwMDoy
Mjo1NSAtMDAwMAkxLjExCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2Jq
ZWN0LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA1IC0wMDAwCkBAIC03Nyw3ICs3Nyw3IEBAIGp2YWx1
ZSBKU09iamVjdDo6aW52b2tlIChKU09iamVjdENhbGxDb24KICAgICAgICAgICAgIHJlc3VsdC5q
ID0gSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShuYXRpdmVIYW5kbGUpOwogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgS0pTOjpPYmplY3RJbXAgKmltcCA9IGpsb25nX3RvX2lt
cHB0cihuYXRpdmVIYW5kbGUpOworICAgICAgICAgICAgT2JqZWN0SW1wICppbXAgPSBqbG9uZ190
b19pbXBwdHIobmF0aXZlSGFuZGxlKTsKICAgICAgICAgICAgIGlmICghcm9vdEZvckltcChpbXAp
KSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JWQ6ICBBdHRlbXB0IHRv
IGFjY2VzcyBKYXZhU2NyaXB0IGZyb20gZGVzdHJveWVkIGFwcGxldCwgdHlwZSAlZC5cbiIsIF9f
RklMRV9fLCBfX0xJTkVfXywgY29udGV4dC0+dHlwZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTE3MywxOSArMTczLDE5IEBAIGpvYmplY3QgSlNPYmplY3Q6OmNhbGwoanN0
cmluZyBtZXRob2ROYW0KICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwogICAgIAogICAgIElkZW50
aWZpZXIgaWRlbnRpZmllcihKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLnVzdHJpbmcoKSk7Ci0gICAg
VmFsdWUgZnVuYyA9IF9pbXAtPmdldCAoZXhlYywgaWRlbnRpZmllcik7CisgICAgVmFsdWVJbXAg
KmZ1bmMgPSBfaW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZpZXIpOwogICAgIEludGVycHJldGVyOjp1
bmxvY2soKTsKLSAgICBpZiAoZnVuYy5pc051bGwoKSB8fCBmdW5jLnR5cGUoKSA9PSBVbmRlZmlu
ZWRUeXBlKSB7CisgICAgaWYgKGZ1bmMtPmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAg
Ly8gTWF5YmUgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmU/CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAogICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBPYmplY3RJbXAgKmZ1
bmNJbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihmdW5jLmltcCgpKTsKLSAgICBPYmplY3Qg
dGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KF9pbXApKTsKKyAgICBPYmpl
Y3RJbXAgKmZ1bmNJbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihmdW5jKTsKKyAgICBPYmpl
Y3RJbXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCo+KF9pbXApOwogICAgIExpc3Qg
YXJnTGlzdCA9IGxpc3RGcm9tSkFycmF5KGFyZ3MpOwogICAgIEludGVycHJldGVyOjpsb2NrKCk7
Ci0gICAgVmFsdWUgcmVzdWx0ID0gZnVuY0ltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJnTGlz
dCk7CisgICAgVmFsdWVJbXAgKnJlc3VsdCA9IGZ1bmNJbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmos
IGFyZ0xpc3QpOwogICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKIAogICAgIC8vIENvbnZlcnQg
YW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgpAQCAtMTk2LDggKzE5
Niw4IEBAIGpvYmplY3QgSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcHQpIGMKIHsKICAgICBK
U19MT0cgKCJzY3JpcHQgPSAlc1xuIiwgSmF2YVN0cmluZyhzY3JpcHQpLlVURjhTdHJpbmcoKSk7
CiAKLSAgICBPYmplY3QgdGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KF9p
bXApKTsKLSAgICBWYWx1ZSByZXN1bHQ7CisgICAgT2JqZWN0SW1wICp0aGlzT2JqID0gY29uc3Rf
Y2FzdDxPYmplY3RJbXAqPihfaW1wKTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0OwogICAgIAogICAg
IEludGVycHJldGVyOjpsb2NrKCk7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQCBqb2JqZWN0IEpTT2Jq
ZWN0OjpldmFsKGpzdHJpbmcgc2NyaXB0KSBjCiAgICAgCiAgICAgaWYgKHR5cGUgPT0gTm9ybWFs
KSB7CiAgICAgICAgIHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICAgICAgaWYgKHJl
c3VsdC5pc051bGwoKSkgeworICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgcmVz
dWx0ID0gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjUsNyArMjI1LDcgQEAg
am9iamVjdCBKU09iamVjdDo6Z2V0TWVtYmVyKGpzdHJpbmcgbWVtYgogICAgIEV4ZWNTdGF0ZSAq
ZXhlYyA9IF9yb290LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAKICAgICBJbnRlcnBy
ZXRlcjo6bG9jaygpOwotICAgIFZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldCAoZXhlYywgSWRlbnRp
ZmllciAoSmF2YVN0cmluZyhtZW1iZXJOYW1lKS51c3RyaW5nKCkpKTsKKyAgICBWYWx1ZUltcCAq
cmVzdWx0ID0gX2ltcC0+Z2V0IChleGVjLCBJZGVudGlmaWVyIChKYXZhU3RyaW5nKG1lbWJlck5h
bWUpLnVzdHJpbmcoKSkpOwogICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKIAogICAgIHJldHVy
biBjb252ZXJ0VmFsdWVUb0pPYmplY3QgKHJlc3VsdCk7CkBAIC0yNTgsNyArMjU4LDcgQEAgam9i
amVjdCBKU09iamVjdDo6Z2V0U2xvdChqaW50IGluZGV4KSBjbwogCiAgICAgRXhlY1N0YXRlICpl
eGVjID0gX3Jvb3QtPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICBJbnRlcnByZXRl
cjo6bG9jaygpOwotICAgIFZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldCAoZXhlYywgKHVuc2lnbmVk
KWluZGV4KTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gX2ltcC0+Z2V0IChleGVjLCAodW5zaWdu
ZWQpaW5kZXgpOwogICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKIAogICAgIHJldHVybiBjb252
ZXJ0VmFsdWVUb0pPYmplY3QgKHJlc3VsdCk7CkBAIC0yODEsNyArMjgxLDcgQEAganN0cmluZyBK
U09iamVjdDo6dG9TdHJpbmcoKSBjb25zdAogICAgIEpTX0xPRyAoIlxuIik7CiAKICAgICBJbnRl
cnByZXRlcjo6bG9jaygpOwotICAgIE9iamVjdCB0aGlzT2JqID0gT2JqZWN0KGNvbnN0X2Nhc3Q8
T2JqZWN0SW1wKj4oX2ltcCkpOworICAgIE9iamVjdEltcCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8
T2JqZWN0SW1wKj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlICpleGVjID0gX3Jvb3QtPmludGVycHJl
dGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICAKICAgICBqc3RyaW5nIHJlc3VsdCA9IChqc3RyaW5n
KWNvbnZlcnRWYWx1ZVRvSlZhbHVlIChleGVjLCB0aGlzT2JqLCBvYmplY3RfdHlwZSwgImphdmEu
bGFuZy5TdHJpbmciKS5sOwpAQCAtMzI4LDcgKzMyOCw3IEBAIGpsb25nIEpTT2JqZWN0OjpjcmVh
dGVOYXRpdmUoamxvbmcgbmF0aXYKICAgICByZXR1cm4gcHRyX3RvX2psb25nKDApOwogfQogCi1q
b2JqZWN0IEpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QgKEtKUzo6VmFsdWUgdmFsdWUp
IGNvbnN0Citqb2JqZWN0IEpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QgKFZhbHVlSW1w
ICp2YWx1ZSkgY29uc3QKIHsKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBfcm9vdC0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsRXhlYygpOwogICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CkBAIC0z
NDIsMzkgKzM0MiwzOSBAQCBqb2JqZWN0IEpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3Qg
CiAgICAgLy8gSmF2YSBpbnN0YW5jZSAtPiBKYXZhIGluc3RhbmNlCiAgICAgLy8gRXZlcnl0aGlu
ZyBlbHNlIC0+IEpTT2JqZWN0CiAgICAgCi0gICAgS0pTOjpUeXBlIHR5cGUgPSB2YWx1ZS50eXBl
KCk7Ci0gICAgaWYgKHR5cGUgPT0gS0pTOjpOdW1iZXJUeXBlKSB7CisgICAgVHlwZSB0eXBlID0g
dmFsdWUtPnR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBOdW1iZXJUeXBlKSB7CiAgICAgICAgIGpj
bGFzcyBKU09iamVjdENsYXNzID0gZW52LT5GaW5kQ2xhc3MgKCJqYXZhL2xhbmcvRG91YmxlIik7
CiAgICAgICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvcklEID0gZW52LT5HZXRNZXRob2RJRCAoSlNP
YmplY3RDbGFzcywgIjxpbml0PiIsICIoRClWIik7CiAgICAgICAgIGlmIChjb25zdHJ1Y3RvcklE
ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVj
dENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRvdWJsZSl2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBlbnYtPk5ld09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3Ry
dWN0b3JJRCwgKGpkb3VibGUpdmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgfQogICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09IEtKUzo6U3RyaW5nVHlwZSkgewotICAgICAgICBLSlM6
OlVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBlbHNlIGlm
ICh0eXBlID09IFN0cmluZ1R5cGUpIHsKKyAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZh
bHVlLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsK
ICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdTdHJpbmcgKChjb25zdCBqY2hhciAqKXN0cmluZ1Zh
bHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgpKTsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSBLSlM6OkJvb2xlYW5UeXBlKSB7CisgICAgZWxzZSBpZiAodHlwZSA9PSBCb29sZWFuVHlw
ZSkgewogICAgICAgICBqY2xhc3MgSlNPYmplY3RDbGFzcyA9IGVudi0+RmluZENsYXNzICgiamF2
YS9sYW5nL0Jvb2xlYW4iKTsKICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9ySUQgPSBlbnYt
PkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGluaXQ+IiwgIihaKVYiKTsKICAgICAgICAg
aWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gZW52LT5O
ZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVjdG9ySUQsIChqYm9vbGVhbil2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOworICAgICAgICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpT
T2JqZWN0Q2xhc3MsIGNvbnN0cnVjdG9ySUQsIChqYm9vbGVhbil2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gQ3JlYXRlIGEg
SlNPYmplY3QuCiAgICAgICAgIGpsb25nIG5hdGl2ZUhhbmRsZTsKICAgICAgICAgCi0gICAgICAg
IGlmICh0eXBlID09IEtKUzo6T2JqZWN0VHlwZSl7Ci0gICAgICAgICAgICBLSlM6Ok9iamVjdElt
cCAqaW1wID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAqPih2YWx1ZS5pbXAoKSk7CisgICAg
ICAgIGlmICh0eXBlID09IE9iamVjdFR5cGUpeworICAgICAgICAgICAgT2JqZWN0SW1wICppbXAg
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIFdlIGVpdGhlciBoYXZlIGEgd3JhcHBlciBhcm91bmQgYSBKYXZhIGluc3RhbmNlIG9y
IGEgSmF2YVNjcmlwdAogICAgICAgICAgICAgLy8gb2JqZWN0LiAgSWYgd2UgaGF2ZSBhIHdyYXBw
ZXIgYXJvdW5kIGEgSmF2YSBpbnN0YW5jZSwgcmV0dXJuIHRoYXQKICAgICAgICAgICAgIC8vIGlu
c3RhbmNlLCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IEphdmEgSlNPYmplY3Qgd2l0aCB0aGUgT2Jq
ZWN0SW1wKgogICAgICAgICAgICAgLy8gYXMgaXQncyBuYXRpdmVIYW5kbGUuCiAgICAgICAgICAg
ICBpZiAoaW1wLT5jbGFzc0luZm8oKSAmJiBzdHJjbXAoaW1wLT5jbGFzc0luZm8oKS0+Y2xhc3NO
YW1lLCAiUnVudGltZU9iamVjdCIpID09IDApIHsKLSAgICAgICAgICAgICAgICBLSlM6OlJ1bnRp
bWVPYmplY3RJbXAgKnJ1bnRpbWVJbXAgPSBzdGF0aWNfY2FzdDxLSlM6OlJ1bnRpbWVPYmplY3RJ
bXAqPih2YWx1ZS5pbXAoKSk7CisgICAgICAgICAgICAgICAgUnVudGltZU9iamVjdEltcCAqcnVu
dGltZUltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPih2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgQmluZGluZ3M6OkphdmFJbnN0YW5jZSAqcnVudGltZUluc3RhbmNlID0gc3RhdGlj
X2Nhc3Q8QmluZGluZ3M6OkphdmFJbnN0YW5jZSAqPihydW50aW1lSW1wLT5nZXRJbnRlcm5hbElu
c3RhbmNlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lSW5zdGFuY2UtPmphdmFJ
bnN0YW5jZSgpOwogICAgICAgICAgICAgfQpAQCAtNDExLDcgKzQxMSw3IEBAIGpvYmplY3QgSlNP
YmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1L
SlM6OlZhbHVlIEpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFsdWUgKGpvYmplY3QgdGhlT2Jq
ZWN0KSBjb25zdAorVmFsdWVJbXAgKkpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFsdWUgKGpv
YmplY3QgdGhlT2JqZWN0KSBjb25zdAogewogICAgIC8vIEluc3RhbmNlcyBvZiBuZXRzY2FwZS5q
YXZhc2NyaXB0LkpTT2JqZWN0IGdldCBjb252ZXJ0ZWQgYmFjayB0bwogICAgIC8vIEphdmFTY3Jp
cHQgb2JqZWN0cy4gIEFsbCBvdGhlciBvYmplY3RzIGFyZSB3cmFwcGVkLiAgSXQncyBub3QKQEAg
LTQyNywyOCArNDI3LDI4IEBAIEtKUzo6VmFsdWUgSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9W
YWwKICAgICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgamZpZWxkSUQg
ZmllbGRJRCA9IGVudi0+R2V0RmllbGRJRCgoamNsYXNzKWNsYXNzT2ZJbnN0YW5jZSwgIm5hdGl2
ZUpTT2JqZWN0IiwgImxvbmciKTsKICAgICAgICAgaWYgKGZpZWxkSUQgPT0gTlVMTCkgewotICAg
ICAgICAgICAgcmV0dXJuIEtKUzo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICAgICAgamxvbmcgbmF0aXZlSGFuZGxlID0gZW52LT5H
ZXRMb25nRmllbGQodGhlT2JqZWN0LCBmaWVsZElEKTsKICAgICAgICAgaWYgKG5hdGl2ZUhhbmRs
ZSA9PSBVbmRlZmluZWRIYW5kbGUpIHsKLSAgICAgICAgICAgIHJldHVybiBLSlM6OlVuZGVmaW5l
ZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAg
IEtKUzo6T2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGpsb25n
X3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpKTsKLSAgICAgICAgcmV0dXJuIEtKUzo6T2JqZWN0KGNv
bnN0X2Nhc3Q8S0pTOjpPYmplY3RJbXAqPihpbXApKTsKKyAgICAgICAgT2JqZWN0SW1wICppbXAg
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihqbG9uZ190b19pbXBwdHIobmF0aXZlSGFuZGxlKSk7
CisgICAgICAgIHJldHVybiBpbXA7CiAgICAgfQogCiAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsK
LSAgICBLSlM6OlJ1bnRpbWVPYmplY3RJbXAgKm5ld0ltcCA9IG5ldyBLSlM6OlJ1bnRpbWVPYmpl
Y3RJbXAobmV3IEJpbmRpbmdzOjpKYXZhSW5zdGFuY2UgKHRoZU9iamVjdCwgX3Jvb3QpKTsKKyAg
ICBSdW50aW1lT2JqZWN0SW1wICpuZXdJbXAgPSBuZXcgUnVudGltZU9iamVjdEltcChuZXcgQmlu
ZGluZ3M6OkphdmFJbnN0YW5jZSAodGhlT2JqZWN0LCBfcm9vdCkpOwogICAgIEludGVycHJldGVy
Ojp1bmxvY2soKTsKIAotICAgIHJldHVybiBLSlM6Ok9iamVjdChuZXdJbXApOworICAgIHJldHVy
biBuZXdJbXA7CiB9CiAKLUtKUzo6TGlzdCBKU09iamVjdDo6bGlzdEZyb21KQXJyYXkoam9iamVj
dEFycmF5IGpBcnJheSkgY29uc3QKK0xpc3QgSlNPYmplY3Q6Omxpc3RGcm9tSkFycmF5KGpvYmpl
Y3RBcnJheSBqQXJyYXkpIGNvbnN0CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsK
ICAgICBsb25nIGksIG51bU9iamVjdHMgPSBqQXJyYXkgPyBlbnYtPkdldEFycmF5TGVuZ3RoIChq
QXJyYXkpIDogMDsKLSAgICBLSlM6Okxpc3QgYUxpc3Q7CisgICAgTGlzdCBhTGlzdDsKICAgICAK
ICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtT2JqZWN0czsgaSsrKSB7CiAgICAgICAgIGpvYmplY3Qg
YW5PYmplY3QgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCAoKGpvYmplY3RBcnJheSlqQXJy
YXksIGkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9q
bmkvam5pX2pzb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC11
IC1wIC1yMS4zIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuaAotLS0g
SmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5oCTE5IE1heSAyMDA0IDE0
OjMzOjI1IC0wMDAwCTEuMworKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29i
amVjdC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDUgLTAwMDAKQEAgLTg4LDEzICs4OCwxMyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgc3RhdGljIGp2YWx1ZSBpbnZva2UgKEpTT2JqZWN0Q2FsbENvbnRleHQg
KmNvbnRleHQpOwogCi0gICAgam9iamVjdCBjb252ZXJ0VmFsdWVUb0pPYmplY3QgKEtKUzo6VmFs
dWUgdmFsdWUpIGNvbnN0OwotICAgIEtKUzo6VmFsdWUgY29udmVydEpPYmplY3RUb1ZhbHVlIChq
b2JqZWN0IHRoZU9iamVjdCkgY29uc3Q7Ci0gICAgS0pTOjpMaXN0IGxpc3RGcm9tSkFycmF5KGpv
YmplY3RBcnJheSBqQXJyYXkpIGNvbnN0OworICAgIGpvYmplY3QgY29udmVydFZhbHVlVG9KT2Jq
ZWN0IChWYWx1ZUltcCAqdmFsdWUpIGNvbnN0OworICAgIFZhbHVlSW1wICpjb252ZXJ0Sk9iamVj
dFRvVmFsdWUgKGpvYmplY3QgdGhlT2JqZWN0KSBjb25zdDsKKyAgICBMaXN0IGxpc3RGcm9tSkFy
cmF5KGpvYmplY3RBcnJheSBqQXJyYXkpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICBjb25z
dCBCaW5kaW5nczo6Um9vdE9iamVjdCAqX3Jvb3Q7Ci0gICAgS0pTOjpPYmplY3RJbXAgKl9pbXA7
CisgICAgY29uc3QgUm9vdE9iamVjdCAqX3Jvb3Q7CisgICAgT2JqZWN0SW1wICpfaW1wOwogfTsK
IAogCkBAIC0xMTYsNiArMTE2LDYgQEAgam9iamVjdCBLSlNfSlNPYmplY3RfSlNPYmplY3RHZXRT
bG90IChKTgogdm9pZCBLSlNfSlNPYmplY3RfSlNPYmplY3RTZXRTbG90IChKTklFbnYgKmVudiwg
amNsYXNzIGpzQ2xhc3MsIGpsb25nIG5hdGl2ZUpTT2JqZWN0LCBqc3RyaW5nIGp1cmwsIGppbnQg
amluZGV4LCBqb2JqZWN0IHZhbHVlLCBqYm9vbGVhbiBjdHgpOwoganN0cmluZyBLSlNfSlNPYmpl
Y3RfSlNPYmplY3RUb1N0cmluZyAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamxvbmcgbmF0
aXZlSlNPYmplY3QpOwogCi19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworfQogCiAjZW5kaWYKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9q
bmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL2puaS9qbmlfb2JqYy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRp
ZmYgLXAgLXUgLXUgLXAgLXIxLjMgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9vYmpj
Lm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX29iamMubW0JMTUgRGVjIDIw
MDQgMDI6MDA6MzMgLTAwMDAJMS4zCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X29iamMubW0JNyBBdWcgMjAwNSAwNDo0NDowNSAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKIC0gKE5TVVJMICopX3dlYlZpZXdVUkw7CiBAZW5k
CiAKLWJvb2wgS0pTOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsIChjb25zdCB2b2lkICp0YXJn
ZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5U
eXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncywganZhbHVlICZyZXN1bHQsIGNv
bnN0IGNoYXIgKmNhbGxpbmdVUkwsIFZhbHVlICZleGNlcHRpb25EZXNjcmlwdGlvbikKK2Jvb2wg
S0pTOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsIChjb25zdCB2b2lkICp0YXJnZXRBcHBsZXRW
aWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0
aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncywganZhbHVlICZyZXN1bHQsIGNvbnN0IGNoYXIg
KmNhbGxpbmdVUkwsIFZhbHVlSW1wIComZXhjZXB0aW9uRGVzY3JpcHRpb24pCiB7CiAgICAgaWQg
dmlldyA9IChpZCl0YXJnZXRBcHBsZXRWaWV3OwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC11IC1wIC1yMS4yNSBKYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9q
bmkvam5pX3J1bnRpbWUuY3BwCTQgTWF5IDIwMDUgMDA6MDk6NDcgLTAwMDAJMS4yNQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0
OjA1IC0wMDAwCkBAIC02NywxNSArNjcsMTUgQEAgSmF2YUZpZWxkOjpKYXZhRmllbGQgKEpOSUVu
diAqZW52LCBqb2JqZQogICAgIF9maWVsZCA9IG5ldyBKYXZhSW5zdGFuY2UoYUZpZWxkLCAwKTsK
IH0KIAotS0pTOjpWYWx1ZSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheSAoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0
IFJvb3RPYmplY3QgKnIpCitWYWx1ZUltcCAqSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJy
YXkgKEV4ZWNTdGF0ZSAqZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciAqdHlwZSwg
Y29uc3QgUm9vdE9iamVjdCAqcikKIHsKICAgICBpZiAodHlwZVswXSAhPSAnWycpCiAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiBLSlM6Ok9iamVjdChuZXcgUnVudGlt
ZUFycmF5SW1wKGV4ZWMsIG5ldyBKYXZhQXJyYXkgKChqb2JqZWN0KWFuT2JqZWN0LCB0eXBlLCBy
KSkpOworICAgIHJldHVybiBuZXcgUnVudGltZUFycmF5SW1wKGV4ZWMsIG5ldyBKYXZhQXJyYXko
KGpvYmplY3QpYW5PYmplY3QsIHR5cGUsIHIpKTsKIH0KIAotanZhbHVlIEphdmFGaWVsZDo6ZGlz
cGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUlu
c3RhbmNlICppbnN0YW5jZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBKTklU
eXBlIHJldHVyblR5cGUpIGNvbnN0CitqdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJv
bUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwg
Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNv
bnN0CiB7CiAgICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7
CiAgICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IF9maWVsZC0+amF2YUluc3RhbmNlKCk7CkBA
IC05MCwxMyArOTAsMTMgQEAganZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0
YQogCXsKIAkgICAgY29uc3QgUm9vdE9iamVjdCAqZXhlY0NvbnRleHQgPSBpbnN0YW5jZS0+ZXhl
Y3V0aW9uQ29udGV4dCgpOwogCSAgICBpZiAoZXhlY0NvbnRleHQgJiYgZXhlY0NvbnRleHQtPm5h
dGl2ZUhhbmRsZSgpKSB7Ci0JCVZhbHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOworCQlWYWx1ZUlt
cCAqZXhjZXB0aW9uRGVzY3JpcHRpb247CiAJCWp2YWx1ZSBhcmdzWzFdOwogCQkKIAkJYXJnc1sw
XS5sID0gamluc3RhbmNlOwogCQlkaXNwYXRjaEpOSUNhbGwgKGV4ZWNDb250ZXh0LT5uYXRpdmVI
YW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJl
c3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwotCQlpZiAoIWV4Y2VwdGlvbkRlc2NyaXB0
aW9uLmlzTnVsbCgpKSB7Ci0JCSAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykuVVRGOFN0
cmluZygpLmNfc3RyKCkpOworCQlpZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pIHsKKwkJICAgIE9i
amVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0
aW9uRGVzY3JpcHRpb24tPnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKIAkJ
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAJCX0KIAkgICAgfQpAQCAtMTA1LDExICsx
MDUsMTEgQEAganZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUtKUzo6VmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5j
ZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmkpIGNvbnN0IAorVmFsdWVJ
bXAgKkphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
bnN0YW5jZSAqaSkgY29uc3QgCiB7CiAgICAgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihpKTsKIAotICAgIFZhbHVlIGpzcmVz
dWx0ID0gVW5kZWZpbmVkKCk7CisgICAgVmFsdWVJbXAgKmpzcmVzdWx0ID0gVW5kZWZpbmVkKCk7
CiAgICAgCiAgICAgc3dpdGNoIChfSk5JVHlwZSkgewogICAgICAgICBjYXNlIG9iamVjdF90eXBl
OiB7CkBAIC0xMjksNyArMTI5LDcgQEAgS0pTOjpWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUlu
c3RhbmNlKAogICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewogCSAgICBqdmFsdWUgcmVzdWx0
ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsICJnZXRCb29sZWFu
IiwgIihMamF2YS9sYW5nL09iamVjdDspWiIsIGJvb2xlYW5fdHlwZSk7CiAJICAgIGpib29sZWFu
IHZhbHVlID0gcmVzdWx0Lno7Ci0gICAgICAgICAgICBqc3Jlc3VsdCA9IEtKUzo6Qm9vbGVhbigo
Ym9vbCl2YWx1ZSk7CisgICAgICAgICAgICBqc3Jlc3VsdCA9IEJvb2xlYW4oKGJvb2wpdmFsdWUp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xNTgsMTIgKzE1
OCwxMiBAQCBLSlM6OlZhbHVlIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIEpTX0xPRyAoImdldHRpbmcgJXMgPSAlc1xuIiwgbmFtZSgp
LCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICBKU19MT0cgKCJnZXR0aW5n
ICVzID0gJXNcbiIsIG5hbWUoKSwganNyZXN1bHQtPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwog
ICAgIAogICAgIHJldHVybiBqc3Jlc3VsdDsKIH0KIAotdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNo
U2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFu
Y2UgKmluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj
aGFyICpzaWcpIGNvbnN0Cit2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFu
Y2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNlLCBqdmFsdWUg
amF2YVZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcpIGNvbnN0CiB7CiAg
ICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CiAgICAgam9i
amVjdCBmaWVsZEpJbnN0YW5jZSA9IF9maWVsZC0+amF2YUluc3RhbmNlKCk7CkBAIC0xNzYsMTUg
KzE3NiwxNSBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuCiAJewog
CSAgICBjb25zdCBSb290T2JqZWN0ICpleGVjQ29udGV4dCA9IGluc3RhbmNlLT5leGVjdXRpb25D
b250ZXh0KCk7CiAJICAgIGlmIChleGVjQ29udGV4dCAmJiBleGVjQ29udGV4dC0+bmF0aXZlSGFu
ZGxlKCkpIHsKLQkJVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisJCVZhbHVlSW1wICpleGNl
cHRpb25EZXNjcmlwdGlvbjsKIAkJanZhbHVlIGFyZ3NbMl07CiAJCWp2YWx1ZSByZXN1bHQ7CiAJ
CQogCQlhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAJCWFyZ3NbMV0gPSBqYXZhVmFsdWU7CiAJCWRp
c3BhdGNoSk5JQ2FsbCAoZXhlY0NvbnRleHQtPm5hdGl2ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5j
ZSwgZmFsc2UsIHZvaWRfdHlwZSwgbWlkLCBhcmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uKTsKLQkJaWYgKCFleGNlcHRpb25EZXNjcmlwdGlvbi5pc051bGwoKSkgewotCQkgICAg
T2JqZWN0IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKKwkJaWYg
KGV4Y2VwdGlvbkRlc2NyaXB0aW9uKSB7CisJCSAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6
OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLT50b1N0cmlu
ZyhleGVjKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7CiAJCSAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyb3IpOwogCQl9CiAJICAgIH0KQEAgLTE5MiwxMiArMTkyLDEyIEBAIHZvaWQgSmF2YUZpZWxk
OjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW4KICAgICB9CiB9CiAKLXZvaWQgSmF2YUZpZWxkOjpz
ZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICpp
LCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0Cit2b2lkIEphdmFGaWVsZDo6c2V0VmFs
dWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmksIFZhbHVlSW1w
ICphVmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9IHN0
YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihpKTsKICAgICBqdmFsdWUgamF2YVZhbHVl
ID0gY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFWYWx1ZSwgX0pOSVR5cGUsIHR5cGUoKSk7
CiAKLSAgICBKU19MT0cgKCJzZXR0aW5nIHZhbHVlICVzIHRvICVzXG4iLCBuYW1lKCksIGFWYWx1
ZS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICBKU19MT0cgKCJzZXR0aW5nIHZhbHVlICVz
IHRvICVzXG4iLCBuYW1lKCksIGFWYWx1ZS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAKICAg
ICBzd2l0Y2ggKF9KTklUeXBlKSB7CiAgICAgICAgIGNhc2Ugb2JqZWN0X3R5cGU6IHsKQEAgLTM5
NCw3ICszOTQsNyBAQCBKYXZhQXJyYXk6OkphdmFBcnJheSAoY29uc3QgSmF2YUFycmF5ICZvCiAg
ICAgX3R5cGUgPSBzdHJkdXAob3RoZXIuX3R5cGUpOwogfTsKIAotdm9pZCBKYXZhQXJyYXk6OnNl
dFZhbHVlQXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qg
S0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdAordm9pZCBKYXZhQXJyYXk6OnNldFZhbHVlQXQoRXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIFZhbHVlSW1wICphVmFsdWUpIGNvbnN0
CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBjaGFyICpqYXZhQ2xhc3NO
YW1lID0gMDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCB2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChL
SlM6OkV4ZWNTdGF0CiB9CiAKIAotS0pTOjpWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKK1ZhbHVlSW1wICpKYXZh
QXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0
CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBKTklUeXBlIGFycmF5VHlw
ZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShfdHlwZVsxXSk7CkBAIC00ODksNyArNDg5LDcg
QEAgS0pTOjpWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoS0pTOjpFeGVjUwogICAgICAgICAgICAg
amJvb2xlYW5BcnJheSBib29sZWFuQXJyYXkgPSAoamJvb2xlYW5BcnJheSlqYXZhQXJyYXkoKTsK
ICAgICAgICAgICAgIGpib29sZWFuIGFCb29sZWFuOwogICAgICAgICAgICAgZW52LT5HZXRCb29s
ZWFuQXJyYXlSZWdpb24oYm9vbGVhbkFycmF5LCBpbmRleCwgMSwgJmFCb29sZWFuKTsKLSAgICAg
ICAgICAgIHJldHVybiBLSlM6OkJvb2xlYW4gKGFCb29sZWFuKTsKKyAgICAgICAgICAgIHJldHVy
biBCb29sZWFuIChhQm9vbGVhbik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIGJ5dGVfdHlwZTogewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9y
dW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2puaS9qbmlfcnVudGltZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYg
LXAgLXUgLXUgLXAgLXIxLjI1IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGlt
ZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuaAkxMiBKYW4g
MjAwNSAyMjowMzo1NSAtMDAwMAkxLjI1CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkv
am5pX3J1bnRpbWUuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA1IC0wMDAwCkBAIC0zNSw3ICszNSw2IEBA
CiAKIG5hbWVzcGFjZSBLSlMKIHsKLWNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2UgQmluZGluZ3MK
IHsKQEAgLTY4LDcgKzY3LDcgQEAgcHVibGljOgogICAgIH0KICAgICBjb25zdCBqY2hhciAqdWNo
YXJzKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGpjaGFyICopX3VzdHJpbmcuZGF0YSgpOyB9CiAg
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF91c3RyaW5nLnNpemUoKTsgfQotICAgIEtK
Uzo6VVN0cmluZyB1c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gX3VzdHJpbmc7IH0KKyAgICBVU3Ry
aW5nIHVzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfdXN0cmluZzsgfQogICAgIAogcHJpdmF0ZToK
ICAgICBVU3RyaW5nIF91c3RyaW5nOwpAQCAtMTgyLDggKzE4MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIEtKUzo6VmFsdWUgdmFs
dWVGcm9tSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0
YW5jZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBLSlM6OlZhbHVl
ICZhVmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5z
dGFuY2UgKmluc3RhbmNlLCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdDsKICAgICAKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdCB7IHJldHVybiBfbmFtZS5VVEY4U3RyaW5nKCk7
IH0KICAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBfdHlwZS5V
VEY4U3RyaW5nKCk7IH0KQEAgLTE5MSw4ICsxOTAsOCBAQCBwdWJsaWM6CiAgICAgSk5JVHlwZSBn
ZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gX0pOSVR5cGU7IH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVl
LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcpIGNvbnN0OwotICAgIGp2YWx1ZSBK
YXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25zdDsKKyAgICB2b2lkIEphdmFGaWVsZDo6
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5z
dGFuY2UgKmluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBjaGFyICpzaWcpIGNvbnN0OworICAgIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVG
cm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNl
LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkg
Y29uc3Q7CiAKICAgICBKYXZhU3RyaW5nIF9uYW1lOwogICAgIEphdmFTdHJpbmcgX3R5cGU7CkBA
IC0yNjEsNyArMjYwLDcgQEAgcHJpdmF0ZToKICAgICBKYXZhUGFyYW1ldGVyICpfcGFyYW1ldGVy
czsKICAgICBsb25nIF9udW1QYXJhbWV0ZXJzOwogICAgIEphdmFTdHJpbmcgX25hbWU7Ci0gICAg
bXV0YWJsZSBLSlM6OlVTdHJpbmcgKl9zaWduYXR1cmU7CisgICAgbXV0YWJsZSBVU3RyaW5nICpf
c2lnbmF0dXJlOwogICAgIEphdmFTdHJpbmcgX3JldHVyblR5cGU7CiAgICAgSk5JVHlwZSBfSk5J
UmV0dXJuVHlwZTsKICAgICBtdXRhYmxlIGptZXRob2RJRCBfbWV0aG9kSUQ7CkBAIC0yOTEsMTUg
KzI5MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9OwogCi0gICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlQXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGlu
dCBpbmRleCwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEtK
Uzo6VmFsdWUgdmFsdWVBdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVu
c2lnbmVkIGludCBpbmRleCwgVmFsdWVJbXAgKmFWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBW
YWx1ZUltcCAqdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CiAgICAgCiAg
ICAgdmlydHVhbCB+SmF2YUFycmF5KCk7CiAKICAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0
IHsgcmV0dXJuIF9hcnJheS0+X2luc3RhbmNlOyB9CiAKLSAgICBzdGF0aWMgS0pTOjpWYWx1ZSBj
b252ZXJ0Sk9iamVjdFRvQXJyYXkgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBqb2JqZWN0IGFuT2Jq
ZWN0LCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBSb290T2JqZWN0ICpyKTsKKyAgICBzdGF0aWMg
VmFsdWVJbXAgKmNvbnZlcnRKT2JqZWN0VG9BcnJheSAoRXhlY1N0YXRlICpleGVjLCBqb2JqZWN0
IGFuT2JqZWN0LCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBSb290T2JqZWN0ICpyKTsKIAogICAg
IGNvbnN0IFJvb3RPYmplY3QgKmV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBfcm9v
dDsgfQogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV91dGlsaXR5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvam5pL2puaV91dGlsaXR5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC1w
IC11IC11IC1wIC1yMS4yMyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxpdHku
Y3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuY3BwCTI5IEFw
ciAyMDA1IDAwOjIyOjU1IC0wMDAwCTEuMjMKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2pu
aS9qbmlfdXRpbGl0eS5jcHAJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApAQCAtMzAsMTEgKzMw
LDEzIEBACiAjaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2Jq
ZWN0LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOworbmFtZXNwYWNlIEtKUyB7
CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIHN0YXRpYyBKYXZhVk0gKmp2bSA9IDA7CiAKLUph
dmFWTSAqS0pTOjpCaW5kaW5nczo6Z2V0SmF2YVZNKCkKK0phdmFWTSAqZ2V0SmF2YVZNKCkKIHsK
ICAgICBpZiAoanZtKQogICAgICAgICByZXR1cm4ganZtOwpAQCAtNTUsNyArNTcsNyBAQCBKYXZh
Vk0gKktKUzo6QmluZGluZ3M6OmdldEphdmFWTSgpCiAgICAgcmV0dXJuIGp2bTsKIH0KIAotSk5J
RW52ICpLSlM6OkJpbmRpbmdzOjpnZXRKTklFbnYoKQorSk5JRW52ICpnZXRKTklFbnYoKQogewog
ICAgIEpOSUVudiAqZW52OwogICAgIGppbnQgam5pRXJyb3IgPSAwOwpAQCAtMjcwLDcgKzI3Miw3
IEBAIHN0YXRpYyBqdmFsdWUgY2FsbEpOSU1ldGhvZEEgKEpOSVR5cGUgdHkKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1qbWV0aG9kSUQgS0pTOjpCaW5kaW5nczo6Z2V0TWV0aG9kSUQgKGpvYmpl
Y3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcpCitqbWV0aG9kSUQgZ2V0
TWV0aG9kSUQgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcp
CiB7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqbWV0aG9kSUQgbWlkID0g
MDsKQEAgLTMwOSwyMDAgKzMxMSwyMDAgQEAgam1ldGhvZElEIEtKUzo6QmluZGluZ3M6OmdldE1l
dGhvZElEIChqbwogICAgIFwKICAgICB2YV9lbmQgKGFyZ3MpOwogCi12b2lkIEtKUzo6QmluZGlu
Z3M6OmNhbGxKTklWb2lkTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqc2lnLCAuLi4gKQordm9pZCBjYWxsSk5JVm9pZE1ldGhvZCAoam9iamVjdCBvYmos
IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pO
SV9NRVRIT0QgKHZvaWRfdHlwZSwgb2JqLCBuYW1lLCBzaWcpOwogfQogCi1qb2JqZWN0IEtKUzo6
QmluZGluZ3M6OmNhbGxKTklPYmplY3RNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCitqb2JqZWN0IGNhbGxKTklPYmplY3RNZXRob2Qg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCiB7
CiAgICAgQ0FMTF9KTklfTUVUSE9EIChvYmplY3RfdHlwZSwgb2JqLCBuYW1lLCBzaWcpOwogICAg
IHJldHVybiByZXN1bHQubDsKIH0KIAotamJvb2xlYW4gS0pTOjpCaW5kaW5nczo6Y2FsbEpOSUJv
b2xlYW5NZXRob2QoIGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpz
aWcsIC4uLiApCitqYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZCggam9iamVjdCBvYmosIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9N
RVRIT0QgKGJvb2xlYW5fdHlwZSwgb2JqLCBuYW1lLCBzaWcpOwogICAgIHJldHVybiByZXN1bHQu
ejsKIH0KIAotamJvb2xlYW4gS0pTOjpCaW5kaW5nczo6Y2FsbEpOSVN0YXRpY0Jvb2xlYW5NZXRo
b2QgKGpjbGFzcyBjbHMsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkK
K2pib29sZWFuIGNhbGxKTklTdGF0aWNCb29sZWFuTWV0aG9kIChqY2xhc3MgY2xzLCBjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCiB7CiAgICAgQ0FMTF9KTklfU1RBVElD
X01FVEhPRCAoYm9vbGVhbl90eXBlLCBjbHMsIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3Vs
dC56OwogfQogCi1qYnl0ZSBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JQnl0ZU1ldGhvZCggam9iamVj
dCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKK2pieXRlIGNh
bGxKTklCeXRlTWV0aG9kKCBqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoYnl0ZV90eXBlLCBvYmosIG5h
bWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5iOwogfQogCi1qY2hhciBLSlM6OkJpbmRpbmdz
OjpjYWxsSk5JQ2hhck1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywgLi4uICkKK2pjaGFyIGNhbGxKTklDaGFyTWV0aG9kIChqb2JqZWN0IG9iaiwg
Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5J
X01FVEhPRCAoY2hhcl90eXBlLCBvYmosIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5j
OwogfQogCi1qc2hvcnQgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSVNob3J0TWV0aG9kIChqb2JqZWN0
IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQoranNob3J0IGNh
bGxKTklTaG9ydE1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9NRVRIT0QgKHNob3J0X3R5cGUsIG9iaiwg
bmFtZSwgc2lnKTsKICAgICByZXR1cm4gcmVzdWx0LnM7CiB9CiAKLWppbnQgS0pTOjpCaW5kaW5n
czo6Y2FsbEpOSUludE1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywgLi4uICkKK2ppbnQgY2FsbEpOSUludE1ldGhvZCAoam9iamVjdCBvYmosIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9N
RVRIT0QgKGludF90eXBlLCBvYmosIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5pOwog
fQogCi1qbG9uZyBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JTG9uZ01ldGhvZCAoam9iamVjdCBvYmos
IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKK2psb25nIGNhbGxKTklM
b25nTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAobG9uZ190eXBlLCBvYmosIG5hbWUsIHNp
Zyk7CiAgICAgcmV0dXJuIHJlc3VsdC5qOwogfQogCi1qZmxvYXQgS0pTOjpCaW5kaW5nczo6Y2Fs
bEpOSUZsb2F0TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqc2lnLCAuLi4gKQoramZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZCAoam9iamVjdCBvYmosIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9N
RVRIT0QgKGZsb2F0X3R5cGUsIG9iaiwgbmFtZSwgc2lnKTsKICAgICByZXR1cm4gcmVzdWx0LmY7
CiB9CiAKLWpkb3VibGUgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSURvdWJsZU1ldGhvZCAoam9iamVj
dCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKK2pkb3VibGUg
Y2FsbEpOSURvdWJsZU1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9NRVRIT0QgKGRvdWJsZV90eXBlLCBv
YmosIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5kOwogfQogCi12b2lkIEtKUzo6Qmlu
ZGluZ3M6OmNhbGxKTklWb2lkTWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQordm9pZCBjYWxsSk5JVm9pZE1ldGhvZEEg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAq
YXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgKHZvaWRfdHlwZSwg
b2JqLCBuYW1lLCBzaWcsIGFyZ3MpOwogfQogCi1qb2JqZWN0IEtKUzo6QmluZGluZ3M6OmNhbGxK
TklPYmplY3RNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqc2lnLCBqdmFsdWUgKmFyZ3MpCitqb2JqZWN0IGNhbGxKTklPYmplY3RNZXRob2RBIChqb2Jq
ZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3Mp
CiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RBIChvYmplY3RfdHlwZSwgb2Jq
LCBuYW1lLCBzaWcsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQubDsKIH0KIAotamJ5dGUgS0pT
OjpCaW5kaW5nczo6Y2FsbEpOSUJ5dGVNZXRob2RBICggam9iamVjdCBvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQoramJ5dGUgY2FsbEpOSUJ5dGVN
ZXRob2RBICggam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywg
anZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kQSAoYnl0
ZV90eXBlLCBvYmosIG5hbWUsIHNpZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5iOwogfQog
Ci1qY2hhciBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JQ2hhck1ldGhvZEEgKGpvYmplY3Qgb2JqLCBj
b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKK2pjaGFyIGNh
bGxKTklDaGFyTWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZywganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0
aG9kQSAoY2hhcl90eXBlLCBvYmosIG5hbWUsIHNpZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3Vs
dC5jOwogfQogCi1qc2hvcnQgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSVNob3J0TWV0aG9kQSAoam9i
amVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdz
KQoranNob3J0IGNhbGxKTklTaG9ydE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0
ID0gY2FsbEpOSU1ldGhvZEEgKHNob3J0X3R5cGUsIG9iaiwgbmFtZSwgc2lnLCBhcmdzKTsKICAg
ICByZXR1cm4gcmVzdWx0LnM7CiB9CiAKLWppbnQgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSUludE1l
dGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2
YWx1ZSAqYXJncykKK2ppbnQgY2FsbEpOSUludE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUg
cmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgKGludF90eXBlLCBvYmosIG5hbWUsIHNpZywgYXJncyk7
CiAgICAgcmV0dXJuIHJlc3VsdC5pOwogfQogCi1qbG9uZyBLSlM6OkJpbmRpbmdzOjpjYWxsSk5J
TG9uZ01ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpz
aWcsIGp2YWx1ZSAqYXJncykKK2psb25nIGNhbGxKTklMb25nTWV0aG9kQSAoam9iamVjdCBvYmos
IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewogICAg
IGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kQSAobG9uZ190eXBlLCBvYmosIG5hbWUsIHNp
ZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5qOwogfQogCi1qZmxvYXQgS0pTOjpCaW5kaW5n
czo6Y2FsbEpOSUZsb2F0TWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQoramZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZEEg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAq
YXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgIChmbG9hdF90eXBl
LCBvYmosIG5hbWUsIHNpZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5mOwogfQogCi1qZG91
YmxlIEtKUzo6QmluZGluZ3M6OmNhbGxKTklEb3VibGVNZXRob2RBIChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpCitqZG91YmxlIGNh
bGxKTklEb3VibGVNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg
Y2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklN
ZXRob2RBIChkb3VibGVfdHlwZSwgb2JqLCBuYW1lLCBzaWcsIGFyZ3MpOwogICAgIHJldHVybiBy
ZXN1bHQuZDsKIH0KIAotamJvb2xlYW4gS0pTOjpCaW5kaW5nczo6Y2FsbEpOSUJvb2xlYW5NZXRo
b2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFs
dWUgKmFyZ3MpCitqYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZEEgKGpvYmplY3Qgb2JqLCBj
b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKIHsKICAgICBq
dmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgKGJvb2xlYW5fdHlwZSwgb2JqLCBuYW1lLCBz
aWcsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQuejsKIH0KIAotdm9pZCBLSlM6OkJpbmRpbmdz
OjpjYWxsSk5JVm9pZE1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwg
anZhbHVlICphcmdzKQordm9pZCBjYWxsSk5JVm9pZE1ldGhvZElEQSAoam9iamVjdCBvYmosIGpt
ZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBj
YWxsSk5JTWV0aG9kSURBICh2b2lkX3R5cGUsIG9iaiwgbWV0aG9kSUQsIGFyZ3MpOwogfQogCi1q
b2JqZWN0IEtKUzo6QmluZGluZ3M6OmNhbGxKTklPYmplY3RNZXRob2RJREEgKGpvYmplY3Qgb2Jq
LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2pvYmplY3QgY2FsbEpOSU9iamVj
dE1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdz
KQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kSURBIChvYmplY3RfdHlwZSwg
b2JqLCBtZXRob2RJRCwgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5sOwogfQogCi1qYnl0ZSBL
SlM6OkJpbmRpbmdzOjpjYWxsSk5JQnl0ZU1ldGhvZElEQSAoIGpvYmplY3Qgb2JqLCBqbWV0aG9k
SUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2pieXRlIGNhbGxKTklCeXRlTWV0aG9kSURBICgg
am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKQogewogICAgIGp2
YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kSURBIChieXRlX3R5cGUsIG9iaiwgbWV0aG9kSUQs
IGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQuYjsKIH0KIAotamNoYXIgS0pTOjpCaW5kaW5nczo6
Y2FsbEpOSUNoYXJNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2
YWx1ZSAqYXJncykKK2pjaGFyIGNhbGxKTklDaGFyTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1l
dGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNh
bGxKTklNZXRob2RJREEgKGNoYXJfdHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7CiAgICAgcmV0
dXJuIHJlc3VsdC5jOwogfQogCi1qc2hvcnQgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSVNob3J0TWV0
aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCitq
c2hvcnQgY2FsbEpOSVNob3J0TWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv
ZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RJ
REEgKHNob3J0X3R5cGUsIG9iaiwgbWV0aG9kSUQsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQu
czsKIH0KIAotamludCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JSW50TWV0aG9kSURBIChqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCitqaW50IGNhbGxKTklJbnRN
ZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykK
IHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZElEQSAoaW50X3R5cGUsIG9iaiwg
bWV0aG9kSUQsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQuaTsKIH0KIAotamxvbmcgS0pTOjpC
aW5kaW5nczo6Y2FsbEpOSUxvbmdNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSAqYXJncykKK2psb25nIGNhbGxKTklMb25nTWV0aG9kSURBIChqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJl
c3VsdCA9IGNhbGxKTklNZXRob2RJREEgKGxvbmdfdHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7
CiAgICAgcmV0dXJuIHJlc3VsdC5qOwogfQogCi1qZmxvYXQgS0pTOjpCaW5kaW5nczo6Y2FsbEpO
SUZsb2F0TWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg
KmFyZ3MpCitqZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhv
ZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxK
TklNZXRob2RJREEgIChmbG9hdF90eXBlLCBvYmosIG1ldGhvZElELCBhcmdzKTsKICAgICByZXR1
cm4gcmVzdWx0LmY7CiB9CiAKLWpkb3VibGUgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSURvdWJsZU1l
dGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKQor
amRvdWJsZSBjYWxsSk5JRG91YmxlTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l
dGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRo
b2RJREEgKGRvdWJsZV90eXBlLCBvYmosIG1ldGhvZElELCBhcmdzKTsKICAgICByZXR1cm4gcmVz
dWx0LmQ7CiB9CiAKLWpib29sZWFuIEtKUzo6QmluZGluZ3M6OmNhbGxKTklCb29sZWFuTWV0aG9k
SURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCitqYm9v
bGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo
b2RJRCwganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9k
SURBIChib29sZWFuX3R5cGUsIG9iaiwgbWV0aG9kSUQsIGFyZ3MpOwogICAgIHJldHVybiByZXN1
bHQuejsKIH0KIAotY29uc3QgY2hhciAqS0pTOjpCaW5kaW5nczo6Z2V0Q2hhcmFjdGVyc0Zyb21K
U3RyaW5nIChqc3RyaW5nIGFKU3RyaW5nKQorY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21K
U3RyaW5nIChqc3RyaW5nIGFKU3RyaW5nKQogewogICAgIHJldHVybiBnZXRDaGFyYWN0ZXJzRnJv
bUpTdHJpbmdJbkVudiAoZ2V0Sk5JRW52KCksIGFKU3RyaW5nKTsKIH0KIAotdm9pZCBLSlM6OkJp
bmRpbmdzOjpyZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmcgKGpzdHJpbmcgYUpTdHJpbmcsIGNv
bnN0IGNoYXIgKnMpCit2b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyAoanN0cmluZyBh
SlN0cmluZywgY29uc3QgY2hhciAqcykKIHsKICAgICByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJp
bmdJbkVudiAoZ2V0Sk5JRW52KCksIGFKU3RyaW5nLCBzKTsKIH0KIAotY29uc3QgY2hhciAqS0pT
OjpCaW5kaW5nczo6Z2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBq
c3RyaW5nIGFKU3RyaW5nKQorY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5F
bnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nKQogewogICAgIGpib29sZWFuIGlzQ29w
eTsKICAgICBjb25zdCBjaGFyICpzID0gZW52LT5HZXRTdHJpbmdVVEZDaGFycygoanN0cmluZylh
SlN0cmluZywgJmlzQ29weSk7CkBAIC01MTQsMTIgKzUxNiwxMiBAQCBjb25zdCBjaGFyICpLSlM6
OkJpbmRpbmdzOjpnZXRDaGFyYWN0ZXJzCiAgICAgcmV0dXJuIHM7CiB9CiAKLXZvaWQgS0pTOjpC
aW5kaW5nczo6cmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBq
c3RyaW5nIGFKU3RyaW5nLCBjb25zdCBjaGFyICpzKQordm9pZCByZWxlYXNlQ2hhcmFjdGVyc0Zv
ckpTdHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGNoYXIg
KnMpCiB7CiAgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMgKGFKU3RyaW5nLCBzKTsKIH0K
IAotY29uc3QgamNoYXIgKktKUzo6QmluZGluZ3M6OmdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJ
bkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpCitjb25zdCBqY2hhciAqZ2V0VUNo
YXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZykK
IHsKICAgICBqYm9vbGVhbiBpc0NvcHk7CiAgICAgY29uc3QgamNoYXIgKnMgPSBlbnYtPkdldFN0
cmluZ0NoYXJzKChqc3RyaW5nKWFKU3RyaW5nLCAmaXNDb3B5KTsKQEAgLTUzMSwxMiArNTMzLDEy
IEBAIGNvbnN0IGpjaGFyICpLSlM6OkJpbmRpbmdzOjpnZXRVQ2hhcmFjdGUKICAgICByZXR1cm4g
czsKIH0KIAotdm9pZCBLSlM6OkJpbmRpbmdzOjpyZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3RyaW5n
SW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBqY2hhciAqcykKK3Zv
aWQgcmVsZWFzZVVDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52IChKTklFbnYgKmVudiwganN0cmlu
ZyBhSlN0cmluZywgY29uc3QgamNoYXIgKnMpCiB7CiAgICAgZW52LT5SZWxlYXNlU3RyaW5nQ2hh
cnMgKGFKU3RyaW5nLCBzKTsKIH0KIAotSk5JVHlwZSBLSlM6OkJpbmRpbmdzOjpKTklUeXBlRnJv
bUNsYXNzTmFtZShjb25zdCBjaGFyICpuYW1lKQorSk5JVHlwZSBKTklUeXBlRnJvbUNsYXNzTmFt
ZShjb25zdCBjaGFyICpuYW1lKQogewogICAgIEpOSVR5cGUgdHlwZTsKICAgICAKQEAgLTU2NCw3
ICs1NjYsNyBAQCBKTklUeXBlIEtKUzo6QmluZGluZ3M6OkpOSVR5cGVGcm9tQ2xhc3NOCiAgICAg
cmV0dXJuIHR5cGU7CiB9CiAKLWNvbnN0IGNoYXIgKktKUzo6QmluZGluZ3M6OnNpZ25hdHVyZUZy
b21QcmltaXRpdmVUeXBlKEpOSVR5cGUgdHlwZSkKK2NvbnN0IGNoYXIgKnNpZ25hdHVyZUZyb21Q
cmltaXRpdmVUeXBlKEpOSVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpewogICAgICAg
ICBjYXNlIHZvaWRfdHlwZTogCkBAIC02MDQsNyArNjA2LDcgQEAgY29uc3QgY2hhciAqS0pTOjpC
aW5kaW5nczo6c2lnbmF0dXJlRnJvbQogICAgIHJldHVybiAiIjsKIH0KIAotSk5JVHlwZSBLSlM6
OkJpbmRpbmdzOjpKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKQorSk5JVHlwZSBK
TklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSl7
CiAgICAgICAgIGNhc2UgJ1YnOiAKQEAgLTY0NCw3ICs2NDYsNyBAQCBKTklUeXBlIEtKUzo6Qmlu
ZGluZ3M6OkpOSVR5cGVGcm9tUHJpbWl0CiAgICAgcmV0dXJuIGludmFsaWRfdHlwZTsKIH0KIAot
anZhbHVlIEtKUzo6QmluZGluZ3M6OmdldEpOSUZpZWxkKCBqb2JqZWN0IG9iaiwgSk5JVHlwZSB0
eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUpCitqdmFsdWUgZ2V0
Sk5JRmllbGQoIGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKnNpZ25hdHVyZSkKIHsKICAgICBKYXZhVk0gKmp2bSA9IGdldEphdmFWTSgpOwog
ICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CkBAIC03MDYsNyArNzA4LDcgQEAganZhbHVl
IEtKUzo6QmluZGluZ3M6OmdldEpOSUZpZWxkKCBqb2JqZQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWp2YWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWUgdmFsdWUsIEpOSVR5cGUgX0pOSVR5cGUsIGNvbnN0IGNo
YXIgKmphdmFDbGFzc05hbWUpCitqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUgKEV4ZWNTdGF0
ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVlLCBKTklUeXBlIF9KTklUeXBlLCBjb25zdCBjaGFyICpq
YXZhQ2xhc3NOYW1lKQogewogICAgIGp2YWx1ZSByZXN1bHQ7CiAgICAKQEAgLTcxNSwxNSArNzE3
LDE1IEBAIGp2YWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWwKICAgICAgICAg
ICAgIHJlc3VsdC5sID0gKGpvYmplY3QpMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
Rmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBKYXZhIGluc3RhbmNlLgotICAgICAgICAgICAgaWYgKHZh
bHVlLnR5cGUoKSA9PSBLSlM6Ok9iamVjdFR5cGUpewotICAgICAgICAgICAgICAgIEtKUzo6T2Jq
ZWN0SW1wICpvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KHZhbHVlLmlt
cCgpKTsKLQkJaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJktKUzo6UnVudGltZU9iamVj
dEltcDo6aW5mbykgewotCQkgICAgS0pTOjpSdW50aW1lT2JqZWN0SW1wICppbXAgPSBzdGF0aWNf
Y2FzdDxLSlM6OlJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUuaW1wKCkpOworICAgICAgICAgICAg
aWYgKHZhbHVlLT5pc09iamVjdCgpKXsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKm9iamVj
dEltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKKwkJaWYgKG9iamVjdEltcC0+
Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKKwkJICAgIFJ1bnRpbWVP
YmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUpOwog
CQkgICAgSmF2YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZSo+
KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKIAkJICAgIHJlc3VsdC5sID0gaW5zdGFuY2Ut
PmphdmFJbnN0YW5jZSgpOwogCQl9Ci0JCWVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkg
PT0gJktKUzo6UnVudGltZUFycmF5SW1wOjppbmZvKSB7Ci0JCSAgICBLSlM6OlJ1bnRpbWVBcnJh
eUltcCAqaW1wID0gc3RhdGljX2Nhc3Q8S0pTOjpSdW50aW1lQXJyYXlJbXAgKj4odmFsdWUuaW1w
KCkpOworCQllbHNlIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZSdW50aW1lQXJyYXlJ
bXA6OmluZm8pIHsKKwkJICAgIFJ1bnRpbWVBcnJheUltcCAqaW1wID0gc3RhdGljX2Nhc3Q8UnVu
dGltZUFycmF5SW1wICo+KHZhbHVlKTsKIAkJICAgIEphdmFBcnJheSAqYXJyYXkgPSBzdGF0aWNf
Y2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNyZXRlQXJyYXkoKSk7CiAJCSAgICByZXN1bHQu
bCA9IGFycmF5LT5qYXZhQXJyYXkoKTsKIAkJfQpAQCAtNzMzLDcgKzczNSw3IEBAIGp2YWx1ZSBL
SlM6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWwKICAgICAgICAgICAgIC8vIGNvbnZlcnRp
bmcgZnJvbSBhIE51bGwuCiAgICAgICAgICAgICBpZiAocmVzdWx0LmwgPT0gMCAmJiBzdHJjbXAo
amF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJpbmciKSA9PSAwKSB7CiAjaWYgQ09OVkVSVF9O
VUxMX1RPX0VNUFRZX1NUUklORwotCQlpZiAodmFsdWUudHlwZSgpID09IEtKUzo6TnVsbFR5cGUp
IHsKKwkJaWYgKHZhbHVlLT5pc051bGwoKSkgewogCQkgICAgSk5JRW52ICplbnYgPSBnZXRKTklF
bnYoKTsKIAkJICAgIGpjaGFyIGJ1ZlsyXTsKIAkJICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVu
di0+ZnVuY3Rpb25zLT5OZXdTdHJpbmcgKGVudiwgYnVmLCAwKTsKQEAgLTc0MSwxMCArNzQzLDEw
IEBAIGp2YWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWwKIAkJfQogCQllbHNl
IAogI2Vsc2UKLQkJaWYgKHZhbHVlLnR5cGUoKSAhPSBLSlM6Ok51bGxUeXBlKQorCQlpZiAoIXZh
bHVlLT5pc051bGwoKSkKICNlbmRpZgogCQl7Ci0JCSAgICBLSlM6OlVTdHJpbmcgc3RyaW5nVmFs
dWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKwkJICAgIFVTdHJpbmcgc3RyaW5nVmFsdWUgPSB2
YWx1ZS0+dG9TdHJpbmcoZXhlYyk7CiAJCSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwog
CQkgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyAoZW52
LCAoY29uc3QgamNoYXIgKilzdHJpbmdWYWx1ZS5kYXRhKCksIHN0cmluZ1ZhbHVlLnNpemUoKSk7
CiAJCSAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7CkBAIC03NTQsNDIgKzc1Niw0MiBAQCBqdmFs
dWUgS0pTOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsCiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC56
ID0gKGpib29sZWFuKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0Lnog
PSAoamJvb2xlYW4pdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgYnl0ZV90eXBlOiB7Ci0gICAgICAgICAg
ICByZXN1bHQuYiA9IChqYnl0ZSl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJl
c3VsdC5iID0gKGpieXRlKXZhbHVlLT50b051bWJlcihleGVjKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAgICAg
ICByZXN1bHQuYyA9IChqY2hhcil2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJl
c3VsdC5jID0gKGpjaGFyKXZhbHVlLT50b051bWJlcihleGVjKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3Vs
dC5zID0gKGpzaG9ydCl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdC5z
ID0gKGpzaG9ydCl2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmkgPSAo
amludCl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdC5pID0gKGppbnQp
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHQuaiA9IChqbG9uZyl2YWx1
ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdC5qID0gKGpsb25nKXZhbHVlLT50
b051bWJlcihleGVjKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IGZsb2F0X3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5mID0gKGpmbG9hdCl2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdC5mID0gKGpmbG9hdCl2YWx1ZS0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBkb3Vi
bGVfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LmQgPSAoamRvdWJsZSl2YWx1ZS50b051bWJl
cihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUpdmFsdWUtPnRvTnVtYmVy
KGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC04MDUs
MyArODA3LDYgQEAganZhbHVlIEtKUzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK30KKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvam5pL2puaV91dGlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE3CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjE3IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2pu
aS9qbmlfdXRpbGl0eS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxp
dHkuaAkxNCBEZWMgMjAwNCAwMjo0NDo0NSAtMDAwMAkxLjE3CisrKyBKYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC01
MSw2MiArNTEsNjIgQEAgbmFtZXNwYWNlIEJpbmRpbmdzIAogewogY2xhc3MgSmF2YVBhcmFtZXRl
cjsKIAotY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nIChqc3RyaW5nIGFKU3Ry
aW5nKTsKLXZvaWQgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nIChqc3RyaW5nIGFKU3RyaW5n
LCBjb25zdCBjaGFyICpzKTsKK2NvbnN0IGNoYXIgKmdldENoYXJhY3RlcnNGcm9tSlN0cmluZyhq
c3RyaW5nIGFKU3RyaW5nKTsKK3ZvaWQgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nKGpzdHJp
bmcgYUpTdHJpbmcsIGNvbnN0IGNoYXIgKnMpOwogCi1jb25zdCBjaGFyICpnZXRDaGFyYWN0ZXJz
RnJvbUpTdHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpOwotdm9pZCBy
ZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpT
dHJpbmcsIGNvbnN0IGNoYXIgKnMpOwotY29uc3QgamNoYXIgKmdldFVDaGFyYWN0ZXJzRnJvbUpT
dHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpOwotdm9pZCByZWxlYXNl
VUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5n
LCBjb25zdCBqY2hhciAqcyk7Citjb25zdCBjaGFyICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJ
bkVudihKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZyk7Cit2b2lkIHJlbGVhc2VDaGFyYWN0
ZXJzRm9ySlN0cmluZ0luRW52KEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBj
aGFyICpzKTsKK2NvbnN0IGpjaGFyICpnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoSk5J
RW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpOwordm9pZCByZWxlYXNlVUNoYXJhY3RlcnNGb3JK
U3RyaW5nSW5FbnYoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGpjaGFyICpz
KTsKIAogSk5JVHlwZSBKTklUeXBlRnJvbUNsYXNzTmFtZShjb25zdCBjaGFyICpuYW1lKTsKIEpO
SVR5cGUgSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKGNoYXIgdHlwZSk7CiBjb25zdCBjaGFyICpz
aWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShKTklUeXBlIHR5cGUpOwogCi1qdmFsdWUgY29udmVy
dFZhbHVlVG9KVmFsdWUgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlIHZhbHVlLCBK
TklUeXBlIF9KTklUeXBlLCBjb25zdCBjaGFyICpqYXZhQ2xhc3NOYW1lKTsKK2p2YWx1ZSBjb252
ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSwgSk5JVHlw
ZSBfSk5JVHlwZSwgY29uc3QgY2hhciAqamF2YUNsYXNzTmFtZSk7CiAKLWp2YWx1ZSBnZXRKTklG
aWVsZCAoam9iamVjdCBvYmosIEpOSVR5cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg
Y2hhciAqc2lnbmF0dXJlKTsKK2p2YWx1ZSBnZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSk5JVHlw
ZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUpOwogCi1qbWV0
aG9kSUQgZ2V0TWV0aG9kSUQgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj
aGFyICpzaWcpOworam1ldGhvZElEIGdldE1ldGhvZElEKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFy
ICpuYW1lLCBjb25zdCBjaGFyICpzaWcpOwogCi1qb2JqZWN0IGNhbGxKTklPYmplY3RNZXRob2Qg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOwot
dm9pZCBjYWxsSk5JVm9pZE1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKnNpZywgLi4uICk7Ci1qYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZCAoam9i
amVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICk7Ci1qYm9v
bGVhbiBjYWxsSk5JU3RhdGljQm9vbGVhbk1ldGhvZCAoamNsYXNzIGNscywgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKLWpieXRlIGNhbGxKTklCeXRlTWV0aG9kIChq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKLWpj
aGFyIGNhbGxKTklDaGFyTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqc2lnLCAuLi4gKTsKLWpzaG9ydCBjYWxsSk5JU2hvcnRNZXRob2QgKGpvYmplY3Qg
b2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOwotamludCBjYWxs
Sk5JSW50TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnLCAuLi4gKTsKLWpsb25nIGNhbGxKTklMb25nTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKLWpmbG9hdCBjYWxsSk5JRmxvYXRN
ZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4u
LiApOwotamRvdWJsZSBjYWxsSk5JRG91YmxlTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKLQotam9iamVjdCBjYWxsSk5JT2JqZWN0
TWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywg
anZhbHVlICphcmdzKTsKLXZvaWQgY2FsbEpOSVZvaWRNZXRob2RBIChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotamJvb2xlYW4g
Y2FsbEpOSUJvb2xlYW5NZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotamJ5dGUgY2FsbEpOSUJ5dGVNZXRob2RBIChq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFy
Z3MpOwotamNoYXIgY2FsbEpOSUNoYXJNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotanNob3J0IGNhbGxKTklTaG9y
dE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcs
IGp2YWx1ZSAqYXJncyk7Ci1qaW50IGNhbGxKTklJbnRNZXRob2RBIChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotamxvbmcgY2Fs
bEpOSUxvbmdNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotamZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZEEgKGpvYmpl
Y3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7
Ci1qZG91YmxlIGNhbGxKTklEb3VibGVNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwotCi1qb2JqZWN0IGNhbGxKTklP
YmplY3RNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAq
YXJncyk7Ci12b2lkIGNhbGxKTklWb2lkTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElE
IG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwotamJvb2xlYW4gY2FsbEpOSUJvb2xlYW5NZXRob2RJ
REEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7Ci1qYnl0
ZSBjYWxsSk5JQnl0ZU1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwg
anZhbHVlICphcmdzKTsKLWpjaGFyIGNhbGxKTklDaGFyTWV0aG9kSURBIChqb2JqZWN0IG9iaiwg
am1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwotanNob3J0IGNhbGxKTklTaG9ydE1l
dGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsK
LWppbnQgY2FsbEpOSUludE1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ
RCwganZhbHVlICphcmdzKTsKLWpsb25nIGNhbGxKTklMb25nTWV0aG9kSURBIChqb2JqZWN0IG9i
aiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwotamZsb2F0IGNhbGxKTklGbG9h
dE1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdz
KTsKLWpkb3VibGUgY2FsbEpOSURvdWJsZU1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJ
RCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKK2pvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZChq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKK3Zv
aWQgY2FsbEpOSVZvaWRNZXRob2Qoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywgLi4uICk7CitqYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZChqb2JqZWN0
IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKK2pib29sZWFu
IGNhbGxKTklTdGF0aWNCb29sZWFuTWV0aG9kKGpjbGFzcyBjbHMsIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnNpZywgLi4uICk7CitqYnl0ZSBjYWxsSk5JQnl0ZU1ldGhvZChqb2JqZWN0
IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKK2pjaGFyIGNh
bGxKTklDaGFyTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy
ICpzaWcsIC4uLiApOworanNob3J0IGNhbGxKTklTaG9ydE1ldGhvZChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKK2ppbnQgY2FsbEpOSUludE1l
dGhvZChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4g
KTsKK2psb25nIGNhbGxKTklMb25nTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1l
LCBjb25zdCBjaGFyICpzaWcsIC4uLiApOworamZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZChqb2Jq
ZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKK2pkb3Vi
bGUgY2FsbEpOSURvdWJsZU1ldGhvZChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqc2lnLCAuLi4gKTsKKworam9iamVjdCBjYWxsSk5JT2JqZWN0TWV0aG9kQShqb2Jq
ZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3Mp
Owordm9pZCBjYWxsSk5JVm9pZE1ldGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsKK2pib29sZWFuIGNhbGxKTklCb29sZWFu
TWV0aG9kQShqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBq
dmFsdWUgKmFyZ3MpOworamJ5dGUgY2FsbEpOSUJ5dGVNZXRob2RBKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7CitqY2hhciBjYWxs
Sk5JQ2hhck1ldGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg
KnNpZywganZhbHVlICphcmdzKTsKK2pzaG9ydCBjYWxsSk5JU2hvcnRNZXRob2RBKGpvYmplY3Qg
b2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Citq
aW50IGNhbGxKTklJbnRNZXRob2RBKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7CitqbG9uZyBjYWxsSk5JTG9uZ01ldGhvZEEoam9i
amVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdz
KTsKK2pmbG9hdCBjYWxsSk5JRmxvYXRNZXRob2RBKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7CitqZG91YmxlIGNhbGxKTklEb3Vi
bGVNZXRob2RBKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcs
IGp2YWx1ZSAqYXJncyk7CisKK2pvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZElEQShqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwordm9pZCBjYWxsSk5JVm9p
ZE1ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3Mp
OworamJvb2xlYW4gY2FsbEpOSUJvb2xlYW5NZXRob2RJREEoam9iamVjdCBvYmosIGptZXRob2RJ
RCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKK2pieXRlIGNhbGxKTklCeXRlTWV0aG9kSURBKGpv
YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7CitqY2hhciBjYWxs
Sk5JQ2hhck1ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg
KmFyZ3MpOworanNob3J0IGNhbGxKTklTaG9ydE1ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhv
ZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOworamludCBjYWxsSk5JSW50TWV0aG9kSURBKGpv
YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7CitqbG9uZyBjYWxs
Sk5JTG9uZ01ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg
KmFyZ3MpOworamZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhv
ZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOworamRvdWJsZSBjYWxsSk5JRG91YmxlTWV0aG9k
SURBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7CiAKIEph
dmFWTSAqZ2V0SmF2YVZNKCk7CiBKTklFbnYgKmdldEpOSUVudigpOwogCi1ib29sIGRpc3BhdGNo
Sk5JQ2FsbCAoY29uc3Qgdm9pZCAqdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wg
aXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUg
KmFyZ3MsIGp2YWx1ZSAmcmVzdWx0LCBjb25zdCBjaGFyICpjYWxsaW5nVVJMLCBWYWx1ZSAmZXhj
ZXB0aW9uRGVzY3JpcHRpb24pOworYm9vbCBkaXNwYXRjaEpOSUNhbGwoY29uc3Qgdm9pZCAqdGFy
Z2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJu
VHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MsIGp2YWx1ZSAmcmVzdWx0LCBj
b25zdCBjaGFyICpjYWxsaW5nVVJMLCBWYWx1ZUltcCAqJmV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsK
IAogfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjIwIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkzMCBKdW4gMjAwNSAxODoxOTo0MiAtMDAwMAkx
LjIwCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQk3
IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM6OkJpbmRpbmdzOwogCiAjZGVmaW5lIExPR19FWENFUFRJT04oZXhlYykgXAogICAgIGlm
IChJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpIFwKLSAgICAgICAgcHJpbnRm
KCIlczolZDpbJWRdICBKYXZhU2NyaXB0IGV4Y2VwdGlvbjogICVzXG4iLCBfX0ZJTEVfXywgX19M
SU5FX18sIGdldHBpZCgpLCBleGVjLT5leGNlcHRpb24oKS50b09iamVjdChleGVjKS5nZXQoZXhl
YywgbWVzc2FnZVByb3BlcnR5TmFtZSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAg
IHByaW50ZigiJXM6JWQ6WyVkXSAgSmF2YVNjcmlwdCBleGNlcHRpb246ICAlc1xuIiwgX19GSUxF
X18sIF9fTElORV9fLCBnZXRwaWQoKSwgZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMp
LT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSktPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkp
OwogCiBAaW1wbGVtZW50YXRpb24gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZQogCkBAIC02MiwxMCAr
NjIsMTAgQEAgc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAogICAgIEV4
ZWNTdGF0ZSAqZXhlYyA9IFtvYmogX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5n
bG9iYWxFeGVjKCk7CiAgICAgS0pTRGlkRXhlY3V0ZUZ1bmN0aW9uUHRyIGZ1bmMgPSBJbnN0YW5j
ZTo6ZGlkRXhlY3V0ZUZ1bmN0aW9uKCk7CiAgICAgaWYgKGZ1bmMpCi0gICAgICAgIGZ1bmMgKGV4
ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4oW29iaiBfZXhlY3V0aW9uQ29udGV4dF0t
PnJvb3RPYmplY3RJbXAoKSkpOworICAgICAgICBmdW5jIChleGVjLCBzdGF0aWNfY2FzdDxPYmpl
Y3RJbXAqPihbb2JqIF9leGVjdXRpb25Db250ZXh0XS0+cm9vdE9iamVjdEltcCgpKSk7CiB9CiAK
LS0gKHZvaWQpX2luaXRpYWxpemVXaXRoT2JqZWN0SW1wOihLSlM6Ok9iamVjdEltcCAqKWltcCBv
cmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKW9yaWdp
bkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJvb3RP
YmplY3QgKilleGVjdXRpb25Db250ZXh0CistICh2b2lkKV9pbml0aWFsaXplV2l0aE9iamVjdElt
cDooT2JqZWN0SW1wICopaW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdz
OjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0Oihj
b25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRleHQKIHsKICAgICBfcHJp
dmF0ZS0+aW1wID0gaW1wOwogICAgIF9wcml2YXRlLT5leGVjdXRpb25Db250ZXh0ID0gZXhlY3V0
aW9uQ29udGV4dDsgICAgCkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRl
KFdlYlNjcmlwdE9iamVjdCAKICAgICBhZGROYXRpdmVSZWZlcmVuY2UgKGV4ZWN1dGlvbkNvbnRl
eHQsIGltcCk7CiB9CiAKLS0gX2luaXRXaXRoT2JqZWN0SW1wOihLSlM6Ok9iamVjdEltcCAqKWlt
cCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKW9y
aWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJv
b3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CistIF9pbml0V2l0aE9iamVjdEltcDooT2JqZWN0
SW1wICopaW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2Jq
ZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5k
aW5nczo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRleHQKIHsKICAgICBhc3NlcnQgKGltcCAh
PSAwKTsKICAgICAvL2Fzc2VydCAocm9vdCAhPSAwKTsKQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGlj
IHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAogICAgIHJldHVybiBzZWxmOwogfQog
Ci0tIChLSlM6Ok9iamVjdEltcCAqKV9pbXAKKy0gKE9iamVjdEltcCAqKV9pbXAKIHsKICAgICBp
ZiAoIV9wcml2YXRlLT5pbXAgJiYgX3ByaXZhdGUtPmlzQ3JlYXRlZEJ5RE9NV3JhcHBlcikgewog
ICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIFdlYlNjcmlwdE9iamVjdCB3aXRoIHRoZSBKUyB3cmFw
cGVyIGZvciB0aGUgT2JqQyBET00KQEAgLTk4LDIzICs5OCwyMyBAQCBzdGF0aWMgdm9pZCBfZGlk
RXhlY3V0ZShXZWJTY3JpcHRPYmplY3QgCiAgICAgcmV0dXJuIF9wcml2YXRlLT5pbXA7CiB9CiAK
LS0gKGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilfZXhlY3V0aW9uQ29udGV4dAor
LSAoY29uc3QgUm9vdE9iamVjdCAqKV9leGVjdXRpb25Db250ZXh0CiB7CiAgICAgcmV0dXJuIF9w
cml2YXRlLT5leGVjdXRpb25Db250ZXh0OwogfQogCi0tICh2b2lkKV9zZXRFeGVjdXRpb25Db250
ZXh0Oihjb25zdCBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICopY29udGV4dAorLSAodm9pZClf
c2V0RXhlY3V0aW9uQ29udGV4dDooY29uc3QgUm9vdE9iamVjdCAqKWNvbnRleHQKIHsKICAgICBf
cHJpdmF0ZS0+ZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7CiB9CiAKIAotLSAoY29uc3QgS0pT
OjpCaW5kaW5nczo6Um9vdE9iamVjdCAqKV9vcmlnaW5FeGVjdXRpb25Db250ZXh0CistIChjb25z
dCBSb290T2JqZWN0ICopX29yaWdpbkV4ZWN1dGlvbkNvbnRleHQKIHsKICAgICByZXR1cm4gX3By
aXZhdGUtPm9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ7CiB9CiAKLS0gKHZvaWQpX3NldE9yaWdpbkV4
ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5F
eGVjdXRpb25Db250ZXh0CistICh2b2lkKV9zZXRPcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25z
dCBSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dAogewogICAgIF9wcml2YXRlLT5v
cmlnaW5FeGVjdXRpb25Db250ZXh0ID0gb3JpZ2luRXhlY3V0aW9uQ29udGV4dDsKIH0KQEAgLTE1
OCw3ICsxNTgsNyBAQCBzdGF0aWMgdm9pZCBfZGlkRXhlY3V0ZShXZWJTY3JpcHRPYmplY3QgCiAg
ICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAv
LyBJZiB0aGUgaW50ZXJwcmV0ZXIgaGFzIGEgY29udGV4dCwgd2Ugc2V0IHRoZSBleGNlcHRpb24u
CiAgICAgICAgIGlmIChpbnRlcnAtPmNvbnRleHQoKSkgewotICAgICAgICAgICAgT2JqZWN0IGVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBbZXhjZXB0aW9uTWVzc2FnZSBV
VEY4U3RyaW5nXSk7CisgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYywgR2VuZXJhbEVycm9yLCBbZXhjZXB0aW9uTWVzc2FnZSBVVEY4U3RyaW5nXSk7CiAgICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24gKGVycik7CiAgICAgICAgICAgICByZXR1cm4gWUVT
OwogICAgICAgICB9CkBAIC0xNjgsMTAgKzE2OCwxMCBAQCBzdGF0aWMgdm9pZCBfZGlkRXhlY3V0
ZShXZWJTY3JpcHRPYmplY3QgCiAgICAgcmV0dXJuIE5POwogfQogCi1zdGF0aWMgS0pTOjpMaXN0
IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhdGUgKmV4ZWMsIE5TQXJyYXkgKmFycmF5KQorc3RhdGlj
IExpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZXhlYywgTlNBcnJheSAqYXJyYXkpCiB7
CiAgICAgbG9uZyBpLCBudW1PYmplY3RzID0gYXJyYXkgPyBbYXJyYXkgY291bnRdIDogMDsKLSAg
ICBLSlM6Okxpc3QgYUxpc3Q7CisgICAgTGlzdCBhTGlzdDsKICAgICAKICAgICBmb3IgKGkgPSAw
OyBpIDwgbnVtT2JqZWN0czsgaSsrKSB7CiAgICAgICAgIGlkIGFuT2JqZWN0ID0gW2FycmF5IG9i
amVjdEF0SW5kZXg6aV07CkBAIC0xOTMsMjEgKzE5MywyMSBAQCBzdGF0aWMgS0pTOjpMaXN0IGxp
c3RGcm9tTlNBcnJheShFeGVjU3RhCiAKICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwogICAgIAot
ICAgIFZhbHVlIHYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmbmFtZSwgT2JqY09i
amVjdFR5cGUpOwotICAgIElkZW50aWZpZXIgaWRlbnRpZmllcih2LnRvU3RyaW5nKGV4ZWMpKTsK
LSAgICBWYWx1ZSBmdW5jID0gW3NlbGYgX2ltcF0tPmdldCAoZXhlYywgaWRlbnRpZmllcik7Cisg
ICAgVmFsdWVJbXAgKnYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmbmFtZSwgT2Jq
Y09iamVjdFR5cGUpOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcih2LT50b1N0cmluZyhleGVj
KSk7CisgICAgVmFsdWVJbXAgKmZ1bmMgPSBbc2VsZiBfaW1wXS0+Z2V0IChleGVjLCBpZGVudGlm
aWVyKTsKICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7Ci0gICAgaWYgKGZ1bmMuaXNOdWxsKCkg
fHwgZnVuYy50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkgeworICAgIGlmICghZnVuYyB8fCBmdW5j
LT5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIC8vIE1heWJlIHRocm93IGFuIGV4Y2VwdGlvbiBo
ZXJlPwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLyBDYWxsIHRoZSBmdW5jdGlv
biBvYmplY3QuICAgIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgT2JqZWN0SW1wICpm
dW5jSW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oZnVuYy5pbXAoKSk7Ci0gICAgT2JqZWN0
IHRoaXNPYmogPSBPYmplY3QoY29uc3RfY2FzdDxPYmplY3RJbXAqPihbc2VsZiBfaW1wXSkpOwor
ICAgIE9iamVjdEltcCAqZnVuY0ltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGZ1bmMpOwor
ICAgIE9iamVjdEltcCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8T2JqZWN0SW1wKj4oW3NlbGYgX2lt
cF0pOwogICAgIExpc3QgYXJnTGlzdCA9IGxpc3RGcm9tTlNBcnJheShleGVjLCBhcmdzKTsKLSAg
ICBWYWx1ZSByZXN1bHQgPSBmdW5jSW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsK
KyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gZnVuY0ltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJn
TGlzdCk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CkBAIC0yMzMsMTggKzIzMywxNyBAQCBzdGF0aWMgS0pTOjpMaXN0IGxpc3RG
cm9tTlNBcnJheShFeGVjU3RhCiAKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBbc2VsZiBfZXhlY3V0
aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIE9iamVjdCB0
aGlzT2JqID0gT2JqZWN0KGNvbnN0X2Nhc3Q8T2JqZWN0SW1wKj4oW3NlbGYgX2ltcF0pKTsKLSAg
ICBWYWx1ZSByZXN1bHQ7CisgICAgVmFsdWVJbXAgKnJlc3VsdDsKICAgICAKICAgICBJbnRlcnBy
ZXRlcjo6bG9jaygpOwogICAgIAotICAgIFZhbHVlIHYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1
ZShleGVjLCAmc2NyaXB0LCBPYmpjT2JqZWN0VHlwZSk7Ci0gICAgQ29tcGxldGlvbiBjb21wbGV0
aW9uID0gW3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5ldmFsdWF0ZShV
U3RyaW5nKCksIDAsIHYudG9TdHJpbmcoZXhlYykpOworICAgIFZhbHVlSW1wICp2ID0gY29udmVy
dE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnNjcmlwdCwgT2JqY09iamVjdFR5cGUpOworICAgIENv
bXBsZXRpb24gY29tcGxldGlvbiA9IFtzZWxmIF9leGVjdXRpb25Db250ZXh0XS0+aW50ZXJwcmV0
ZXIoKS0+ZXZhbHVhdGUoVVN0cmluZygpLCAwLCB2LT50b1N0cmluZyhleGVjKSk7CiAgICAgQ29t
cGxUeXBlIHR5cGUgPSBjb21wbGV0aW9uLmNvbXBsVHlwZSgpOwogICAgIAogICAgIGlmICh0eXBl
ID09IE5vcm1hbCkgewogICAgICAgICByZXN1bHQgPSBjb21wbGV0aW9uLnZhbHVlKCk7Ci0gICAg
ICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc2LDgg
KzI3NSw4IEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKICAgICBF
eGVjU3RhdGUgKmV4ZWMgPSBbc2VsZiBfZXhlY3V0aW9uQ29udGV4dF0tPmludGVycHJldGVyKCkt
Pmdsb2JhbEV4ZWMoKTsKIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgVmFsdWUgdiA9
IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZrZXksIE9iamNPYmplY3RUeXBlKTsKLSAg
ICBbc2VsZiBfaW1wXS0+cHV0IChleGVjLCBJZGVudGlmaWVyICh2LnRvU3RyaW5nKGV4ZWMpKSwg
KGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUpKSk7
CisgICAgVmFsdWVJbXAgKnYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAma2V5LCBP
YmpjT2JqZWN0VHlwZSk7CisgICAgW3NlbGYgX2ltcF0tPnB1dCAoZXhlYywgSWRlbnRpZmllciAo
di0+dG9TdHJpbmcoZXhlYykpLCAoY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVl
LCBPYmpjT2JqZWN0VHlwZSkpKTsKICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTI5OCw4ICsyOTcsOCBAQCBzdGF0aWMgS0pT
OjpMaXN0IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhCiAgICAgRXhlY1N0YXRlICpleGVjID0gW3Nl
bGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAKICAg
ICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgIFZhbHVlIHYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZShleGVjLCAma2V5LCBPYmpjT2JqZWN0VHlwZSk7Ci0gICAgVmFsdWUgcmVzdWx0ID0gW3Nl
bGYgX2ltcF0tPmdldCAoZXhlYywgSWRlbnRpZmllciAodi50b1N0cmluZyhleGVjKSkpOworICAg
IFZhbHVlSW1wICp2ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJmtleSwgT2JqY09i
amVjdFR5cGUpOworICAgIFZhbHVlSW1wICpyZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0IChleGVj
LCBJZGVudGlmaWVyICh2LT50b1N0cmluZyhleGVjKSkpOwogICAgIEludGVycHJldGVyOjp1bmxv
Y2soKTsKICAgICAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTMyNSw4ICsz
MjQsOCBAQCBzdGF0aWMgS0pTOjpMaXN0IGxpc3RGcm9tTlNBcnJheShFeGVjU3RhCiAgICAgRXhl
Y1N0YXRlICpleGVjID0gW3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5n
bG9iYWxFeGVjKCk7CiAKICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgIFZhbHVlIHYgPSBj
b252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAma2V5LCBPYmpjT2JqZWN0VHlwZSk7Ci0gICAg
W3NlbGYgX2ltcF0tPmRlbGV0ZVByb3BlcnR5IChleGVjLCBJZGVudGlmaWVyICh2LnRvU3RyaW5n
KGV4ZWMpKSk7CisgICAgVmFsdWVJbXAgKnYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVj
LCAma2V5LCBPYmpjT2JqZWN0VHlwZSk7CisgICAgW3NlbGYgX2ltcF0tPmRlbGV0ZVByb3BlcnR5
IChleGVjLCBJZGVudGlmaWVyICh2LT50b1N0cmluZyhleGVjKSkpOwogICAgIEludGVycHJldGVy
Ojp1bmxvY2soKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMzQzLDcg
KzM0Miw3IEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKIAlyZXR1
cm4gQCJVbmRlZmluZWQiOwogCiAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBPYmplY3Qg
dGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KFtzZWxmIF9pbXBdKSk7Cisg
ICAgT2JqZWN0SW1wICp0aGlzT2JqID0gY29uc3RfY2FzdDxPYmplY3RJbXAqPihbc2VsZiBfaW1w
XSk7CiAgICAgRXhlY1N0YXRlICpleGVjID0gW3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRl
cnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAgICAgCiAgICAgaWQgcmVzdWx0ID0gY29udmVydFZh
bHVlVG9PYmpjVmFsdWUoZXhlYywgdGhpc09iaiwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVl
OwpAQCAtMzY3LDcgKzM2Niw3IEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4
ZWNTdGEKIAogICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IFtzZWxmIF9leGVjdXRpb25Db250ZXh0XS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0g
ICAgVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldCAoZXhlYywgKHVuc2lnbmVkKWluZGV4
KTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldCAoZXhlYywgKHVuc2ln
bmVkKWluZGV4KTsKICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTQwOCwzMCArNDA3LDMwIEBAIHN0YXRpYyBLSlM6Okxpc3Qg
bGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRl
ICpleGVjID0gW3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9y
LCBbZGVzY3JpcHRpb24gVVRGOFN0cmluZ10pOworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIFtkZXNjcmlwdGlvbiBVVEY4U3RyaW5nXSk7CiAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uIChlcnIpOwogfQogCi0rIChpZClfY29udmVydFZhbHVlVG9P
YmpjVmFsdWU6KEtKUzo6VmFsdWUpdmFsdWUgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3Qg
QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNv
bnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dAorKyAo
aWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihWYWx1ZUltcCAqKXZhbHVlIG9yaWdpbkV4ZWN1
dGlvbkNvbnRleHQ6KGNvbnN0IFJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0IGV4
ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29u
dGV4dAogewogICAgIGlkIHJlc3VsdCA9IDA7CiAKICAgICAvLyBGaXJzdCBzZWUgaWYgd2UgaGF2
ZSBhIE9iakMgaW5zdGFuY2UuCi0gICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBLSlM6Ok9iamVjdFR5
cGUpewotICAgICAgICBPYmplY3RJbXAgKm9iamVjdEltcCA9IHN0YXRpY19jYXN0PE9iamVjdElt
cCo+KHZhbHVlLmltcCgpKTsKKyAgICBpZiAodmFsdWUtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
T2JqZWN0SW1wICpvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZSk7CiAJ
SW50ZXJwcmV0ZXIgKmludGVwcmV0ZXIgPSBleGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigp
OwogCUV4ZWNTdGF0ZSAqZXhlYyA9IGludGVwcmV0ZXItPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SW50ZXJwcmV0ZXI6OmxvY2soKTsKIAkKLSAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZv
KCkgIT0gJktKUzo6UnVudGltZU9iamVjdEltcDo6aW5mbykgewotCSAgICBWYWx1ZSBydW50aW1l
T2JqZWN0ID0gb2JqZWN0SW1wLT5nZXQoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKTsK
LQkgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpICYmIHJ1bnRpbWVPYmplY3QudHlwZSgp
ID09IEtKUzo6T2JqZWN0VHlwZSkKLQkJb2JqZWN0SW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9i
amVjdEltcCo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICBpZiAob2JqZWN0SW1wLT5j
bGFzc0luZm8oKSAhPSAmUnVudGltZU9iamVjdEltcDo6aW5mbykgeworCSAgICBWYWx1ZUltcCAq
cnVudGltZU9iamVjdCA9IG9iamVjdEltcC0+Z2V0KGV4ZWMsICJfX2FwcGxlX3J1bnRpbWVfb2Jq
ZWN0Iik7CisJICAgIGlmICghcnVudGltZU9iamVjdCAmJiBydW50aW1lT2JqZWN0LT5pc09iamVj
dCgpKQorCQlvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4ocnVudGlt
ZU9iamVjdCk7CiAJfQogICAgICAgICAKICAgICAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwog
Ci0gICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpID09ICZLSlM6OlJ1bnRpbWVPYmpl
Y3RJbXA6OmluZm8pIHsKKyAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1
bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKICAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4ob2JqZWN0SW1wKTsKICAgICAgICAg
ICAgIE9iamNJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxPYmpjSW5zdGFuY2UqPihp
bXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAgICAgICAgICBpZiAoaW5zdGFuY2UpCkBA
IC00MzksMTMgKzQzOCwxMyBAQCBzdGF0aWMgS0pTOjpMaXN0IGxpc3RGcm9tTlNBcnJheShFeGVj
U3RhCiAgICAgICAgIH0KICAgICAgICAgLy8gQ29udmVydCB0byBhIFdlYlNjcmlwdE9iamVjdAog
ICAgICAgICBlbHNlIHsKLQkgICAgcmVzdWx0ID0gKGlkKWludGVwcmV0ZXItPmNyZWF0ZUxhbmd1
YWdlSW5zdGFuY2VGb3JWYWx1ZSAoZXhlYywgSW5zdGFuY2U6Ok9iamVjdGl2ZUNMYW5ndWFnZSwg
dmFsdWUudG9PYmplY3QoZXhlYyksIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQsIGV4ZWN1dGlvbkNv
bnRleHQpOworCSAgICByZXN1bHQgPSAoaWQpaW50ZXByZXRlci0+Y3JlYXRlTGFuZ3VhZ2VJbnN0
YW5jZUZvclZhbHVlIChleGVjLCBJbnN0YW5jZTo6T2JqZWN0aXZlQ0xhbmd1YWdlLCB2YWx1ZS0+
dG9PYmplY3QoZXhlYyksIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQsIGV4ZWN1dGlvbkNvbnRleHQp
OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIENvbnZlcnQgSmF2YVNjcmlwdCBTdHJp
bmcgdmFsdWUgdG8gTlNTdHJpbmc/Ci0gICAgZWxzZSBpZiAodmFsdWUudHlwZSgpID09IEtKUzo6
U3RyaW5nVHlwZSkgewotICAgICAgICBTdHJpbmdJbXAgKnMgPSBzdGF0aWNfY2FzdDxLSlM6OlN0
cmluZ0ltcCo+KHZhbHVlLmltcCgpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkg
eworICAgICAgICBTdHJpbmdJbXAgKnMgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2YWx1ZSk7
CiAgICAgICAgIFVTdHJpbmcgdSA9IHMtPnZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICBOU1N0
cmluZyAqc3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOihjb25zdCB1bmlj
aGFyKil1LmRhdGEoKSBsZW5ndGg6dS5zaXplKCldOwpAQCAtNDUzLDE4ICs0NTIsMTcgQEAgc3Rh
dGljIEtKUzo6TGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YQogICAgIH0KICAgICAKICAgICAv
LyBDb252ZXJ0IEphdmFTY3JpcHQgTnVtYmVyIHZhbHVlIHRvIE5TTnVtYmVyPwotICAgIGVsc2Ug
aWYgKHZhbHVlLnR5cGUoKSA9PSBLSlM6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgTnVtYmVyIG4g
PSBOdW1iZXI6OmR5bmFtaWNDYXN0KHZhbHVlKTsKLSAgICAgICAgcmVzdWx0ID0gW05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6bi52YWx1ZSgpXTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNOdW1i
ZXIoKSkgeworICAgICAgICByZXN1bHQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1
ZS0+Z2V0TnVtYmVyKCldOwogICAgIH0KICAgICAKLSAgICBlbHNlIGlmICh2YWx1ZS50eXBlKCkg
PT0gS0pTOjpCb29sZWFuVHlwZSkgewotICAgICAgICBLSlM6OkJvb2xlYW5JbXAgKmIgPSBzdGF0
aWNfY2FzdDxLSlM6OkJvb2xlYW5JbXAqPih2YWx1ZS5pbXAoKSk7CisgICAgZWxzZSBpZiAodmFs
dWUtPmlzQm9vbGVhbigpKSB7CisgICAgICAgIEJvb2xlYW5JbXAgKmIgPSBzdGF0aWNfY2FzdDxC
b29sZWFuSW1wKj4odmFsdWUpOwogICAgICAgICByZXN1bHQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6Yi0+dmFsdWUoKV07CiAgICAgfQogICAgIAogICAgIC8vIENvbnZlcnQgSmF2YVNjcmlw
dCBVbmRlZmluZWQgdHlwZXMgdG8gV2ViVW5kZWZpbmVkCi0gICAgZWxzZSBpZiAodmFsdWUudHlw
ZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkgeworICAgIGVsc2UgaWYgKHZhbHVlLT5pc1VuZGVm
aW5lZCgpKSB7CiAgICAgICAgIHJlc3VsdCA9IFtXZWJVbmRlZmluZWQgdW5kZWZpbmVkXTsKICAg
ICB9CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNwpkaWZmIC1wIC11IC11IC1wIC1yMS43IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaAkxMiBGZWIgMjAwNSAwMDo1ODoxMyAtMDAw
MAkxLjcKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDYgLTAwMDAKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS92YWx1ZS5oPgogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdE9iamVj
dCAoUHJpdmF0ZSkKLSsgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooS0pTOjpWYWx1ZSl2
YWx1ZSBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBLSlM6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0Oihjb25zdCBLSlM6
OkJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dDsKKysgKGlkKV9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTooS0pTOjpWYWx1ZUltcCAqKXZhbHVlIG9yaWdpbkV4ZWN1dGlvbkNv
bnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25D
b250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Qg
KilleGVjdXRpb25Db250ZXh0OwogLSBfaW5pdDsKIC0gX2luaXRXaXRoT2JqZWN0SW1wOihLSlM6
Ok9iamVjdEltcCAqKWltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBLSlM6OkJpbmRp
bmdzOjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRpb25Db250ZXh0
Oihjb25zdCBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29udGV4dCA7CiAt
ICh2b2lkKV9pbml0aWFsaXplV2l0aE9iamVjdEltcDooS0pTOjpPYmplY3RJbXAgKilpbXAgb3Jp
Z2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqKW9y
aWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3QgS0pTOjpCaW5kaW5n
czo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRleHQgOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL29iamNfY2xhc3MuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpj
X2NsYXNzLmgJMSBPY3QgMjAwNCAwMDoyNDozOSAtMDAwMAkxLjMKKysrIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDYgLTAwMDAKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgRmllbGQgKmZpZWxkTmFt
ZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgVmFsdWUgZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlICpleGVjLCBJbnN0YW5jZSAqaW5z
dGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBWYWx1
ZUltcCAqZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlICpleGVjLCBJbnN0YW5jZSAqaW5zdGFuY2Us
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAgdmlydHVhbCBDb25z
dHJ1Y3RvciAqY29uc3RydWN0b3JBdChsb25nIGkpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIDA7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y19jbGFzcy5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXUgLXAgLXIx
LjkgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLm1tCi0tLSBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MubW0JNCBBdWcgMjAwNSAwMDo0MDoyMCAt
MDAwMAkxLjkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5tbQk3
IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC0zMCw3ICszMCw4IEBACiAjaW5jbHVkZSA8b2Jq
Y191dGlsaXR5Lmg+CiAjaW5jbHVkZSA8V2ViU2NyaXB0T2JqZWN0Lmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBLSlM6OkJpbmRpbmdzOworbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgQmluZGluZ3Mg
ewogCiB2b2lkIE9iamNDbGFzczo6X2NvbW1vbkRlbGV0ZSgpIHsKICAgICBDRlJlbGVhc2UgKF9m
aWVsZHMpOwpAQCAtMjMyLDcgKzIzMywxMCBAQCBGaWVsZCAqT2JqY0NsYXNzOjpmaWVsZE5hbWVk
KGNvbnN0IGNoYXIgCiAgICAgcmV0dXJuIGFGaWVsZDsKIH0KIAotS0pTOjpWYWx1ZSBPYmpjQ2xh
c3M6OmZhbGxiYWNrT2JqZWN0IChFeGVjU3RhdGUgKmV4ZWMsIEluc3RhbmNlICppbnN0YW5jZSwg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKQorVmFsdWVJbXAgKk9iamNDbGFzczo6ZmFs
bGJhY2tPYmplY3QgKEV4ZWNTdGF0ZSAqZXhlYywgSW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIE9iamVjdCAobmV3IE9iamNG
YWxsYmFja09iamVjdEltcChzdGF0aWNfY2FzdDxPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSksIHBy
b3BlcnR5TmFtZSkpOworICAgIHJldHVybiBuZXcgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKHN0YXRp
Y19jYXN0PE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSwgcHJvcGVydHlOYW1lKTsKK30KKworfQog
fQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMv
b2JqY19pbnN0YW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtdSAt
cCAtcjEuNiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UuaAotLS0g
SmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLmgJMTkgSmFuIDIwMDUg
MDI6MzQ6MjEgLTAwMDAJMS42CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNf
aW5zdGFuY2UuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC01MywyNCArNTMsMjQgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpOwogICAgIHZpcnR1YWwgdm9pZCBlbmQo
KTsKICAgICAKLSAgICB2aXJ0dWFsIFZhbHVlIHZhbHVlT2YoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFZhbHVlIGRlZmF1bHRWYWx1ZSAoVHlwZSBoaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICp2YWx1ZU9mKCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqZGVmYXVsdFZhbHVl
IChUeXBlIGhpbnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBWYWx1ZSBpbnZva2VNZXRob2QgKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kLCBjb25zdCBMaXN0ICZhcmdz
KTsKLSAgICB2aXJ0dWFsIFZhbHVlIGludm9rZURlZmF1bHRNZXRob2QgKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqaW52b2tlTWV0aG9k
IChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAm
YXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqaW52b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZU9mRmllbGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmllbGQgKmFGaWVsZCwgY29uc3QgVmFs
dWUgJmFWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZGaWVsZCAoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkLCBWYWx1ZUltcCAqYVZhbHVlKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgY29uc3QgVmFsdWUgJmFWYWx1ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgVmFsdWVJbXAgKmFWYWx1ZSk7CiAgICAgCi0g
ICAgdmlydHVhbCBWYWx1ZSBPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGdl
dFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eSwgVHlwZSBoaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpPYmpj
SW5zdGFuY2U6OmdldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAq
YUZpZWxkKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpnZXRWYWx1ZU9mVW5kZWZpbmVk
RmllbGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIFR5cGUg
aGludCkgY29uc3Q7CiAKICAgICBPYmplY3RTdHJ1Y3RQdHIgZ2V0T2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gX2luc3RhbmNlOyB9CiAgICAgCi0gICAgVmFsdWUgc3RyaW5nVmFsdWUoKSBjb25zdDsK
LSAgICBWYWx1ZSBudW1iZXJWYWx1ZSgpIGNvbnN0OwotICAgIFZhbHVlIGJvb2xlYW5WYWx1ZSgp
IGNvbnN0OworICAgIFZhbHVlSW1wICpzdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIFZhbHVlSW1w
ICpudW1iZXJWYWx1ZSgpIGNvbnN0OworICAgIFZhbHVlSW1wICpib29sZWFuVmFsdWUoKSBjb25z
dDsKICAgICAKIHByaXZhdGU6CiAgICAgT2JqZWN0U3RydWN0UHRyIF9pbnN0YW5jZTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2lu
c3RhbmNlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXAgLXUgLXUgLXAgLXIx
LjEyIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5tbQotLS0gSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLm1tCTE5IEphbiAyMDA1IDAy
OjM0OjIxIC0wMDAwCTEuMTIKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19p
bnN0YW5jZS5tbQk3IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC0xMjIsOSArMTIyLDkgQEAg
QmluZGluZ3M6OkNsYXNzICpPYmpjSW5zdGFuY2U6OmdldENsYXNzKAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxCaW5kaW5nczo6Q2xhc3MqPihfY2xhc3MpOwogfQogCi1WYWx1ZSBPYmpjSW5zdGFu
Y2U6Omludm9rZU1ldGhvZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3Qg
Jm1ldGhvZExpc3QsIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqT2JqY0luc3RhbmNlOjpp
bnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlz
dCwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBWYWx1ZSByZXN1bHRWYWx1ZTsKKyAgICBWYWx1
ZUltcCAqcmVzdWx0VmFsdWU7CiAKICAgICAvLyBPdmVybG9hZGluZyBtZXRob2RzIGlzIG5vdCBh
bGxvd2VkIGluIE9iamVjdGl2ZUMuICBTaG91bGQgb25seSBiZSBvbmUKICAgICAvLyBuYW1lIG1h
dGNoIGZvciBhIHBhcnRpY3VsYXIgbWV0aG9kLgpAQCAtMjIxLDcgKzIyMSw3IEBAIE5TX0RVUklO
RwogICAgIC8vIHR5cGUuCiAgICAgYXNzZXJ0IChvYmpjVmFsdWVUeXBlICE9IE9iamNJbnZhbGlk
VHlwZSk7CiAgICAgCi0gICAgLy8gR2V0IHRoZSByZXR1cm4gdmFsdWUgYW5kIGNvbnZlcnQgaXQg
dG8gYSBLSlM6OlZhbHVlLiAgTGVuZ3RoCisgICAgLy8gR2V0IHRoZSByZXR1cm4gdmFsdWUgYW5k
IGNvbnZlcnQgaXQgdG8gYSBKYXZhU2NyaXB0IHZhbHVlLiBMZW5ndGgKICAgICAvLyBvZiByZXR1
cm4gdmFsdWUgd2lsbCBuZXZlciBleGNlZWQgdGhlIHNpemUgb2YgbGFyZ2VzdCBzY2FsYXIKICAg
ICAvLyBvciBhIHBvaW50ZXIuCiAgICAgY2hhciBidWZmZXJbMTAyNF07CkBAIC0yNDQsOSArMjQ0
LDkgQEAgTlNfRU5ESEFORExFUgogICAgIHJldHVybiByZXN1bHRWYWx1ZTsKIH0KIAotVmFsdWUg
T2JqY0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRN
ZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBWYWx1ZSBy
ZXN1bHRWYWx1ZTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0VmFsdWU7CiAgICAgCiBOU19EVVJJTkcK
IApAQCAtMjgxLDkgKzI4MSw5IEBAIE5TX0RVUklORwogICAgIGNvbnN0IGNoYXIgKnR5cGUgPSBb
c2lnbmF0dXJlIG1ldGhvZFJldHVyblR5cGVdOwogICAgIE9iamNWYWx1ZVR5cGUgb2JqY1ZhbHVl
VHlwZSA9IG9iamNWYWx1ZVR5cGVGb3JUeXBlICh0eXBlKTsKICAgICAKLSAgICAvLyBHZXQgdGhl
IHJldHVybiB2YWx1ZSBhbmQgY29udmVydCBpdCB0byBhIEtKUzo6VmFsdWUuICBMZW5ndGgKKyAg
ICAvLyBHZXQgdGhlIHJldHVybiB2YWx1ZSBhbmQgY29udmVydCBpdCB0byBhIEphdmFTY3JpcHQg
dmFsdWUuIExlbmd0aAogICAgIC8vIG9mIHJldHVybiB2YWx1ZSB3aWxsIG5ldmVyIGV4Y2VlZCB0
aGUgc2l6ZSBvZiBhIHBvaW50ZXIsIHNvIHdlJ3JlCi0gICAgLy8gT0sgd2UgMzIgaGVyZS4KKyAg
ICAvLyBPSyB3aXRoIDMyIGhlcmUuCiAgICAgY2hhciBidWZmZXJbMzJdOwogICAgIFtpbnZvY2F0
aW9uIGdldFJldHVyblZhbHVlOmJ1ZmZlcl07CiAgICAgcmVzdWx0VmFsdWUgPSBjb252ZXJ0T2Jq
Y1ZhbHVlVG9WYWx1ZSAoZXhlYywgYnVmZmVyLCBvYmpjVmFsdWVUeXBlKTsKQEAgLTI5Nyw3ICsy
OTcsNyBAQCBOU19FTkRIQU5ETEVSCiAgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCi12b2lk
IE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgRmllbGQgKmFGaWVsZCwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdAordm9pZCBP
YmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVs
ZCAqYUZpZWxkLCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdAogewogICAgIGFGaWVsZC0+c2V0VmFs
dWVUb0luc3RhbmNlIChleGVjLCB0aGlzLCBhVmFsdWUpOwogfQpAQCAtMzEyLDcgKzMxMiw3IEBA
IGJvb2wgT2JqY0luc3RhbmNlOjpzdXBwb3J0c1NldFZhbHVlT2ZVbmQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5LCBjb25z
dCBLSlM6OlZhbHVlICZhVmFsdWUpCit2b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBW
YWx1ZUltcCAqYVZhbHVlKQogewogICAgIGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVjdCgpOwog
ICAgIApAQCAtMzM1LDEzICszMzUsMTMgQEAgdm9pZCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZV
bmRlZmluZWRGaQogICAgIH0KIH0KIAotVmFsdWUgT2JqY0luc3RhbmNlOjpnZXRWYWx1ZU9mRmll
bGQgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkKSBjb25zdCB7ICAK
K1ZhbHVlSW1wICpPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBGaWVsZCAqYUZpZWxkKSBjb25zdCB7ICAKICAgICByZXR1cm4gYUZpZWxkLT52YWx1
ZUZyb21JbnN0YW5jZSAoZXhlYywgdGhpcyk7CiB9CiAKLUtKUzo6VmFsdWUgT2JqY0luc3RhbmNl
OjpnZXRWYWx1ZU9mVW5kZWZpbmVkRmllbGQgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5LCBLSlM6OlR5cGUgaGludCkgY29uc3QKK1ZhbHVlSW1w
ICpPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwgVHlwZSBoaW50KSBjb25zdAogewotICAgIFZh
bHVlIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgIFZhbHVlSW1wICp2b2xhdGlsZSByZXN1bHQg
PSBVbmRlZmluZWQoKTsKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSBnZXRPYmplY3QoKTsK
ICAgICAKQEAgLTM2NywxOCArMzY3LDE4IEBAIEtKUzo6VmFsdWUgT2JqY0luc3RhbmNlOjpnZXRW
YWx1ZU9mVW5kZWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1LSlM6OlZhbHVlIE9iamNJbnN0
YW5jZTo6ZGVmYXVsdFZhbHVlIChLSlM6OlR5cGUgaGludCkgY29uc3QKK1ZhbHVlSW1wICpPYmpj
SW5zdGFuY2U6OmRlZmF1bHRWYWx1ZSAoVHlwZSBoaW50KSBjb25zdAogewotICAgIGlmIChoaW50
ID09IEtKUzo6U3RyaW5nVHlwZSkgeworICAgIGlmIChoaW50ID09IFN0cmluZ1R5cGUpIHsKICAg
ICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKGhpbnQgPT0g
S0pTOjpOdW1iZXJUeXBlKSB7CisgICAgZWxzZSBpZiAoaGludCA9PSBOdW1iZXJUeXBlKSB7CiAg
ICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSgpOwogICAgIH0KLSAgICBlbHNlIGlmIChoaW50ID09
IEtKUzo6Qm9vbGVhblR5cGUpIHsKKyAgICBlbHNlIGlmIChoaW50ID09IEJvb2xlYW5UeXBlKSB7
CiAgICAgICAgIHJldHVybiBib29sZWFuVmFsdWUoKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoaGlu
dCA9PSBLSlM6OlVuc3BlY2lmaWVkVHlwZSkgeworICAgIGVsc2UgaWYgKGhpbnQgPT0gVW5zcGVj
aWZpZWRUeXBlKSB7CiAgICAgICAgIGlmIChbX2luc3RhbmNlIGlzS2luZE9mQ2xhc3M6W05TU3Ry
aW5nIGNsYXNzXV0pIHsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSgpOwogICAgICAg
ICB9CkBAIC0zOTMsMjYgKzM5MywyNCBAQCBLSlM6OlZhbHVlIE9iamNJbnN0YW5jZTo6ZGVmYXVs
dFZhbHVlIChLCiAgICAgcmV0dXJuIHZhbHVlT2YoKTsKIH0KIAotS0pTOjpWYWx1ZSBPYmpjSW5z
dGFuY2U6OnN0cmluZ1ZhbHVlKCkgY29uc3QKK1ZhbHVlSW1wICpPYmpjSW5zdGFuY2U6OnN0cmlu
Z1ZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gY29udmVydE5TU3RyaW5nVG9TdHJpbmcgKFtn
ZXRPYmplY3QoKSBkZXNjcmlwdGlvbl0pOwogfQogCi1LSlM6OlZhbHVlIE9iamNJbnN0YW5jZTo6
bnVtYmVyVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKk9iamNJbnN0YW5jZTo6bnVtYmVyVmFsdWUo
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiAgSW1wbGVtZW50IHNvbWV0aGluZyBzZW5zaWJsZQot
ICAgIEtKUzo6TnVtYmVyIHYoMCk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIGpzTnVtYmVy
KDApOwogfQogCi1LSlM6OlZhbHVlIE9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QK
K1ZhbHVlSW1wICpPYmpjSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlCi0gICAgS0pTOjpCb29sZWFuIHYo
KGJvb2wpMCk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiB9
CiAKLUtKUzo6VmFsdWUgT2JqY0luc3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCitWYWx1ZUltcCAq
T2JqY0luc3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVl
KCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9v
YmpjL29iamNfcnVudGltZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUg
LXUgLXAgLXIxLjExIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgK
LS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgJMjUgSnVsIDIw
MDUgMjI6MTc6MTEgLTAwMDAJMS4xMQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9v
YmpjX3J1bnRpbWUuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA2IC0wMDAwCkBAIC0zNCw3ICszNCw2IEBA
CiAKIG5hbWVzcGFjZSBLSlMKIHsKLWNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2UgQmluZGluZ3MK
IHsKQEAgLTg0LDggKzgzLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fTsKICAgICAgICAgCi0gICAgdmlydHVhbCBLSlM6OlZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwg
VmFsdWVJbXAgKmFWYWx1ZSkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyICpu
YW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3Q7CkBAIC0x
NDcsMzcgKzE0NiwzNyBAQCBwdWJsaWM6CiAKICAgICBPYmpjQXJyYXkgJm9wZXJhdG9yPShjb25z
dCBPYmpjQXJyYXkgJm90aGVyKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBLSlM6OlZhbHVl
ICZhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSB2YWx1ZUF0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBWYWx1ZUlt
cCAqYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICp2YWx1ZUF0KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRMZW5ndGgoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIH5PYmpjQXJyYXkoKTsK
IAogICAgIE9iamVjdFN0cnVjdFB0ciBnZXRPYmpjQXJyYXkoKSBjb25zdCB7IHJldHVybiBfYXJy
YXk7IH0KIAotICAgIHN0YXRpYyBLSlM6OlZhbHVlIGNvbnZlcnRPYmpjQXJyYXlUb0FycmF5IChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0U3RydWN0UHRyIGFuT2JqZWN0KTsKKyAgICBzdGF0
aWMgVmFsdWVJbXAgKmNvbnZlcnRPYmpjQXJyYXlUb0FycmF5IChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdFN0cnVjdFB0ciBhbk9iamVjdCk7CiAKIHByaXZhdGU6CiAgICAgT2JqZWN0U3RydWN0UHRy
IF9hcnJheTsKIH07CiAKLWNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCA6IHB1YmxpYyBLSlM6
Ok9iamVjdEltcCB7CitjbGFzcyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgOiBwdWJsaWMgT2JqZWN0
SW1wIHsKIHB1YmxpYzoKICAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoT2JqZWN0SW1wICpwcm90
byk7CiAgICAgICAgIAotICAgIE9iamNGYWxsYmFja09iamVjdEltcChPYmpjSW5zdGFuY2UgKmks
IGNvbnN0IEtKUzo6SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOworICAgIE9iamNGYWxsYmFja09i
amVjdEltcChPYmpjSW5zdGFuY2UgKmksIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsK
IAogICAgIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKKyAgICAgICAgICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5QdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlt
cGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZh
bHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLAogCQkJICAgICBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0OwpAQCAtMTg2LDcgKzE4NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogCi0gICAgdmlydHVhbCBWYWx1
ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0OworICAgIHZp
cnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGludCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKQEAgLTE5NSw3ICsxOTQsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogICAgIE9iamNJbnN0
YW5jZSAqX2luc3RhbmNlOwotICAgIEtKUzo6SWRlbnRpZmllciBfaXRlbTsKKyAgICBJZGVudGlm
aWVyIF9pdGVtOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbSx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC1wIC11IC11IC1wIC1yMS4xNyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbQotLS0gSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0JMjUgSnVsIDIwMDUgMjI6MTc6MTEgLTAwMDAJ
MS4xNworKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0JNyBB
dWcgMjAwNSAwNDo0NDowNiAtMDAwMApAQCAtMTAyLDkgKzEwMiw5IEBAIFJ1bnRpbWVUeXBlIE9i
amNGaWVsZDo6dHlwZSgpIGNvbnN0IAogICAgIHJldHVybiAiIjsKIH0KIAotVmFsdWUgT2JqY0Zp
ZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFu
Y2UgKmluc3RhbmNlKSBjb25zdAorVmFsdWVJbXAgKk9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFu
Y2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0CiB7Ci0g
ICAgVmFsdWUgYVZhbHVlOworICAgIFZhbHVlSW1wICphVmFsdWU7CiAgICAgaWQgdGFyZ2V0T2Jq
ZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdldE9i
amVjdCgpOwogICAgIGlkIG9iamNWYWx1ZSA9IG5pbDsKIApAQCAtMTE1LDcgKzExNSw3IEBAIFZh
bHVlIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoS0pTOjoKICAgICAgICAgCiAgICAgTlNf
SEFORExFUgogICAgICAgICAKLSAgICAgICAgVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2NhbEV4Y2VwdGlvbiByZWFzb25dIGxvc3N5
Q1N0cmluZ10pOworICAgICAgICBWYWx1ZUltcCAqZXhjZXB0aW9uVmFsdWUgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2NhbEV4Y2VwdGlvbiByZWFzb25dIGxvc3N5Q1N0
cmluZ10pOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uVmFsdWUpOwogICAg
ICAgICAKICAgICBOU19FTkRIQU5ETEVSCkBAIC0xMjgsMTEgKzEyOCwxMSBAQCBWYWx1ZSBPYmpj
RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEtKUzo6CiAgICAgcmV0dXJuIGFWYWx1ZTsKIH0KIAot
c3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlKQorc3RhdGljIGlkIGNvbnZlcnRWYWx1ZVRvT2JqY09i
amVjdCAoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUpCiB7CiAgICAgY29uc3QgQmlu
ZGluZ3M6OlJvb3RPYmplY3QgKnJvb3QgPSByb290Rm9ySW50ZXJwcmV0ZXIoZXhlYy0+aW50ZXJw
cmV0ZXIoKSk7CiAgICAgaWYgKCFyb290KSB7Ci0gICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0
ICpuZXdSb290ID0gbmV3IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QoMCk7CisgICAgICAgIEJp
bmRpbmdzOjpSb290T2JqZWN0ICpuZXdSb290ID0gbmV3IEJpbmRpbmdzOjpSb290T2JqZWN0KDAp
OwogICAgICAgICBuZXdSb290LT5zZXRJbnRlcnByZXRlciAoZXhlYy0+aW50ZXJwcmV0ZXIoKSk7
CiAgICAgICAgIHJvb3QgPSBuZXdSb290OwogICAgIH0KQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0
aWMgaWQgY29udmVydFZhbHVlVG9PYmpjT2JqZWN0IChLSlM6CiB9CiAKIAotdm9pZCBPYmpjRmll
bGQ6OnNldFZhbHVlVG9JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFu
Y2UgKmluc3RhbmNlLCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0Cit2b2lkIE9iamNG
aWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2Ug
Kmluc3RhbmNlLCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdAogewogICAgIGlkIHRhcmdldE9iamVj
dCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmpl
Y3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFs
dWUpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFu
Y2UoS0pTOjoKIAogICAgIE5TX0hBTkRMRVIKICAgICAgICAgCi0gICAgICAgIFZhbHVlIGFWYWx1
ZSA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBbW2xvY2FsRXhjZXB0aW9uIHJl
YXNvbl0gbG9zc3lDU3RyaW5nXSk7CisgICAgICAgIFZhbHVlSW1wICphVmFsdWUgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2NhbEV4Y2VwdGlvbiByZWFzb25dIGxvc3N5
Q1N0cmluZ10pOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oYVZhbHVlKTsKICAgICAgICAg
CiAgICAgTlNfRU5ESEFORExFUgpAQCAtMTg2LDE2ICsxODYsMTYgQEAgT2JqY0FycmF5ICZPYmpj
QXJyYXk6Om9wZXJhdG9yPShjb25zdCBPYgogICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBP
YmpjQXJyYXk6OnNldFZhbHVlQXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBp
bmRleCwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdAordm9pZCBPYmpjQXJyYXk6OnNl
dFZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIFZhbHVlSW1wICph
VmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFbX2FycmF5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoaW5zZXJ0T2JqZWN0OmF0SW5kZXg6KV0pIHsKLSAgICAgICAgT2JqZWN0IGVycm9yID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsICJBcnJheSBpcyBub3QgbXV0YWJsZS4iKTsK
KyAgICAgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9y
LCAiQXJyYXkgaXMgbm90IG11dGFibGUuIik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPiBbX2FycmF5
IGNvdW50XSkgewotICAgICAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJh
bmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7CisgICAgICAgIE9iamVjdElt
cCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsICJJbmRleCBleGNlZWRz
IGFycmF5IHNpemUuIik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yMTAsMzIgKzIxMCwzMiBAQCBOU19EVVJJTkcKIAogTlNf
SEFORExFUgogICAgIAotICAgIE9iamVjdCBlcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2Vu
ZXJhbEVycm9yLCAiT2JqZWN0aXZlQyBleGNlcHRpb24uIik7CisgICAgT2JqZWN0SW1wICplcnJv
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAiT2JqZWN0aXZlQyBleGNlcHRp
b24uIik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKICAgICAKIE5TX0VOREhBTkRM
RVIKIH0KIAogCi1LSlM6OlZhbHVlIE9iamNBcnJheTo6dmFsdWVBdChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAorVmFsdWVJbXAgKk9iamNBcnJheTo6dmFs
dWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3QKIHsKLSAgICBP
YmplY3RTdHJ1Y3RQdHIgb2JqID0gMDsKLSAgICBPYmplY3QgZXJyb3I7Ci0gICAgdm9sYXRpbGUg
Ym9vbCBoYXZlRXJyb3IgPSBmYWxzZTsKLSAgICAKICAgICBpZiAoaW5kZXggPiBbX2FycmF5IGNv
dW50XSkgewotICAgICAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdl
RXJyb3IsICJJbmRleCBleGNlZWRzIGFycmF5IHNpemUuIik7CisgICAgICAgIE9iamVjdEltcCAq
ZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsICJJbmRleCBleGNlZWRzIGFy
cmF5IHNpemUuIik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAgICAgICAg
IHJldHVybiBlcnJvcjsKICAgICB9CiAgICAgCisgICAgT2JqZWN0U3RydWN0UHRyIG9iaiA9IDA7
CisgICAgT2JqZWN0SW1wICogdm9sYXRpbGUgZXJyb3I7CisgICAgdm9sYXRpbGUgYm9vbCBoYXZl
RXJyb3IgPSBmYWxzZTsKKwogTlNfRFVSSU5HCiAKICAgICBvYmogPSBbX2FycmF5IG9iamVjdEF0
SW5kZXg6aW5kZXhdOwogICAgIAogTlNfSEFORExFUgogICAgIAotICAgIE9iamVjdCBlcnJvciA9
IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCAiT2JqZWN0aXZlQyBleGNlcHRpb24u
Iik7CisgICAgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVj
dGl2ZUMgZXhjZXB0aW9uLiIpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAgICAg
aGF2ZUVycm9yID0gdHJ1ZTsKICAgICAKQEAgLTI2MiwxMyArMjYyLDEzIEBAIE9iamNGYWxsYmFj
a09iamVjdEltcDo6T2JqY0ZhbGxiYWNrT2JqZWMKIH0KIAogT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
OjpPYmpjRmFsbGJhY2tPYmplY3RJbXAoT2JqY0luc3RhbmNlICppLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgcHJvcGVydHlOYW1lKQotICAgIDogT2JqZWN0SW1wICgoT2JqZWN0SW1wICopMCkKKyAg
ICA6IE9iamVjdEltcChOVUxMKQogewogICAgIF9pbnN0YW5jZSA9IGk7CiAgICAgX2l0ZW0gPSBw
cm9wZXJ0eU5hbWU7CiB9CiAKLWJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiYgcmVzdWx0KSBjb25zdAogewogICAgIC8vIGtlZXAgdGhlIHByb3RvdHlwZSBmcm9t
IGdldHRpbmcgY2FsbGVkIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UKICAgICByZXN1
bHQgPSBVbmRlZmluZWQoKTsKQEAgLTI3Niw3ICsyNzYsNyBAQCBib29sIE9iamNGYWxsYmFja09i
amVjdEltcDo6Z2V0T3duUHJvcGVyCiB9CiAKIHZvaWQgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAg
ICAgICAgICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgICAgICAg
ICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiB9CiAKQEAgLTMwNiwxMSArMzA2LDEx
IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjppbXBsZW1lbnRzQ2EKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIE9iamNGYWxsYmFja09iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICAgIFZhbHVlIHJlc3VsdCA9IFVu
ZGVmaW5lZCgpOworICAgIFZhbHVlSW1wICpyZXN1bHQgPSBVbmRlZmluZWQoKTsKICAgICAKLSAg
ICBSdW50aW1lT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4o
dGhpc09iai5pbXAoKSk7CisgICAgUnVudGltZU9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8
UnVudGltZU9iamVjdEltcCo+KHRoaXNPYmopOwogICAgIGlmIChpbXApIHsKICAgICAgICAgSW5z
dGFuY2UgKmluc3RhbmNlID0gaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CiAgICAgICAgIApA
QCAtMzQ3LDcgKzM0Nyw3IEBAIGJvb2wgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpkZWxldGVQcm9w
ZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE9iamNGYWxsYmFja09iamVjdEltcDo6
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdAorVmFsdWVJbXAg
Kk9iamNGYWxsYmFja09iamVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlw
ZSBoaW50KSBjb25zdAogewogICAgIHJldHVybiBfaW5zdGFuY2UtPmdldFZhbHVlT2ZVbmRlZmlu
ZWRGaWVsZChleGVjLCBfaXRlbSwgaGludCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9vYmpjL29iamNfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9vYmpjL29iamNfdXRpbGl0eS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfdXRpbGl0eS5oCTEyIEZlYiAyMDA1IDAwOjU4OjEzIC0wMDAwCTEuNAorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA2IC0w
MDAwCkBAIC02OCwxNCArNjgsMTQgQEAgdHlwZWRlZiBlbnVtIHsKIAogY2xhc3MgUm9vdE9iamVj
dDsKIAotT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSk7Ci1WYWx1
ZSBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJpbmcpOwotVmFsdWUgY29u
dmVydE9iamNWYWx1ZVRvVmFsdWUgKEtKUzo6RXhlY1N0YXRlICpleGVjLCB2b2lkICpidWZmZXIs
IE9iamNWYWx1ZVR5cGUgdHlwZSk7Ci1PYmpjVmFsdWVUeXBlIG9iamNWYWx1ZVR5cGVGb3JUeXBl
IChjb25zdCBjaGFyICp0eXBlKTsKK09iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShF
eGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSwgT2JqY1ZhbHVlVHlwZSB0eXBlKTsKK1Zh
bHVlSW1wICpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJpbmcpOworVmFs
dWVJbXAgKmNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgdm9pZCAqYnVm
ZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUpOworT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9y
VHlwZShjb25zdCBjaGFyICp0eXBlKTsKIAogdm9pZCBKU01ldGhvZE5hbWVUb09iakNNZXRob2RO
YW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW5ndGgpOwog
Ci12b2lkICpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZSAoY29uc3QgT2JqZWN0ICZ2YWx1ZSwg
Y29uc3QgUm9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBSb290T2JqZWN0ICpjdXJyZW50KTsKK3Zv
aWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlKE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJv
b3RPYmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCk7CiAKIH0gLy8gbmFt
ZXNwYWNlIEJpbmRpbmdzCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OApkaWZmIC1wIC11IC11IC1wIC1yMS4xOCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfdXRpbGl0eS5tbQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxp
dHkubW0JMjkgQXByIDIwMDUgMDA6MjI6NTUgLTAwMDAJMS4xOAorKysgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW0JNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApA
QCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKICAgICAgICAg
bW92ZVRvJF8gICAgICAgICAgICAgICAgbW92ZVRvJCQkXwogICAgIEByZXN1bHQgUmV0dXJucyB0
aGUgbmFtZSB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgc3BlY2lmaWNlZCBzZWxlY3RvciBp
biB0aGUKICovCi12b2lkIEtKUzo6QmluZGluZ3M6OkpTTWV0aG9kTmFtZVRvT2JqQ01ldGhvZE5h
bWUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuKQordm9p
ZCBCaW5kaW5nczo6SlNNZXRob2ROYW1lVG9PYmpDTWV0aG9kTmFtZShjb25zdCBjaGFyICpuYW1l
LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAgICAgY29uc3QgY2hhciAqbnAg
PSBuYW1lOwogICAgIGNoYXIgKmJwOwpAQCAtODcsMjIgKzg3LDIyIEBAIHZvaWQgS0pTOjpCaW5k
aW5nczo6SlNNZXRob2ROYW1lVG9PYmpDTWUKICAgICBbXSwgb3RoZXIgICAgICAgZXhjZXB0aW9u
CiAKICovCi1PYmpjVmFsdWUgS0pTOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUg
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgT2JqY1ZhbHVl
VHlwZSB0eXBlKQorT2JqY1ZhbHVlIEJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSAo
RXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSkKIHsK
ICAgICBPYmpjVmFsdWUgcmVzdWx0OwogICAgIGRvdWJsZSBkID0gMDsKLSAgIAotICAgIGlmICh2
YWx1ZS50eXBlKCkgPT0gTnVtYmVyVHlwZSB8fCB2YWx1ZS50eXBlKCkgPT0gU3RyaW5nVHlwZSB8
fCB2YWx1ZS50eXBlKCkgPT0gQm9vbGVhblR5cGUpCi0JZCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMp
OworCisgICAgaWYgKHZhbHVlLT5pc051bWJlcigpIHx8IHZhbHVlLT5pc1N0cmluZygpIHx8IHZh
bHVlLT5pc0Jvb2xlYW4oKSkKKwlkID0gdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogCQogICAgIHN3
aXRjaCAodHlwZSl7CiAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsKLQkgICAgS0pTOjpJ
bnRlcnByZXRlciAqb3JpZ2luSW50ZXJwcmV0ZXIgPSBleGVjLT5pbnRlcnByZXRlcigpOworCSAg
ICBJbnRlcnByZXRlciAqb3JpZ2luSW50ZXJwcmV0ZXIgPSBleGVjLT5pbnRlcnByZXRlcigpOwog
ICAgICAgICAgICAgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbkV4ZWN1dGlvbkNv
bnRleHQgPSByb290Rm9ySW50ZXJwcmV0ZXIob3JpZ2luSW50ZXJwcmV0ZXIpOwogCi0JICAgIEtK
Uzo6SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gMDsKKwkgICAgSW50ZXJwcmV0ZXIgKmludGVy
cHJldGVyID0gMDsKIAkgICAgaWYgKG9yaWdpbkludGVycHJldGVyLT5pc0dsb2JhbE9iamVjdCh2
YWx1ZSkpIHsKLQkJaW50ZXJwcmV0ZXIgPSBvcmlnaW5JbnRlcnByZXRlci0+aW50ZXJwcmV0ZXJG
b3JHbG9iYWxPYmplY3QgKHZhbHVlLmltcCgpKTsKKwkJaW50ZXJwcmV0ZXIgPSBvcmlnaW5JbnRl
cnByZXRlci0+aW50ZXJwcmV0ZXJGb3JHbG9iYWxPYmplY3QgKHZhbHVlKTsKIAkgICAgfQogCiAJ
ICAgIGlmICghaW50ZXJwcmV0ZXIpCkBAIC0xMTAsNyArMTEwLDcgQEAgT2JqY1ZhbHVlIEtKUzo6
QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTwogCQkKICAgICAgICAgICAgIGNvbnN0IEJpbmRpbmdz
OjpSb290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0ID0gcm9vdEZvckludGVycHJldGVyKGludGVy
cHJldGVyKTsKICAgICAgICAgICAgIGlmICghZXhlY3V0aW9uQ29udGV4dCkgewotICAgICAgICAg
ICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0ICpuZXdFeGVjdXRpb25Db250ZXh0ID0gbmV3IEtK
Uzo6QmluZGluZ3M6OlJvb3RPYmplY3QoMCk7CisgICAgICAgICAgICAgICAgQmluZGluZ3M6OlJv
b3RPYmplY3QgKm5ld0V4ZWN1dGlvbkNvbnRleHQgPSBuZXcgQmluZGluZ3M6OlJvb3RPYmplY3Qo
MCk7CiAgICAgICAgICAgICAgICAgbmV3RXhlY3V0aW9uQ29udGV4dC0+c2V0SW50ZXJwcmV0ZXIg
KGludGVycHJldGVyKTsKICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gbmV3RXhl
Y3V0aW9uQ29udGV4dDsKICAgICAgICAgICAgIH0KQEAgLTE2NCwxNCArMTY0LDE0IEBAIE9iamNW
YWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb08KICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1WYWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmlu
ZyAqbnNzdHJpbmcpCitWYWx1ZUltcCAqQmluZGluZ3M6OmNvbnZlcnROU1N0cmluZ1RvU3RyaW5n
KE5TU3RyaW5nICpuc3N0cmluZykKIHsKICAgICB1bmljaGFyICpjaGFyczsKICAgICB1bnNpZ25l
ZCBpbnQgbGVuZ3RoID0gW25zc3RyaW5nIGxlbmd0aF07CiAgICAgY2hhcnMgPSAodW5pY2hhciAq
KW1hbGxvYyhzaXplb2YodW5pY2hhcikqbGVuZ3RoKTsKICAgICBbbnNzdHJpbmcgZ2V0Q2hhcmFj
dGVyczpjaGFyc107Ci0gICAgVVN0cmluZyB1KChjb25zdCBLSlM6OlVDaGFyKiljaGFycywgbGVu
Z3RoKTsKLSAgICBWYWx1ZSBhVmFsdWUgPSBTdHJpbmcgKHUpOworICAgIFVTdHJpbmcgdSgoY29u
c3QgVUNoYXIqKWNoYXJzLCBsZW5ndGgpOworICAgIFZhbHVlSW1wICphVmFsdWUgPSBTdHJpbmcg
KHUpOwogICAgIGZyZWUoKHZvaWQgKiljaGFycyk7CiAgICAgcmV0dXJuIGFWYWx1ZTsKIH0KQEAg
LTE5Miw5ICsxOTIsOSBAQCBWYWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0
CiAgICAgb3RoZXIgICAgICAgICAgIHNob3VsZCBub3QgaGFwcGVuCiAKICovCi1WYWx1ZSBLSlM6
OkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZSAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IHZvaWQgKmJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSB0eXBlKQorVmFsdWVJbXAgKkJpbmRpbmdzOjpj
b252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZSAoRXhlY1N0YXRlICpleGVjLCB2b2lkICpidWZmZXIsIE9i
amNWYWx1ZVR5cGUgdHlwZSkKIHsKLSAgICBWYWx1ZSBhVmFsdWU7CisgICAgVmFsdWVJbXAgKmFW
YWx1ZSA9IE5VTEw7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2Jq
ZWN0VHlwZToKQEAgLTIyNCwxMSArMjI0LDExIEBAIFZhbHVlIEtKUzo6QmluZGluZ3M6OmNvbnZl
cnRPYmpjVmFsdWVUb1YKICAgICAgICAgICAgICAgICAgICAgYVZhbHVlID0gTnVtYmVyKFsqb2Jq
IGRvdWJsZVZhbHVlXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKFsqb2JqIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkgewotICAgICAgICAgICAg
ICAgICAgICBhVmFsdWUgPSBPYmplY3QobmV3IFJ1bnRpbWVBcnJheUltcChleGVjLCBuZXcgT2Jq
Y0FycmF5ICgqb2JqKSkpOworICAgICAgICAgICAgICAgICAgICBhVmFsdWUgPSBuZXcgUnVudGlt
ZUFycmF5SW1wKGV4ZWMsIG5ldyBPYmpjQXJyYXkgKCpvYmopKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoWypvYmogaXNLaW5kT2ZDbGFzczpbV2ViU2NyaXB0
T2JqZWN0IGNsYXNzXV0pIHsKICAgICAgICAgICAgICAgICAgICAgV2ViU2NyaXB0T2JqZWN0ICpq
c29iamVjdCA9IChXZWJTY3JpcHRPYmplY3QgKikqb2JqOwotICAgICAgICAgICAgICAgICAgICBh
VmFsdWUgPSBPYmplY3QoW2pzb2JqZWN0IF9pbXBdKTsKKyAgICAgICAgICAgICAgICAgICAgYVZh
bHVlID0gW2pzb2JqZWN0IF9pbXBdOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBlbHNlIGlmICgqb2JqID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIFZhbHVlIEtKUzo6QmluZGluZ3M6OmNvbnZlcnRP
YmpjVmFsdWVUb1YKIH0KIAogCi1PYmpjVmFsdWVUeXBlIEtKUzo6QmluZGluZ3M6Om9iamNWYWx1
ZVR5cGVGb3JUeXBlIChjb25zdCBjaGFyICp0eXBlKQorT2JqY1ZhbHVlVHlwZSBCaW5kaW5nczo6
b2JqY1ZhbHVlVHlwZUZvclR5cGUgKGNvbnN0IGNoYXIgKnR5cGUpCiB7CiAgICAgaW50IHR5cGVM
ZW5ndGggPSBzdHJsZW4odHlwZSk7CiAgICAgT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlID0g
T2JqY0ludmFsaWRUeXBlOwpAQCAtMzMyLDEyICszMzIsMTIgQEAgT2JqY1ZhbHVlVHlwZSBLSlM6
OkJpbmRpbmdzOjpvYmpjVmFsdWVUeQogfQogCiAKLXZvaWQgKktKUzo6QmluZGluZ3M6OmNyZWF0
ZU9iamNJbnN0YW5jZUZvclZhbHVlIChjb25zdCBPYmplY3QgJnZhbHVlLCBjb25zdCBSb290T2Jq
ZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpCit2b2lkICpCaW5kaW5nczo6
Y3JlYXRlT2JqY0luc3RhbmNlRm9yVmFsdWUgKE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJvb3RP
YmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCkKIHsKLSAgICBpZiAodmFs
dWUudHlwZSgpICE9IE9iamVjdFR5cGUpCisgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSkKIAly
ZXR1cm4gMDsKIAotICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4o
dmFsdWUuaW1wKCkpOworICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
Kj4odmFsdWUpOwogICAgIAogICAgIHJldHVybiBbW1tXZWJTY3JpcHRPYmplY3QgYWxsb2NdIF9p
bml0V2l0aE9iamVjdEltcDppbXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDpvcmlnaW4gZXhlY3V0
aW9uQ29udGV4dDpjdXJyZW50XSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTQKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTQgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3Rh
bmNlLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oCTI1IEp1bCAyMDA1
IDIyOjE3OjEyIC0wMDAwCTEuMTQKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDYgLTAwMDAKQEAgLTMzLDEwICszMywxMCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBBcnJheUluc3RhbmNlSW1wKE9iamVjdEltcCAqcHJvdG8sIGNvbnN0IExp
c3QgJmluaXRpYWxWYWx1ZXMpOwogICAgIH5BcnJheUluc3RhbmNlSW1wKCk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0g
Tm9uZSk7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbmRleCwgVmFs
dWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwog
ICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc093blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpOwpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICB1bnNpZ25lZCBnZXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5ndGg7IH0KICAgICAK
ICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlICpleGVjKTsKLSAgICB2b2lkIHNvcnQoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJmNvbXBhcmVGdW5jdGlvbik7CisgICAgdm9pZCBzb3J0KEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICpjb21wYXJlRnVuY3Rpb24pOwogICAgIAogICBwcml2YXRlOgog
ICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmd0aCwgRXhlY1N0YXRlICpleGVjKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC1wIC11IC11IC1wIC1yMS40NyBKYXZhU2NyaXB0
Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29i
amVjdC5jcHAJMjcgSnVsIDIwMDUgMjM6NDQ6NTAgLTAwMDAJMS40NworKysgSmF2YVNjcmlwdENv
cmUva2pzL2FycmF5X29iamVjdC5jcHAJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApAQCAtMjAs
MTQgKzIwLDE2IEBACiAgKgogICovCiAKLSNpbmNsdWRlICJ2YWx1ZS5oIgotI2luY2x1ZGUgIm9i
amVjdC5oIgotI2luY2x1ZGUgInR5cGVzLmgiCi0jaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKLSNp
bmNsdWRlICJvcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiYXJyYXlfb2JqZWN0LmgiCi0jaW5jbHVk
ZSAiaW50ZXJuYWwuaCIKKwogI2luY2x1ZGUgImVycm9yX29iamVjdC5oIgorI2luY2x1ZGUgImlu
dGVybmFsLmgiCisjaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIK
KyNpbmNsdWRlICJvcGVyYXRpb25zLmgiCisjaW5jbHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKKyNp
bmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgInZhbHVlLmgiCiAKICNpbmNsdWRlICJhcnJheV9v
YmplY3QubHV0LmgiCiAKQEAgLTYxLDcgKzYzLDcgQEAgQXJyYXlJbnN0YW5jZUltcDo6QXJyYXlJ
bnN0YW5jZUltcChPYmplYwogICBMaXN0SXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7CiAgIHVu
c2lnbmVkIGwgPSBsZW5ndGg7CiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsOyArK2kpIHsK
LSAgICBzdG9yYWdlW2ldID0gKGl0KyspLmltcCgpOworICAgIHN0b3JhZ2VbaV0gPSBpdCsrOwog
ICB9CiB9CiAKQEAgLTcwLDcgKzcyLDcgQEAgQXJyYXlJbnN0YW5jZUltcDo6fkFycmF5SW5zdGFu
Y2VJbXAoKQogICBmcmVlKHN0b3JhZ2UpOwogfQogCi1ib29sIEFycmF5SW5zdGFuY2VJbXA6Omdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBBcnJheUluc3RhbmNlSW1wOjpnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
VmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdAogewogICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0
aFByb3BlcnR5TmFtZSkgewogICAgIHJlc3VsdCA9IE51bWJlcihsZW5ndGgpOwpAQCAtODQsMTAg
Kzg2LDEwIEBAIGJvb2wgQXJyYXlJbnN0YW5jZUltcDo6Z2V0T3duUHJvcGVydHkoRXgKICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoaW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgICBW
YWx1ZUltcCAqdiA9IHN0b3JhZ2VbaW5kZXhdOwotICAgICAgaWYgKCF2IHx8IHYgPT0gVW5kZWZp
bmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpCisgICAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICByZXN1bHQgPSBWYWx1ZSh2KTsKKyAg
ICAgIHJlc3VsdCA9IHY7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTk1LDE2
ICs5NywxNiBAQCBib29sIEFycmF5SW5zdGFuY2VJbXA6OmdldE93blByb3BlcnR5KEV4CiAgIHJl
dHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0
KTsKIH0KIAotYm9vbCBBcnJheUluc3RhbmNlSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBBcnJheUlu
c3RhbmNlSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4
LCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0CiB7CiAgIGlmIChpbmRleCA+PSBsZW5ndGgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogICBpZiAoaW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgVmFs
dWVJbXAgKnYgPSBzdG9yYWdlW2luZGV4XTsKLSAgICBpZiAoIXYgfHwgdiA9PSBVbmRlZmluZWRJ
bXA6OnN0YXRpY1VuZGVmaW5lZCkKKyAgICBpZiAoIXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlc3VsdCA9IFZhbHVlKHYpOworICAgIHJlc3VsdCA9
IHY7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgCkBAIC0xMTIsMTAgKzExNCwxMCBAQCBib29s
IEFycmF5SW5zdGFuY2VJbXA6OmdldE93blByb3BlcnR5KEV4CiB9CiAKIC8vIFNwZWNpYWwgaW1w
bGVtZW50YXRpb24gb2YgW1tQdXRdXSAtIHNlZSBFQ01BIDE1LjQuNS4xCi12b2lkIEFycmF5SW5z
dGFuY2VJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgQXJyYXlJbnN0YW5jZUlt
cDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0
aFByb3BlcnR5TmFtZSkgewotICAgIHNldExlbmd0aCh2YWx1ZS50b1VJbnQzMihleGVjKSwgZXhl
Yyk7CisgICAgc2V0TGVuZ3RoKHZhbHVlLT50b1VJbnQzMihleGVjKSwgZXhlYyk7CiAgICAgcmV0
dXJuOwogICB9CiAgIApAQCAtMTI5LDcgKzEzMSw3IEBAIHZvaWQgQXJyYXlJbnN0YW5jZUltcDo6
cHV0KEV4ZWNTdGF0ZSAqZXgKICAgT2JqZWN0SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0cik7CiB9CiAKLXZvaWQgQXJyYXlJbnN0YW5jZUltcDo6cHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2b2lk
IEFycmF5SW5zdGFuY2VJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBpZiAoaW5kZXggPCBzcGFyc2VBcnJheUN1
dG9mZiAmJiBpbmRleCA+PSBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgcmVzaXplU3RvcmFnZShpbmRl
eCArIDEpOwpAQCAtMTQwLDcgKzE0Miw3IEBAIHZvaWQgQXJyYXlJbnN0YW5jZUltcDo6cHV0KEV4
ZWNTdGF0ZSAqZXgKICAgfQogCiAgIGlmIChpbmRleCA8IHN0b3JhZ2VMZW5ndGgpIHsKLSAgICBz
dG9yYWdlW2luZGV4XSA9IHZhbHVlLmltcCgpOworICAgIHN0b3JhZ2VbaW5kZXhdID0gdmFsdWU7
CiAgICAgcmV0dXJuOwogICB9CiAgIApAQCAtMTYwLDcgKzE2Miw3IEBAIGJvb2wgQXJyYXlJbnN0
YW5jZUltcDo6aGFzT3duUHJvcGVydHkoRXgKICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
aW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgICBWYWx1ZUltcCAqdiA9IHN0b3JhZ2VbaW5k
ZXhdOwotICAgICAgcmV0dXJuIHYgJiYgdiAhPSBVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVmaW5l
ZDsKKyAgICAgIHJldHVybiB2ICYmICF2LT5pc1VuZGVmaW5lZCgpOwogICAgIH0KICAgfQogICAK
QEAgLTE3Myw3ICsxNzUsNyBAQCBib29sIEFycmF5SW5zdGFuY2VJbXA6Omhhc093blByb3BlcnR5
KEV4CiAgICAgcmV0dXJuIGZhbHNlOwogICBpZiAoaW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAg
ICAgVmFsdWVJbXAgKnYgPSBzdG9yYWdlW2luZGV4XTsKLSAgICByZXR1cm4gdiAmJiB2ICE9IFVu
ZGVmaW5lZEltcDo6c3RhdGljVW5kZWZpbmVkOworICAgIHJldHVybiB2ICYmICF2LT5pc1VuZGVm
aW5lZCgpOwogICB9CiAgIAogICByZXR1cm4gT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGluZGV4KSk7CkBAIC0yMTUsNyArMjE3LDcgQEAgUmVmZXJlbmNl
TGlzdCBBcnJheUluc3RhbmNlSW1wOjpwcm9wTGlzdAogICBSZWZlcmVuY2VMaXN0IHByb3BlcnRp
ZXMgPSBPYmplY3RJbXA6OnByb3BMaXN0KGV4ZWMscmVjdXJzaXZlKTsKIAogICAvLyBhdm9pZCBm
ZXRjaGluZyB0aGlzIGV2ZXJ5IHRpbWUgdGhyb3VnaCB0aGUgbG9vcAotICBWYWx1ZUltcCAqdW5k
ZWZpbmVkID0gVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQ7CisgIFZhbHVlSW1wICp1bmRl
ZmluZWQgPSBqc1VuZGVmaW5lZCgpOwogCiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9y
YWdlTGVuZ3RoOyArK2kpIHsKICAgICBWYWx1ZUltcCAqaW1wID0gc3RvcmFnZVtpXTsKQEAgLTI1
Nyw3ICsyNTksNyBAQCB2b2lkIEFycmF5SW5zdGFuY2VJbXA6OnNldExlbmd0aCh1bnNpZ25lCiAg
IGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICBSZWZlcmVuY2VMaXN0IHNwYXJzZVByb3Bl
cnRpZXM7CiAgICAgCi0gICAgX3Byb3AuYWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVu
Y2VMaXN0KHNwYXJzZVByb3BlcnRpZXMsIE9iamVjdCh0aGlzKSk7CisgICAgX3Byb3AuYWRkU3Bh
cnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVuY2VMaXN0KHNwYXJzZVByb3BlcnRpZXMsIHRoaXMp
OwogICAgIAogICAgIFJlZmVyZW5jZUxpc3RJdGVyYXRvciBpdCA9IHNwYXJzZVByb3BlcnRpZXMu
YmVnaW4oKTsKICAgICB3aGlsZSAoaXQgIT0gc3BhcnNlUHJvcGVydGllcy5lbmQoKSkgewpAQCAt
MjkxLDEzICsyOTMsMTMgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJpbmdGb3JRU29ydChjb25z
dAogICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGV4ZWNGb3JDb21wYXJlQnlTdHJpbmdGb3JRU29ydDsK
ICAgICBWYWx1ZUltcCAqdmEgPSAqKFZhbHVlSW1wICoqKWE7CiAgICAgVmFsdWVJbXAgKnZiID0g
KihWYWx1ZUltcCAqKiliOwotICAgIGlmICh2YS0+ZGlzcGF0Y2hUeXBlKCkgPT0gVW5kZWZpbmVk
VHlwZSkgewotICAgICAgICByZXR1cm4gdmItPmRpc3BhdGNoVHlwZSgpID09IFVuZGVmaW5lZFR5
cGUgPyAwIDogMTsKKyAgICBpZiAodmEtPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmV0dXJu
IHZiLT5pc1VuZGVmaW5lZCgpID8gMCA6IDE7CiAgICAgfQotICAgIGlmICh2Yi0+ZGlzcGF0Y2hU
eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkgeworICAgIGlmICh2Yi0+aXNVbmRlZmluZWQoKSkgewog
ICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHJldHVybiBjb21wYXJlKHZhLT5kaXNwYXRj
aFRvU3RyaW5nKGV4ZWMpLCB2Yi0+ZGlzcGF0Y2hUb1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJu
IGNvbXBhcmUodmEtPnRvU3RyaW5nKGV4ZWMpLCB2Yi0+dG9TdHJpbmcoZXhlYykpOwogfQogCiB2
b2lkIEFycmF5SW5zdGFuY2VJbXA6OnNvcnQoRXhlY1N0YXRlICpleGVjKQpAQCAtMzIyLDcgKzMy
NCw3IEBAIHN0cnVjdCBDb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3VtZW4KICAgICBFeGVj
U3RhdGUgKmV4ZWM7CiAgICAgT2JqZWN0SW1wICpjb21wYXJlRnVuY3Rpb247CiAgICAgTGlzdCBh
cmd1bWVudHM7Ci0gICAgT2JqZWN0IGdsb2JhbE9iamVjdDsKKyAgICBPYmplY3RJbXAgKmdsb2Jh
bE9iamVjdDsKIH07CiAKIHN0YXRpYyBDb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3VtZW50
cyAqY29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Bcmd1bWVudHM7CkBAIC0zMzMsMTAgKzMzNSwx
MCBAQCBzdGF0aWMgaW50IGNvbXBhcmVXaXRoQ29tcGFyZUZ1bmN0aW9uRm9yCiAKICAgICBWYWx1
ZUltcCAqdmEgPSAqKFZhbHVlSW1wICoqKWE7CiAgICAgVmFsdWVJbXAgKnZiID0gKihWYWx1ZUlt
cCAqKiliOwotICAgIGlmICh2YS0+ZGlzcGF0Y2hUeXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkgewot
ICAgICAgICByZXR1cm4gdmItPmRpc3BhdGNoVHlwZSgpID09IFVuZGVmaW5lZFR5cGUgPyAwIDog
MTsKKyAgICBpZiAodmEtPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIHZiLT5pc1Vu
ZGVmaW5lZCgpID8gMCA6IDE7CiAgICAgfQotICAgIGlmICh2Yi0+ZGlzcGF0Y2hUeXBlKCkgPT0g
VW5kZWZpbmVkVHlwZSkgeworICAgIGlmICh2Yi0+aXNVbmRlZmluZWQoKSkgewogICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgfQogCkBAIC0zNDQsMTUgKzM0NiwxNSBAQCBzdGF0aWMgaW50IGNvbXBh
cmVXaXRoQ29tcGFyZUZ1bmN0aW9uRm9yCiAgICAgYXJncy0+YXJndW1lbnRzLmFwcGVuZCh2YSk7
CiAgICAgYXJncy0+YXJndW1lbnRzLmFwcGVuZCh2Yik7CiAgICAgZG91YmxlIGNvbXBhcmVSZXN1
bHQgPSBhcmdzLT5jb21wYXJlRnVuY3Rpb24tPmNhbGwKLSAgICAgICAgKGFyZ3MtPmV4ZWMsIGFy
Z3MtPmdsb2JhbE9iamVjdCwgYXJncy0+YXJndW1lbnRzKS50b051bWJlcihhcmdzLT5leGVjKTsK
KyAgICAgICAgKGFyZ3MtPmV4ZWMsIGFyZ3MtPmdsb2JhbE9iamVjdCwgYXJncy0+YXJndW1lbnRz
KS0+dG9OdW1iZXIoYXJncy0+ZXhlYyk7CiAgICAgcmV0dXJuIGNvbXBhcmVSZXN1bHQgPCAwID8g
LTEgOiBjb21wYXJlUmVzdWx0ID4gMCA/IDEgOiAwOwogfQogCi12b2lkIEFycmF5SW5zdGFuY2VJ
bXA6OnNvcnQoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJmNvbXBhcmVGdW5jdGlvbikKK3ZvaWQg
QXJyYXlJbnN0YW5jZUltcDo6c29ydChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqY29tcGFy
ZUZ1bmN0aW9uKQogewogICAgIGludCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBwdXNo
VW5kZWZpbmVkT2JqZWN0c1RvRW5kKGV4ZWMpOwogICAgIAotICAgIENvbXBhcmVXaXRoQ29tcGFy
ZUZ1bmN0aW9uQXJndW1lbnRzIGFyZ3MoZXhlYywgY29tcGFyZUZ1bmN0aW9uLmltcCgpKTsKKyAg
ICBDb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3VtZW50cyBhcmdzKGV4ZWMsIGNvbXBhcmVG
dW5jdGlvbik7CiAgICAgY29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Bcmd1bWVudHMgPSAmYXJn
czsKICAgICBxc29ydChzdG9yYWdlLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQsIHNpemVv
ZihWYWx1ZUltcCAqKSwgY29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Gb3JRU29ydCk7CiAgICAg
Y29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Bcmd1bWVudHMgPSAwOwpAQCAtMzYwLDcgKzM2Miw3
IEBAIHZvaWQgQXJyYXlJbnN0YW5jZUltcDo6c29ydChFeGVjU3RhdGUgKmUKIAogdW5zaWduZWQg
QXJyYXlJbnN0YW5jZUltcDo6cHVzaFVuZGVmaW5lZE9iamVjdHNUb0VuZChFeGVjU3RhdGUgKmV4
ZWMpCiB7Ci0gICAgVmFsdWVJbXAgKnVuZGVmaW5lZCA9IFVuZGVmaW5lZEltcDo6c3RhdGljVW5k
ZWZpbmVkOworICAgIFZhbHVlSW1wICp1bmRlZmluZWQgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAg
dW5zaWduZWQgbyA9IDA7CiAgICAgCkBAIC0zNzQsNyArMzc2LDcgQEAgdW5zaWduZWQgQXJyYXlJ
bnN0YW5jZUltcDo6cHVzaFVuZGVmaW5lZAogICAgIH0KICAgICAKICAgICBSZWZlcmVuY2VMaXN0
IHNwYXJzZVByb3BlcnRpZXM7Ci0gICAgX3Byb3AuYWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9S
ZWZlcmVuY2VMaXN0KHNwYXJzZVByb3BlcnRpZXMsIE9iamVjdCh0aGlzKSk7CisgICAgX3Byb3Au
YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVuY2VMaXN0KHNwYXJzZVByb3BlcnRpZXMs
IHRoaXMpOwogICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG8gKyBzcGFyc2VQcm9wZXJ0aWVzLmxl
bmd0aCgpOwogCiAgICAgaWYgKG5ld0xlbmd0aCA+IHN0b3JhZ2VMZW5ndGgpIHsKQEAgLTM4NCw3
ICszODYsNyBAQCB1bnNpZ25lZCBBcnJheUluc3RhbmNlSW1wOjpwdXNoVW5kZWZpbmVkCiAgICAg
UmVmZXJlbmNlTGlzdEl0ZXJhdG9yIGl0ID0gc3BhcnNlUHJvcGVydGllcy5iZWdpbigpOwogICAg
IHdoaWxlIChpdCAhPSBzcGFyc2VQcm9wZXJ0aWVzLmVuZCgpKSB7CiAgICAgICBSZWZlcmVuY2Ug
cmVmID0gaXQrKzsKLSAgICAgIHN0b3JhZ2Vbb10gPSByZWYuZ2V0VmFsdWUoZXhlYykuaW1wKCk7
CisgICAgICBzdG9yYWdlW29dID0gcmVmLmdldFZhbHVlKGV4ZWMpOwogICAgICAgT2JqZWN0SW1w
OjpkZWxldGVQcm9wZXJ0eShleGVjLCByZWYuZ2V0UHJvcGVydHlOYW1lKGV4ZWMpKTsKICAgICAg
IG8rKzsKICAgICB9CkBAIC00MjQsMTEgKzQyNiwxMCBAQCBBcnJheVByb3RvdHlwZUltcDo6QXJy
YXlQcm90b3R5cGVJbXAoRXhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T2JqZWN0UHJvdG90eXBlSW1wICpvYmpQcm90bykKICAgOiBBcnJheUluc3RhbmNlSW1wKG9ialBy
b3RvLCAwKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBzZXRJbnRlcm5hbFZhbHVlKE51
bGwoKSk7CiB9CiAKLWJvb2wgQXJyYXlQcm90b3R5cGVJbXA6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdAorYm9vbCBBcnJheVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3Vs
dCkgY29uc3QKIHsKICAgcmV0dXJuIGxvb2t1cEdldE93bkZ1bmN0aW9uPEFycmF5UHJvdG9GdW5j
SW1wLCBBcnJheUluc3RhbmNlSW1wPihleGVjLCBwcm9wZXJ0eU5hbWUsICZhcnJheVRhYmxlLCB0
aGlzLCByZXN1bHQpOwogfQpAQCAtNDM3LDEwICs0MzgsOSBAQCBib29sIEFycmF5UHJvdG90eXBl
SW1wOjpnZXRPd25Qcm9wZXJ0eShFCiAKIEFycmF5UHJvdG9GdW5jSW1wOjpBcnJheVByb3RvRnVu
Y0ltcChFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKQogICA6IEludGVybmFsRnVuY3Rp
b25JbXAoCi0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Qcm90b3R5cGVJbXAqPihleGVjLT5sZXhp
Y2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkuaW1wKCkpCisgICAg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25Qcm90b3R5cGVJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkpCiAgICAgKSwgaWQoaSkKIHsKLSAgVmFs
dWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLE51bWJlcihs
ZW4pLERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC00NTAsMTkgKzQ1MCwx
OCBAQCBib29sIEFycmF5UHJvdG9GdW5jSW1wOjppbXBsZW1lbnRzQ2FsbCgpCiB9CiAKIC8vIEVD
TUEgMTUuNC40Ci1WYWx1ZSBBcnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpBcnJheVByb3Rv
RnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIHVuc2lnbmVkIGludCBsZW5ndGggPSB0aGlzT2Jq
LmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSkudG9VSW50MzIoZXhlYyk7Ci0gIE9iamVjdElt
cCAqdGhpc0ltcCA9IHRoaXNPYmouaW1wKCk7CisgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmot
PmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSktPnRvVUludDMyKGV4ZWMpOwogCi0gIFZhbHVl
IHJlc3VsdDsKKyAgVmFsdWVJbXAgKnJlc3VsdDsKICAgCiAgIHN3aXRjaCAoaWQpIHsKICAgY2Fz
ZSBUb0xvY2FsZVN0cmluZzoKICAgY2FzZSBUb1N0cmluZzoKIAotICAgIGlmICghdGhpc09iai5p
bmhlcml0cygmQXJyYXlJbnN0YW5jZUltcDo6aW5mbykpIHsKLSAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZBcnJheUluc3RhbmNlSW1wOjppbmZvKSkgeworICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICAgICAgcmV0dXJuIGVycjsKICAgICB9CkBAIC00NzIsMjQgKzQ3MSwyMiBAQCBWYWx1ZSBB
cnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAgICAgVVN0cmluZyBzZXBhcmF0b3Ig
PSAiLCI7CiAgICAgVVN0cmluZyBzdHIgPSAiIjsKIAotICAgIGlmIChhcmdzWzBdLnR5cGUoKSAh
PSBVbmRlZmluZWRUeXBlKQotICAgICAgc2VwYXJhdG9yID0gYXJnc1swXS50b1N0cmluZyhleGVj
KTsKKyAgICBpZiAoYXJnc1swXS0+aXNVbmRlZmluZWQoKSkKKyAgICAgIHNlcGFyYXRvciA9IGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwg
bGVuZ3RoOyBrKyspIHsKICAgICAgIGlmIChrID49IDEpCiAgICAgICAgIHN0ciArPSBzZXBhcmF0
b3I7CiAgICAgICAKLSAgICAgIFZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLmdldChleGVjLCBrKTsK
LSAgICAgIGlmIChlbGVtZW50LnR5cGUoKSA9PSBVbmRlZmluZWRUeXBlIHx8IGVsZW1lbnQudHlw
ZSgpID09IE51bGxUeXBlKQorICAgICAgVmFsdWVJbXAgKmVsZW1lbnQgPSB0aGlzT2JqLT5nZXQo
ZXhlYywgayk7CisgICAgICBpZiAoZWxlbWVudC0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgY29udGludWU7CiAKICAgICAgIGJvb2wgZmFsbGJhY2sgPSBmYWxzZTsKICAgICAgIGlmIChp
ZCA9PSBUb0xvY2FsZVN0cmluZykgewotICAgICAgICBPYmplY3QgbyA9IGVsZW1lbnQudG9PYmpl
Y3QoZXhlYyk7Ci0gICAgICAgIE9iamVjdCBjb252ZXJzaW9uRnVuY3Rpb24gPQotICAgICAgICAg
IE9iamVjdDo6ZHluYW1pY0Nhc3Qoby5nZXQoZXhlYywgdG9Mb2NhbGVTdHJpbmdQcm9wZXJ0eU5h
bWUpKTsKLSAgICAgICAgaWYgKGNvbnZlcnNpb25GdW5jdGlvbi5pc1ZhbGlkKCkgJiYKLSAgICAg
ICAgICAgIGNvbnZlcnNpb25GdW5jdGlvbi5pbXBsZW1lbnRzQ2FsbCgpKSB7Ci0gICAgICAgICAg
c3RyICs9IGNvbnZlcnNpb25GdW5jdGlvbi5jYWxsKGV4ZWMsIG8sIExpc3QoKSkudG9TdHJpbmco
ZXhlYyk7CisgICAgICAgIE9iamVjdEltcCAqbyA9IGVsZW1lbnQtPnRvT2JqZWN0KGV4ZWMpOwor
ICAgICAgICBWYWx1ZUltcCAqY29udmVyc2lvbkZ1bmN0aW9uID0gby0+Z2V0KGV4ZWMsIHRvTG9j
YWxlU3RyaW5nUHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGNvbnZlcnNpb25GdW5jdGlvbi0+
aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oY29udmVyc2lvbkZ1bmN0aW9u
KS0+aW1wbGVtZW50c0NhbGwoKSkgeworICAgICAgICAgIHN0ciArPSBzdGF0aWNfY2FzdDxPYmpl
Y3RJbXAgKj4oY29udmVyc2lvbkZ1bmN0aW9uKS0+Y2FsbChleGVjLCBvLCBMaXN0KCkpLT50b1N0
cmluZyhleGVjKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAvLyB0cnkgdG9TdHJpbmco
KSBmYWxsYmFjawogICAgICAgICAgIGZhbGxiYWNrID0gdHJ1ZTsKQEAgLTQ5NywyMyArNDk0LDE5
IEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAgIH0KIAog
ICAgICAgaWYgKGlkID09IFRvU3RyaW5nIHx8IGlkID09IEpvaW4gfHwgZmFsbGJhY2spIHsKLSAg
ICAgICAgaWYgKGVsZW1lbnQudHlwZSgpID09IE9iamVjdFR5cGUpIHsKLSAgICAgICAgICBPYmpl
Y3QgbyA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoZWxlbWVudCk7Ci0gICAgICAgICAgT2JqZWN0IGNv
bnZlcnNpb25GdW5jdGlvbiA9Ci0gICAgICAgICAgICBPYmplY3Q6OmR5bmFtaWNDYXN0KG8uZ2V0
KGV4ZWMsIHRvU3RyaW5nUHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgaWYgKGNvbnZlcnNpb25G
dW5jdGlvbi5pc1ZhbGlkKCkgJiYKLSAgICAgICAgICAgICAgY29udmVyc2lvbkZ1bmN0aW9uLmlt
cGxlbWVudHNDYWxsKCkpIHsKLSAgICAgICAgICAgIHN0ciArPSBjb252ZXJzaW9uRnVuY3Rpb24u
Y2FsbChleGVjLCBvLCBMaXN0KCkpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAoZWxlbWVu
dC0+aXNPYmplY3QoKSkgeworICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9i
amVjdEltcCAqPihlbGVtZW50KTsKKyAgICAgICAgICBWYWx1ZUltcCAqY29udmVyc2lvbkZ1bmN0
aW9uID0gby0+Z2V0KGV4ZWMsIHRvU3RyaW5nUHJvcGVydHlOYW1lKTsKKyAgICAgICAgICBpZiAo
Y29udmVyc2lvbkZ1bmN0aW9uLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAq
Pihjb252ZXJzaW9uRnVuY3Rpb24pLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAgICAgICBz
dHIgKz0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGNvbnZlcnNpb25GdW5jdGlvbiktPmNhbGwo
ZXhlYywgbywgTGlzdCgpKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFVTdHJpbmcgbXNnID0gIkNhbid0IGNvbnZlcnQgIiArIG8uY2xhc3NOYW1lKCkg
KwotICAgICAgICAgICAgICAiIG9iamVjdCB0byBzdHJpbmciOwotICAgICAgICAgICAgT2JqZWN0
IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLAotICAgICAgICAgICAgICAg
IG1zZy5jc3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBVU3RyaW5nIG1zZyA9ICJDYW4n
dCBjb252ZXJ0ICIgKyBvLT5jbGFzc05hbWUoKSArICIgb2JqZWN0IHRvIHN0cmluZyI7CisgICAg
ICAgICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9y
LCBtc2cuY3N0cmluZygpLmNfc3RyKCkpOwogICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgc3RyICs9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAg
ICAgICAgc3RyICs9IGVsZW1lbnQtPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICB9CiAgICAgICB9
CiAKQEAgLTUyNCw1NCArNTE3LDU0IEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4
ZWNTdGF0ZSAKICAgICBicmVhazsKICAgfQogICBjYXNlIENvbmNhdDogewotICAgIE9iamVjdCBh
cnIgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKSk7CisgICAgT2JqZWN0SW1w
ICphcnIgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKSk7CiAgICAg
aW50IG4gPSAwOwotICAgIFZhbHVlIGN1ckFyZyA9IHRoaXNPYmo7Ci0gICAgT2JqZWN0IGN1ck9i
aiA9IE9iamVjdDo6ZHluYW1pY0Nhc3QodGhpc09iaik7CisgICAgVmFsdWVJbXAgKmN1ckFyZyA9
IHRoaXNPYmo7CisgICAgT2JqZWN0SW1wICpjdXJPYmogPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAg
Kj4odGhpc09iaik7CiAgICAgTGlzdEl0ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOwogICAgIGZv
ciAoOzspIHsKLSAgICAgIGlmIChjdXJBcmcudHlwZSgpID09IE9iamVjdFR5cGUgJiYKLSAgICAg
ICAgICBjdXJPYmouaW5oZXJpdHMoJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pKSB7CisgICAgICBp
ZiAoY3VyQXJnLT5pc09iamVjdCgpICYmCisgICAgICAgICAgY3VyT2JqLT5pbmhlcml0cygmQXJy
YXlJbnN0YW5jZUltcDo6aW5mbykpIHsKICAgICAgICAgdW5zaWduZWQgaW50IGsgPSAwOwogICAg
ICAgICAvLyBPbGRlciB2ZXJzaW9ucyB0cmllZCB0byBvcHRpbWl6ZSBvdXQgZ2V0dGluZyB0aGUg
bGVuZ3RoIG9mIHRoaXNPYmoKICAgICAgICAgLy8gYnkgY2hlY2tpbmcgZm9yIG4gIT0gMCwgYnV0
IHRoYXQgZG9lc24ndCB3b3JrIGlmIHRoaXNPYmogaXMgYW4gZW1wdHkgYXJyYXkuCi0gICAgICAg
IGxlbmd0aCA9IGN1ck9iai5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICBsZW5ndGggPSBjdXJPYmotPmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFt
ZSktPnRvVUludDMyKGV4ZWMpOwogICAgICAgICB3aGlsZSAoayA8IGxlbmd0aCkgewotICAgICAg
ICAgIFZhbHVlIHY7Ci0gICAgICAgICAgaWYgKGN1ck9iai5pbXAoKS0+Z2V0UHJvcGVydHkoZXhl
YywgaywgdikpCi0gICAgICAgICAgICBhcnIucHV0KGV4ZWMsIG4sIHYpOworICAgICAgICAgIFZh
bHVlSW1wICp2OworICAgICAgICAgIGlmIChjdXJPYmotPmdldFByb3BlcnR5KGV4ZWMsIGssIHYp
KQorICAgICAgICAgICAgYXJyLT5wdXQoZXhlYywgbiwgdik7CiAgICAgICAgICAgbisrOwogICAg
ICAgICAgIGsrKzsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKLSAgICAgICAgYXJyLnB1dChl
eGVjLCBuLCBjdXJBcmcpOworICAgICAgICBhcnItPnB1dChleGVjLCBuLCBjdXJBcmcpOwogICAg
ICAgICBuKys7CiAgICAgICB9CiAgICAgICBpZiAoaXQgPT0gYXJncy5lbmQoKSkKICAgICAgICAg
YnJlYWs7CiAgICAgICBjdXJBcmcgPSAqaXQ7Ci0gICAgICBjdXJPYmogPSBPYmplY3Q6OmR5bmFt
aWNDYXN0KGl0KyspOyAvLyBtYXkgYmUgMAorICAgICAgY3VyT2JqID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KGl0KyspOyAvLyBtYXkgYmUgMAogICAgIH0KLSAgICBhcnIucHV0KGV4ZWMsbGVu
Z3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobiksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAg
YXJyLT5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihuKSwgRG9udEVudW0gfCBE
b250RGVsZXRlKTsKIAogICAgIHJlc3VsdCA9IGFycjsKICAgICBicmVhazsKICAgfQogICBjYXNl
IFBvcDp7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7Ci0gICAgICB0aGlzT2JqLnB1dChleGVjLCBs
ZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGgpLCBEb250RW51bSB8IERvbnREZWxldGUp
OworICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGxl
bmd0aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICByZXN1bHQgPSBVbmRlZmluZWQo
KTsKICAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gdGhpc09iai5nZXQoZXhlYywgbGVuZ3Ro
IC0gMSk7Ci0gICAgICB0aGlzT2JqLnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJl
cihsZW5ndGggLSAxKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICAgIHJlc3VsdCA9IHRo
aXNPYmotPmdldChleGVjLCBsZW5ndGggLSAxKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVjLCBs
ZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGggLSAxKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlKTsKICAgICB9CiAgICAgYnJlYWs7CiAgIH0KICAgY2FzZSBQdXNoOiB7CiAgICAgZm9yIChp
bnQgbiA9IDA7IG4gPCBhcmdzLnNpemUoKTsgbisrKQotICAgICAgdGhpc09iai5wdXQoZXhlYywg
bGVuZ3RoICsgbiwgYXJnc1tuXSk7CisgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoICsg
biwgYXJnc1tuXSk7CiAgICAgbGVuZ3RoICs9IGFyZ3Muc2l6ZSgpOwotICAgIHRoaXNPYmoucHV0
KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobGVuZ3RoKSwgRG9udEVudW0gfCBEb250
RGVsZXRlKTsKKyAgICB0aGlzT2JqLT5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJl
cihsZW5ndGgpLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIHJlc3VsdCA9IE51bWJlcihs
ZW5ndGgpOwogICAgIGJyZWFrOwogICB9CkBAIC01ODEsMzkgKzU3NCwzOSBAQCBWYWx1ZSBBcnJh
eVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBr
ID0gMDsgayA8IG1pZGRsZTsgaysrKSB7CiAgICAgICB1bnNpZ25lZCBsazEgPSBsZW5ndGggLSBr
IC0gMTsKLSAgICAgIFZhbHVlIG9iajsKLSAgICAgIFZhbHVlIG9iajI7Ci0gICAgICBib29sIGhh
czIgPSB0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBsazEsIG9iajIpOwotICAgICAgYm9vbCBo
YXMxID0gdGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgaywgb2JqKTsKKyAgICAgIFZhbHVlSW1w
ICpvYmo7CisgICAgICBWYWx1ZUltcCAqb2JqMjsKKyAgICAgIGJvb2wgaGFzMiA9IHRoaXNPYmot
PmdldFByb3BlcnR5KGV4ZWMsIGxrMSwgb2JqMik7CisgICAgICBib29sIGhhczEgPSB0aGlzT2Jq
LT5nZXRQcm9wZXJ0eShleGVjLCBrLCBvYmopOwogCiAgICAgICBpZiAoaGFzMikgCi0gICAgICAg
IHRoaXNPYmoucHV0KGV4ZWMsIGssIG9iajIpOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywg
aywgb2JqMik7CiAgICAgICBlbHNlCi0gICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhl
Yywgayk7CisgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGspOwogCiAgICAg
ICBpZiAoaGFzMSkKLSAgICAgICAgdGhpc09iai5wdXQoZXhlYywgbGsxLCBvYmopOworICAgICAg
ICB0aGlzT2JqLT5wdXQoZXhlYywgbGsxLCBvYmopOwogICAgICAgZWxzZQotICAgICAgICB0aGlz
T2JqLmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGxrMSk7CisgICAgICAgIHRoaXNPYmotPmRlbGV0ZVBy
b3BlcnR5KGV4ZWMsIGxrMSk7CiAgICAgfQogICAgIHJlc3VsdCA9IHRoaXNPYmo7CiAgICAgYnJl
YWs7CiAgIH0KICAgY2FzZSBTaGlmdDogewogICAgIGlmIChsZW5ndGggPT0gMCkgewotICAgICAg
dGhpc09iai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobGVuZ3RoKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVjLCBsZW5ndGhQcm9w
ZXJ0eU5hbWUsIE51bWJlcihsZW5ndGgpLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAg
cmVzdWx0ID0gVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IHRoaXNP
YmouZ2V0KGV4ZWMsIDApOworICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIDApOwog
ICAgICAgZm9yKHVuc2lnbmVkIGludCBrID0gMTsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAg
IFZhbHVlIG9iajsKLSAgICAgICAgaWYgKHRoaXNJbXAtPmdldFByb3BlcnR5KGV4ZWMsIGssIG9i
aikpCi0gICAgICAgICAgdGhpc09iai5wdXQoZXhlYywgay0xLCBvYmopOworICAgICAgICBWYWx1
ZUltcCAqb2JqOworICAgICAgICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhlYywgaywgb2Jq
KSkKKyAgICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgay0xLCBvYmopOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShleGVjLCBrLTEpOworICAgICAgICAg
IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGstMSk7CiAgICAgICB9Ci0gICAgICB0aGlz
T2JqLmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgdGhpc09iai5wdXQo
ZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobGVuZ3RoIC0gMSksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSk7CisgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBsZW5ndGgg
LSAxKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJl
cihsZW5ndGggLSAxKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICB9CiAgICAgYnJlYWs7
CiAgIH0KQEAgLTYyMSwxMSArNjE0LDExIEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxs
KEV4ZWNTdGF0ZSAKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21h
bnVhbHMvanMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogCiAg
ICAgLy8gV2UgcmV0dXJuIGEgbmV3IGFycmF5Ci0gICAgT2JqZWN0IHJlc09iaiA9IE9iamVjdDo6
ZHluYW1pY0Nhc3QoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNv
bnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsKKyAgICBPYmplY3RJbXAgKnJlc09iaiA9IHN0
YXRpY19jYXN0PE9iamVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bkFycmF5KCktPmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsKICAgICByZXN1bHQgPSBy
ZXNPYmo7CiAgICAgZG91YmxlIGJlZ2luID0gMDsKLSAgICBpZiAoYXJnc1swXS50eXBlKCkgIT0g
VW5kZWZpbmVkVHlwZSkgewotICAgICAgICBiZWdpbiA9IGFyZ3NbMF0udG9JbnRlZ2VyKGV4ZWMp
OworICAgIGlmICghYXJnc1swXS0+aXNVbmRlZmluZWQoKSkgeworICAgICAgICBiZWdpbiA9IGFy
Z3NbMF0tPnRvSW50ZWdlcihleGVjKTsKICAgICAgICAgaWYgKGJlZ2luID49IDApIHsgLy8gZmFs
c2UgZm9yIE5hTgogICAgICAgICAgICAgaWYgKGJlZ2luID4gbGVuZ3RoKQogICAgICAgICAgICAg
ICAgIGJlZ2luID0gbGVuZ3RoOwpAQCAtNjM2LDggKzYyOSw4IEBAIFZhbHVlIEFycmF5UHJvdG9G
dW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAgICAgfQogICAgIH0KICAgICBkb3VibGUgZW5k
ID0gbGVuZ3RoOwotICAgIGlmIChhcmdzWzFdLnR5cGUoKSAhPSBVbmRlZmluZWRUeXBlKSB7Ci0g
ICAgICBlbmQgPSBhcmdzWzFdLnRvSW50ZWdlcihleGVjKTsKKyAgICBpZiAoIWFyZ3NbMV0tPmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgIGVuZCA9IGFyZ3NbMV0tPnRvSW50ZWdlcihleGVjKTsKICAg
ICAgIGlmIChlbmQgPCAwKSB7IC8vIGZhbHNlIGZvciBOYU4KICAgICAgICAgZW5kICs9IGxlbmd0
aDsKICAgICAgICAgaWYgKGVuZCA8IDApCkBAIC02NTMsMzkgKzY0NiwzOCBAQCBWYWx1ZSBBcnJh
eVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxp
bnQ+KGJlZ2luKTsKICAgICBpbnQgZSA9IHN0YXRpY19jYXN0PGludD4oZW5kKTsKICAgICBmb3Io
aW50IGsgPSBiOyBrIDwgZTsgaysrLCBuKyspIHsKLSAgICAgIFZhbHVlIG9iajsKLSAgICAgIGlm
ICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrLCBvYmopKQotICAgICAgICByZXNPYmoucHV0
KGV4ZWMsIG4sIG9iaik7CisgICAgICBWYWx1ZUltcCAqb2JqOworICAgICAgaWYgKHRoaXNPYmot
PmdldFByb3BlcnR5KGV4ZWMsIGssIG9iaikpCisgICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIG4s
IG9iaik7CiAgICAgfQotICAgIHJlc09iai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBO
dW1iZXIobiksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgcmVzT2JqLT5wdXQoZXhlYywg
bGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobiksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAg
ICAgYnJlYWs7CiAgIH0KICAgY2FzZSBTb3J0OnsKICNpZiAwCiAgICAgcHJpbnRmKCJLSlMgQXJy
YXk6OlNvcnQgbGVuZ3RoPSVkXG4iLCBsZW5ndGgpOwogICAgIGZvciAoIHVuc2lnbmVkIGludCBp
ID0gMCA7IGk8bGVuZ3RoIDsgKytpICkKLSAgICAgIHByaW50ZigiS0pTIEFycmF5OjpTb3J0OiAl
ZDogJXNcbiIsIGksIHRoaXNPYmouZ2V0KGV4ZWMsIGkpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkg
KTsKKyAgICAgIHByaW50ZigiS0pTIEFycmF5OjpTb3J0OiAlZDogJXNcbiIsIGksIHRoaXNPYmot
PmdldChleGVjLCBpKS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSApOwogI2VuZGlmCi0gICAgT2Jq
ZWN0IHNvcnRGdW5jdGlvbjsKLSAgICBib29sIHVzZVNvcnRGdW5jdGlvbiA9IChhcmdzWzBdLnR5
cGUoKSAhPSBVbmRlZmluZWRUeXBlKTsKLSAgICBpZiAodXNlU29ydEZ1bmN0aW9uKQorICAgIE9i
amVjdEltcCAqc29ydEZ1bmN0aW9uID0gTlVMTDsKKyAgICBpZiAoIWFyZ3NbMF0tPmlzVW5kZWZp
bmVkKCkpCiAgICAgICB7Ci0gICAgICAgIHNvcnRGdW5jdGlvbiA9IGFyZ3NbMF0udG9PYmplY3Qo
ZXhlYyk7Ci0gICAgICAgIGlmICghc29ydEZ1bmN0aW9uLmltcGxlbWVudHNDYWxsKCkpCi0gICAg
ICAgICAgdXNlU29ydEZ1bmN0aW9uID0gZmFsc2U7CisgICAgICAgIHNvcnRGdW5jdGlvbiA9IGFy
Z3NbMF0tPnRvT2JqZWN0KGV4ZWMpOworICAgICAgICBpZiAoIXNvcnRGdW5jdGlvbi0+aW1wbGVt
ZW50c0NhbGwoKSkKKyAgICAgICAgICBzb3J0RnVuY3Rpb24gPSBOVUxMOwogICAgICAgfQogICAg
IAotICAgIGlmICh0aGlzSW1wLT5jbGFzc0luZm8oKSA9PSAmQXJyYXlJbnN0YW5jZUltcDo6aW5m
bykgewotICAgICAgaWYgKHVzZVNvcnRGdW5jdGlvbikKLSAgICAgICAgKChBcnJheUluc3RhbmNl
SW1wICopdGhpc0ltcCktPnNvcnQoZXhlYywgc29ydEZ1bmN0aW9uKTsKKyAgICBpZiAodGhpc09i
ai0+Y2xhc3NJbmZvKCkgPT0gJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pIHsKKyAgICAgIGlmIChz
b3J0RnVuY3Rpb24pCisgICAgICAgICgoQXJyYXlJbnN0YW5jZUltcCAqKXRoaXNPYmopLT5zb3J0
KGV4ZWMsIHNvcnRGdW5jdGlvbik7CiAgICAgICBlbHNlCi0gICAgICAgICgoQXJyYXlJbnN0YW5j
ZUltcCAqKXRoaXNJbXApLT5zb3J0KGV4ZWMpOworICAgICAgICAoKEFycmF5SW5zdGFuY2VJbXAg
Kil0aGlzT2JqKS0+c29ydChleGVjKTsKICAgICAgIHJlc3VsdCA9IHRoaXNPYmo7CiAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDApIHsKLSAgICAgIHRoaXNPYmoucHV0
KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKDApLCBEb250RW51bSB8IERvbnREZWxl
dGUpOworICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVy
KDApLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgICAgcmVzdWx0ID0gdGhpc09iajsKICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTY5NCwyNCArNjg2LDI0IEBAIFZhbHVlIEFycmF5UHJvdG9G
dW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAvLyBvciBxdWlja3NvcnQsIGFuZCBtdWNoIGxl
c3Mgc3dhcHBpbmcgdGhhbiBidWJibGVzb3J0L2luc2VydGlvbnNvcnQuCiAgICAgZm9yICggdW5z
aWduZWQgaW50IGkgPSAwIDsgaTxsZW5ndGgtMSA7ICsraSApCiAgICAgICB7Ci0gICAgICAgIFZh
bHVlIGlPYmogPSB0aGlzT2JqLmdldChleGVjLGkpOworICAgICAgICBWYWx1ZUltcCAqaU9iaiA9
IHRoaXNPYmotPmdldChleGVjLGkpOwogICAgICAgICB1bnNpZ25lZCBpbnQgdGhlbWluID0gaTsK
LSAgICAgICAgVmFsdWUgbWluT2JqID0gaU9iajsKKyAgICAgICAgVmFsdWVJbXAgKm1pbk9iaiA9
IGlPYmo7CiAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBqID0gaSsxIDsgajxsZW5ndGggOyAr
K2ogKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlIGpPYmogPSB0aGlzT2JqLmdldChl
eGVjLGopOworICAgICAgICAgICAgVmFsdWVJbXAgKmpPYmogPSB0aGlzT2JqLT5nZXQoZXhlYyxq
KTsKICAgICAgICAgICAgIGRvdWJsZSBjbXA7Ci0gICAgICAgICAgICBpZiAoak9iai50eXBlKCkg
PT0gVW5kZWZpbmVkVHlwZSkgeworICAgICAgICAgICAgaWYgKGpPYmotPmlzVW5kZWZpbmVkKCkp
IHsKICAgICAgICAgICAgICAgY21wID0gMTsgLy8gZG9uJ3QgY2hlY2sgbWluT2JqIGJlY2F1c2Ug
dGhlcmUncyBubyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgPT0gKDApIGZyb20gPiAoMSkKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobWluT2JqLnR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1pbk9iai0+aXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAg
ICBjbXAgPSAtMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlU29ydEZ1bmN0aW9uKSB7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnRGdW5jdGlvbikgewogICAgICAgICAgICAgICAgIExp
c3QgbDsKICAgICAgICAgICAgICAgICBsLmFwcGVuZChqT2JqKTsKICAgICAgICAgICAgICAgICBs
LmFwcGVuZChtaW5PYmopOwotICAgICAgICAgICAgICAgIGNtcCA9IHNvcnRGdW5jdGlvbi5jYWxs
KGV4ZWMsIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwgbCkudG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgY21wID0gc29ydEZ1bmN0aW9uLT5jYWxsKGV4
ZWMsIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwgbCktPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgY21wID0gKGpP
YmoudG9TdHJpbmcoZXhlYykgPCBtaW5PYmoudG9TdHJpbmcoZXhlYykpID8gLTEgOiAxOworICAg
ICAgICAgICAgICBjbXAgPSAoak9iai0+dG9TdHJpbmcoZXhlYykgPCBtaW5PYmotPnRvU3RyaW5n
KGV4ZWMpKSA/IC0xIDogMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICggY21wIDwg
MCApCiAgICAgICAgICAgICAgIHsKQEAgLTcyMywzNiArNzE1LDM2IEBAIFZhbHVlIEFycmF5UHJv
dG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAgICAgaWYgKCB0aGVtaW4gPiBpICkKICAg
ICAgICAgICB7CiAgICAgICAgICAgICAvL3ByaW50ZigiS0pTIEFycmF5OjpTb3J0OiBzd2FwcGlu
ZyAlZCBhbmQgJWRcbiIsIGksIHRoZW1pbiApOwotICAgICAgICAgICAgdGhpc09iai5wdXQoIGV4
ZWMsIGksIG1pbk9iaiApOwotICAgICAgICAgICAgdGhpc09iai5wdXQoIGV4ZWMsIHRoZW1pbiwg
aU9iaiApOworICAgICAgICAgICAgdGhpc09iai0+cHV0KCBleGVjLCBpLCBtaW5PYmogKTsKKyAg
ICAgICAgICAgIHRoaXNPYmotPnB1dCggZXhlYywgdGhlbWluLCBpT2JqICk7CiAgICAgICAgICAg
fQogICAgICAgfQogI2lmIDAKICAgICBwcmludGYoIktKUyBBcnJheTo6U29ydCAtLSBSZXN1bHRp
bmcgYXJyYXk6XG4iKTsKICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDAgOyBpPGxlbmd0aCA7
ICsraSApCi0gICAgICBwcmludGYoIktKUyBBcnJheTo6U29ydDogJWQ6ICVzXG4iLCBpLCB0aGlz
T2JqLmdldChleGVjLCBpKS50b1N0cmluZyhleGVjKS5hc2NpaSgpICk7CisgICAgICBwcmludGYo
IktKUyBBcnJheTo6U29ydDogJWQ6ICVzXG4iLCBpLCB0aGlzT2JqLT5nZXQoZXhlYywgaSktPnRv
U3RyaW5nKGV4ZWMpLmFzY2lpKCkgKTsKICNlbmRpZgogICAgIHJlc3VsdCA9IHRoaXNPYmo7CiAg
ICAgYnJlYWs7CiAgIH0KICAgY2FzZSBTcGxpY2U6IHsKICAgICAvLyAxNS40LjQuMTIgLSBvaCBi
b3kgdGhpcyBpcyBodWdlCi0gICAgT2JqZWN0IHJlc09iaiA9IE9iamVjdDo6ZHluYW1pY0Nhc3Qo
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVjdChleGVj
LExpc3Q6OmVtcHR5KCkpKTsKKyAgICBPYmplY3RJbXAgKnJlc09iaiA9IHN0YXRpY19jYXN0PE9i
amVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNv
bnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsKICAgICByZXN1bHQgPSByZXNPYmo7Ci0gICAg
aW50IGJlZ2luID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKyAgICBpbnQgYmVnaW4gPSBhcmdz
WzBdLT50b1VJbnQzMihleGVjKTsKICAgICBpZiAoIGJlZ2luIDwgMCApCiAgICAgICBiZWdpbiA9
IG1heEludCggYmVnaW4gKyBsZW5ndGgsIDAgKTsKICAgICBlbHNlCiAgICAgICBiZWdpbiA9IG1p
bkludCggYmVnaW4sIGxlbmd0aCApOwotICAgIHVuc2lnbmVkIGludCBkZWxldGVDb3VudCA9IG1p
bkludCggbWF4SW50KCBhcmdzWzFdLnRvVUludDMyKGV4ZWMpLCAwICksIGxlbmd0aCAtIGJlZ2lu
ICk7CisgICAgdW5zaWduZWQgaW50IGRlbGV0ZUNvdW50ID0gbWluSW50KCBtYXhJbnQoIGFyZ3Nb
MV0tPnRvVUludDMyKGV4ZWMpLCAwICksIGxlbmd0aCAtIGJlZ2luICk7CiAKICAgICAvL3ByaW50
ZiggIlNwbGljaW5nIGZyb20gJWQsIGRlbGV0ZUNvdW50PSVkIFxuIiwgYmVnaW4sIGRlbGV0ZUNv
dW50ICk7CiAgICAgZm9yKHVuc2lnbmVkIGludCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyBrKysp
IHsKLSAgICAgIFZhbHVlIG9iajsKLSAgICAgIGlmICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVj
LCBrK2JlZ2luLCBvYmopKQotICAgICAgICByZXNPYmoucHV0KGV4ZWMsIGssIG9iaik7CisgICAg
ICBWYWx1ZUltcCAqb2JqOworICAgICAgaWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGsr
YmVnaW4sIG9iaikpCisgICAgICAgIHJlc09iai0+cHV0KGV4ZWMsIGssIG9iaik7CiAgICAgfQot
ICAgIHJlc09iai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoZGVsZXRlQ291
bnQpLCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHJlc09iai0+cHV0KGV4ZWMsIGxlbmd0
aFByb3BlcnR5TmFtZSwgTnVtYmVyKGRlbGV0ZUNvdW50KSwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKIAogICAgIHVuc2lnbmVkIGludCBhZGRpdGlvbmFsQXJncyA9IG1heEludCggYXJncy5zaXpl
KCkgLSAyLCAwICk7CiAgICAgaWYgKCBhZGRpdGlvbmFsQXJncyAhPSBkZWxldGVDb3VudCApCkBA
IC03NjEsNDggKzc1Myw0OCBAQCBWYWx1ZSBBcnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3Rh
dGUgCiAgICAgICB7CiAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gYmVnaW47IGsgPCBs
ZW5ndGggLSBkZWxldGVDb3VudDsgKytrICkKICAgICAgICAgewotICAgICAgICAgIFZhbHVlIG9i
ajsKLSAgICAgICAgICBpZiAodGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgaytkZWxldGVDb3Vu
dCwgb2JqKSkKLSAgICAgICAgICAgIHRoaXNPYmoucHV0KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3Ms
IG9iaik7CisgICAgICAgICAgVmFsdWVJbXAgKm9iajsKKyAgICAgICAgICBpZiAodGhpc09iai0+
Z2V0UHJvcGVydHkoZXhlYywgaytkZWxldGVDb3VudCwgb2JqKSkKKyAgICAgICAgICAgIHRoaXNP
YmotPnB1dChleGVjLCBrK2FkZGl0aW9uYWxBcmdzLCBvYmopOwogICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgaythZGRpdGlvbmFsQXJncyk7
CisgICAgICAgICAgICB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShleGVjLCBrK2FkZGl0aW9uYWxB
cmdzKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IGxlbmd0aCA7
IGsgPiBsZW5ndGggLSBkZWxldGVDb3VudCArIGFkZGl0aW9uYWxBcmdzOyAtLWsgKQotICAgICAg
ICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgay0xKTsKKyAgICAgICAgICB0aGlzT2Jq
LT5kZWxldGVQcm9wZXJ0eShleGVjLCBrLTEpOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAg
ewogICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IGxlbmd0aCAtIGRlbGV0ZUNvdW50OyAo
aW50KWsgPiBiZWdpbjsgLS1rICkKICAgICAgICAgewotICAgICAgICAgIFZhbHVlIG9iajsKLSAg
ICAgICAgICBpZiAodGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgayArIGRlbGV0ZUNvdW50IC0g
MSwgb2JqKSkKLSAgICAgICAgICAgIHRoaXNPYmoucHV0KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJn
cyAtIDEsIG9iaik7CisgICAgICAgICAgVmFsdWVJbXAgKm9iajsKKyAgICAgICAgICBpZiAodGhp
c09iai0+Z2V0UHJvcGVydHkoZXhlYywgayArIGRlbGV0ZUNvdW50IC0gMSwgb2JqKSkKKyAgICAg
ICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrICsgYWRkaXRpb25hbEFyZ3MgLSAxLCBvYmopOwog
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywg
aythZGRpdGlvbmFsQXJncy0xKTsKKyAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5
KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MtMSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAg
ICAgZm9yICggdW5zaWduZWQgaW50IGsgPSAwOyBrIDwgYWRkaXRpb25hbEFyZ3M7ICsrayApCiAg
ICAgewotICAgICAgdGhpc09iai5wdXQoZXhlYywgaytiZWdpbiwgYXJnc1trKzJdKTsKKyAgICAg
IHRoaXNPYmotPnB1dChleGVjLCBrK2JlZ2luLCBhcmdzW2srMl0pOwogICAgIH0KLSAgICB0aGlz
T2JqLnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGggLSBkZWxldGVD
b3VudCArIGFkZGl0aW9uYWxBcmdzKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICB0aGlz
T2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobGVuZ3RoIC0gZGVsZXRl
Q291bnQgKyBhZGRpdGlvbmFsQXJncyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgYnJl
YWs7CiAgIH0KICAgY2FzZSBVblNoaWZ0OiB7IC8vIDE1LjQuNC4xMwogICAgIHVuc2lnbmVkIGlu
dCBuckFyZ3MgPSBhcmdzLnNpemUoKTsKICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IGxlbmd0
aDsgayA+IDA7IC0tayApCiAgICAgewotICAgICAgVmFsdWUgb2JqOwotICAgICAgaWYgKHRoaXNJ
bXAtPmdldFByb3BlcnR5KGV4ZWMsIGsgLSAxLCBvYmopKQotICAgICAgICB0aGlzT2JqLnB1dChl
eGVjLCBrK25yQXJncy0xLCBvYmopOworICAgICAgVmFsdWVJbXAgKm9iajsKKyAgICAgIGlmICh0
aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrIC0gMSwgb2JqKSkKKyAgICAgICAgdGhpc09iai0+
cHV0KGV4ZWMsIGsrbnJBcmdzLTEsIG9iaik7CiAgICAgICBlbHNlCi0gICAgICAgIHRoaXNPYmou
ZGVsZXRlUHJvcGVydHkoZXhlYywgaytuckFyZ3MtMSk7CisgICAgICAgIHRoaXNPYmotPmRlbGV0
ZVByb3BlcnR5KGV4ZWMsIGsrbnJBcmdzLTEpOwogICAgIH0KICAgICBmb3IgKCB1bnNpZ25lZCBp
bnQgayA9IDA7IGsgPCBuckFyZ3M7ICsrayApCi0gICAgICB0aGlzT2JqLnB1dChleGVjLCBrLCBh
cmdzW2tdKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrLCBhcmdzW2tdKTsKICAgICByZXN1
bHQgPSBOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKLSAgICB0aGlzT2JqLnB1dChleGVjLCBsZW5n
dGhQcm9wZXJ0eU5hbWUsIHJlc3VsdCwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICB0aGlz
T2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCByZXN1bHQsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CiAgICAgYnJlYWs7CiAgIH0KICAgY2FzZSBFdmVyeToKQEAgLTgxMywxNSArODA1
LDE1IEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAvL2h0
dHA6Ly9kZXZlbG9wZXItdGVzdC5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8x
LjVfUmVmZXJlbmNlOk9iamVjdHM6QXJyYXk6Zm9yRWFjaAogICAgIC8vaHR0cDovL2RldmVsb3Bl
ci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6
T2JqZWN0czpBcnJheTpzb21lCiAgICAgCi0gICAgT2JqZWN0IGVhY2hGdW5jdGlvbiA9IGFyZ3Nb
MF0udG9PYmplY3QoZXhlYyk7CisgICAgT2JqZWN0SW1wICplYWNoRnVuY3Rpb24gPSBhcmdzWzBd
LT50b09iamVjdChleGVjKTsKICAgICAKLSAgICBpZiAoIWVhY2hGdW5jdGlvbi5pbXBsZW1lbnRz
Q2FsbCgpKSB7Ci0gICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7CisgICAgaWYgKCFlYWNoRnVuY3Rpb24tPmltcGxlbWVudHNDYWxsKCkpIHsKKyAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIAotICAg
IE9iamVjdCBhcHBseVRoaXMgPSBhcmdzWzFdLmltcCgpLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8g
ZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpIDogIGFyZ3NbMV0udG9P
YmplY3QoZXhlYyk7CisgICAgT2JqZWN0SW1wICphcHBseVRoaXMgPSBhcmdzWzFdLT5pc1VuZGVm
aW5lZE9yTnVsbCgpID8gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgp
IDogIGFyZ3NbMV0tPnRvT2JqZWN0KGV4ZWMpOwogICAgIAogICAgIGlmIChpZCA9PSBTb21lIHx8
IGlkID09IEV2ZXJ5KQogICAgICAgcmVzdWx0ID0gQm9vbGVhbihpZCA9PSBFdmVyeSk7CkBAIC04
MzIsMTEgKzgyNCwxMSBAQCBWYWx1ZSBBcnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUg
CiAgICAgICAKICAgICAgIExpc3QgZWFjaEFyZ3VtZW50czsKICAgICAgIAotICAgICAgZWFjaEFy
Z3VtZW50cy5hcHBlbmQodGhpc09iai5nZXQoZXhlYywgaykpOworICAgICAgZWFjaEFyZ3VtZW50
cy5hcHBlbmQodGhpc09iai0+Z2V0KGV4ZWMsIGspKTsKICAgICAgIGVhY2hBcmd1bWVudHMuYXBw
ZW5kKE51bWJlcihrKSk7CiAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKICAg
ICAgIAotICAgICAgYm9vbCBwcmVkaWNhdGVSZXN1bHQgPSBlYWNoRnVuY3Rpb24uY2FsbChleGVj
LCBhcHBseVRoaXMsIGVhY2hBcmd1bWVudHMpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgIGJvb2wg
cHJlZGljYXRlUmVzdWx0ID0gZWFjaEZ1bmN0aW9uLT5jYWxsKGV4ZWMsIGFwcGx5VGhpcywgZWFj
aEFyZ3VtZW50cyktPnRvQm9vbGVhbihleGVjKTsKICAgICAgIAogICAgICAgaWYgKGlkID09IEV2
ZXJ5ICYmICFwcmVkaWNhdGVSZXN1bHQpIHsKICAgICAgICAgcmVzdWx0ID0gQm9vbGVhbihmYWxz
ZSk7CkBAIC04NTIsNiArODQ0LDcgQEAgVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhl
Y1N0YXRlIAogICAgIAogICBkZWZhdWx0OgogICAgIGFzc2VydCgwKTsKKyAgICByZXN1bHQgPSAw
OwogICAgIGJyZWFrOwogICB9CiAgIHJldHVybiByZXN1bHQ7CkBAIC04NjQsOSArODU3LDggQEAg
QXJyYXlPYmplY3RJbXA6OkFycmF5T2JqZWN0SW1wKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5UHJvdG90eXBlSW1wICphcnJheVByb3RvKQogICA6IEludGVy
bmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICAv
LyBFQ01BIDE1LjQuMy4xIEFycmF5LnByb3RvdHlwZQotICBwdXQoZXhlYyxwcm90b3R5cGVQcm9w
ZXJ0eU5hbWUsIE9iamVjdChhcnJheVByb3RvKSwgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25s
eSk7CisgIHB1dChleGVjLHByb3RvdHlwZVByb3BlcnR5TmFtZSwgYXJyYXlQcm90bywgRG9udEVu
dW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29u
c3RydWN0b3IKICAgcHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoMSksIFJlYWRP
bmx5fERvbnREZWxldGV8RG9udEVudW0pOwpAQCAtODc4LDIxICs4NzAsMjEgQEAgYm9vbCBBcnJh
eU9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdAogfQogCiAvLyBFQ01BIDE1LjQuMgotT2Jq
ZWN0IEFycmF5T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0
ICZhcmdzKQorT2JqZWN0SW1wICpBcnJheU9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgLy8gYSBzaW5nbGUgbnVtZXJpYyBhcmd1bWVu
dCBkZW5vdGVzIHRoZSBhcnJheSBzaXplICghKQotICBpZiAoYXJncy5zaXplKCkgPT0gMSAmJiBh
cmdzWzBdLnR5cGUoKSA9PSBOdW1iZXJUeXBlKSB7Ci0gICAgdWludDMyX3QgbiA9IGFyZ3NbMF0u
dG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKG4gIT0gYXJnc1swXS50b051bWJlcihleGVjKSkgewot
ICAgICAgT2JqZWN0IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAiQXJy
YXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTsKKyAgaWYg
KGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS0+aXNOdW1iZXIoKSkgeworICAgIHVpbnQzMl90
IG4gPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKKyAgICBpZiAobiAhPSBhcmdzWzBdLT50b051
bWJlcihleGVjKSkgeworICAgICAgT2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhl
YywgUmFuZ2VFcnJvciwgIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZl
IGludGVnZXIuIik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgcmV0
dXJuIGVycm9yOwogICAgIH0KLSAgICByZXR1cm4gT2JqZWN0KG5ldyBBcnJheUluc3RhbmNlSW1w
KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXlQcm90b3R5cGUoKS5pbXAo
KSwgbikpOworICAgIHJldHVybiBuZXcgQXJyYXlJbnN0YW5jZUltcChleGVjLT5sZXhpY2FsSW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5UHJvdG90eXBlKCksIG4pOwogICB9CiAKICAgLy8gb3Ro
ZXJ3aXNlIHRoZSBhcnJheSBpcyBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBhcmd1bWVudHMgaW4gaXQK
LSAgcmV0dXJuIE9iamVjdChuZXcgQXJyYXlJbnN0YW5jZUltcChleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbkFycmF5UHJvdG90eXBlKCkuaW1wKCksIGFyZ3MpKTsKKyAgcmV0dXJu
IG5ldyBBcnJheUluc3RhbmNlSW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGlu
QXJyYXlQcm90b3R5cGUoKSwgYXJncyk7CiB9CiAKIGJvb2wgQXJyYXlPYmplY3RJbXA6OmltcGxl
bWVudHNDYWxsKCkgY29uc3QKQEAgLTkwMSw3ICs4OTMsNyBAQCBib29sIEFycmF5T2JqZWN0SW1w
OjppbXBsZW1lbnRzQ2FsbCgpIGNvCiB9CiAKIC8vIEVDTUEgMTUuNi4xCi1WYWx1ZSBBcnJheU9i
amVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8sIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQXJyYXlPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykK
IHsKICAgLy8gZXF1aXZhbGVudCB0byAnbmV3IEFycmF5KC4uLi4pJwogICByZXR1cm4gY29uc3Ry
dWN0KGV4ZWMsYXJncyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9v
YmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC1wIC11IC11IC1wIC1yMS4x
NCBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9hcnJheV9vYmplY3QuaAkyNSBKdWwgMjAwNSAyMjoxNzoxMiAtMDAwMAkxLjE0CisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApA
QCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEFycmF5UHJv
dG90eXBlSW1wKEV4ZWNTdGF0ZSAqZXhlYywKICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQ
cm90b3R5cGVJbXAgKm9ialByb3RvKTsKLSAgICBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKKyAgICBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0OwogICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgfTsKQEAgLTQxLDcgKzQxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJyYXlQcm90b0Z1bmNJbXAoRXhlY1N0YXRlICpleGVj
LCBpbnQgaSwgaW50IGxlbik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKTsKIAogICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcsIENvbmNhdCwgSm9p
biwgUG9wLCBQdXNoLAogICAgICAgICAgIFJldmVyc2UsIFNoaWZ0LCBTbGljZSwgU29ydCwgU3Bs
aWNlLCBVblNoaWZ0LCAKQEAgLTU3LDkgKzU3LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVJbXAgKmFycmF5UHJvdG8pOwogCiAgICAgdmlydHVh
bCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBj
b25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFs
IE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7
CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBW
YWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgfTsKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC11IC1wIC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9r
anMvYm9vbF9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmplY3QuY3Bw
CTE0IEp1bCAyMDA1IDE4OjI3OjAxIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9i
b29sX29iamVjdC5jcHAJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApAQCAtNTAsNyArNTAsNiBA
QCBCb29sZWFuUHJvdG90eXBlSW1wOjpCb29sZWFuUHJvdG90eXBlSW1wCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJv
dG8pCiAgIDogQm9vbGVhbkluc3RhbmNlSW1wKG9iamVjdFByb3RvKQogewotICBWYWx1ZSBwcm90
ZWN0KHRoaXMpOwogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciBieSBJ
bnRlcnByZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoKQogCiAgIHB1dERpcmVjdCh0b1N0cmluZ1By
b3BlcnR5TmFtZSwgbmV3IEJvb2xlYW5Qcm90b0Z1bmNJbXAoZXhlYyxmdW5jUHJvdG8sQm9vbGVh
blByb3RvRnVuY0ltcDo6VG9TdHJpbmcsMCksIERvbnRFbnVtKTsKQEAgLTY1LDcgKzY0LDYgQEAg
Qm9vbGVhblByb3RvRnVuY0ltcDo6Qm9vbGVhblByb3RvRnVuY0ltcAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3Rv
LCBpbnQgaSwgaW50IGxlbikKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90byksIGlk
KGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0
eU5hbWUsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9CiAKQEAgLTc3LDIz
ICs3NSwyMyBAQCBib29sIEJvb2xlYW5Qcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsCiAKIAog
Ly8gRUNNQSAxNS42LjQuMiArIDE1LjYuNC4zCi1WYWx1ZSBCb29sZWFuUHJvdG9GdW5jSW1wOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYvKmFyZ3Mq
LykKK1ZhbHVlSW1wICpCb29sZWFuUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmLyphcmdzKi8pCiB7CiAg
IC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24uICJ0aGlzIiBoYXMgdG8gYmUgYSBCb29sZWFuIG9iamVj
dAotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5jZUltcDo6aW5mbykpIHsK
LSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5jZUltcDo6aW5mbykpIHsKKyAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KIAogICAvLyBleGVjdXRlICJ0
b1N0cmluZygpIiBvciAidmFsdWVPZigpIiwgcmVzcGVjdGl2ZWx5CiAKLSAgVmFsdWUgdiA9IHRo
aXNPYmouaW50ZXJuYWxWYWx1ZSgpOwotICBhc3NlcnQoIXYuaXNOdWxsKCkpOworICBWYWx1ZUlt
cCAqdiA9IHRoaXNPYmotPmludGVybmFsVmFsdWUoKTsKKyAgYXNzZXJ0KHYpOwogCiAgIGlmIChp
ZCA9PSBUb1N0cmluZykKLSAgICByZXR1cm4gU3RyaW5nKHYudG9TdHJpbmcoZXhlYykpOwotICBy
ZXR1cm4gQm9vbGVhbih2LnRvQm9vbGVhbihleGVjKSk7IC8qIFRPRE86IG9wdGltaXplIGZvciBi
b29sIGNhc2UgKi8KKyAgICByZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgcmV0
dXJuIEJvb2xlYW4odi0+dG9Cb29sZWFuKGV4ZWMpKTsgLyogVE9ETzogb3B0aW1pemUgZm9yIGJv
b2wgY2FzZSAqLwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQm9vbGVh
bk9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAzLDExICsxMDEs
MTAgQEAgQm9vbGVhbk9iamVjdEltcDo6Qm9vbGVhbk9iamVjdEltcChFeGVjUwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlSW1wICpib29sZWFuUHJv
dG8pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3Rl
Y3QodGhpcyk7CiAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIGJvb2xlYW5Qcm90
bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgLy8gbm8uIG9mIGFyZ3VtZW50
cyBmb3IgY29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVy
SW1wOjpvbmUoKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERpcmVjdChs
ZW5ndGhQcm9wZXJ0eU5hbWUsIGpzT25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0p
OwogfQogCiAKQEAgLTExNywxNyArMTE0LDE3IEBAIGJvb2wgQm9vbGVhbk9iamVjdEltcDo6aW1w
bGVtZW50c0NvbnN0cnUKIH0KIAogLy8gRUNNQSAxNS42LjIKLU9iamVjdCBCb29sZWFuT2JqZWN0
SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQorT2JqZWN0
SW1wICpCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICZhcmdzKQogewotICBPYmplY3Qgb2JqKG5ldyBCb29sZWFuSW5zdGFuY2VJbXAoZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkuaW1wKCkpKTsK
KyAgT2JqZWN0SW1wICpvYmoobmV3IEJvb2xlYW5JbnN0YW5jZUltcChleGVjLT5sZXhpY2FsSW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKSkpOwogCi0gIEJvb2xlYW4gYjsK
KyAgYm9vbCBiOwogICBpZiAoYXJncy5zaXplKCkgPiAwKQotICAgIGIgPSBhcmdzLmJlZ2luKCkt
PmRpc3BhdGNoVG9Cb29sZWFuKGV4ZWMpOworICAgIGIgPSBhcmdzLmJlZ2luKCktPnRvQm9vbGVh
bihleGVjKTsKICAgZWxzZQotICAgIGIgPSBCb29sZWFuKGZhbHNlKTsKKyAgICBiID0gZmFsc2U7
CiAKLSAgb2JqLnNldEludGVybmFsVmFsdWUoYik7CisgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShq
c0Jvb2xlYW4oYikpOwogCiAgIHJldHVybiBvYmo7CiB9CkBAIC0xMzgsMTEgKzEzNSwxMSBAQCBi
b29sIEJvb2xlYW5PYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkgCiB9CiAKIC8vIEVDTUEgMTUu
Ni4xCi1WYWx1ZSBCb29sZWFuT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpCb29sZWFuT2JqZWN0
SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0aGlzT2Jq
Ki8sIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIGlmIChhcmdzLmlzRW1wdHkoKSkKICAgICByZXR1
cm4gQm9vbGVhbihmYWxzZSk7CiAgIGVsc2UKLSAgICByZXR1cm4gQm9vbGVhbihhcmdzWzBdLnRv
Qm9vbGVhbihleGVjKSk7IC8qIFRPRE86IG9wdGltaXplIGZvciBib29sIGNhc2UgKi8KKyAgICBy
ZXR1cm4gQm9vbGVhbihhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykpOyAvKiBUT0RPOiBvcHRpbWl6
ZSBmb3IgYm9vbCBjYXNlICovCiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ib29sX29i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMv
Ym9vbF9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXUgLXAg
LXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9ib29sX29iamVjdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAxIC0wMDAwCTEuNQorKysgSmF2
YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApA
QCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGludCBpLCBpbnQgbGVuKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUg
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7
CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgZW51bSB7IFRvU3Ry
aW5nLCBWYWx1ZU9mIH07CiAgIHByaXZhdGU6CkBAIC03OSwxMCArNzksMTAgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlSW1wICpib29sZWFu
UHJvdG8pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0
ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKTsKICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvY29sbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC1w
IC11IC11IC1wIC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAotLS0gSmF2
YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMSBBdWcgMjAwNSAwNTowMjoxMiAtMDAwMAkx
LjQwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0
OjA2IC0wMDAwCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtTdGFja09i
amVjdHNDb25zZXJ2YQogICAgICAgfQogICAgICAgCiAgICAgICBpZiAoZ29vZCAmJiAoKENvbGxl
Y3RvckNlbGwgKil4KS0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVlICE9IDApIHsKLQlWYWx1ZUltcCAq
aW1wID0gKFZhbHVlSW1wICopeDsKKwlBbGxvY2F0ZWRWYWx1ZUltcCAqaW1wID0gKEFsbG9jYXRl
ZFZhbHVlSW1wICopeDsKIAlpZiAoIWltcC0+bWFya2VkKCkpCiAJICBpbXAtPm1hcmsoKTsKICAg
ICAgIH0KQEAgLTM3MCwxNCArMzcwLDE0IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICAg
ICAgIH0KIAogICAgICAgQ29sbGVjdG9yQ2VsbCAqY2VsbCA9IGN1ckJsb2NrLT5jZWxscyArIGk7
Ci0gICAgICBWYWx1ZUltcCAqaW1wID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZUltcCAqPihjZWxs
KTsKKyAgICAgIEFsbG9jYXRlZFZhbHVlSW1wICppbXAgPSByZWludGVycHJldF9jYXN0PEFsbG9j
YXRlZFZhbHVlSW1wICo+KGNlbGwpOwogCiAgICAgICBpZiAoY2VsbC0+dS5mcmVlQ2VsbC56ZXJv
SWZGcmVlICE9IDApIHsKLQlpZiAoIWltcC0+X21hcmtlZCkKKwlpZiAoIWltcC0+bV9tYXJrZWQp
CiAJewotCSAgLy9mcHJpbnRmKHN0ZGVyciwgIkNvbGxlY3Rvcjo6ZGVsZXRpbmcgVmFsdWVJbXAg
JXAgKCVzKVxuIiwgaW1wLCBjbGFzc05hbWUoaW1wKSk7CisJICAvL2ZwcmludGYoc3RkZXJyLCAi
Q29sbGVjdG9yOjpkZWxldGluZyBBbGxvY2F0ZWRWYWx1ZUltcCAlcCAoJXMpXG4iLCBpbXAsIGNs
YXNzTmFtZShpbXApKTsKIAkgIC8vIGVtdWxhdGUgZGVzdHJ1Y3RpbmcgcGFydCBvZiAnb3BlcmF0
b3IgZGVsZXRlKCknCi0JICBpbXAtPn5WYWx1ZUltcCgpOworCSAgaW1wLT5+QWxsb2NhdGVkVmFs
dWVJbXAoKTsKIAkgIGN1ckJsb2NrLT51c2VkQ2VsbHMtLTsKIAkgIG51bUxpdmVPYmplY3RzLS07
CiAJICBkZWxldGVkID0gdHJ1ZTsKQEAgLTM4OCw3ICszODgsNyBAQCBib29sIENvbGxlY3Rvcjo6
Y29sbGVjdCgpCiAJICBjdXJCbG9jay0+ZnJlZUxpc3QgPSBjZWxsOwogCiAJfSBlbHNlIHsKLQkg
IGltcC0+X21hcmtlZCA9IGZhbHNlOworCSAgaW1wLT5tX21hcmtlZCA9IGZhbHNlOwogCX0KICAg
ICAgIH0gZWxzZSB7CiAJbWluaW11bUNlbGxzVG9Qcm9jZXNzKys7CkBAIC00MjIsMTAgKzQyMiwx
MCBAQCBib29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAgIAogICBpbnQgY2VsbCA9IDA7CiAgIHdo
aWxlIChjZWxsIDwgaGVhcC51c2VkT3ZlcnNpemVDZWxscykgewotICAgIFZhbHVlSW1wICppbXAg
PSAoVmFsdWVJbXAgKiloZWFwLm92ZXJzaXplQ2VsbHNbY2VsbF07CisgICAgQWxsb2NhdGVkVmFs
dWVJbXAgKmltcCA9IChBbGxvY2F0ZWRWYWx1ZUltcCAqKWhlYXAub3ZlcnNpemVDZWxsc1tjZWxs
XTsKICAgICAKLSAgICBpZiAoIWltcC0+X21hcmtlZCkgewotICAgICAgaW1wLT5+VmFsdWVJbXAo
KTsKKyAgICBpZiAoIWltcC0+bV9tYXJrZWQpIHsKKyAgICAgIGltcC0+fkFsbG9jYXRlZFZhbHVl
SW1wKCk7CiAjaWYgREVCVUdfQ09MTEVDVE9SCiAgICAgICBoZWFwLm92ZXJzaXplQ2VsbHNbY2Vs
bF0tPnUuZnJlZUNlbGwuemVyb0lmRnJlZSA9IDA7CiAjZWxzZQpAQCAtNDQ1LDcgKzQ0NSw3IEBA
IGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICAgICAgIH0KIAogICAgIH0gZWxzZSB7Ci0gICAg
ICBpbXAtPl9tYXJrZWQgPSBmYWxzZTsKKyAgICAgIGltcC0+bV9tYXJrZWQgPSBmYWxzZTsKICAg
ICAgIGNlbGwrKzsKICAgICB9CiAgIH0KQEAgLTUwOCw3ICs1MDgsNyBAQCBpbnQgQ29sbGVjdG9y
OjpudW1SZWZlcmVuY2VkT2JqZWN0cygpCiBzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NOYW1lKFZh
bHVlSW1wICp2YWwpCiB7CiAgIGNvbnN0IGNoYXIgKm5hbWUgPSAiPz8/IjsKLSAgc3dpdGNoICh2
YWwtPmRpc3BhdGNoVHlwZSgpKSB7CisgIHN3aXRjaCAodmFsLT50eXBlKCkpIHsKICAgICBjYXNl
IFVuc3BlY2lmaWVkVHlwZToKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVW5kZWZpbmVkVHlwZToK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9jb21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9jb21wbGV0aW9uLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTAgSmF2YVNjcmlwdENvcmUva2pz
L2NvbXBsZXRpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbXBsZXRpb24uaAkxNCBKdWwg
MjAwNSAxODoyNzowMSAtMDAwMAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29tcGxldGlv
bi5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDYgLTAwMDAKQEAgLTQ3LDE3ICs0NywxNiBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICovCiAgIGNsYXNzIENvbXBsZXRpb24gewogICBwdWJsaWM6Ci0gICAgQ29t
cGxldGlvbihDb21wbFR5cGUgYyA9IE5vcm1hbCwgY29uc3QgVmFsdWUmIHYgPSBWYWx1ZSgpLAot
ICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciAmdCA9IElkZW50aWZpZXI6Om51bGwoKSkK
KyAgICBDb21wbGV0aW9uKENvbXBsVHlwZSBjID0gTm9ybWFsLCBWYWx1ZUltcCAqdiA9IE5VTEws
IGNvbnN0IElkZW50aWZpZXIgJnQgPSBJZGVudGlmaWVyOjpudWxsKCkpCiAgICAgICAgIDogY29t
cChjKSwgdmFsKHYpLCB0YXIodCkgeyB9CiAKICAgICBDb21wbFR5cGUgY29tcGxUeXBlKCkgY29u
c3QgeyByZXR1cm4gY29tcDsgfQotICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFs
OyB9CisgICAgVmFsdWVJbXAgKnZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CiAgICAgSWRl
bnRpZmllciB0YXJnZXQoKSBjb25zdCB7IHJldHVybiB0YXI7IH0KLSAgICBib29sIGlzVmFsdWVD
b21wbGV0aW9uKCkgY29uc3QgeyByZXR1cm4gIXZhbC5pc051bGwoKTsgfQorICAgIGJvb2wgaXNW
YWx1ZUNvbXBsZXRpb24oKSBjb25zdCB7IHJldHVybiB2YWw7IH0KICAgcHJpdmF0ZToKICAgICBD
b21wbFR5cGUgY29tcDsKLSAgICBWYWx1ZSB2YWw7CisgICAgVmFsdWVJbXAgKnZhbDsKICAgICBJ
ZGVudGlmaWVyIHRhcjsKICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2NvbnRl
eHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC11IC1wIC1yMS4xMSBK
YXZhU2NyaXB0Q29yZS9ranMvY29udGV4dC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29udGV4
dC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAxIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9jb250ZXh0LmgJNyBBdWcgMjAwNSAwNDo0NDowNiAtMDAwMApAQCAtMzUsMjEgKzM1LDIxIEBA
IG5hbWVzcGFjZSBLSlMgIHsKICAgICovCiAgIGNsYXNzIENvbnRleHRJbXAgewogICBwdWJsaWM6
Ci0gICAgQ29udGV4dEltcChPYmplY3QgJmdsb2IsIEludGVycHJldGVySW1wICosIE9iamVjdCAm
dGhpc1YsIENvZGVUeXBlIHR5cGUgPSBHbG9iYWxDb2RlLAorICAgIENvbnRleHRJbXAoT2JqZWN0
SW1wICpnbG9iLCBJbnRlcnByZXRlckltcCAqLCBPYmplY3RJbXAgKnRoaXNWLCBDb2RlVHlwZSB0
eXBlID0gR2xvYmFsQ29kZSwKICAgICAgICAgICAgICAgIENvbnRleHRJbXAgKmNhbGxpbmdDb250
ZXh0ID0gMCwgRnVuY3Rpb25JbXAgKmZ1bmN0aWlvbiA9IDAsIGNvbnN0IExpc3QgKmFyZ3MgPSAw
KTsKICAgICB+Q29udGV4dEltcCgpOwogCiAgICAgY29uc3QgU2NvcGVDaGFpbiAmc2NvcGVDaGFp
bigpIGNvbnN0IHsgcmV0dXJuIHNjb3BlOyB9CiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJl
dHVybiBtX2NvZGVUeXBlOyB9Ci0gICAgT2JqZWN0IHZhcmlhYmxlT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gdmFyaWFibGU7IH0KLSAgICB2b2lkIHNldFZhcmlhYmxlT2JqZWN0KGNvbnN0IE9iamVj
dCAmdikgeyB2YXJpYWJsZSA9IHY7IH0KLSAgICBPYmplY3QgdGhpc1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gdGhpc1ZhbDsgfQorICAgIE9iamVjdEltcCAqdmFyaWFibGVPYmplY3QoKSBjb25zdCB7
IHJldHVybiB2YXJpYWJsZTsgfQorICAgIHZvaWQgc2V0VmFyaWFibGVPYmplY3QoT2JqZWN0SW1w
ICp2KSB7IHZhcmlhYmxlID0gdjsgfQorICAgIE9iamVjdEltcCAqdGhpc1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1ZhbDsgfQogICAgIENvbnRleHRJbXAgKmNhbGxpbmdDb250ZXh0KCkgeyBy
ZXR1cm4gX2NhbGxpbmdDb250ZXh0OyB9Ci0gICAgT2JqZWN0SW1wICphY3RpdmF0aW9uT2JqZWN0
KCkgeyByZXR1cm4gYWN0aXZhdGlvbi5pbXAoKTsgfQorICAgIE9iamVjdEltcCAqYWN0aXZhdGlv
bk9iamVjdCgpIHsgcmV0dXJuIGFjdGl2YXRpb247IH0KICAgICBGdW5jdGlvbkltcCAqZnVuY3Rp
b24oKSBjb25zdCB7IHJldHVybiBfZnVuY3Rpb247IH0KICAgICBjb25zdCBMaXN0ICphcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBfYXJndW1lbnRzOyB9CiAKLSAgICB2b2lkIHB1c2hTY29wZShj
b25zdCBPYmplY3QgJnMpIHsgc2NvcGUucHVzaChzLmltcCgpKTsgfQorICAgIHZvaWQgcHVzaFNj
b3BlKE9iamVjdEltcCAqcykgeyBzY29wZS5wdXNoKHMpOyB9CiAgICAgdm9pZCBwb3BTY29wZSgp
IHsgc2NvcGUucG9wKCk7IH0KICAgICBMYWJlbFN0YWNrICpzZWVuTGFiZWxzKCkgeyByZXR1cm4g
JmxzOyB9CiAgICAgCkBAIC02MywxMSArNjMsMTEgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgIC8v
IGJlY2F1c2UgQ29udGV4dEltcCBpcyBhbHdheXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywKICAg
ICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb3RlY3QgdmFyaW91cyBwb2ludGVycyBmcm9tIGNv
bnNlcnZhdGl2ZQogICAgIC8vIEdDIHNpbmNlIHRoZXkgd2lsbCBiZSBjYXVnaHQgYnkgdGhlIGNv
bnNlcnZhdGl2ZSBzd2VlcCBhbnl3YXkhCi0gICAgT2JqZWN0IGFjdGl2YXRpb247CisgICAgT2Jq
ZWN0SW1wICphY3RpdmF0aW9uOwogICAgIAogICAgIFNjb3BlQ2hhaW4gc2NvcGU7Ci0gICAgT2Jq
ZWN0IHZhcmlhYmxlOwotICAgIE9iamVjdCB0aGlzVmFsOworICAgIE9iamVjdEltcCAqdmFyaWFi
bGU7CisgICAgT2JqZWN0SW1wICp0aGlzVmFsOwogCiAgICAgTGFiZWxTdGFjayBsczsKICAgICBD
b2RlVHlwZSBtX2NvZGVUeXBlOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Rh
dGVfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC1wIC11IC11IC1w
IC1yMS40NyBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCTI3IEp1bCAyMDA1IDE5OjU0OjE0IC0wMDAwCTEuNDcK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJNyBBdWcgMjAwNSAwNDo0NDow
NiAtMDAwMApAQCAtMjY5LDEyICsyNjksMTIgQEAgc3RhdGljIFVTdHJpbmcgZm9ybWF0TG9jYWxl
RGF0ZShLSlM6OkV4ZQogICAgIFVTdHJpbmcJYXJnMVN0cmluZzsKICAgICBib29sCXVzZUN1c3Rv
bUZvcm1hdCA9IGZhbHNlOwogICAgIFVTdHJpbmcJY3VzdG9tRm9ybWF0U3RyaW5nOwotICAgIGFy
ZzBTdHJpbmcgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOworICAgIGFyZzBTdHJpbmcgPSBhcmdz
WzBdLT50b1N0cmluZyhleGVjKTsKICAgICBpZiAoKGFyZzBTdHJpbmcgPT0gImN1c3RvbSIpICYm
IChhcmdDb3VudCA+PSAyKSkgewogCXVzZUN1c3RvbUZvcm1hdCA9IHRydWU7Ci0JY3VzdG9tRm9y
bWF0U3RyaW5nID0gYXJnc1sxXS50b1N0cmluZyhleGVjKTsKKwljdXN0b21Gb3JtYXRTdHJpbmcg
PSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsKICAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRlICYm
IGluY2x1ZGVUaW1lICYmIChhcmdDb3VudCA+PSAyKSkgewotCWFyZzFTdHJpbmcgPSBhcmdzWzFd
LnRvU3RyaW5nKGV4ZWMpOworCWFyZzFTdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKTsK
IAlkYXRlU3R5bGUgPSBzdHlsZUZyb21BcmdTdHJpbmcoYXJnMFN0cmluZyxkYXRlU3R5bGUpOwog
CXRpbWVTdHlsZSA9IHN0eWxlRnJvbUFyZ1N0cmluZyhhcmcxU3RyaW5nLHRpbWVTdHlsZSk7CiAg
ICAgfSBlbHNlIGlmIChpbmNsdWRlRGF0ZSAmJiAoYXJnQ291bnQgPj0gMSkpIHsKQEAgLTMwOCw3
ICszMDgsNyBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEtKUzo6RXhlCiAKICNl
bmRpZiAvLyBBUFBMRV9DSEFOR0VTCiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM7CituYW1lc3BhY2Ug
S0pTIHsKIAogc3RhdGljIGludCBkYXkoZG91YmxlIHQpCiB7CkBAIC0zOTksMTcgKzM5OSwxNyBA
QCBzdGF0aWMgZG91YmxlIHRpbWVGcm9tQXJncyhFeGVjU3RhdGUgKmV4CiAgICAgLy8gaG91cnMK
ICAgICBpZiAobWF4QXJncyA+PSA0ICYmIGlkeCA8IG51bUFyZ3MpIHsKICAgICAgICAgdC0+dG1f
aG91ciA9IDA7Ci0gICAgICAgIHJlc3VsdCA9IGFyZ3NbaWR4KytdLnRvSW50MzIoZXhlYykgKiBt
c1BlckhvdXI7CisgICAgICAgIHJlc3VsdCA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMpICog
bXNQZXJIb3VyOwogICAgIH0KICAgICAvLyBtaW51dGVzCiAgICAgaWYgKG1heEFyZ3MgPj0gMyAm
JiBpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIHQtPnRtX21pbiA9IDA7Ci0gICAgICAgIHJlc3Vs
dCArPSBhcmdzW2lkeCsrXS50b0ludDMyKGV4ZWMpICogbXNQZXJNaW51dGU7CisgICAgICAgIHJl
c3VsdCArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKSAqIG1zUGVyTWludXRlOwogICAgIH0K
ICAgICAvLyBzZWNvbmRzCiAgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1BcmdzKSB7
CiAgICAgICAgIHQtPnRtX3NlYyA9IDA7Ci0gICAgICAgIHJlc3VsdCArPSBhcmdzW2lkeCsrXS50
b0ludDMyKGV4ZWMpICogbXNQZXJTZWNvbmQ7CisgICAgICAgIHJlc3VsdCArPSBhcmdzW2lkeCsr
XS0+dG9JbnQzMihleGVjKSAqIG1zUGVyU2Vjb25kOwogICAgIH0KICAgICAvLyByZWFkIG1zIGZy
b20gYXJncyBpZiBwcmVzZW50IG9yIGFkZCB0aGUgb2xkIHZhbHVlCiAgICAgcmVzdWx0ICs9IGlk
eCA8IG51bUFyZ3MgPyByb3VuZFZhbHVlKGV4ZWMsIGFyZ3NbaWR4XSkgOiBtczsKQEAgLTQ4NSwx
MiArNDg1LDExIEBAIERhdGVQcm90b3R5cGVJbXA6OkRhdGVQcm90b3R5cGVJbXAoRXhlY1MKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90eXBlSW1wICpvYmpl
Y3RQcm90bykKICAgOiBEYXRlSW5zdGFuY2VJbXAob2JqZWN0UHJvdG8pCiB7Ci0gIFZhbHVlIHBy
b3RlY3QodGhpcyk7Ci0gIHNldEludGVybmFsVmFsdWUoTnVtYmVySW1wOjpjcmVhdGUoTmFOKSk7
CisgIHNldEludGVybmFsVmFsdWUoanNOYU4oKSk7CiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxs
IGJlIGFkZGVkIGxhdGVyLCBhZnRlciBEYXRlT2JqZWN0SW1wIGhhcyBiZWVuIGJ1aWx0CiB9CiAK
LWJvb2wgRGF0ZVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29s
IERhdGVQcm90b3R5cGVJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0CiB7CiAg
IHJldHVybiBsb29rdXBHZXRPd25GdW5jdGlvbjxEYXRlUHJvdG9GdW5jSW1wLCBPYmplY3RJbXA+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgJmRhdGVUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KQEAgLTQ5
OSwxMSArNDk4LDEwIEBAIGJvb2wgRGF0ZVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXgK
IAogRGF0ZVByb3RvRnVuY0ltcDo6RGF0ZVByb3RvRnVuY0ltcChFeGVjU3RhdGUgKmV4ZWMsIGlu
dCBpLCBpbnQgbGVuKQogICA6IEludGVybmFsRnVuY3Rpb25JbXAoCi0gICAgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25Qcm90b3R5cGVJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bkZ1bmN0aW9uUHJvdG90eXBlKCkuaW1wKCkpCisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Qcm90
b3R5cGVJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJv
dG90eXBlKCkpCiAgICAgKSwgaWQoYWJzKGkpKSwgdXRjKGk8MCkKICAgLy8gV2UgdXNlIGEgbmVn
YXRpdmUgSUQgdG8gZGVub3RlIHRoZSAiVVRDIiB2YXJpYW50LgogewotICBWYWx1ZSBwcm90ZWN0
KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8
UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC01MTIsMjEgKzUxMCwyMSBAQCBib29sIERhdGVQ
cm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKCkgCiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1
ZSBEYXRlUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRhdGVQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewogICBpZiAoKGlkID09IFRvU3RyaW5nIHx8IGlkID09IFZhbHVlT2YgfHwgaWQgPT0g
R2V0VGltZSB8fCBpZCA9PSBTZXRUaW1lKSAmJgotICAgICAgIXRoaXNPYmouaW5oZXJpdHMoJkRh
dGVJbnN0YW5jZUltcDo6aW5mbykpIHsKKyAgICAgICF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUlu
c3RhbmNlSW1wOjppbmZvKSkgewogICAgIC8vIG5vbi1nZW5lcmljIGZ1bmN0aW9uIGNhbGxlZCBv
biBub24tZGF0ZSBvYmplY3QKIAogICAgIC8vIFRvU3RyaW5nIGFuZCBWYWx1ZU9mIGFyZSBnZW5l
cmljIGFjY29yZGluZyB0byB0aGUgc3BlYywgYnV0IHRoZSBtb3ppbGxhCiAgICAgLy8gdGVzdHMg
c3VnZ2VzdCBvdGhlcndpc2UuLi4KLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwog
ICB9CiAKIAotICBWYWx1ZSByZXN1bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQgPSBOVUxMOwogICBV
U3RyaW5nIHM7CiAjaWYgIUFQUExFX0NIQU5HRVMKICAgY29uc3QgaW50IGJ1ZnNpemU9MTAwOwpA
QCAtNTM1LDggKzUzMyw4IEBAIFZhbHVlIERhdGVQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
ICoKICAgaWYgKCFvbGRsb2NhbGUuY19zdHIoKSkKICAgICBvbGRsb2NhbGUgPSBzZXRsb2NhbGUo
TENfQUxMLCBOVUxMKTsKICNlbmRpZgotICBWYWx1ZSB2ID0gdGhpc09iai5pbnRlcm5hbFZhbHVl
KCk7Ci0gIGRvdWJsZSBtaWxsaSA9IHYudG9OdW1iZXIoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0g
dGhpc09iai0+aW50ZXJuYWxWYWx1ZSgpOworICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihl
eGVjKTsKICAgCiAgIGlmIChpc05hTihtaWxsaSkpIHsKICAgICBzd2l0Y2ggKGlkKSB7CkBAIC01
NjEsNyArNTU5LDcgQEAgVmFsdWUgRGF0ZVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKgog
ICAgICAgY2FzZSBHZXRTZWNvbmRzOgogICAgICAgY2FzZSBHZXRNaWxsaVNlY29uZHM6CiAgICAg
ICBjYXNlIEdldFRpbWV6b25lT2Zmc2V0OgotICAgICAgICByZXR1cm4gTnVtYmVyKE5hTik7Cisg
ICAgICAgIHJldHVybiBqc05hTigpOwogICAgIH0KICAgfQogICAKQEAgLTcwNyw3ICs3MDUsNyBA
QCBWYWx1ZSBEYXRlUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqCiAgIGNhc2UgU2V0VGlt
ZToKICAgICBtaWxsaSA9IHJvdW5kVmFsdWUoZXhlYywgYXJnc1swXSk7CiAgICAgcmVzdWx0ID0g
TnVtYmVyKG1pbGxpKTsKLSAgICB0aGlzT2JqLnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAg
ICB0aGlzT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgYnJlYWs7CiAgIGNhc2Ug
U2V0TWlsbGlTZWNvbmRzOgogICAgIG1zID0gcm91bmRWYWx1ZShleGVjLCBhcmdzWzBdKTsKQEAg
LTcyMywyMiArNzIxLDIyIEBAIFZhbHVlIERhdGVQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
ICoKICAgICBicmVhazsKICAgY2FzZSBTZXREYXRlOgogICAgICAgdC0+dG1fbWRheSA9IDA7Ci0g
ICAgICBtcyArPSBhcmdzWzBdLnRvSW50MzIoZXhlYykgKiBtc1BlckRheTsKKyAgICAgIG1zICs9
IGFyZ3NbMF0tPnRvSW50MzIoZXhlYykgKiBtc1BlckRheTsKICAgICAgIGJyZWFrOwogICBjYXNl
IFNldE1vbnRoOgotICAgIHQtPnRtX21vbiA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAgICB0
LT50bV9tb24gPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpOwogICAgIGlmIChhcmdzLnNpemUoKSA+
PSAyKQotICAgICAgdC0+dG1fbWRheSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIHQt
PnRtX21kYXkgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogICAgIGJyZWFrOwogICBjYXNlIFNl
dEZ1bGxZZWFyOgotICAgIHQtPnRtX3llYXIgPSBhcmdzWzBdLnRvSW50MzIoZXhlYykgLSAxOTAw
OworICAgIHQtPnRtX3llYXIgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMDsKICAgICBp
ZiAoYXJncy5zaXplKCkgPj0gMikKLSAgICAgIHQtPnRtX21vbiA9IGFyZ3NbMV0udG9JbnQzMihl
eGVjKTsKKyAgICAgIHQtPnRtX21vbiA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAgICAgaWYg
KGFyZ3Muc2l6ZSgpID49IDMpCi0gICAgICB0LT50bV9tZGF5ID0gYXJnc1syXS50b0ludDMyKGV4
ZWMpOworICAgICAgdC0+dG1fbWRheSA9IGFyZ3NbMl0tPnRvSW50MzIoZXhlYyk7CiAgICAgYnJl
YWs7CiAgIGNhc2UgU2V0WWVhcjoKLSAgICB0LT50bV95ZWFyID0gYXJnc1swXS50b0ludDMyKGV4
ZWMpID49IDE5MDAgPyBhcmdzWzBdLnRvSW50MzIoZXhlYykgLSAxOTAwIDogYXJnc1swXS50b0lu
dDMyKGV4ZWMpOworICAgIHQtPnRtX3llYXIgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpID49IDE5
MDAgPyBhcmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMCA6IGFyZ3NbMF0tPnRvSW50MzIoZXhl
Yyk7CiAgICAgYnJlYWs7CiAgIH0KIApAQCAtNzQ2LDcgKzc0NCw3IEBAIFZhbHVlIERhdGVQcm90
b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICoKICAgICAgIGlkID09IFNldE1pbnV0ZXMgfHwgaWQg
PT0gU2V0SG91cnMgfHwgaWQgPT0gU2V0RGF0ZSB8fAogICAgICAgaWQgPT0gU2V0TW9udGggfHwg
aWQgPT0gU2V0RnVsbFllYXIgKSB7CiAgICAgcmVzdWx0ID0gTnVtYmVyKG1ha2VUaW1lKHQsIG1z
LCB1dGMpKTsKLSAgICB0aGlzT2JqLnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICB0aGlz
T2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgIH0KICAgCiAgIHJldHVybiByZXN1bHQ7
CkBAIC03NjEsOCArNzU5LDYgQEAgRGF0ZU9iamVjdEltcDo6RGF0ZU9iamVjdEltcChFeGVjU3Rh
dGUgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlUHJvdG90eXBlSW1wICpkYXRl
UHJvdG8pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHBy
b3RlY3QodGhpcyk7Ci0gIAogICAvLyBFQ01BIDE1LjkuNC4xIERhdGUucHJvdG90eXBlCiAgIHB1
dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIGRhdGVQcm90bywgRG9udEVudW18RG9udERl
bGV0ZXxSZWFkT25seSk7CiAKQEAgLTc4MSw3ICs3NzcsNyBAQCBib29sIERhdGVPYmplY3RJbXA6
OmltcGxlbWVudHNDb25zdHJ1Y3QoCiB9CiAKIC8vIEVDTUEgMTUuOS4zCi1PYmplY3QgRGF0ZU9i
amVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK09i
amVjdEltcCAqRGF0ZU9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncykKIHsKICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIApAQCAtODA3LDM4
ICs4MDMsMzcgQEAgT2JqZWN0IERhdGVPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdAogI2Vu
ZGlmCiAgICAgdmFsdWUgPSB1dGM7CiAgIH0gZWxzZSBpZiAobnVtQXJncyA9PSAxKSB7Ci0gICAg
ICBpZiAoYXJnc1swXS50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgICB2YWx1ZSA9IHBh
cnNlRGF0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgIGlmIChhcmdzWzBdLT5pc1N0
cmluZygpKQorICAgICAgICAgIHZhbHVlID0gcGFyc2VEYXRlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpKTsKICAgICAgIGVsc2UKLSAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF0udG9QcmltaXRpdmUo
ZXhlYykudG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLT50b1ByaW1p
dGl2ZShleGVjKS0+dG9OdW1iZXIoZXhlYyk7CiAgIH0gZWxzZSB7CiAgICAgc3RydWN0IHRtIHQ7
CiAgICAgbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOwotICAgIGlmIChpc05hTihhcmdzWzBdLnRv
TnVtYmVyKGV4ZWMpKQotICAgICAgICB8fCBpc05hTihhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKQot
ICAgICAgICB8fCAobnVtQXJncyA+PSAzICYmIGlzTmFOKGFyZ3NbMl0udG9OdW1iZXIoZXhlYykp
KQotICAgICAgICB8fCAobnVtQXJncyA+PSA0ICYmIGlzTmFOKGFyZ3NbM10udG9OdW1iZXIoZXhl
YykpKQotICAgICAgICB8fCAobnVtQXJncyA+PSA1ICYmIGlzTmFOKGFyZ3NbNF0udG9OdW1iZXIo
ZXhlYykpKQotICAgICAgICB8fCAobnVtQXJncyA+PSA2ICYmIGlzTmFOKGFyZ3NbNV0udG9OdW1i
ZXIoZXhlYykpKQotICAgICAgICB8fCAobnVtQXJncyA+PSA3ICYmIGlzTmFOKGFyZ3NbNl0udG9O
dW1iZXIoZXhlYykpKSkgeworICAgIGlmIChpc05hTihhcmdzWzBdLT50b051bWJlcihleGVjKSkK
KyAgICAgICAgfHwgaXNOYU4oYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpCisgICAgICAgIHx8IChu
dW1BcmdzID49IDMgJiYgaXNOYU4oYXJnc1syXS0+dG9OdW1iZXIoZXhlYykpKQorICAgICAgICB8
fCAobnVtQXJncyA+PSA0ICYmIGlzTmFOKGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAg
ICAgfHwgKG51bUFyZ3MgPj0gNSAmJiBpc05hTihhcmdzWzRdLT50b051bWJlcihleGVjKSkpCisg
ICAgICAgIHx8IChudW1BcmdzID49IDYgJiYgaXNOYU4oYXJnc1s1XS0+dG9OdW1iZXIoZXhlYykp
KQorICAgICAgICB8fCAobnVtQXJncyA+PSA3ICYmIGlzTmFOKGFyZ3NbNl0tPnRvTnVtYmVyKGV4
ZWMpKSkpIHsKICAgICAgIHZhbHVlID0gTmFOOwogICAgIH0gZWxzZSB7Ci0gICAgICBpbnQgeWVh
ciA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAgICAgIGludCB5ZWFyID0gYXJnc1swXS0+dG9J
bnQzMihleGVjKTsKICAgICAgIHQudG1feWVhciA9ICh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkg
PyB5ZWFyIDogeWVhciAtIDE5MDA7Ci0gICAgICB0LnRtX21vbiA9IGFyZ3NbMV0udG9JbnQzMihl
eGVjKTsKLSAgICAgIHQudG1fbWRheSA9IChudW1BcmdzID49IDMpID8gYXJnc1syXS50b0ludDMy
KGV4ZWMpIDogMTsKLSAgICAgIHQudG1faG91ciA9IChudW1BcmdzID49IDQpID8gYXJnc1szXS50
b0ludDMyKGV4ZWMpIDogMDsKLSAgICAgIHQudG1fbWluID0gKG51bUFyZ3MgPj0gNSkgPyBhcmdz
WzRdLnRvSW50MzIoZXhlYykgOiAwOwotICAgICAgdC50bV9zZWMgPSAobnVtQXJncyA+PSA2KSA/
IGFyZ3NbNV0udG9JbnQzMihleGVjKSA6IDA7CisgICAgICB0LnRtX21vbiA9IGFyZ3NbMV0tPnRv
SW50MzIoZXhlYyk7CisgICAgICB0LnRtX21kYXkgPSAobnVtQXJncyA+PSAzKSA/IGFyZ3NbMl0t
PnRvSW50MzIoZXhlYykgOiAxOworICAgICAgdC50bV9ob3VyID0gKG51bUFyZ3MgPj0gNCkgPyBh
cmdzWzNdLT50b0ludDMyKGV4ZWMpIDogMDsKKyAgICAgIHQudG1fbWluID0gKG51bUFyZ3MgPj0g
NSkgPyBhcmdzWzRdLT50b0ludDMyKGV4ZWMpIDogMDsKKyAgICAgIHQudG1fc2VjID0gKG51bUFy
Z3MgPj0gNikgPyBhcmdzWzVdLT50b0ludDMyKGV4ZWMpIDogMDsKICAgICAgIHQudG1faXNkc3Qg
PSAtMTsKICAgICAgIGRvdWJsZSBtcyA9IChudW1BcmdzID49IDcpID8gcm91bmRWYWx1ZShleGVj
LCBhcmdzWzZdKSA6IDA7CiAgICAgICB2YWx1ZSA9IG1ha2VUaW1lKCZ0LCBtcywgZmFsc2UpOwog
ICAgIH0KICAgfQogICAKLSAgT2JqZWN0IHByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5EYXRlUHJvdG90eXBlKCk7Ci0gIE9iamVjdCByZXQobmV3IERhdGVJbnN0YW5j
ZUltcChwcm90by5pbXAoKSkpOwotICByZXQuc2V0SW50ZXJuYWxWYWx1ZShOdW1iZXIodGltZUNs
aXAodmFsdWUpKSk7CisgIERhdGVJbnN0YW5jZUltcCAqcmV0ID0gbmV3IERhdGVJbnN0YW5jZUlt
cChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKSk7Cisg
IHJldC0+c2V0SW50ZXJuYWxWYWx1ZShOdW1iZXIodGltZUNsaXAodmFsdWUpKSk7CiAgIHJldHVy
biByZXQ7CiB9CiAKQEAgLTg0OCwxMSArODQzLDggQEAgYm9vbCBEYXRlT2JqZWN0SW1wOjppbXBs
ZW1lbnRzQ2FsbCgpIGNvbgogfQogCiAvLyBFQ01BIDE1LjkuMgotVmFsdWUgRGF0ZU9iamVjdElt
cDo6Y2FsbChFeGVjU3RhdGUgKi8qZXhlYyovLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBM
aXN0ICYvKmFyZ3MqLykKK1ZhbHVlSW1wICpEYXRlT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKi8qZXhlYyovLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYv
KmFyZ3MqLykKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBmcHJpbnRmKHN0ZGVyciwiRGF0ZU9i
amVjdEltcDo6Y2FsbCAtIGN1cnJlbnQgdGltZVxuIik7Ci0jZW5kaWYKICAgdGltZV90IHQgPSB0
aW1lKDBMKTsKICNpZiBBUFBMRV9DSEFOR0VTCiAgIHN0cnVjdCB0bSAqdG0gPSBsb2NhbHRpbWUo
JnQpOwpAQCAtODcxLDcgKzg2Myw2IEBAIERhdGVPYmplY3RGdW5jSW1wOjpEYXRlT2JqZWN0RnVu
Y0ltcChFeGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgaW50
IGxlbikKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90byksIGlkKGkpCiB7Ci0gIFZh
bHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGxlbiwg
RG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9CiAKQEAgLTg4MSwzMSArODcyLDMxIEBA
IGJvb2wgRGF0ZU9iamVjdEZ1bmNJbXA6OmltcGxlbWVudHNDYWxsKCkKIH0KIAogLy8gRUNNQSAx
NS45LjQuMiAtIDMKLVZhbHVlIERhdGVPYmplY3RGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpEYXRl
T2JqZWN0RnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIGlmIChpZCA9PSBQYXJzZSkgewotICAg
IHJldHVybiBOdW1iZXIocGFyc2VEYXRlKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykpKTsKKyAgICBy
ZXR1cm4gTnVtYmVyKHBhcnNlRGF0ZShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogICB9CiAg
IGVsc2UgeyAvLyBVVEMKICAgICBzdHJ1Y3QgdG0gdDsKICAgICBtZW1zZXQoJnQsIDAsIHNpemVv
Zih0KSk7CiAgICAgaW50IG4gPSBhcmdzLnNpemUoKTsKLSAgICBpZiAoaXNOYU4oYXJnc1swXS50
b051bWJlcihleGVjKSkKLSAgICAgICAgfHwgaXNOYU4oYXJnc1sxXS50b051bWJlcihleGVjKSkK
LSAgICAgICAgfHwgKG4gPj0gMyAmJiBpc05hTihhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpKSkKLSAg
ICAgICAgfHwgKG4gPj0gNCAmJiBpc05hTihhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAg
ICAgfHwgKG4gPj0gNSAmJiBpc05hTihhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAg
fHwgKG4gPj0gNiAmJiBpc05hTihhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwg
KG4gPj0gNyAmJiBpc05hTihhcmdzWzZdLnRvTnVtYmVyKGV4ZWMpKSkpIHsKKyAgICBpZiAoaXNO
YU4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpCisgICAgICAgIHx8IGlzTmFOKGFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpKQorICAgICAgICB8fCAobiA+PSAzICYmIGlzTmFOKGFyZ3NbMl0tPnRvTnVt
YmVyKGV4ZWMpKSkKKyAgICAgICAgfHwgKG4gPj0gNCAmJiBpc05hTihhcmdzWzNdLT50b051bWJl
cihleGVjKSkpCisgICAgICAgIHx8IChuID49IDUgJiYgaXNOYU4oYXJnc1s0XS0+dG9OdW1iZXIo
ZXhlYykpKQorICAgICAgICB8fCAobiA+PSA2ICYmIGlzTmFOKGFyZ3NbNV0tPnRvTnVtYmVyKGV4
ZWMpKSkKKyAgICAgICAgfHwgKG4gPj0gNyAmJiBpc05hTihhcmdzWzZdLT50b051bWJlcihleGVj
KSkpKSB7CiAgICAgICByZXR1cm4gTnVtYmVyKE5hTik7CiAgICAgfQotICAgIGludCB5ZWFyID0g
YXJnc1swXS50b0ludDMyKGV4ZWMpOworICAgIGludCB5ZWFyID0gYXJnc1swXS0+dG9JbnQzMihl
eGVjKTsKICAgICB0LnRtX3llYXIgPSAoeWVhciA+PSAwICYmIHllYXIgPD0gOTkpID8geWVhciA6
IHllYXIgLSAxOTAwOwotICAgIHQudG1fbW9uID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOwotICAg
IHQudG1fbWRheSA9IChuID49IDMpID8gYXJnc1syXS50b0ludDMyKGV4ZWMpIDogMTsKLSAgICB0
LnRtX2hvdXIgPSAobiA+PSA0KSA/IGFyZ3NbM10udG9JbnQzMihleGVjKSA6IDA7Ci0gICAgdC50
bV9taW4gPSAobiA+PSA1KSA/IGFyZ3NbNF0udG9JbnQzMihleGVjKSA6IDA7Ci0gICAgdC50bV9z
ZWMgPSAobiA+PSA2KSA/IGFyZ3NbNV0udG9JbnQzMihleGVjKSA6IDA7CisgICAgdC50bV9tb24g
PSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOworICAgIHQudG1fbWRheSA9IChuID49IDMpID8gYXJn
c1syXS0+dG9JbnQzMihleGVjKSA6IDE7CisgICAgdC50bV9ob3VyID0gKG4gPj0gNCkgPyBhcmdz
WzNdLT50b0ludDMyKGV4ZWMpIDogMDsKKyAgICB0LnRtX21pbiA9IChuID49IDUpID8gYXJnc1s0
XS0+dG9JbnQzMihleGVjKSA6IDA7CisgICAgdC50bV9zZWMgPSAobiA+PSA2KSA/IGFyZ3NbNV0t
PnRvSW50MzIoZXhlYykgOiAwOwogICAgIGRvdWJsZSBtcyA9IChuID49IDcpID8gcm91bmRWYWx1
ZShleGVjLCBhcmdzWzZdKSA6IDA7CiAgICAgcmV0dXJuIE51bWJlcihtYWtlVGltZSgmdCwgbXMs
IHRydWUpKTsKICAgfQpAQCAtOTE0LDcgKzkwNSw3IEBAIFZhbHVlIERhdGVPYmplY3RGdW5jSW1w
OjpjYWxsKEV4ZWNTdGF0ZSAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotZG91YmxlIEtK
Uzo6cGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgJnUpCitkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFVT
dHJpbmcgJnUpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAgZnByaW50ZihzdGRlcnIsIktKUzo6
cGFyc2VEYXRlICVzXG4iLHUuYXNjaWkoKSk7CkBAIC0xMDI3LDcgKzEwMTgsNyBAQCBzdGF0aWMg
aW50IGZpbmRNb250aChjb25zdCBjaGFyICptb250aFN0CiAgIHJldHVybiAtMTsKIH0KIAotZG91
YmxlIEtKUzo6S1JGQ0RhdGVfcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgJl9kYXRlKQorZG91Ymxl
IEtSRkNEYXRlX3BhcnNlRGF0ZShjb25zdCBVU3RyaW5nICZfZGF0ZSkKIHsKICAgICAgLy8gVGhp
cyBwYXJzZSBhIGRhdGUgaW4gdGhlIGZvcm06CiAgICAgIC8vICAgICBUdWVzZGF5LCAwOS1Ob3Yt
OTkgMjM6MTI6NDAgR01UCkBAIC0xMzQ0LDcgKzEzMzUsNyBAQCBkb3VibGUgS0pTOjpLUkZDRGF0
ZV9wYXJzZURhdGUoY29uc3QgVVN0CiB9CiAKIAotZG91YmxlIEtKUzo6dGltZUNsaXAoZG91Ymxl
IHQpCitkb3VibGUgdGltZUNsaXAoZG91YmxlIHQpCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh0KSkK
ICAgICAgICAgcmV0dXJuIE5hTjsKQEAgLTEzNTMsMyArMTM0NCw1IEBAIGRvdWJsZSBLSlM6OnRp
bWVDbGlwKGRvdWJsZSB0KQogICAgICAgICByZXR1cm4gTmFOOwogICAgIHJldHVybiBjb3B5c2ln
bihmbG9vcihhdCksIHQpOwogfQorCit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pz
L2RhdGVfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtdSAt
cCAtcjEuMTMgSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9kYXRlX29iamVjdC5oCTI3IEp1bCAyMDA1IDE4OjIyOjEzIC0wMDAwCTEuMTMKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDYgLTAw
MDAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERhdGVQcm90b3R5
cGVJbXAgOiBwdWJsaWMgRGF0ZUluc3RhbmNlSW1wIHsKICAgcHVibGljOgogICAgIERhdGVQcm90
b3R5cGVJbXAoRXhlY1N0YXRlICpleGVjLCBPYmplY3RQcm90b3R5cGVJbXAgKm9iamVjdFByb3Rv
KTsKLSAgICBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComIHJlc3VsdCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwpA
QCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBEYXRlUHJvdG9GdW5jSW1wKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IGksIGludCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncyk7CiAKIAogICAgIENvbXBsZXRpb24gZXhlY3V0ZShjb25zdCBMaXN0
ICYpOwpAQCAtOTEsMTIgKzkxLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgICAg
ICAgRGF0ZVByb3RvdHlwZUltcCAqZGF0ZVByb3RvKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBs
ZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBPYmplY3RJbXAg
KmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICAgIHZpcnR1
YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAg
dmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgQ29tcGxldGlvbiBleGVjdXRl
KGNvbnN0IExpc3QgJik7Ci0gICAgT2JqZWN0IGNvbnN0cnVjdChjb25zdCBMaXN0ICYpOworICAg
IE9iamVjdEltcCAqY29uc3RydWN0KGNvbnN0IExpc3QgJik7CiAgIH07CiAKICAgLyoqCkBAIC0x
MTEsNyArMTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgICAgICAgaW50
IGksIGludCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7
CiAKICAgICBlbnVtIHsgUGFyc2UsIFVUQyB9OwogICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL2RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRp
ZmYgLXAgLXUgLXUgLXAgLXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmNwcAotLS0g
SmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmNwcAkyNyBKdWwgMjAwNSAyMzoxMDo0OSAtMDAw
MAkxLjUKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9kZWJ1Z2dlci5jcHAJNyBBdWcgMjAwNSAwNDo0
NDowNyAtMDAwMApAQCAtOTksNyArOTksNyBAQCBib29sIERlYnVnZ2VyOjpzb3VyY2VVbnVzZWQo
RXhlY1N0YXRlICovCiB9CiAKIGJvb2wgRGVidWdnZXI6OmV4Y2VwdGlvbihFeGVjU3RhdGUgKi8q
ZXhlYyovLCBpbnQgLypzb3VyY2VJZCovLCBpbnQgLypsaW5lbm8qLywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBPYmplY3QgJi8qZXhjZXB0aW9uT2JqKi8pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0SW1wICovKmV4Y2VwdGlvbk9iaiovKQogewogICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTExMSwxMyArMTExLDEzIEBAIGJvb2wgRGVidWdnZXI6OmF0U3RhdGVtZW50KEV4ZWNTdGF0
ZSAqLyoKIH0KIAogYm9vbCBEZWJ1Z2dlcjo6Y2FsbEV2ZW50KEV4ZWNTdGF0ZSAqLypleGVjKi8s
IGludCAvKnNvdXJjZUlkKi8sIGludCAvKmxpbmVubyovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIE9iamVjdCAmLypmdW5jdGlvbiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKi8qZnVuY3Rpb24qLywgY29uc3QgTGlzdCAmLyph
cmdzKi8pCiB7CiAgIHJldHVybiB0cnVlOwogfQogCiBib29sIERlYnVnZ2VyOjpyZXR1cm5FdmVu
dChFeGVjU3RhdGUgKi8qZXhlYyovLCBpbnQgLypzb3VyY2VJZCovLCBpbnQgLypsaW5lbm8qLywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAmLypmdW5jdGlvbiovKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICovKmZ1bmN0aW9uKi8pCiB7CiAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9kZWJ1Z2dlci5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNSBKYXZhU2NyaXB0Q29y
ZS9ranMvZGVidWdnZXIuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmgJMjcgSnVs
IDIwMDUgMjM6MTA6NDkgLTAwMDAJMS41CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZGVidWdnZXIu
aAk3IEF1ZyAyMDA1IDA0OjQ0OjA3IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBjbGFzcyBEZWJ1Z2dlckltcDsKICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgIGNsYXNz
IEV4ZWNTdGF0ZTsKLSAgY2xhc3MgT2JqZWN0OworICBjbGFzcyBPYmplY3RJbXA7CiAgIGNsYXNz
IFVTdHJpbmc7CiAgIGNsYXNzIExpc3Q7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgKiBiZSBhYm9ydGVkCiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGV4Y2Vw
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9iamVjdCAmZXhjZXB0aW9uT2JqKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uT2JqKTsKIAogICAgIC8qKgogICAgICAq
IENhbGxlZCB3aGVuIGEgbGluZSBvZiB0aGUgc2NyaXB0IGlzIHJlYWNoZWQgKGJlZm9yZSBpdCBp
cyBleGVjdXRlZCkKQEAgLTE4MSw3ICsxODEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBi
ZSBhYm9ydGVkCiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGNhbGxFdmVudChFeGVjU3RhdGUg
KmV4ZWMsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubywKLQkJCSAgIE9iamVjdCAmZnVuY3Rpb24s
IGNvbnN0IExpc3QgJmFyZ3MpOworCQkJICAgT2JqZWN0SW1wICpmdW5jdGlvbiwgY29uc3QgTGlz
dCAmYXJncyk7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgb24gZWFjaCBmdW5jdGlvbiBleGl0
LiBUaGUgZnVuY3Rpb24gYmVpbmcgcmV0dXJuZWQgZnJvbSBpcyB0aGF0CkBAIC0yMDIsNyArMjAy
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogYmUgYWJvcnRlZAogICAgICAqLwogICAgIHZp
cnR1YWwgYm9vbCByZXR1cm5FdmVudChFeGVjU3RhdGUgKmV4ZWMsIGludCBzb3VyY2VJZCwgaW50
IGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ICZmdW5jdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZnVuY3Rpb24pOwogCiAg
IHByaXZhdGU6CiAgICAgRGVidWdnZXJJbXAgKnJlcDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9lcnJvcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpk
aWZmIC1wIC11IC11IC1wIC1yMS4xNiBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNw
cAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAJMTggSnVsIDIwMDUgMTc6
NDA6NTQgLTAwMDAJMS4xNgorKysgSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAJ
NyBBdWcgMjAwNSAwNDo0NDowNyAtMDAwMApAQCAtNDcsNyArNDcsNiBAQCBFcnJvclByb3RvdHlw
ZUltcDo6RXJyb3JQcm90b3R5cGVJbXAoRXhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bykKICAgOiBPYmplY3RJbXAo
b2JqZWN0UHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHNldEludGVybmFsVmFs
dWUoVW5kZWZpbmVkKCkpOwogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRl
ciBpbiBFcnJvck9iamVjdEltcCdzIGNvbnN0cnVjdG9yCiAKQEAgLTYxLDggKzYwLDcgQEAgRXJy
b3JQcm90b3R5cGVJbXA6OkVycm9yUHJvdG90eXBlSW1wKEV4ZQogRXJyb3JQcm90b0Z1bmNJbXA6
OkVycm9yUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAg
KmZ1bmNQcm90bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKIHsKLSAgVmFs
dWUgcHJvdGVjdCh0aGlzKTsKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVy
SW1wOjp6ZXJvKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOworICBwdXREaXJlY3Qo
bGVuZ3RoUHJvcGVydHlOYW1lLCBqc1plcm8oKSwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51
bSk7CiB9CiAKIGJvb2wgRXJyb3JQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKCkgY29uc3QK
QEAgLTcwLDE5ICs2OCwxOSBAQCBib29sIEVycm9yUHJvdG9GdW5jSW1wOjppbXBsZW1lbnRzQ2Fs
bCgpCiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1ZSBFcnJvclByb3RvRnVuY0ltcDo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmLyphcmdzKi8pCitW
YWx1ZUltcCAqRXJyb3JQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKIHsKICAgLy8gdG9T
dHJpbmcoKQogICBVU3RyaW5nIHMgPSAiRXJyb3IiOwogCi0gIFZhbHVlIHYgPSB0aGlzT2JqLmdl
dChleGVjLCBuYW1lUHJvcGVydHlOYW1lKTsKLSAgaWYgKHYudHlwZSgpICE9IFVuZGVmaW5lZFR5
cGUpIHsKLSAgICBzID0gdi50b1N0cmluZyhleGVjKTsKKyAgVmFsdWVJbXAgKnYgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgbmFtZVByb3BlcnR5TmFtZSk7CisgIGlmICghdi0+aXNVbmRlZmluZWQoKSkg
eworICAgIHMgPSB2LT50b1N0cmluZyhleGVjKTsKICAgfQogCi0gIHYgPSB0aGlzT2JqLmdldChl
eGVjLCBtZXNzYWdlUHJvcGVydHlOYW1lKTsKLSAgaWYgKHYudHlwZSgpICE9IFVuZGVmaW5lZFR5
cGUpIHsKLSAgICBzICs9ICI6ICIgKyB2LnRvU3RyaW5nKGV4ZWMpOyAvLyBNb3ppbGxhIGNvbXBh
dGlibGUgZm9ybWF0CisgIHYgPSB0aGlzT2JqLT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFt
ZSk7CisgIGlmICghdi0+aXNVbmRlZmluZWQoKSkgeworICAgIHMgKz0gIjogIiArIHYtPnRvU3Ry
aW5nKGV4ZWMpOyAvLyBNb3ppbGxhIGNvbXBhdGlibGUgZm9ybWF0CiAgIH0KIAogICByZXR1cm4g
U3RyaW5nKHMpOwpAQCAtOTQsMTAgKzkyLDkgQEAgRXJyb3JPYmplY3RJbXA6OkVycm9yT2JqZWN0
SW1wKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yUHJvdG90
eXBlSW1wICplcnJvclByb3RvKQogICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKQog
ewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICAvLyBFQ01BIDE1LjExLjMuMSBFcnJvci5wcm90
b3R5cGUKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwgZXJyb3JQcm90bywgRG9u
dEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7Ci0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5h
bWUsIE51bWJlckltcDo6b25lKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOworICBw
dXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBEb250RGVsZXRlfFJlYWRPbmx5
fERvbnRFbnVtKTsKICAgLy9wdXREaXJlY3QobmFtZVByb3BlcnR5TmFtZSwgU3RyaW5nKG4pKTsK
IH0KIApAQCAtMTA3LDE1ICsxMDQsMTQgQEAgYm9vbCBFcnJvck9iamVjdEltcDo6aW1wbGVtZW50
c0NvbnN0cnVjdAogfQogCiAvLyBFQ01BIDE1LjkuMwotT2JqZWN0IEVycm9yT2JqZWN0SW1wOjpj
b25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQorT2JqZWN0SW1wICpF
cnJvck9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgT2JqZWN0IHByb3RvID0gT2JqZWN0OjpkeW5hbWljQ2FzdChleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkVycm9yUHJvdG90eXBlKCkpOwotICBPYmplY3RJbXAgKmlt
cCA9IG5ldyBFcnJvckluc3RhbmNlSW1wKHByb3RvLmltcCgpKTsKLSAgT2JqZWN0IG9iaihpbXAp
OworICBPYmplY3RJbXAgKnByb3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxl
eGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRXJyb3JQcm90b3R5cGUoKSk7CisgIE9iamVjdElt
cCAqaW1wID0gbmV3IEVycm9ySW5zdGFuY2VJbXAocHJvdG8pOworICBPYmplY3RJbXAgKm9iaihp
bXApOwogCi0gIGlmICghYXJncy5pc0VtcHR5KCkgJiYgYXJnc1swXS50eXBlKCkgIT0gVW5kZWZp
bmVkVHlwZSkgewotICAgIGltcC0+cHV0RGlyZWN0KG1lc3NhZ2VQcm9wZXJ0eU5hbWUsIG5ldyBT
dHJpbmdJbXAoYXJnc1swXS50b1N0cmluZyhleGVjKSkpOwotICB9CisgIGlmICghYXJnc1swXS0+
aXNVbmRlZmluZWQoKSkKKyAgICBpbXAtPnB1dERpcmVjdChtZXNzYWdlUHJvcGVydHlOYW1lLCBq
c1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogCiAgIHJldHVybiBvYmo7CiB9CkBA
IC0xMjYsNyArMTIyLDcgQEAgYm9vbCBFcnJvck9iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBj
bwogfQogCiAvLyBFQ01BIDE1LjkuMgotVmFsdWUgRXJyb3JPYmplY3RJbXA6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKkVycm9yT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIC8vICJFcnJvcigpIiBn
aXZlcyB0aGUgc2FtZXMgcmVzdWx0IGFzICJuZXcgRXJyb3IoKSIKICAgcmV0dXJuIGNvbnN0cnVj
dChleGVjLGFyZ3MpOwpAQCAtMTM4LDEwICsxMzQsOSBAQCBOYXRpdmVFcnJvclByb3RvdHlwZUlt
cDo6TmF0aXZlRXJyb3JQcm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXJyb3JUeXBlIGV0LCBVU3RyaW5nIG5hbWUsIFVTdHJpbmcgbWVzc2FnZSkK
ICAgOiBPYmplY3RJbXAoZXJyb3JQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAg
ZXJyVHlwZSA9IGV0OwotICBwdXREaXJlY3QobmFtZVByb3BlcnR5TmFtZSwgbmV3IFN0cmluZ0lt
cChuYW1lKSwgMCk7Ci0gIHB1dERpcmVjdChtZXNzYWdlUHJvcGVydHlOYW1lLCBuZXcgU3RyaW5n
SW1wKG1lc3NhZ2UpLCAwKTsKKyAgcHV0RGlyZWN0KG5hbWVQcm9wZXJ0eU5hbWUsIGpzU3RyaW5n
KG5hbWUpLCAwKTsKKyAgcHV0RGlyZWN0KG1lc3NhZ2VQcm9wZXJ0eU5hbWUsIGpzU3RyaW5nKG1l
c3NhZ2UpLCAwKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5hdGl2
ZUVycm9ySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0OSwxMyArMTQ0
LDEyIEBAIE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wOjpOYXRpdmVFcnJvclByb3QKIGNvbnN0IENs
YXNzSW5mbyBOYXRpdmVFcnJvckltcDo6aW5mbyA9IHsiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5j
dGlvbkltcDo6aW5mbywgMCwgMH07CiAKIE5hdGl2ZUVycm9ySW1wOjpOYXRpdmVFcnJvckltcChF
eGVjU3RhdGUgKmV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT2JqZWN0ICZwcm90KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqcHJvdCkKICAgOiBJbnRlcm5hbEZ1bmN0aW9u
SW1wKGZ1bmNQcm90byksIHByb3RvKDApCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7Ci0gIHBy
b3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4ocHJvdC5pbXAoKSk7CisgIHByb3RvID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wKj4ocHJvdCk7CiAKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5
TmFtZSwgTnVtYmVySW1wOjpvbmUoKSwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7IC8v
IEVDTUEgMTUuMTEuNy41CisgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGpzT25lKCks
IERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQogICBwdXRE
aXJlY3QocHJvdG90eXBlUHJvcGVydHlOYW1lLCBwcm90bywgRG9udERlbGV0ZXxSZWFkT25seXxE
b250RW51bSk7CiB9CiAKQEAgLTE2NCwxMiArMTU4LDEyIEBAIGJvb2wgTmF0aXZlRXJyb3JJbXA6
OmltcGxlbWVudHNDb25zdHJ1Y3QKICAgcmV0dXJuIHRydWU7CiB9CiAKLU9iamVjdCBOYXRpdmVF
cnJvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK09i
amVjdEltcCAqTmF0aXZlRXJyb3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IExpc3QgJmFyZ3MpCiB7CiAgIE9iamVjdEltcCAqaW1wID0gbmV3IEVycm9ySW5zdGFuY2VJbXAo
cHJvdG8pOwotICBPYmplY3Qgb2JqKGltcCk7Ci0gIGlmIChhcmdzWzBdLnR5cGUoKSAhPSBVbmRl
ZmluZWRUeXBlKQotICAgIGltcC0+cHV0RGlyZWN0KG1lc3NhZ2VQcm9wZXJ0eU5hbWUsIG5ldyBT
dHJpbmdJbXAoYXJnc1swXS50b1N0cmluZyhleGVjKSkpOworICBPYmplY3RJbXAgKm9iaihpbXAp
OworICBpZiAoIWFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkpCisgICAgaW1wLT5wdXREaXJlY3QobWVz
c2FnZVByb3BlcnR5TmFtZSwganNTdHJpbmcoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKICAg
cmV0dXJuIG9iajsKIH0KIApAQCAtMTc4LDcgKzE3Miw3IEBAIGJvb2wgTmF0aXZlRXJyb3JJbXA6
OmltcGxlbWVudHNDYWxsKCkgY28KICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlIE5hdGl2ZUVy
cm9ySW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpOYXRpdmVFcnJvckltcDo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQog
ewogICByZXR1cm4gY29uc3RydWN0KGV4ZWMsYXJncyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvZXJyb3Jfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRp
ZmYgLXAgLXUgLXUgLXAgLXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5oCi0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgJMTUgSnVsIDIwMDUgMTY6NTg6NTYg
LTAwMDAJMS41CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgJNyBBdWcgMjAw
NSAwNDo0NDowNyAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVi
bGljOgogICAgIEVycm9yUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90
b3R5cGVJbXAgKmZ1bmNQcm90byk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncyk7CiAgIH07CiAKICAgY2xhc3MgRXJyb3JPYmplY3RJbXAgOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbkltcCB7CkBAIC01NSwxMCArNTUsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICAgICAgRXJyb3JQcm90b3R5cGVJbXAgKmVycm9yUHJvdG8pOwogCiAgICAgdmlydHVh
bCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBj
b25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFs
IE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgfTsKIAogICBj
bGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCA6IHB1YmxpYyBPYmplY3RJbXAgewpAQCAtNzIs
MTIgKzcyLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBOYXRpdmVFcnJvckltcCA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAgIE5hdGl2ZUVycm9ySW1w
KEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywKLSAgICAg
ICAgICAgICAgICAgICBjb25zdCBPYmplY3QgJnByb3QpOworICAgICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqcHJvdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAg
KmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NTAKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNTAgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNw
cAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkyNyBKdWwgMjAwNSAyMzoxMDo0
OSAtMDAwMAkxLjUwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCTcgQXVnIDIw
MDUgMDQ6NDQ6MDcgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEZ1bmN0
aW9uSW1wOjppbmZvID0geyJGdQogCiBGdW5jdGlvbkltcDo6RnVuY3Rpb25JbXAoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuKQogICA6IEludGVybmFsRnVuY3Rpb25JbXAoCi0g
ICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvblByb3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRl
cnByZXRlcigpLT5idWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKS5pbXAoKSkKKyAgICAgIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCkt
PmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpKQogICAgICAgKSwgcGFyYW0oMEwpLCBpZGVudChu
KQogewogfQpAQCAtNzMsOSArNzMsOSBAQCBib29sIEZ1bmN0aW9uSW1wOjppbXBsZW1lbnRzQ2Fs
bCgpIGNvbnN0CiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1ZSBGdW5jdGlvbkltcDo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVl
SW1wICpGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIE9iamVjdCAmZ2xvYmFsT2JqID0g
ZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOworICBPYmplY3RJbXAg
Kmdsb2JhbE9iaiA9IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKTsK
IAogICAvLyBlbnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAogICBDb250ZXh0SW1wIGN0eChn
bG9iYWxPYmosIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5pbXAoKSwgdGhpc09iaiwgY29k
ZVR5cGUoKSwKQEAgLTk3LDggKzk3LDcgQEAgVmFsdWUgRnVuY3Rpb25JbXA6OmNhbGwoRXhlY1N0
YXRlICpleGVjLAogICAgICAgbGluZW5vID0gc3RhdGljX2Nhc3Q8RGVjbGFyZWRGdW5jdGlvbklt
cCo+KHRoaXMpLT5ib2R5LT5maXJzdExpbmUoKTsKICAgICB9CiAKLSAgICBPYmplY3QgZnVuYyh0
aGlzKTsKLSAgICBib29sIGNvbnQgPSBkYmctPmNhbGxFdmVudCgmbmV3RXhlYyxzaWQsbGluZW5v
LGZ1bmMsYXJncyk7CisgICAgYm9vbCBjb250ID0gZGJnLT5jYWxsRXZlbnQoJm5ld0V4ZWMsc2lk
LGxpbmVubyx0aGlzLGFyZ3MpOwogICAgIGlmICghY29udCkgewogICAgICAgZGJnLT5pbXAoKS0+
YWJvcnQoKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTEyNyw4ICsxMjYsNyBAQCBW
YWx1ZSBGdW5jdGlvbkltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgaWYgKGNvbXAuY29t
cGxUeXBlKCkgPT0gVGhyb3cpCiAgICAgICAgIG5ld0V4ZWMuc2V0RXhjZXB0aW9uKGNvbXAudmFs
dWUoKSk7CiAKLSAgICBPYmplY3QgZnVuYyh0aGlzKTsKLSAgICBpbnQgY29udCA9IGRiZy0+cmV0
dXJuRXZlbnQoJm5ld0V4ZWMsc2lkLGxpbmVubyxmdW5jKTsKKyAgICBpbnQgY29udCA9IGRiZy0+
cmV0dXJuRXZlbnQoJm5ld0V4ZWMsc2lkLGxpbmVubyx0aGlzKTsKICAgICBpZiAoIWNvbnQpIHsK
ICAgICAgIGRiZy0+aW1wKCktPmFib3J0KCk7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBA
IC0xNzIsNyArMTcwLDcgQEAgVVN0cmluZyBGdW5jdGlvbkltcDo6cGFyYW1ldGVyU3RyaW5nKCkg
YwogLy8gRUNNQSAxMC4xLjNxCiB2b2lkIEZ1bmN0aW9uSW1wOjpwcm9jZXNzUGFyYW1ldGVycyhF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIE9iamVjdCB2YXJpYWJsZSA9
IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKTsKKyAgT2JqZWN0SW1wICp2
YXJpYWJsZSA9IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKTsKIAogI2lm
ZGVmIEtKU19WRVJCT1NFCiAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCkBAIC0xODksMTAgKzE4NywxMCBAQCB2
b2lkIEZ1bmN0aW9uSW1wOjpwcm9jZXNzUGFyYW1ldGVycyhFeGVjCiAJZnByaW50ZihzdGRlcnIs
ICJzZXR0aW5nIHBhcmFtZXRlciAlcyAiLCBwLT5uYW1lLmFzY2lpKCkpOwogCXByaW50SW5mbyhl
eGVjLCJ0byIsICppdCk7CiAjZW5kaWYKLQl2YXJpYWJsZS5wdXQoZXhlYywgcC0+bmFtZSwgKml0
KTsKKwl2YXJpYWJsZS0+cHV0KGV4ZWMsIHAtPm5hbWUsICppdCk7CiAJaXQrKzsKICAgICAgIH0g
ZWxzZQotCXZhcmlhYmxlLnB1dChleGVjLCBwLT5uYW1lLCBVbmRlZmluZWQoKSk7CisJdmFyaWFi
bGUtPnB1dChleGVjLCBwLT5uYW1lLCBVbmRlZmluZWQoKSk7CiAgICAgICBwID0gcC0+bmV4dDsK
ICAgICB9CiAgIH0KQEAgLTIwOCw3ICsyMDYsNyBAQCB2b2lkIEZ1bmN0aW9uSW1wOjpwcm9jZXNz
VmFyRGVjbHMoRXhlY1N0CiB7CiB9CiAKLWJvb2wgRnVuY3Rpb25JbXA6OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdAorYm9vbCBGdW5jdGlvbkltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3Vs
dCkgY29uc3QKIHsKICAgICAvLyBGaW5kIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgY2xvc2VzdCBj
b250ZXh0LgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gYXJndW1lbnRzUHJvcGVydHlOYW1lKSB7
CkBAIC0yMzksNyArMjM3LDcgQEAgYm9vbCBGdW5jdGlvbkltcDo6Z2V0T3duUHJvcGVydHkoRXhl
Y1N0YQogICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25JbXA6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUg
JnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgRnVuY3Rpb25JbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cikKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGFyZ3VtZW50c1Byb3BlcnR5TmFtZSB8fCBw
cm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKQogICAgICAgICByZXR1cm47CkBAIC0z
MDEsNyArMjk5LDYgQEAgRGVjbGFyZWRGdW5jdGlvbkltcDo6RGVjbGFyZWRGdW5jdGlvbkltcAog
CQkJCQkgRnVuY3Rpb25Cb2R5Tm9kZSAqYiwgY29uc3QgU2NvcGVDaGFpbiAmc2MpCiAgIDogRnVu
Y3Rpb25JbXAoZXhlYyxuKSwgYm9keShiKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBi
b2R5LT5yZWYoKTsKICAgc2V0U2NvcGUoc2MpOwogfQpAQCAtMzE4LDIxICszMTUsMjEgQEAgYm9v
bCBEZWNsYXJlZEZ1bmN0aW9uSW1wOjppbXBsZW1lbnRzQ29ucwogfQogCiAvLyBFQ01BIDEzLjIu
MiBbW0NvbnN0cnVjdF1dCi1PYmplY3QgRGVjbGFyZWRGdW5jdGlvbkltcDo6Y29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK09iamVjdEltcCAqRGVjbGFyZWRGdW5j
dGlvbkltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgT2JqZWN0IHByb3RvOwotICBWYWx1ZSBwID0gZ2V0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlO
YW1lKTsKLSAgaWYgKHAudHlwZSgpID09IE9iamVjdFR5cGUpCi0gICAgcHJvdG8gPSBPYmplY3Qo
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4ocC5pbXAoKSkpOworICBPYmplY3RJbXAgKnByb3RvOwor
ICBWYWx1ZUltcCAqcCA9IGdldChleGVjLHByb3RvdHlwZVByb3BlcnR5TmFtZSk7CisgIGlmIChw
LT5pc09iamVjdCgpKQorICAgIHByb3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4ocCk7CiAg
IGVsc2UKICAgICBwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7CiAKLSAgT2JqZWN0IG9iaihuZXcgT2JqZWN0SW1wKHByb3RvKSk7Cisg
IE9iamVjdEltcCAqb2JqKG5ldyBPYmplY3RJbXAocHJvdG8pKTsKIAotICBWYWx1ZSByZXMgPSBj
YWxsKGV4ZWMsb2JqLGFyZ3MpOworICBWYWx1ZUltcCAqcmVzID0gY2FsbChleGVjLG9iaixhcmdz
KTsKIAotICBpZiAocmVzLnR5cGUoKSA9PSBPYmplY3RUeXBlKQotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KHJlcyk7CisgIGlmIChyZXMtPmlzT2JqZWN0KCkpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE9iamVjdEltcCAqPihyZXMpOwogICBlbHNlCiAgICAgcmV0dXJuIG9iajsKIH0K
QEAgLTQyOSw3ICs0MjYsNiBAQCBBcmd1bWVudHNJbXA6OkFyZ3VtZW50c0ltcChFeGVjU3RhdGUg
KmV4CiBfYWN0aXZhdGlvbk9iamVjdChhY3QpLAogaW5kZXhUb05hbWVNYXAoZnVuYywgYXJncykK
IHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0RGlyZWN0KGNhbGxlZVByb3BlcnR5TmFt
ZSwgZnVuYywgRG9udEVudW0pOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBhcmdz
LnNpemUoKSwgRG9udEVudW0pOwogICAKQEAgLTQ0OSw3ICs0NDUsNyBAQCB2b2lkIEFyZ3VtZW50
c0ltcDo6bWFyaygpIAogICAgIF9hY3RpdmF0aW9uT2JqZWN0LT5tYXJrKCk7CiB9CiAKLWJvb2wg
QXJndW1lbnRzSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgQXJndW1lbnRz
SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdAogewogICBpZiAoaW5kZXhUb05h
bWVNYXAuaXNNYXBwZWQocHJvcGVydHlOYW1lKSkgewogICAgIHJlc3VsdCA9IF9hY3RpdmF0aW9u
T2JqZWN0LT5nZXQoZXhlYywgaW5kZXhUb05hbWVNYXBbcHJvcGVydHlOYW1lXSk7CkBAIC00NTks
NyArNDU1LDcgQEAgYm9vbCBBcmd1bWVudHNJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdAogICBy
ZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgQXJndW1lbnRzSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2
b2lkIEFyZ3VtZW50c0ltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBpZiAoaW5kZXhU
b05hbWVNYXAuaXNNYXBwZWQocHJvcGVydHlOYW1lKSkgewogICAgIF9hY3RpdmF0aW9uT2JqZWN0
LT5wdXQoZXhlYywgaW5kZXhUb05hbWVNYXBbcHJvcGVydHlOYW1lXSwgdmFsdWUsIGF0dHIpOwpA
QCAtNDk4LDcgKzQ5NCw3IEBAIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXAoRnVuY3Rpb25J
bXAKICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gc3VwcG9ydCBlbnVtZXJhdGluZyB0aGUgYXJn
dW1lbnRzIHByb3BlcnR5PwogfQogCi1ib29sIEFjdGl2YXRpb25JbXA6OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdAorYm9vbCBBY3RpdmF0aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVz
dWx0KSBjb25zdAogewogICAgIC8vIGRvIHRoaXMgZmlyc3Qgc28gcHJvcGVydHkgbWFwIGFyZ3Vt
ZW50cyBwcm9wZXJ0eSB3aW5zIG92ZXIgdGhlIGJlbG93CiAgICAgaWYgKE9iamVjdEltcDo6Z2V0
T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpKQpAQCAtNTA5LDcgKzUwNSw3
IEBAIGJvb2wgQWN0aXZhdGlvbkltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1MKICAgICAgICAgaWYg
KCFfYXJndW1lbnRzT2JqZWN0KQogICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzT2JqZWN0KGV4
ZWMpOwogCi0gICAgICAgIHJlc3VsdCA9IFZhbHVlKF9hcmd1bWVudHNPYmplY3QpOworICAgICAg
ICByZXN1bHQgPSBfYXJndW1lbnRzT2JqZWN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTU1MSw3ICs1NDcsNiBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OmNyZWF0ZUFyZ3VtZW50
c09iamVjCiBHbG9iYWxGdW5jSW1wOjpHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVu
Y3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4pCiAgIDogSW50ZXJu
YWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMp
OwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8UmVhZE9u
bHl8RG9udEVudW0pOwogfQogCkBAIC01NjUsOSArNTYwLDkgQEAgYm9vbCBHbG9iYWxGdW5jSW1w
OjppbXBsZW1lbnRzQ2FsbCgpIGNvbgogICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFZhbHVl
IGVuY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0IGNoYXIgKmRv
X25vdF9lc2NhcGUpCitzdGF0aWMgVmFsdWVJbXAgKmVuY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IExpc3QgJmFyZ3MsIGNvbnN0IGNoYXIgKmRvX25vdF9lc2NhcGUpCiB7Ci0gIFVTdHJpbmcg
ciA9ICIiLCBzLCBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOworICBVU3RyaW5nIHIgPSAi
Iiwgcywgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgIENTdHJpbmcgY3N0ciA9IHN0
ci5VVEY4U3RyaW5nKCk7CiAgIGNvbnN0IGNoYXIgKnAgPSBjc3RyLmNfc3RyKCk7CiAgIGZvciAo
aW50IGsgPSAwOyBrIDwgY3N0ci5zaXplKCk7IGsrKywgcCsrKSB7CkBAIC01ODMsOSArNTc4LDkg
QEAgc3RhdGljIFZhbHVlIGVuY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNvbgogICByZXR1cm4gU3Ry
aW5nKHIpOwogfQogCi1zdGF0aWMgVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncywgY29uc3QgY2hhciAqZG9fbm90X3VuZXNjYXBlLCBib29sIHN0cmljdCkKK3N0
YXRpYyBWYWx1ZUltcCAqZGVjb2RlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncywg
Y29uc3QgY2hhciAqZG9fbm90X3VuZXNjYXBlLCBib29sIHN0cmljdCkKIHsKLSAgVVN0cmluZyBz
ID0gIiIsIHN0ciA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7CisgIFVTdHJpbmcgcyA9ICIiLCBz
dHIgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKICAgaW50IGsgPSAwLCBsZW4gPSBzdHIuc2l6
ZSgpOwogICBjb25zdCBVQ2hhciAqZCA9IHN0ci5kYXRhKCk7CiAgIFVDaGFyIHU7CkBAIC02Mjcs
NyArNjIyLDcgQEAgc3RhdGljIFZhbHVlIGRlY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNvbgogICAg
ICAgfQogICAgICAgaWYgKGNoYXJMZW4gPT0gMCkgewogICAgICAgICBpZiAoc3RyaWN0KSB7Ci0J
ICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9yKTsKKwkgIE9iamVj
dEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9yKTsKICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAg
ICAgfQpAQCAtNzYwLDkgKzc1NSw5IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChjb25zdCBV
U3RyaW5nICYKICAgICByZXR1cm4gcy50b0RvdWJsZSggdHJ1ZSAvKnRvbGVyYW50Ki8sIGZhbHNl
IC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5nICovICk7CiB9CiAKLVZhbHVlIEdsb2JhbEZ1bmNJbXA6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgVmFs
dWUgcmVzOworICBWYWx1ZUltcCAqcmVzID0ganNVbmRlZmluZWQoKTsKIAogICBzdGF0aWMgY29u
c3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQogICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
WiIKQEAgLTc4NSwxMSArNzgwLDExIEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6OmNhbGwoRXhlY1N0
YXRlICpleGUKIAogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBFdmFsOiB7IC8vIGV2YWwoKQot
ICAgICAgVmFsdWUgeCA9IGFyZ3NbMF07Ci0gICAgICBpZiAoeC50eXBlKCkgIT0gU3RyaW5nVHlw
ZSkKKyAgICAgIFZhbHVlSW1wICp4ID0gYXJnc1swXTsKKyAgICAgIGlmICgheC0+aXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuIHg7CiAgICAgICBlbHNlIHsKLSAgICAgICAgVVN0cmluZyBzID0g
eC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7
CiAgICAgICAgIAogICAgICAgICBpbnQgc2lkOwogICAgICAgICBpbnQgZXJyTGluZTsKQEAgLTgw
NSw4ICs4MDAsOCBAQCBWYWx1ZSBHbG9iYWxGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAK
ICAgICAgICAgLy8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEgc3ludGF4IG9jY3VycmVkCiAgICAg
ICAgIGlmICghcHJvZ05vZGUpIHsKLSAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yLGVyck1zZy5hc2NpaSgpLGVyckxpbmUpOwotICAgICAgICAgIGVy
ci5wdXQoZXhlYywic2lkIixOdW1iZXIoc2lkKSk7CisgICAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IsZXJyTXNnLmFzY2lpKCksZXJyTGluZSk7
CisgICAgICAgICAgZXJyLT5wdXQoZXhlYywic2lkIixOdW1iZXIoc2lkKSk7CiAgICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAg
fQpAQCAtODE0LDcgKzgwOSw3IEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
ICpleGUKICAgICAgICAgcHJvZ05vZGUtPnJlZigpOwogICAgICAgICAKICAgICAgICAgLy8gZW50
ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKLSAgICAgICAgT2JqZWN0IHRoaXNWYWwoT2JqZWN0
OjpkeW5hbWljQ2FzdChleGVjLT5jb250ZXh0KCkudGhpc1ZhbHVlKCkpKTsKKyAgICAgICAgT2Jq
ZWN0SW1wICp0aGlzVmFsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmNvbnRleHQo
KS50aGlzVmFsdWUoKSk7CiAgICAgICAgIENvbnRleHRJbXAgY3R4KGV4ZWMtPmR5bmFtaWNJbnRl
cnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhlYy0+
ZHluYW1pY0ludGVycHJldGVyKCktPmltcCgpLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
VmFsLApAQCAtODQ0LDE2ICs4MzksMTYgQEAgVmFsdWUgR2xvYmFsRnVuY0ltcDo6Y2FsbChFeGVj
U3RhdGUgKmV4ZQogICAgICAgYnJlYWs7CiAgICAgfQogICBjYXNlIFBhcnNlSW50OgotICAgIHJl
cyA9IE51bWJlcihwYXJzZUludChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLCBhcmdzWzFdLnRvSW50
MzIoZXhlYykpKTsKKyAgICByZXMgPSBOdW1iZXIocGFyc2VJbnQoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKICAgICBicmVhazsKICAgY2FzZSBQYXJz
ZUZsb2F0OgotICAgIHJlcyA9IE51bWJlcihwYXJzZUZsb2F0KGFyZ3NbMF0udG9TdHJpbmcoZXhl
YykpKTsKKyAgICByZXMgPSBOdW1iZXIocGFyc2VGbG9hdChhcmdzWzBdLT50b1N0cmluZyhleGVj
KSkpOwogICAgIGJyZWFrOwogICBjYXNlIElzTmFOOgotICAgIHJlcyA9IEJvb2xlYW4oaXNOYU4o
YXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgIHJlcyA9IEJvb2xlYW4oaXNOYU4oYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYykpKTsKICAgICBicmVhazsKICAgY2FzZSBJc0Zpbml0ZTogewotICAg
IGRvdWJsZSBuID0gYXJnc1swXS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbiA9IGFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgIHJlcyA9IEJvb2xlYW4oIWlzTmFOKG4pICYmICFpc0lu
ZihuKSk7CiAgICAgYnJlYWs7CiAgIH0KQEAgLTg3MSw3ICs4NjYsNyBAQCBWYWx1ZSBHbG9iYWxG
dW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAgICAgYnJlYWs7CiAgIGNhc2UgRXNjYXBlOgog
ICAgIHsKLSAgICAgIFVTdHJpbmcgciA9ICIiLCBzLCBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4
ZWMpOworICAgICAgVVN0cmluZyByID0gIiIsIHMsIHN0ciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgY29uc3QgVUNoYXIgKmMgPSBzdHIuZGF0YSgpOwogICAgICAgZm9yIChpbnQg
ayA9IDA7IGsgPCBzdHIuc2l6ZSgpOyBrKyssIGMrKykgewogICAgICAgICBpbnQgdSA9IGMtPnVj
OwpAQCAtODkzLDcgKzg4OCw3IEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
ICpleGUKICAgICB9CiAgIGNhc2UgVW5Fc2NhcGU6CiAgICAgewotICAgICAgVVN0cmluZyBzID0g
IiIsIHN0ciA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7CisgICAgICBVU3RyaW5nIHMgPSAiIiwg
c3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICBpbnQgayA9IDAsIGxlbiA9IHN0
ci5zaXplKCk7CiAgICAgICB3aGlsZSAoayA8IGxlbikgewogICAgICAgICBjb25zdCBVQ2hhciAq
YyA9IHN0ci5kYXRhKCkgKyBrOwpAQCAtOTIwLDcgKzkxNSw3IEBAIFZhbHVlIEdsb2JhbEZ1bmNJ
bXA6OmNhbGwoRXhlY1N0YXRlICpleGUKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICBjYXNlIEtK
U1ByaW50OgotICAgIHB1dHMoYXJnc1swXS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICBw
dXRzKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICAgIGJyZWFrOwogI2VuZGlm
CiAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yOApkaWZmIC1wIC11IC11IC1wIC1yMS4yOCBKYXZhU2NyaXB0Q29yZS9r
anMvZnVuY3Rpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJMjcgSnVsIDIw
MDUgMDE6Mjg6MzIgLTAwMDAJMS4yOAorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJ
NyBBdWcgMjAwNSAwNDo0NDowNyAtMDAwMApAQCAtNDIsMTMgKzQyLDEzIEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIEZ1bmN0aW9uSW1wKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
biA9IElkZW50aWZpZXI6Om51bGwoKSk7CiAgICAgdmlydHVhbCB+RnVuY3Rpb25JbXAoKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1w
ICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CiAKICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVy
ICZuKTsKICAgICBJZGVudGlmaWVyIGdldFBhcmFtZXRlck5hbWUoaW50IGluZGV4KTsKQEAgLTc3
LDcgKzc3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfkRlY2xhcmVkRnVuY3Rpb25JbXAoKTsK
IAogICAgIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIE9iamVjdCBjb25z
dHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICBPYmplY3RJbXAg
KmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgdmly
dHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKTsKICAgICBDb2RlVHlwZSBj
b2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZ1bmN0aW9uQ29kZTsgfQpAQCAtMTA5LDkgKzEwOSw5
IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRzSW1wKEV4ZWNTdGF0
ZSAqZXhlYywgRnVuY3Rpb25JbXAgKmZ1bmMsIGNvbnN0IExpc3QgJmFyZ3MsIEFjdGl2YXRpb25J
bXAgKmFjdCk7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgICAgICAgICAgICAgICAg
ICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9vbCBo
YXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKICAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTEyNSw3
ICsxMjUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEFjdGl2YXRpb25JbXAo
RnVuY3Rpb25JbXAgKmZ1bmN0aW9uLCBjb25zdCBMaXN0ICZhcmd1bWVudHMpOwogCi0gICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlSW1wIComIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSAq
ZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4pOwog
ICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFs
dWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogICAgIHZpcnR1YWwgQ29k
ZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKICAgICBlbnVtIHsgRXZhbCwgUGFyc2VJbnQsIFBhcnNl
RmxvYXQsIElzTmFOLCBJc0Zpbml0ZSwgRXNjYXBlLCBVbkVzY2FwZSwKICAgICAgICAgICAgRGVj
b2RlVVJJLCBEZWNvZGVVUklDb21wb25lbnQsIEVuY29kZVVSSSwgRW5jb2RlVVJJQ29tcG9uZW50
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb25fb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMjYgSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbl9vYmplY3QuY3BwCTI3IEp1bCAyMDA1IDIzOjEwOjQ5IC0wMDAwCTEuMjYKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6
MDcgLTAwMDAKQEAgLTQwLDggKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEZ1bmN0aW9u
UHJvdG90eXBlSW1wOjpGdW5jdGlvblByb3RvdHlwZUltcChFeGVjU3RhdGUgKmV4ZWMpCiAgIDog
SW50ZXJuYWxGdW5jdGlvbkltcCgwKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwotICBwdXRE
aXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCAgIE51bWJlckltcDo6emVybygpLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5fERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgICBqc1pl
cm8oKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiAgIHB1dERpcmVjdCh0b1N0cmluZ1By
b3BlcnR5TmFtZSwgbmV3IEZ1bmN0aW9uUHJvdG9GdW5jSW1wKGV4ZWMsIHRoaXMsIEZ1bmN0aW9u
UHJvdG9GdW5jSW1wOjpUb1N0cmluZywgMCksIERvbnRFbnVtKTsKICAgc3RhdGljIGNvbnN0IElk
ZW50aWZpZXIgYXBwbHlQcm9wZXJ0eU5hbWUoImFwcGx5Iik7CiAgIHB1dERpcmVjdChhcHBseVBy
b3BlcnR5TmFtZSwgICAgbmV3IEZ1bmN0aW9uUHJvdG9GdW5jSW1wKGV4ZWMsIHRoaXMsIEZ1bmN0
aW9uUHJvdG9GdW5jSW1wOjpBcHBseSwgICAgMiksIERvbnRFbnVtKTsKQEAgLTU5LDcgKzU4LDcg
QEAgYm9vbCBGdW5jdGlvblByb3RvdHlwZUltcDo6aW1wbGVtZW50c0NhbAogfQogCiAvLyBFQ01B
IDE1LjMuNAotVmFsdWUgRnVuY3Rpb25Qcm90b3R5cGVJbXA6OmNhbGwoRXhlY1N0YXRlICovKmV4
ZWMqLywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmLyphcmdzKi8pCitWYWx1ZUlt
cCAqRnVuY3Rpb25Qcm90b3R5cGVJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLypleGVj
Ki8sIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJi8qYXJncyovKQogewogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC03MCw3ICs2OSw2IEBAIEZ1bmN0aW9uUHJvdG9GdW5j
SW1wOjpGdW5jdGlvblByb3RvRnVuY0kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4p
CiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBw
cm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnRE
ZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC04MCwyOSArNzgsMjkgQEAgYm9vbCBG
dW5jdGlvblByb3RvRnVuY0ltcDo6aW1wbGVtZW50c0NhbAogICByZXR1cm4gdHJ1ZTsKIH0KIAot
VmFsdWUgRnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRnVuY3Rpb25Qcm90b0Z1bmNJ
bXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICBWYWx1ZSByZXN1bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQg
PSBOVUxMOwogCiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBUb1N0cmluZzogewogICAgIC8vICMj
IyBhbHNvIG1ha2UgdGhpcyB3b3JrIGZvciBpbnRlcm5hbCBmdW5jdGlvbnMKLSAgICBpZiAodGhp
c09iai5pc051bGwoKSB8fCAhdGhpc09iai5pbmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbkltcDo6
aW5mbykpIHsKKyAgICBpZiAoIXRoaXNPYmogfHwgIXRoaXNPYmotPmluaGVyaXRzKCZJbnRlcm5h
bEZ1bmN0aW9uSW1wOjppbmZvKSkgewogI2lmbmRlZiBOREVCVUcKICAgICAgIGZwcmludGYoc3Rk
ZXJyLCJhdHRlbXB0ZWQgdG9TdHJpbmcoKSBjYWxsIG9uIG51bGwgb3Igbm9uLWZ1bmN0aW9uIG9i
amVjdFxuIik7CiAjZW5kaWYKLSAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
VHlwZUVycm9yKTsKKyAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgIHJldHVybiBl
cnI7CiAgICAgfQotICAgIGlmICh0aGlzT2JqLmluaGVyaXRzKCZEZWNsYXJlZEZ1bmN0aW9uSW1w
OjppbmZvKSkgeworICAgIGlmICh0aGlzT2JqLT5pbmhlcml0cygmRGVjbGFyZWRGdW5jdGlvbklt
cDo6aW5mbykpIHsKICAgICAgICBEZWNsYXJlZEZ1bmN0aW9uSW1wICpmaSA9IHN0YXRpY19jYXN0
PERlY2xhcmVkRnVuY3Rpb25JbXAqPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHRoaXNPYmouaW1wKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNP
YmopOwogICAgICAgIHJldHVybiBTdHJpbmcoImZ1bmN0aW9uICIgKyBmaS0+bmFtZSgpLnVzdHJp
bmcoKSArICIoIiArCiAgICAgICAgICBmaS0+cGFyYW1ldGVyU3RyaW5nKCkgKyAiKSAiICsgZmkt
PmJvZHktPnRvU3RyaW5nKCkpOwotICAgIH0gZWxzZSBpZiAodGhpc09iai5pbmhlcml0cygmRnVu
Y3Rpb25JbXA6OmluZm8pICYmCi0gICAgICAgICFzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHRo
aXNPYmouaW1wKCkpLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgIHJlc3VsdCA9IFN0cmluZygi
ZnVuY3Rpb24gIiArIHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4odGhpc09iai5pbXAoKSktPm5h
bWUoKS51c3RyaW5nKCkgKyAiKCkiKTsKKyAgICB9IGVsc2UgaWYgKHRoaXNPYmotPmluaGVyaXRz
KCZGdW5jdGlvbkltcDo6aW5mbykgJiYKKyAgICAgICAgIXN0YXRpY19jYXN0PEZ1bmN0aW9uSW1w
Kj4odGhpc09iaiktPm5hbWUoKS5pc051bGwoKSkgeworICAgICAgcmVzdWx0ID0gU3RyaW5nKCJm
dW5jdGlvbiAiICsgc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAqPih0aGlzT2JqKS0+bmFtZSgpLnVz
dHJpbmcoKSArICIoKSIpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIHJlc3VsdCA9IFN0cmlu
ZygiKEludGVybmFsIEZ1bmN0aW9uKSIpOwpAQCAtMTEwLDU5ICsxMDgsNTkgQEAgVmFsdWUgRnVu
Y3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YQogICAgIH0KICAgICBicmVhazsKICAgY2Fz
ZSBBcHBseTogewotICAgIFZhbHVlIHRoaXNBcmcgPSBhcmdzWzBdOwotICAgIFZhbHVlIGFyZ0Fy
cmF5ID0gYXJnc1sxXTsKLSAgICBPYmplY3QgZnVuYyA9IHRoaXNPYmo7CisgICAgVmFsdWVJbXAg
KnRoaXNBcmcgPSBhcmdzWzBdOworICAgIFZhbHVlSW1wICphcmdBcnJheSA9IGFyZ3NbMV07Cisg
ICAgT2JqZWN0SW1wICpmdW5jID0gdGhpc09iajsKIAotICAgIGlmICghZnVuYy5pbXBsZW1lbnRz
Q2FsbCgpKSB7Ci0gICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7CisgICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICBPYmplY3RJbXAg
KmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CiAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAotICAgIE9iamVjdCBhcHBs
eVRoaXM7Ci0gICAgaWYgKHRoaXNBcmcuaXNBKE51bGxUeXBlKSB8fCB0aGlzQXJnLmlzQShVbmRl
ZmluZWRUeXBlKSkKKyAgICBPYmplY3RJbXAgKmFwcGx5VGhpczsKKyAgICBpZiAodGhpc0FyZy0+
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgIGFwcGx5VGhpcyA9IGV4ZWMtPmR5bmFtaWNJbnRl
cnByZXRlcigpLT5nbG9iYWxPYmplY3QoKTsKICAgICBlbHNlCi0gICAgICBhcHBseVRoaXMgPSB0
aGlzQXJnLnRvT2JqZWN0KGV4ZWMpOworICAgICAgYXBwbHlUaGlzID0gdGhpc0FyZy0+dG9PYmpl
Y3QoZXhlYyk7CiAKICAgICBMaXN0IGFwcGx5QXJnczsKLSAgICBpZiAoIWFyZ0FycmF5LmlzQShO
dWxsVHlwZSkgJiYgIWFyZ0FycmF5LmlzQShVbmRlZmluZWRUeXBlKSkgewotICAgICAgaWYgKGFy
Z0FycmF5LmlzQShPYmplY3RUeXBlKSAmJgotICAgICAgICAgICAoT2JqZWN0OjpkeW5hbWljQ2Fz
dChhcmdBcnJheSkuaW5oZXJpdHMoJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pIHx8Ci0gICAgICAg
ICAgICBPYmplY3Q6OmR5bmFtaWNDYXN0KGFyZ0FycmF5KS5pbmhlcml0cygmQXJndW1lbnRzSW1w
OjppbmZvKSkpIHsKKyAgICBpZiAoIWFyZ0FycmF5LT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Cisg
ICAgICBpZiAoYXJnQXJyYXktPmlzT2JqZWN0KCkgJiYKKyAgICAgICAgICAgKHN0YXRpY19jYXN0
PE9iamVjdEltcCAqPihhcmdBcnJheSktPmluaGVyaXRzKCZBcnJheUluc3RhbmNlSW1wOjppbmZv
KSB8fAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGFyZ0FycmF5KS0+aW5o
ZXJpdHMoJkFyZ3VtZW50c0ltcDo6aW5mbykpKSB7CiAKLSAgICAgICAgT2JqZWN0IGFyZ0FycmF5
T2JqID0gT2JqZWN0OjpkeW5hbWljQ2FzdChhcmdBcnJheSk7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBsZW5ndGggPSBhcmdBcnJheU9iai5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICBPYmplY3RJbXAgKmFyZ0FycmF5T2JqID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KGFyZ0FycmF5KTsKKyAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGFy
Z0FycmF5T2JqLT5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUpLT50b1VJbnQzMihleGVjKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAg
ICAgICBhcHBseUFyZ3MuYXBwZW5kKGFyZ0FycmF5T2JqLmdldChleGVjLGkpKTsKKyAgICAgICAg
ICBhcHBseUFyZ3MuYXBwZW5kKGFyZ0FycmF5T2JqLT5nZXQoZXhlYyxpKSk7CiAgICAgICB9CiAg
ICAgICBlbHNlIHsKLSAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOworICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgcmV0dXJu
IGVycjsKICAgICAgIH0KICAgICB9Ci0gICAgcmVzdWx0ID0gZnVuYy5jYWxsKGV4ZWMsYXBwbHlU
aGlzLGFwcGx5QXJncyk7CisgICAgcmVzdWx0ID0gZnVuYy0+Y2FsbChleGVjLGFwcGx5VGhpcyxh
cHBseUFyZ3MpOwogICAgIH0KICAgICBicmVhazsKICAgY2FzZSBDYWxsOiB7Ci0gICAgVmFsdWUg
dGhpc0FyZyA9IGFyZ3NbMF07Ci0gICAgT2JqZWN0IGZ1bmMgPSB0aGlzT2JqOworICAgIFZhbHVl
SW1wICp0aGlzQXJnID0gYXJnc1swXTsKKyAgICBPYmplY3RJbXAgKmZ1bmMgPSB0aGlzT2JqOwog
Ci0gICAgaWYgKCFmdW5jLmltcGxlbWVudHNDYWxsKCkpIHsKLSAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHND
YWxsKCkpIHsKKyAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgIHJldHVybiBlcnI7
CiAgICAgfQogCi0gICAgT2JqZWN0IGNhbGxUaGlzOwotICAgIGlmICh0aGlzQXJnLmlzQShOdWxs
VHlwZSkgfHwgdGhpc0FyZy5pc0EoVW5kZWZpbmVkVHlwZSkpCisgICAgT2JqZWN0SW1wICpjYWxs
VGhpczsKKyAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgIGNhbGxU
aGlzID0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwogICAgIGVs
c2UKLSAgICAgIGNhbGxUaGlzID0gdGhpc0FyZy50b09iamVjdChleGVjKTsKKyAgICAgIGNhbGxU
aGlzID0gdGhpc0FyZy0+dG9PYmplY3QoZXhlYyk7CiAKLSAgICByZXN1bHQgPSBmdW5jLmNhbGwo
ZXhlYyxjYWxsVGhpcyxhcmdzLmNvcHlUYWlsKCkpOworICAgIHJlc3VsdCA9IGZ1bmMtPmNhbGwo
ZXhlYyxjYWxsVGhpcyxhcmdzLmNvcHlUYWlsKCkpOwogICAgIH0KICAgICBicmVhazsKICAgfQpA
QCAtMTc1LDExICsxNzMsMTAgQEAgVmFsdWUgRnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGwoRXhl
Y1N0YQogRnVuY3Rpb25PYmplY3RJbXA6OkZ1bmN0aW9uT2JqZWN0SW1wKEV4ZWNTdGF0ZSAqZXhl
YywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9u
SW1wKGZ1bmNQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0RGlyZWN0KHBy
b3RvdHlwZVByb3BlcnR5TmFtZSwgZnVuY1Byb3RvLCBEb250RW51bXxEb250RGVsZXRlfFJlYWRP
bmx5KTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICBwdXREaXJl
Y3QobGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXJJbXA6Om9uZSgpLCBSZWFkT25seXxEb250RGVs
ZXRlfERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwganNPbmUoKSwg
UmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKIEZ1bmN0aW9uT2JqZWN0SW1wOjp+
RnVuY3Rpb25PYmplY3RJbXAoKQpAQCAtMTkyLDcgKzE4OSw3IEBAIGJvb2wgRnVuY3Rpb25PYmpl
Y3RJbXA6OmltcGxlbWVudHNDb25zdHIKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9u
IENvbnN0cnVjdG9yCi1PYmplY3QgRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50
IGxpbmVOdW1iZXIpCitPYmplY3RJbXAgKkZ1bmN0aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkws
IGludCBsaW5lTnVtYmVyKQogewogICBVU3RyaW5nIHAoIiIpOwogICBVU3RyaW5nIGJvZHk7CkBA
IC0yMDAsMTIgKzE5NywxMiBAQCBPYmplY3QgRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChF
eGVjCiAgIGlmIChhcmdzU2l6ZSA9PSAwKSB7CiAgICAgYm9keSA9ICIiOwogICB9IGVsc2UgaWYg
KGFyZ3NTaXplID09IDEpIHsKLSAgICBib2R5ID0gYXJnc1swXS50b1N0cmluZyhleGVjKTsKKyAg
ICBib2R5ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgIH0gZWxzZSB7Ci0gICAgcCA9IGFy
Z3NbMF0udG9TdHJpbmcoZXhlYyk7CisgICAgcCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwog
ICAgIGZvciAoaW50IGsgPSAxOyBrIDwgYXJnc1NpemUgLSAxOyBrKyspCi0gICAgICBwICs9ICIs
IiArIGFyZ3Nba10udG9TdHJpbmcoZXhlYyk7Ci0gICAgYm9keSA9IGFyZ3NbYXJnc1NpemUtMV0u
dG9TdHJpbmcoZXhlYyk7CisgICAgICBwICs9ICIsIiArIGFyZ3Nba10tPnRvU3RyaW5nKGV4ZWMp
OworICAgIGJvZHkgPSBhcmdzW2FyZ3NTaXplLTFdLT50b1N0cmluZyhleGVjKTsKICAgfQogCiAg
IC8vIHBhcnNlIHRoZSBzb3VyY2UgY29kZQpAQCAtMjIxLDEzICsyMTgsMTMgQEAgT2JqZWN0IEZ1
bmN0aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlYwogICAgIGJvb2wgY29udCA9IGRiZy0+c291
cmNlUGFyc2VkKGV4ZWMsc2lkLFVTdHJpbmcoKSxib2R5LGVyckxpbmUpOwogICAgIGlmICghY29u
dCkgewogICAgICAgZGJnLT5pbXAoKS0+YWJvcnQoKTsKLSAgICAgIHJldHVybiBPYmplY3QobmV3
IE9iamVjdEltcCgpKTsKKyAgICAgIHJldHVybiBuZXcgT2JqZWN0SW1wKCk7CiAgICAgfQogICB9
CiAKICAgLy8gbm8gcHJvZ3JhbSBub2RlID09IHN5bnRheCBlcnJvciAtIHRocm93IGEgc3ludGF4
IGVycm9yCiAgIGlmICghcHJvZ05vZGUpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yLGVyck1zZy5hc2NpaSgpLGVyckxpbmUpOworICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLGVyck1zZy5hc2NpaSgpLGVy
ckxpbmUpOwogICAgIC8vIHdlIGNhbid0IHJldHVybiBhIENvbXBsZXRpb24oVGhyb3cpIGhlcmUs
IHNvIGp1c3Qgc2V0IHRoZSBleGNlcHRpb24KICAgICAvLyBhbmQgcmV0dXJuIGl0CiAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7CkBAIC0yMzUsMTIgKzIzMiwxMSBAQCBPYmplY3QgRnVuY3Rp
b25PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjCiAgIH0KIAogICBTY29wZUNoYWluIHNjb3BlQ2hh
aW47Ci0gIHNjb3BlQ2hhaW4ucHVzaChleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFs
T2JqZWN0KCkuaW1wKCkpOworICBzY29wZUNoYWluLnB1c2goZXhlYy0+ZHluYW1pY0ludGVycHJl
dGVyKCktPmdsb2JhbE9iamVjdCgpKTsKICAgRnVuY3Rpb25Cb2R5Tm9kZSAqYm9keU5vZGUgPSBw
cm9nTm9kZTsKIAogICBGdW5jdGlvbkltcCAqZmltcCA9IG5ldyBEZWNsYXJlZEZ1bmN0aW9uSW1w
KGV4ZWMsIElkZW50aWZpZXI6Om51bGwoKSwgYm9keU5vZGUsCiAJCQkJCSAgICAgIHNjb3BlQ2hh
aW4pOwotICBPYmplY3QgcmV0KGZpbXApOyAvLyBwcm90ZWN0IGZyb20gR0MKIAogICAvLyBwYXJz
ZSBwYXJhbWV0ZXIgbGlzdC4gdGhyb3cgc3ludGF4IGVycm9yIG9uIGlsbGVnYWwgaWRlbnRpZmll
cnMKICAgaW50IGxlbiA9IHAuc2l6ZSgpOwpAQCAtMjcxLDcgKzI2Nyw3IEBAIE9iamVjdCBGdW5j
dGlvbk9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWMKIAkgICAgICBjb250aW51ZTsKIAkgIH0gLy8g
ZWxzZSBlcnJvcgogICAgICAgfQotICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvciwKKyAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFN5bnRheEVycm9yLAogCQkJCSBJMThOX05PT1AoIlN5bnRheCBlcnJvciBpbiBwYXJhbWV0ZXIg
bGlzdCIpLAogCQkJCSAtMSk7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKQEAgLTI4
MCwxNSArMjc2LDE1IEBAIE9iamVjdCBGdW5jdGlvbk9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWMK
IAogICBMaXN0IGNvbnNBcmdzOwogCi0gIE9iamVjdCBvYmpDb25zID0gZXhlYy0+bGV4aWNhbElu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKTsKLSAgT2JqZWN0IHByb3RvdHlwZSA9IG9iakNv
bnMuY29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7Ci0gIHByb3RvdHlwZS5wdXQoZXhlYywg
Y29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIFZhbHVlKGZpbXApLCBEb250RW51bXxEb250RGVsZXRl
fFJlYWRPbmx5KTsKKyAgT2JqZWN0SW1wICpvYmpDb25zID0gZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3QoKTsKKyAgT2JqZWN0SW1wICpwcm90b3R5cGUgPSBvYmpDb25z
LT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKKyAgcHJvdG90eXBlLT5wdXQoZXhlYywg
Y29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIGZpbXAsIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9u
bHkpOwogICBmaW1wLT5wdXQoZXhlYywgcHJvdG90eXBlUHJvcGVydHlOYW1lLCBwcm90b3R5cGUs
IERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwotICByZXR1cm4gcmV0OworICByZXR1cm4g
ZmltcDsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9yCi1PYmpl
Y3QgRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExp
c3QgJmFyZ3MpCitPYmplY3RJbXAgKkZ1bmN0aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQogewogICByZXR1cm4gRnVuY3Rpb25PYmplY3RJ
bXA6OmNvbnN0cnVjdChleGVjLCBhcmdzLCBVU3RyaW5nKCksIDApOwogfQpAQCAtMzAwLDcgKzI5
Niw3IEBAIGJvb2wgRnVuY3Rpb25PYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkKIH0KIAogLy8g
RUNNQSAxNS4zLjEgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9yIENhbGxlZCBhcyBhIEZ1bmN0aW9u
Ci1WYWx1ZSBGdW5jdGlvbk9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
Lyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRnVuY3Rpb25PYmplY3RJ
bXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoq
LywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgcmV0dXJuIGNvbnN0cnVjdChleGVjLGFyZ3MpOwog
fQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb25fb2JqZWN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC11IC1wIC1yMS41IEphdmFTY3Jp
cHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0
aW9uX29iamVjdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAyIC0wMDAwCTEuNQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDcgLTAwMDAKQEAg
LTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB+RnVuY3Rpb25Qcm90
b3R5cGVJbXAoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwog
ICB9OwogCiAgIC8qKgpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGludCBpLCBp
bnQgbGVuKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAg
ICAgZW51bSB7IFRvU3RyaW5nLCBBcHBseSwgQ2FsbCB9OwogICBwcml2YXRlOgpAQCAtNzMsMTAg
KzczLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgfkZ1bmN0aW9uT2JqZWN0SW1w
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwotICAgIHZpcnR1
YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwor
ICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICZhcmdzLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKKyAg
ICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlz
dCAmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJu
YWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU5CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjU5
IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9p
bnRlcm5hbC5jcHAJMjcgSnVsIDIwMDUgMjM6MTA6NDkgLTAwMDAJMS41OQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2ludGVybmFsLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA3IC0wMDAwCkBAIC01Mywx
MSArNTMsMTAgQEAKIAogZXh0ZXJuIGludCBranN5eXBhcnNlKCk7CiAKLXVzaW5nIG5hbWVzcGFj
ZSBLSlM7CituYW1lc3BhY2UgS0pTIHsKIAogI2lmICFBUFBMRV9DSEFOR0VTCiAKLW5hbWVzcGFj
ZSBLSlMgewogI2lmZGVmIFdPUkRTX0JJR0VORElBTgogICBjb25zdCB1bnNpZ25lZCBjaGFyIE5h
Tl9CeXRlc1tdID0geyAweDdmLCAweGY4LCAwLCAwLCAwLCAwLCAwLCAwIH07CiAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgSW5mX0J5dGVzW10gPSB7IDB4N2YsIDB4ZjAsIDAsIDAsIDAsIDAsIDAsIDAg
fTsKQEAgLTcxLDcgKzcwLDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY29uc3QgZG91YmxlIE5h
TiA9ICooY29uc3QgZG91YmxlKikgTmFOX0J5dGVzOwogICBjb25zdCBkb3VibGUgSW5mID0gKihj
b25zdCBkb3VibGUqKSBJbmZfQnl0ZXM7Ci19OwogCiAjZW5kaWYgLy8gQVBQTEVfQ0hBTkdFUwog
CkBAIC0xMDcsMTEgKzEwNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tJbnRlcnByZXRl
cigpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVbmRlZmluZWRJbXAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVVuZGVmaW5lZEltcCAqVW5kZWZpbmVk
SW1wOjpzdGF0aWNVbmRlZmluZWQgPSAwOwotCi1WYWx1ZSBVbmRlZmluZWRJbXA6OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSAqLypleGVjKi8sIFR5cGUpIGNvbnN0CitWYWx1ZUltcCAqVW5kZWZpbmVk
SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKi8qZXhlYyovLCBUeXBlKSBjb25zdAogewotICBy
ZXR1cm4gVmFsdWUoKFZhbHVlSW1wKil0aGlzKTsKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8VW5kZWZp
bmVkSW1wICo+KHRoaXMpOwogfQogCiBib29sIFVuZGVmaW5lZEltcDo6dG9Cb29sZWFuKEV4ZWNT
dGF0ZSAqLypleGVjKi8pIGNvbnN0CkBAIC0xMjksMjAgKzEyNSwxOCBAQCBVU3RyaW5nIFVuZGVm
aW5lZEltcDo6dG9TdHJpbmcoRXhlY1N0YXRlCiAgIHJldHVybiAidW5kZWZpbmVkIjsKIH0KIAot
T2JqZWN0IFVuZGVmaW5lZEltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAorT2Jq
ZWN0SW1wICpVbmRlZmluZWRJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsK
LSAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1Ao
IlVuZGVmaW5lZCB2YWx1ZSIpKTsKKyAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFR5cGVFcnJvciwgSTE4Tl9OT09QKCJVbmRlZmluZWQgdmFsdWUiKSk7CiAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICByZXR1cm4gZXJyOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gTnVsbEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1OdWxsSW1wICpOdWxsSW1wOjpzdGF0aWNOdWxsID0gMDsKLQotVmFsdWUgTnVsbElt
cDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICovKmV4ZWMqLywgVHlwZSkgY29uc3QKK1ZhbHVlSW1w
ICpOdWxsSW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKi8qZXhlYyovLCBUeXBlKSBjb25zdAog
ewotICByZXR1cm4gVmFsdWUoKFZhbHVlSW1wKil0aGlzKTsKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8
TnVsbEltcCAqPih0aGlzKTsKIH0KIAogYm9vbCBOdWxsSW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRl
ICovKmV4ZWMqLykgY29uc3QKQEAgLTE2MCwyMSArMTU0LDE4IEBAIFVTdHJpbmcgTnVsbEltcDo6
dG9TdHJpbmcoRXhlY1N0YXRlICovKmUKICAgcmV0dXJuICJudWxsIjsKIH0KIAotT2JqZWN0IE51
bGxJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK09iamVjdEltcCAqTnVsbElt
cDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewotICBPYmplY3QgZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsIEkxOE5fTk9PUCgiTnVsbCB2YWx1ZSIpKTsKKyAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgSTE4Tl9OT09Q
KCJOdWxsIHZhbHVlIikpOwogICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgcmV0dXJuIGVy
cjsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5JbXAgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQm9vbGVhbkltcCogQm9vbGVhbklt
cDo6c3RhdGljVHJ1ZSA9IDA7Ci1Cb29sZWFuSW1wKiBCb29sZWFuSW1wOjpzdGF0aWNGYWxzZSA9
IDA7Ci0KLVZhbHVlIEJvb2xlYW5JbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqLypleGVjKi8s
IFR5cGUpIGNvbnN0CitWYWx1ZUltcCAqQm9vbGVhbkltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRl
ICovKmV4ZWMqLywgVHlwZSkgY29uc3QKIHsKLSAgcmV0dXJuIFZhbHVlKChWYWx1ZUltcCopdGhp
cyk7CisgIHJldHVybiBjb25zdF9jYXN0PEJvb2xlYW5JbXAgKj4odGhpcyk7CiB9CiAKIGJvb2wg
Qm9vbGVhbkltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqLypleGVjKi8pIGNvbnN0CkBAIC0xOTIs
MTggKzE4MywxOCBAQCBVU3RyaW5nIEJvb2xlYW5JbXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqCiAg
IHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwogfQogCi1PYmplY3QgQm9vbGVhbkltcDo6
dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAorT2JqZWN0SW1wICpCb29sZWFuSW1wOjp0
b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7CiAgIExpc3QgYXJnczsKICAgYXJncy5h
cHBlbmQoY29uc3RfY2FzdDxCb29sZWFuSW1wKj4odGhpcykpOwotICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkJvb2xlYW4oKS5j
b25zdHJ1Y3QoZXhlYyxhcmdzKSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5Cb29sZWFuKCktPmNvbnN0cnVjdChl
eGVjLGFyZ3MpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0cmlu
Z0ltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVmFsdWUgU3RyaW5n
SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKi8qZXhlYyovLCBUeXBlKSBjb25zdAorVmFsdWVJ
bXAgKlN0cmluZ0ltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICovKmV4ZWMqLywgVHlwZSkgY29u
c3QKIHsKLSAgcmV0dXJuIFZhbHVlKChWYWx1ZUltcCopdGhpcyk7CisgIHJldHVybiBjb25zdF9j
YXN0PFN0cmluZ0ltcCAqPih0aGlzKTsKIH0KIAogYm9vbCBTdHJpbmdJbXA6OnRvQm9vbGVhbihF
eGVjU3RhdGUgKi8qZXhlYyovKSBjb25zdApAQCAtMjIxLDM2ICsyMTIsMTggQEAgVVN0cmluZyBT
dHJpbmdJbXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqLwogICByZXR1cm4gdmFsOwogfQogCi1PYmpl
Y3QgU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitPYmplY3RJbXAg
KlN0cmluZ0ltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAogewogICBMaXN0IGFy
Z3M7CiAgIGFyZ3MuYXBwZW5kKGNvbnN0X2Nhc3Q8U3RyaW5nSW1wKj4odGhpcykpOwotICByZXR1
cm4gT2JqZWN0KHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0
ZXIoKS0+YnVpbHRpblN0cmluZygpLmNvbnN0cnVjdChleGVjLCBhcmdzKS5pbXAoKSkpOworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluU3RyaW5nKCktPmNvbnN0cnVjdChleGVjLCBhcmdzKSk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLU51bWJlckltcCAqTnVtYmVySW1wOjpzdGF0aWNOYU47Ci0KLVZh
bHVlSW1wICpOdW1iZXJJbXA6OmNyZWF0ZShpbnQgaSkKLXsKLSAgICBpZiAoU2ltcGxlTnVtYmVy
OjpmaXRzKGkpKQotICAgICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjptYWtlKGkpOwotICAgIHJl
dHVybiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotfQotCi1WYWx1ZUlt
cCAqTnVtYmVySW1wOjpjcmVhdGUoZG91YmxlIGQpCitWYWx1ZUltcCAqTnVtYmVySW1wOjp0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKiwgVHlwZSkgY29uc3QKIHsKLSAgICBpZiAoU2ltcGxlTnVtYmVy
OjpmaXRzKGQpKQotICAgICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjptYWtlKChpbnQpZCk7Ci0g
ICAgaWYgKGlzTmFOKGQpKQotICAgICAgICByZXR1cm4gc3RhdGljTmFOOwotICAgIHJldHVybiBu
ZXcgTnVtYmVySW1wKGQpOwotfQotCi1WYWx1ZSBOdW1iZXJJbXA6OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSAqLCBUeXBlKSBjb25zdAotewotICByZXR1cm4gTnVtYmVyKChOdW1iZXJJbXAqKXRoaXMp
OworICByZXR1cm4gY29uc3RfY2FzdDxOdW1iZXJJbXAgKj4odGhpcyk7CiB9CiAKIGJvb2wgTnVt
YmVySW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0CkBAIC0yNzAsMTYgKzI0MywxNiBA
QCBVU3RyaW5nIE51bWJlckltcDo6dG9TdHJpbmcoRXhlY1N0YXRlICopCiAgIHJldHVybiBVU3Ry
aW5nOjpmcm9tKHZhbCk7CiB9CiAKLU9iamVjdCBOdW1iZXJJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3QKK09iamVjdEltcCAqTnVtYmVySW1wOjp0b09iamVjdChFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0CiB7CiAgIExpc3QgYXJnczsKICAgYXJncy5hcHBlbmQoY29uc3RfY2FzdDxO
dW1iZXJJbXAqPih0aGlzKSk7Ci0gIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4ZWMtPmxl
eGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluTnVtYmVyKCkuY29uc3RydWN0KGV4ZWMsYXJncykp
OworICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnBy
ZXRlcigpLT5idWlsdGluTnVtYmVyKCktPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIH0KIAotYm9v
bCBOdW1iZXJJbXA6OnRvVUludDMyKHVuc2lnbmVkJiB1aW50MzIpIGNvbnN0Citib29sIE51bWJl
ckltcDo6Z2V0VUludDMyKHVpbnQzMl90JiB1aW50MzIpIGNvbnN0CiB7Ci0gIHVpbnQzMiA9ICh1
bnNpZ25lZCl2YWw7CisgIHVpbnQzMiA9ICh1aW50MzJfdCl2YWw7CiAgIHJldHVybiAoZG91Ymxl
KXVpbnQzMiA9PSB2YWw7CiB9CiAKQEAgLTMxNSw3ICsyODgsNyBAQCBMYWJlbFN0YWNrICZMYWJl
bFN0YWNrOjpvcGVyYXRvcj0oY29uc3QgCiAKIGJvb2wgTGFiZWxTdGFjazo6cHVzaChjb25zdCBJ
ZGVudGlmaWVyICZpZCkKIHsKLSAgaWYgKGlkLmlzRW1wdHkoKSB8fCBjb250YWlucyhpZCkpCisg
IGlmIChjb250YWlucyhpZCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIFN0YWNrRWxlbSAqbmV3
dG9zID0gbmV3IFN0YWNrRWxlbTsKQEAgLTM2NSw3ICszMzgsNyBAQCB2b2lkIExhYmVsU3RhY2s6
OmNsZWFyKCkKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb250ZXh0SW1wIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTAuMgotQ29udGV4
dEltcDo6Q29udGV4dEltcChPYmplY3QgJmdsb2IsIEludGVycHJldGVySW1wICppbnRlcnByZXRl
ciwgT2JqZWN0ICZ0aGlzViwgQ29kZVR5cGUgdHlwZSwKK0NvbnRleHRJbXA6OkNvbnRleHRJbXAo
T2JqZWN0SW1wICpnbG9iLCBJbnRlcnByZXRlckltcCAqaW50ZXJwcmV0ZXIsIE9iamVjdEltcCAq
dGhpc1YsIENvZGVUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRJbXAg
KmNhbGxpbmdDb24sIEZ1bmN0aW9uSW1wICpmdW5jLCBjb25zdCBMaXN0ICphcmdzKQogICAgIDog
X2ludGVycHJldGVyKGludGVycHJldGVyKSwgX2Z1bmN0aW9uKGZ1bmMpLCBfYXJndW1lbnRzKGFy
Z3MpCiB7CkBAIC0zNzQsMTAgKzM0NywxMCBAQCBDb250ZXh0SW1wOjpDb250ZXh0SW1wKE9iamVj
dCAmZ2xvYiwgSW50CiAKICAgLy8gY3JlYXRlIGFuZCBpbml0aWFsaXplIGFjdGl2YXRpb24gb2Jq
ZWN0IChFQ01BIDEwLjEuNikKICAgaWYgKHR5cGUgPT0gRnVuY3Rpb25Db2RlIHx8IHR5cGUgPT0g
QW5vbnltb3VzQ29kZSApIHsKLSAgICBhY3RpdmF0aW9uID0gT2JqZWN0KG5ldyBBY3RpdmF0aW9u
SW1wKGZ1bmMsICphcmdzKSk7CisgICAgYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKGZ1
bmMsICphcmdzKTsKICAgICB2YXJpYWJsZSA9IGFjdGl2YXRpb247CiAgIH0gZWxzZSB7Ci0gICAg
YWN0aXZhdGlvbiA9IE9iamVjdCgpOworICAgIGFjdGl2YXRpb24gPSBOVUxMOwogICAgIHZhcmlh
YmxlID0gZ2xvYjsKICAgfQogCkBAIC0zOTIsMTggKzM2NSwxOCBAQCBDb250ZXh0SW1wOjpDb250
ZXh0SW1wKE9iamVjdCAmZ2xvYiwgSW50CiAgICAgICB9IC8vIGVsc2Ugc2FtZSBhcyBHbG9iYWxD
b2RlCiAgICAgY2FzZSBHbG9iYWxDb2RlOgogICAgICAgc2NvcGUuY2xlYXIoKTsKLSAgICAgIHNj
b3BlLnB1c2goZ2xvYi5pbXAoKSk7Ci0gICAgICB0aGlzVmFsID0gT2JqZWN0KHN0YXRpY19jYXN0
PE9iamVjdEltcCo+KGdsb2IuaW1wKCkpKTsKKyAgICAgIHNjb3BlLnB1c2goZ2xvYik7CisgICAg
ICB0aGlzVmFsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oZ2xvYik7CiAgICAgICBicmVhazsK
ICAgICBjYXNlIEZ1bmN0aW9uQ29kZToKICAgICBjYXNlIEFub255bW91c0NvZGU6CiAgICAgICBp
ZiAodHlwZSA9PSBGdW5jdGlvbkNvZGUpIHsKIAlzY29wZSA9IGZ1bmMtPnNjb3BlKCk7Ci0Jc2Nv
cGUucHVzaChhY3RpdmF0aW9uLmltcCgpKTsKKwlzY29wZS5wdXNoKGFjdGl2YXRpb24pOwogICAg
ICAgfSBlbHNlIHsKIAlzY29wZS5jbGVhcigpOwotCXNjb3BlLnB1c2goZ2xvYi5pbXAoKSk7Ci0J
c2NvcGUucHVzaChhY3RpdmF0aW9uLmltcCgpKTsKKwlzY29wZS5wdXNoKGdsb2IpOworCXNjb3Bl
LnB1c2goYWN0aXZhdGlvbik7CiAgICAgICB9CiAgICAgICB2YXJpYWJsZSA9IGFjdGl2YXRpb247
IC8vIFRPRE86IERvbnREZWxldGUgPyAoRUNNQSAxMC4yLjMpCiAgICAgICB0aGlzVmFsID0gdGhp
c1Y7CkBAIC00NzgsMjUgKzQ1MSwxNSBAQCBJbnRlcnByZXRlckltcCogSW50ZXJwcmV0ZXJJbXA6
OnNfaG9vayA9CiAKIHZvaWQgSW50ZXJwcmV0ZXJJbXA6Omdsb2JhbEluaXQoKQogewotICAvL2Zw
cmludGYoIHN0ZGVyciwgIkludGVycHJldGVySW1wOjpnbG9iYWxJbml0KClcbiIgKTsKLSAgVW5k
ZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQgPSBuZXcgVW5kZWZpbmVkSW1wKCk7Ci0gIE51bGxJ
bXA6OnN0YXRpY051bGwgPSBuZXcgTnVsbEltcCgpOwotICBCb29sZWFuSW1wOjpzdGF0aWNUcnVl
ID0gbmV3IEJvb2xlYW5JbXAodHJ1ZSk7Ci0gIEJvb2xlYW5JbXA6OnN0YXRpY0ZhbHNlID0gbmV3
IEJvb2xlYW5JbXAoZmFsc2UpOwotICBOdW1iZXJJbXA6OnN0YXRpY05hTiA9IG5ldyBOdW1iZXJJ
bXAoTmFOKTsKKyAgICBDb25zdGFudFZhbHVlczo6aW5pdCgpOwogfQogCiB2b2lkIEludGVycHJl
dGVySW1wOjpnbG9iYWxDbGVhcigpCiB7Ci0gIC8vZnByaW50Ziggc3RkZXJyLCAiSW50ZXJwcmV0
ZXJJbXA6Omdsb2JhbENsZWFyKClcbiIgKTsKLSAgVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmlu
ZWQgPSAwOwotICBOdWxsSW1wOjpzdGF0aWNOdWxsID0gMDsKLSAgQm9vbGVhbkltcDo6c3RhdGlj
VHJ1ZSA9IDA7Ci0gIEJvb2xlYW5JbXA6OnN0YXRpY0ZhbHNlID0gMDsKLSAgTnVtYmVySW1wOjpz
dGF0aWNOYU4gPSAwOworICAgIENvbnN0YW50VmFsdWVzOjpjbGVhcigpOwogfQogCi1JbnRlcnBy
ZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoSW50ZXJwcmV0ZXIgKmludGVycCwgY29uc3QgT2JqZWN0
ICZnbG9iKQorSW50ZXJwcmV0ZXJJbXA6OkludGVycHJldGVySW1wKEludGVycHJldGVyICppbnRl
cnAsIE9iamVjdEltcCAqZ2xvYikKICAgICA6IF9jb250ZXh0KDApCiB7CiAgIC8vIGFkZCB0aGlz
IGludGVycHJldGVyIHRvIHRoZSBnbG9iYWwgY2hhaW4KQEAgLTUxNCw3ICs0NzcsNyBAQCBJbnRl
cnByZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoSW50ZXJwcmV0CiAgICAgZ2xvYmFsSW5pdCgpOwog
ICB9CiAKLSAgSW50ZXJwcmV0ZXJNYXA6OnNldEludGVycHJldGVyRm9yR2xvYmFsT2JqZWN0KHRo
aXMsIGdsb2IuaW1wKCkpOworICBJbnRlcnByZXRlck1hcDo6c2V0SW50ZXJwcmV0ZXJGb3JHbG9i
YWxPYmplY3QodGhpcywgZ2xvYik7CiAKICAgZ2xvYmFsID0gZ2xvYjsKICAgZ2xvYkV4ZWMgPSBu
ZXcgRXhlY1N0YXRlKG1faW50ZXJwcmV0ZXIsMCk7CkBAIC01NTAsODEgKzUxMyw3NSBAQCB2b2lk
IEludGVycHJldGVySW1wOjp1bmxvY2soKQogICAvLyBDb250cnVjdG9yIHByb3RvdHlwZSBvYmpl
Y3RzIChPYmplY3QucHJvdG90eXBlLCBBcnJheS5wcm90b3R5cGUgZXRjKQogCiAgIEZ1bmN0aW9u
UHJvdG90eXBlSW1wICpmdW5jUHJvdG8gPSBuZXcgRnVuY3Rpb25Qcm90b3R5cGVJbXAoZ2xvYkV4
ZWMpOwotICBiX0Z1bmN0aW9uUHJvdG90eXBlID0gT2JqZWN0KGZ1bmNQcm90byk7CisgIGJfRnVu
Y3Rpb25Qcm90b3R5cGUgPSBmdW5jUHJvdG87CiAgIE9iamVjdFByb3RvdHlwZUltcCAqb2JqUHJv
dG8gPSBuZXcgT2JqZWN0UHJvdG90eXBlSW1wKGdsb2JFeGVjLGZ1bmNQcm90byk7Ci0gIGJfT2Jq
ZWN0UHJvdG90eXBlID0gT2JqZWN0KG9ialByb3RvKTsKKyAgYl9PYmplY3RQcm90b3R5cGUgPSBv
YmpQcm90bzsKICAgZnVuY1Byb3RvLT5zZXRQcm90b3R5cGUoYl9PYmplY3RQcm90b3R5cGUpOwog
CiAgIEFycmF5UHJvdG90eXBlSW1wICphcnJheVByb3RvID0gbmV3IEFycmF5UHJvdG90eXBlSW1w
KGdsb2JFeGVjLG9ialByb3RvKTsKLSAgYl9BcnJheVByb3RvdHlwZSA9IE9iamVjdChhcnJheVBy
b3RvKTsKKyAgYl9BcnJheVByb3RvdHlwZSA9IGFycmF5UHJvdG87CiAgIFN0cmluZ1Byb3RvdHlw
ZUltcCAqc3RyaW5nUHJvdG8gPSBuZXcgU3RyaW5nUHJvdG90eXBlSW1wKGdsb2JFeGVjLG9ialBy
b3RvKTsKLSAgYl9TdHJpbmdQcm90b3R5cGUgPSBPYmplY3Qoc3RyaW5nUHJvdG8pOworICBiX1N0
cmluZ1Byb3RvdHlwZSA9IHN0cmluZ1Byb3RvOwogICBCb29sZWFuUHJvdG90eXBlSW1wICpib29s
ZWFuUHJvdG8gPSBuZXcgQm9vbGVhblByb3RvdHlwZUltcChnbG9iRXhlYyxvYmpQcm90byxmdW5j
UHJvdG8pOwotICBiX0Jvb2xlYW5Qcm90b3R5cGUgPSBPYmplY3QoYm9vbGVhblByb3RvKTsKKyAg
Yl9Cb29sZWFuUHJvdG90eXBlID0gYm9vbGVhblByb3RvOwogICBOdW1iZXJQcm90b3R5cGVJbXAg
Km51bWJlclByb3RvID0gbmV3IE51bWJlclByb3RvdHlwZUltcChnbG9iRXhlYyxvYmpQcm90byxm
dW5jUHJvdG8pOwotICBiX051bWJlclByb3RvdHlwZSA9IE9iamVjdChudW1iZXJQcm90byk7Cisg
IGJfTnVtYmVyUHJvdG90eXBlID0gbnVtYmVyUHJvdG87CiAgIERhdGVQcm90b3R5cGVJbXAgKmRh
dGVQcm90byA9IG5ldyBEYXRlUHJvdG90eXBlSW1wKGdsb2JFeGVjLG9ialByb3RvKTsKLSAgYl9E
YXRlUHJvdG90eXBlID0gT2JqZWN0KGRhdGVQcm90byk7CisgIGJfRGF0ZVByb3RvdHlwZSA9IGRh
dGVQcm90bzsKICAgUmVnRXhwUHJvdG90eXBlSW1wICpyZWdleHBQcm90byA9IG5ldyBSZWdFeHBQ
cm90b3R5cGVJbXAoZ2xvYkV4ZWMsb2JqUHJvdG8sZnVuY1Byb3RvKTsKLSAgYl9SZWdFeHBQcm90
b3R5cGUgPSBPYmplY3QocmVnZXhwUHJvdG8pOworICBiX1JlZ0V4cFByb3RvdHlwZSA9IHJlZ2V4
cFByb3RvOwogICBFcnJvclByb3RvdHlwZUltcCAqZXJyb3JQcm90byA9IG5ldyBFcnJvclByb3Rv
dHlwZUltcChnbG9iRXhlYyxvYmpQcm90byxmdW5jUHJvdG8pOwotICBiX0Vycm9yUHJvdG90eXBl
ID0gT2JqZWN0KGVycm9yUHJvdG8pOworICBiX0Vycm9yUHJvdG90eXBlID0gZXJyb3JQcm90bzsK
IAotICBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihnbG9iYWwuaW1wKCkpLT5zZXRQcm90b3R5cGUo
Yl9PYmplY3RQcm90b3R5cGUpOworICBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihnbG9iYWwpLT5z
ZXRQcm90b3R5cGUoYl9PYmplY3RQcm90b3R5cGUpOwogCiAgIC8vIENvbnN0cnVjdG9ycyAoT2Jq
ZWN0LCBBcnJheSwgZXRjLikKLSAgYl9PYmplY3QgPSBPYmplY3QobmV3IE9iamVjdE9iamVjdElt
cChnbG9iRXhlYywgb2JqUHJvdG8sIGZ1bmNQcm90bykpOwotICBiX0Z1bmN0aW9uID0gT2JqZWN0
KG5ldyBGdW5jdGlvbk9iamVjdEltcChnbG9iRXhlYywgZnVuY1Byb3RvKSk7Ci0gIGJfQXJyYXkg
PSBPYmplY3QobmV3IEFycmF5T2JqZWN0SW1wKGdsb2JFeGVjLCBmdW5jUHJvdG8sIGFycmF5UHJv
dG8pKTsKLSAgYl9TdHJpbmcgPSBPYmplY3QobmV3IFN0cmluZ09iamVjdEltcChnbG9iRXhlYywg
ZnVuY1Byb3RvLCBzdHJpbmdQcm90bykpOwotICBiX0Jvb2xlYW4gPSBPYmplY3QobmV3IEJvb2xl
YW5PYmplY3RJbXAoZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYm9vbGVhblByb3RvKSk7Ci0gIGJfTnVt
YmVyID0gT2JqZWN0KG5ldyBOdW1iZXJPYmplY3RJbXAoZ2xvYkV4ZWMsIGZ1bmNQcm90bywgbnVt
YmVyUHJvdG8pKTsKLSAgYl9EYXRlID0gT2JqZWN0KG5ldyBEYXRlT2JqZWN0SW1wKGdsb2JFeGVj
LCBmdW5jUHJvdG8sIGRhdGVQcm90bykpOwotICBiX1JlZ0V4cCA9IE9iamVjdChuZXcgUmVnRXhw
T2JqZWN0SW1wKGdsb2JFeGVjLCBmdW5jUHJvdG8sIHJlZ2V4cFByb3RvKSk7Ci0gIGJfRXJyb3Ig
PSBPYmplY3QobmV3IEVycm9yT2JqZWN0SW1wKGdsb2JFeGVjLCBmdW5jUHJvdG8sIGVycm9yUHJv
dG8pKTsKKyAgYl9PYmplY3QgPSBuZXcgT2JqZWN0T2JqZWN0SW1wKGdsb2JFeGVjLCBvYmpQcm90
bywgZnVuY1Byb3RvKTsKKyAgYl9GdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk9iamVjdEltcChnbG9i
RXhlYywgZnVuY1Byb3RvKTsKKyAgYl9BcnJheSA9IG5ldyBBcnJheU9iamVjdEltcChnbG9iRXhl
YywgZnVuY1Byb3RvLCBhcnJheVByb3RvKTsKKyAgYl9TdHJpbmcgPSBuZXcgU3RyaW5nT2JqZWN0
SW1wKGdsb2JFeGVjLCBmdW5jUHJvdG8sIHN0cmluZ1Byb3RvKTsKKyAgYl9Cb29sZWFuID0gbmV3
IEJvb2xlYW5PYmplY3RJbXAoZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYm9vbGVhblByb3RvKTsKKyAg
Yl9OdW1iZXIgPSBuZXcgTnVtYmVyT2JqZWN0SW1wKGdsb2JFeGVjLCBmdW5jUHJvdG8sIG51bWJl
clByb3RvKTsKKyAgYl9EYXRlID0gbmV3IERhdGVPYmplY3RJbXAoZ2xvYkV4ZWMsIGZ1bmNQcm90
bywgZGF0ZVByb3RvKTsKKyAgYl9SZWdFeHAgPSBuZXcgUmVnRXhwT2JqZWN0SW1wKGdsb2JFeGVj
LCBmdW5jUHJvdG8sIHJlZ2V4cFByb3RvKTsKKyAgYl9FcnJvciA9IG5ldyBFcnJvck9iamVjdElt
cChnbG9iRXhlYywgZnVuY1Byb3RvLCBlcnJvclByb3RvKTsKIAogICAvLyBFcnJvciBvYmplY3Qg
cHJvdG90eXBlcwotICBiX2V2YWxFcnJvclByb3RvdHlwZSA9IE9iamVjdChuZXcgTmF0aXZlRXJy
b3JQcm90b3R5cGVJbXAoZ2xvYkV4ZWMsZXJyb3JQcm90byxFdmFsRXJyb3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXZhbEVy
cm9yIiwiRXZhbEVycm9yIikpOwotICBiX3JhbmdlRXJyb3JQcm90b3R5cGUgPSBPYmplY3QobmV3
IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKGdsb2JFeGVjLGVycm9yUHJvdG8sUmFuZ2VFcnJvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJSYW5nZUVycm9yIiwiUmFuZ2VFcnJvciIpKTsKLSAgYl9yZWZlcmVuY2VFcnJvclByb3Rv
dHlwZSA9IE9iamVjdChuZXcgTmF0aXZlRXJyb3JQcm90b3R5cGVJbXAoZ2xvYkV4ZWMsZXJyb3JQ
cm90byxSZWZlcmVuY2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2VFcnJvciIsIlJlZmVyZW5jZUVycm9y
IikpOwotICBiX3N5bnRheEVycm9yUHJvdG90eXBlID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvclBy
b3RvdHlwZUltcChnbG9iRXhlYyxlcnJvclByb3RvLFN5bnRheEVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN5bnRheEVy
cm9yIiwiU3ludGF4RXJyb3IiKSk7Ci0gIGJfdHlwZUVycm9yUHJvdG90eXBlID0gT2JqZWN0KG5l
dyBOYXRpdmVFcnJvclByb3RvdHlwZUltcChnbG9iRXhlYyxlcnJvclByb3RvLFR5cGVFcnJvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJUeXBlRXJyb3IiLCJUeXBlRXJyb3IiKSk7Ci0gIGJfdXJpRXJyb3JQcm90b3R5cGUgPSBP
YmplY3QobmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKGdsb2JFeGVjLGVycm9yUHJvdG8sVVJJ
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVVJJRXJyb3IiLCJVUklFcnJvciIpKTsKKyAgYl9ldmFsRXJyb3JQcm90b3R5
cGUgPSBuZXcgTmF0aXZlRXJyb3JQcm90b3R5cGVJbXAoZ2xvYkV4ZWMsIGVycm9yUHJvdG8sIEV2
YWxFcnJvciwgIkV2YWxFcnJvciIsICJFdmFsRXJyb3IiKTsKKyAgYl9yYW5nZUVycm9yUHJvdG90
eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKGdsb2JFeGVjLCBlcnJvclByb3RvLCBS
YW5nZUVycm9yLCAiUmFuZ2VFcnJvciIsIlJhbmdlRXJyb3IiKTsKKyAgYl9yZWZlcmVuY2VFcnJv
clByb3RvdHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZUltcChnbG9iRXhlYyxlcnJvclBy
b3RvLFJlZmVyZW5jZUVycm9yLCAiUmVmZXJlbmNlRXJyb3IiLCJSZWZlcmVuY2VFcnJvciIpOwor
ICBiX3N5bnRheEVycm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKGds
b2JFeGVjLGVycm9yUHJvdG8sU3ludGF4RXJyb3IsICJTeW50YXhFcnJvciIsIlN5bnRheEVycm9y
Iik7CisgIGJfdHlwZUVycm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1w
KGdsb2JFeGVjLGVycm9yUHJvdG8sVHlwZUVycm9yLCAiVHlwZUVycm9yIiwiVHlwZUVycm9yIik7
CisgIGJfdXJpRXJyb3JQcm90b3R5cGUgPSBuZXcgTmF0aXZlRXJyb3JQcm90b3R5cGVJbXAoZ2xv
YkV4ZWMsZXJyb3JQcm90byxVUklFcnJvciwgIlVSSUVycm9yIiwiVVJJRXJyb3IiKTsKIAogICAv
LyBFcnJvciBvYmplY3RzCi0gIGJfZXZhbEVycm9yID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvcklt
cChnbG9iRXhlYyxmdW5jUHJvdG8sYl9ldmFsRXJyb3JQcm90b3R5cGUpKTsKLSAgYl9yYW5nZUVy
cm9yID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvckltcChnbG9iRXhlYyxmdW5jUHJvdG8sYl9yYW5n
ZUVycm9yUHJvdG90eXBlKSk7Ci0gIGJfcmVmZXJlbmNlRXJyb3IgPSBPYmplY3QobmV3IE5hdGl2
ZUVycm9ySW1wKGdsb2JFeGVjLGZ1bmNQcm90byxiX3JlZmVyZW5jZUVycm9yUHJvdG90eXBlKSk7
Ci0gIGJfc3ludGF4RXJyb3IgPSBPYmplY3QobmV3IE5hdGl2ZUVycm9ySW1wKGdsb2JFeGVjLGZ1
bmNQcm90byxiX3N5bnRheEVycm9yUHJvdG90eXBlKSk7Ci0gIGJfdHlwZUVycm9yID0gT2JqZWN0
KG5ldyBOYXRpdmVFcnJvckltcChnbG9iRXhlYyxmdW5jUHJvdG8sYl90eXBlRXJyb3JQcm90b3R5
cGUpKTsKLSAgYl91cmlFcnJvciA9IE9iamVjdChuZXcgTmF0aXZlRXJyb3JJbXAoZ2xvYkV4ZWMs
ZnVuY1Byb3RvLGJfdXJpRXJyb3JQcm90b3R5cGUpKTsKKyAgYl9ldmFsRXJyb3IgPSBuZXcgTmF0
aXZlRXJyb3JJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLGJfZXZhbEVycm9yUHJvdG90eXBlKTsKKyAg
Yl9yYW5nZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKGdsb2JFeGVjLGZ1bmNQcm90byxiX3Jh
bmdlRXJyb3JQcm90b3R5cGUpOworICBiX3JlZmVyZW5jZUVycm9yID0gbmV3IE5hdGl2ZUVycm9y
SW1wKGdsb2JFeGVjLGZ1bmNQcm90byxiX3JlZmVyZW5jZUVycm9yUHJvdG90eXBlKTsKKyAgYl9z
eW50YXhFcnJvciA9IG5ldyBOYXRpdmVFcnJvckltcChnbG9iRXhlYyxmdW5jUHJvdG8sYl9zeW50
YXhFcnJvclByb3RvdHlwZSk7CisgIGJfdHlwZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKGds
b2JFeGVjLGZ1bmNQcm90byxiX3R5cGVFcnJvclByb3RvdHlwZSk7CisgIGJfdXJpRXJyb3IgPSBu
ZXcgTmF0aXZlRXJyb3JJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLGJfdXJpRXJyb3JQcm90b3R5cGUp
OwogCiAgIC8vIEVDTUEgMTUuMy40LjEKICAgZnVuY1Byb3RvLT5wdXQoZ2xvYkV4ZWMsImNvbnN0
cnVjdG9yIiwgYl9GdW5jdGlvbiwgRG9udEVudW0pOwogCi0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMs
Ik9iamVjdCIsIGJfT2JqZWN0LCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsIkZ1
bmN0aW9uIiwgYl9GdW5jdGlvbiwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJB
cnJheSIsIGJfQXJyYXksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dChnbG9iRXhlYywiQm9vbGVh
biIsIGJfQm9vbGVhbiwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJTdHJpbmci
LCBiX1N0cmluZywgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJOdW1iZXIiLCBi
X051bWJlciwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJEYXRlIiwgYl9EYXRl
LCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsIlJlZ0V4cCIsIGJfUmVnRXhwLCBE
b250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsIkVycm9yIiwgYl9FcnJvciwgRG9udEVu
dW0pOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywiT2JqZWN0IiwgYl9PYmplY3QsIERvbnRFbnVt
KTsKKyAgZ2xvYmFsLT5wdXQoZ2xvYkV4ZWMsIkZ1bmN0aW9uIiwgYl9GdW5jdGlvbiwgRG9udEVu
dW0pOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywiQXJyYXkiLCBiX0FycmF5LCBEb250RW51bSk7
CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJCb29sZWFuIiwgYl9Cb29sZWFuLCBEb250RW51bSk7
CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJTdHJpbmciLCBiX1N0cmluZywgRG9udEVudW0pOwor
ICBnbG9iYWwtPnB1dChnbG9iRXhlYywiTnVtYmVyIiwgYl9OdW1iZXIsIERvbnRFbnVtKTsKKyAg
Z2xvYmFsLT5wdXQoZ2xvYkV4ZWMsIkRhdGUiLCBiX0RhdGUsIERvbnRFbnVtKTsKKyAgZ2xvYmFs
LT5wdXQoZ2xvYkV4ZWMsIlJlZ0V4cCIsIGJfUmVnRXhwLCBEb250RW51bSk7CisgIGdsb2JhbC0+
cHV0KGdsb2JFeGVjLCJFcnJvciIsIGJfRXJyb3IsIERvbnRFbnVtKTsKICAgLy8gVXNpbmcgSW50
ZXJuYWwgZm9yIHRob3NlIHRvIGhhdmUgc29tZXRoaW5nICE9IDAKICAgLy8gKHNlZSBranNfd2lu
ZG93KS4gTWF5YmUgRG9udEVudW0gd291bGQgYmUgb2sgdG9vID8KLSAgZ2xvYmFsLnB1dChnbG9i
RXhlYywiRXZhbEVycm9yIixiX2V2YWxFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwucHV0KGds
b2JFeGVjLCJSYW5nZUVycm9yIixiX3JhbmdlRXJyb3IsIEludGVybmFsKTsKLSAgZ2xvYmFsLnB1
dChnbG9iRXhlYywiUmVmZXJlbmNlRXJyb3IiLGJfcmVmZXJlbmNlRXJyb3IsIEludGVybmFsKTsK
LSAgZ2xvYmFsLnB1dChnbG9iRXhlYywiU3ludGF4RXJyb3IiLGJfc3ludGF4RXJyb3IsIEludGVy
bmFsKTsKLSAgZ2xvYmFsLnB1dChnbG9iRXhlYywiVHlwZUVycm9yIixiX3R5cGVFcnJvciwgSW50
ZXJuYWwpOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJVUklFcnJvciIsYl91cmlFcnJvciwgSW50
ZXJuYWwpOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywiRXZhbEVycm9yIixiX2V2YWxFcnJvciwg
SW50ZXJuYWwpOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywiUmFuZ2VFcnJvciIsYl9yYW5nZUVy
cm9yLCBJbnRlcm5hbCk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJSZWZlcmVuY2VFcnJvciIs
Yl9yZWZlcmVuY2VFcnJvciwgSW50ZXJuYWwpOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywiU3lu
dGF4RXJyb3IiLGJfc3ludGF4RXJyb3IsIEludGVybmFsKTsKKyAgZ2xvYmFsLT5wdXQoZ2xvYkV4
ZWMsIlR5cGVFcnJvciIsYl90eXBlRXJyb3IsIEludGVybmFsKTsKKyAgZ2xvYmFsLT5wdXQoZ2xv
YkV4ZWMsIlVSSUVycm9yIixiX3VyaUVycm9yLCBJbnRlcm5hbCk7CiAKICAgLy8gU2V0IHRoZSAi
Y29uc3RydWN0b3IiIHByb3BlcnR5IG9mIGFsbCBidWlsdGluIGNvbnN0cnVjdG9ycwogICBvYmpQ
cm90by0+cHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX09iamVjdCwgRG9udEVudW0gfCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwpAQCAtNjM2LDM2ICs1OTMsMzYgQEAgdm9pZCBJbnRlcnBy
ZXRlckltcDo6dW5sb2NrKCkKICAgZGF0ZVByb3RvLT5wdXQoZ2xvYkV4ZWMsICJjb25zdHJ1Y3Rv
ciIsIGJfRGF0ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICByZWdleHBQ
cm90by0+cHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX1JlZ0V4cCwgRG9udEVudW0gfCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOwogICBlcnJvclByb3RvLT5wdXQoZ2xvYkV4ZWMsICJjb25z
dHJ1Y3RvciIsIGJfRXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAg
Yl9ldmFsRXJyb3JQcm90b3R5cGUucHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX2V2YWxF
cnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotICBiX3JhbmdlRXJyb3JQ
cm90b3R5cGUucHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX3JhbmdlRXJyb3IsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl9yZWZlcmVuY2VFcnJvclByb3RvdHlw
ZS5wdXQoZ2xvYkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfcmVmZXJlbmNlRXJyb3IsIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl9zeW50YXhFcnJvclByb3RvdHlwZS5wdXQo
Z2xvYkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfc3ludGF4RXJyb3IsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl90eXBlRXJyb3JQcm90b3R5cGUucHV0KGdsb2JFeGVjLCAi
Y29uc3RydWN0b3IiLCBiX3R5cGVFcnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOwotICBiX3VyaUVycm9yUHJvdG90eXBlLnB1dChnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwg
Yl91cmlFcnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICBiX2V2YWxF
cnJvclByb3RvdHlwZS0+cHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX2V2YWxFcnJvciwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICBiX3JhbmdlRXJyb3JQcm90b3R5
cGUtPnB1dChnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl9yYW5nZUVycm9yLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgIGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGUtPnB1
dChnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl9yZWZlcmVuY2VFcnJvciwgRG9udEVudW0gfCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICBiX3N5bnRheEVycm9yUHJvdG90eXBlLT5wdXQoZ2xv
YkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfc3ludGF4RXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgYl90eXBlRXJyb3JQcm90b3R5cGUtPnB1dChnbG9iRXhlYywgImNv
bnN0cnVjdG9yIiwgYl90eXBlRXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgYl91cmlFcnJvclByb3RvdHlwZS0+cHV0KGdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBi
X3VyaUVycm9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgLy8gYnVp
bHQtaW4gdmFsdWVzCi0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsICJOYU4iLCAgICAgICAgTnVtYmVy
KE5hTiksIERvbnRFbnVtfERvbnREZWxldGUpOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCAiSW5m
aW5pdHkiLCAgIE51bWJlcihJbmYpLCBEb250RW51bXxEb250RGVsZXRlKTsKLSAgZ2xvYmFsLnB1
dChnbG9iRXhlYywgInVuZGVmaW5lZCIsICBVbmRlZmluZWQoKSwgRG9udEVudW18RG9udERlbGV0
ZSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCAiTmFOIiwgICAgICAgIGpzTmFOKCksIERvbnRF
bnVtfERvbnREZWxldGUpOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywgIkluZmluaXR5IiwgICBO
dW1iZXIoSW5mKSwgRG9udEVudW18RG9udERlbGV0ZSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVj
LCAidW5kZWZpbmVkIiwgIFVuZGVmaW5lZCgpLCBEb250RW51bXxEb250RGVsZXRlKTsKIAogICAv
LyBidWlsdC1pbiBmdW5jdGlvbnMKLSAgZ2xvYmFsLnB1dChnbG9iRXhlYywiZXZhbCIsICAgICAg
IE9iamVjdChuZXcgR2xvYmFsRnVuY0ltcChnbG9iRXhlYyxmdW5jUHJvdG8sR2xvYmFsRnVuY0lt
cDo6RXZhbCwgICAgICAgMSkpLCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsInBh
cnNlSW50IiwgICBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEds
b2JhbEZ1bmNJbXA6OlBhcnNlSW50LCAgIDIpKSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGds
b2JFeGVjLCJwYXJzZUZsb2F0IiwgT2JqZWN0KG5ldyBHbG9iYWxGdW5jSW1wKGdsb2JFeGVjLGZ1
bmNQcm90byxHbG9iYWxGdW5jSW1wOjpQYXJzZUZsb2F0LCAxKSksIERvbnRFbnVtKTsKLSAgZ2xv
YmFsLnB1dChnbG9iRXhlYywiaXNOYU4iLCAgICAgIE9iamVjdChuZXcgR2xvYmFsRnVuY0ltcChn
bG9iRXhlYyxmdW5jUHJvdG8sR2xvYmFsRnVuY0ltcDo6SXNOYU4sICAgICAgMSkpLCBEb250RW51
bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsImlzRmluaXRlIiwgICBPYmplY3QobmV3IEdsb2Jh
bEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OklzRmluaXRlLCAgIDEp
KSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJlc2NhcGUiLCAgICAgT2JqZWN0
KG5ldyBHbG9iYWxGdW5jSW1wKGdsb2JFeGVjLGZ1bmNQcm90byxHbG9iYWxGdW5jSW1wOjpFc2Nh
cGUsICAgICAxKSksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dChnbG9iRXhlYywidW5lc2NhcGUi
LCAgIE9iamVjdChuZXcgR2xvYmFsRnVuY0ltcChnbG9iRXhlYyxmdW5jUHJvdG8sR2xvYmFsRnVu
Y0ltcDo6VW5Fc2NhcGUsICAgMSkpLCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMs
ImRlY29kZVVSSSIsICBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3Rv
LEdsb2JhbEZ1bmNJbXA6OkRlY29kZVVSSSwgIDEpKSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0
KGdsb2JFeGVjLCJkZWNvZGVVUklDb21wb25lbnQiLCBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAo
Z2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkRlY29kZVVSSUNvbXBvbmVudCwgMSkp
LCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsImVuY29kZVVSSSIsICBPYmplY3Qo
bmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkVuY29k
ZVVSSSwgIDEpKSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJlbmNvZGVVUklD
b21wb25lbnQiLCBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEds
b2JhbEZ1bmNJbXA6OkVuY29kZVVSSUNvbXBvbmVudCwgMSkpLCBEb250RW51bSk7CisgIGdsb2Jh
bC0+cHV0KGdsb2JFeGVjLCJldmFsIiwgICAgICAgbmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMs
ZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkV2YWwsICAgICAgIDEpLCBEb250RW51bSk7CisgIGds
b2JhbC0+cHV0KGdsb2JFeGVjLCJwYXJzZUludCIsICAgbmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4
ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OlBhcnNlSW50LCAgIDIpLCBEb250RW51bSk7Cisg
IGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJwYXJzZUZsb2F0IiwgbmV3IEdsb2JhbEZ1bmNJbXAoZ2xv
YkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OlBhcnNlRmxvYXQsIDEpLCBEb250RW51bSk7
CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJpc05hTiIsICAgICAgbmV3IEdsb2JhbEZ1bmNJbXAo
Z2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OklzTmFOLCAgICAgIDEpLCBEb250RW51
bSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJpc0Zpbml0ZSIsICAgbmV3IEdsb2JhbEZ1bmNJ
bXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OklzRmluaXRlLCAgIDEpLCBEb250
RW51bSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJlc2NhcGUiLCAgICAgbmV3IEdsb2JhbEZ1
bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkVzY2FwZSwgICAgIDEpLCBE
b250RW51bSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJ1bmVzY2FwZSIsICAgbmV3IEdsb2Jh
bEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OlVuRXNjYXBlLCAgIDEp
LCBEb250RW51bSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJkZWNvZGVVUkkiLCAgbmV3IEds
b2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkRlY29kZVVSSSwg
IDEpLCBEb250RW51bSk7CisgIGdsb2JhbC0+cHV0KGdsb2JFeGVjLCJkZWNvZGVVUklDb21wb25l
bnQiLCBuZXcgR2xvYmFsRnVuY0ltcChnbG9iRXhlYyxmdW5jUHJvdG8sR2xvYmFsRnVuY0ltcDo6
RGVjb2RlVVJJQ29tcG9uZW50LCAxKSwgRG9udEVudW0pOworICBnbG9iYWwtPnB1dChnbG9iRXhl
YywiZW5jb2RlVVJJIiwgIG5ldyBHbG9iYWxGdW5jSW1wKGdsb2JFeGVjLGZ1bmNQcm90byxHbG9i
YWxGdW5jSW1wOjpFbmNvZGVVUkksICAxKSwgRG9udEVudW0pOworICBnbG9iYWwtPnB1dChnbG9i
RXhlYywiZW5jb2RlVVJJQ29tcG9uZW50IiwgbmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVu
Y1Byb3RvLEdsb2JhbEZ1bmNJbXA6OkVuY29kZVVSSUNvbXBvbmVudCwgMSksIERvbnRFbnVtKTsK
ICNpZm5kZWYgTkRFQlVHCi0gIGdsb2JhbC5wdXQoZ2xvYkV4ZWMsImtqc3ByaW50IiwgICBPYmpl
Y3QobmV3IEdsb2JhbEZ1bmNJbXAoZ2xvYkV4ZWMsZnVuY1Byb3RvLEdsb2JhbEZ1bmNJbXA6OktK
U1ByaW50LCAgIDEpKSwgRG9udEVudW0pOworICBnbG9iYWwtPnB1dChnbG9iRXhlYywia2pzcHJp
bnQiLCAgIG5ldyBHbG9iYWxGdW5jSW1wKGdsb2JFeGVjLGZ1bmNQcm90byxHbG9iYWxGdW5jSW1w
OjpLSlNQcmludCwgICAxKSwgRG9udEVudW0pOwogI2VuZGlmCiAKICAgLy8gYnVpbHQtaW4gb2Jq
ZWN0cwotICBnbG9iYWwucHV0KGdsb2JFeGVjLCJNYXRoIiwgT2JqZWN0KG5ldyBNYXRoT2JqZWN0
SW1wKGdsb2JFeGVjLG9ialByb3RvKSksIERvbnRFbnVtKTsKKyAgZ2xvYmFsLT5wdXQoZ2xvYkV4
ZWMsIk1hdGgiLCBuZXcgTWF0aE9iamVjdEltcChnbG9iRXhlYyxvYmpQcm90byksIERvbnRFbnVt
KTsKIH0KIAogSW50ZXJwcmV0ZXJJbXA6On5JbnRlcnByZXRlckltcCgpCkBAIC02OTMsNyArNjUw
LDcgQEAgdm9pZCBJbnRlcnByZXRlckltcDo6Y2xlYXIoKQogICAgIHNfaG9vayA9IDBMOwogICAg
IGdsb2JhbENsZWFyKCk7CiAgIH0KLSAgSW50ZXJwcmV0ZXJNYXA6OnJlbW92ZUludGVycHJldGVy
Rm9yR2xvYmFsT2JqZWN0KGdsb2JhbC5pbXAoKSk7CisgIEludGVycHJldGVyTWFwOjpyZW1vdmVJ
bnRlcnByZXRlckZvckdsb2JhbE9iamVjdChnbG9iYWwpOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwog
ICB1bmxvY2tJbnRlcnByZXRlcigpOwpAQCAtNzAyLDIxICs2NTksNyBAQCB2b2lkIEludGVycHJl
dGVySW1wOjpjbGVhcigpCiAKIHZvaWQgSW50ZXJwcmV0ZXJJbXA6Om1hcmsoKQogewotICAvL2lm
IChleFZhbCAmJiAhZXhWYWwtPm1hcmtlZCgpKQotICAvLyAgZXhWYWwtPm1hcmsoKTsKLSAgLy9p
ZiAocmV0VmFsICYmICFyZXRWYWwtPm1hcmtlZCgpKQotICAvLyAgcmV0VmFsLT5tYXJrKCk7Ci0g
IGlmIChVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVmaW5lZCAmJiAhVW5kZWZpbmVkSW1wOjpzdGF0
aWNVbmRlZmluZWQtPm1hcmtlZCgpKQotICAgIFVuZGVmaW5lZEltcDo6c3RhdGljVW5kZWZpbmVk
LT5tYXJrKCk7Ci0gIGlmIChOdWxsSW1wOjpzdGF0aWNOdWxsICYmICFOdWxsSW1wOjpzdGF0aWNO
dWxsLT5tYXJrZWQoKSkKLSAgICBOdWxsSW1wOjpzdGF0aWNOdWxsLT5tYXJrKCk7Ci0gIGlmIChO
dW1iZXJJbXA6OnN0YXRpY05hTiAmJiAhTnVtYmVySW1wOjpzdGF0aWNOYU4tPm1hcmtlZCgpKQot
ICAgIE51bWJlckltcDo6c3RhdGljTmFOLT5tYXJrKCk7Ci0gIGlmIChCb29sZWFuSW1wOjpzdGF0
aWNUcnVlICYmICFCb29sZWFuSW1wOjpzdGF0aWNUcnVlLT5tYXJrZWQoKSkKLSAgICBCb29sZWFu
SW1wOjpzdGF0aWNUcnVlLT5tYXJrKCk7Ci0gIGlmIChCb29sZWFuSW1wOjpzdGF0aWNGYWxzZSAm
JiAhQm9vbGVhbkltcDo6c3RhdGljRmFsc2UtPm1hcmtlZCgpKQotICAgIEJvb2xlYW5JbXA6OnN0
YXRpY0ZhbHNlLT5tYXJrKCk7Ci0gIC8vZnByaW50Ziggc3RkZXJyLCAiSW50ZXJwcmV0ZXJJbXA6
Om1hcmsgdGhpcz0lcCBnbG9iYWwuaW1wKCk9JXBcbiIsIHRoaXMsIGdsb2JhbC5pbXAoKSApOwor
ICBDb25zdGFudFZhbHVlczo6bWFyaygpOwogICBpZiAobV9pbnRlcnByZXRlcikKICAgICBtX2lu
dGVycHJldGVyLT5tYXJrKCk7CiAgIGlmIChfY29udGV4dCkKQEAgLTczNyw3ICs2ODAsNyBAQCBi
b29sIEludGVycHJldGVySW1wOjpjaGVja1N5bnRheChjb25zdCBVCiAgIHJldHVybiBvazsKIH0K
IAotQ29tcGxldGlvbiBJbnRlcnByZXRlckltcDo6ZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29k
ZSwgY29uc3QgVmFsdWUgJnRoaXNWLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIpCitDb21wbGV0aW9uIEludGVycHJldGVySW1wOjpldmFsdWF0ZShjb25z
dCBVU3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVS
TCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKIHsKICNpZiBBUFBMRV9DSEFOR0VTCiAgIGxvY2tJ
bnRlcnByZXRlcigpOwpAQCAtNzc1LDggKzcxOCw4IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXJJ
bXA6OmV2YWx1YXRlKGNvbnMKICAgCiAgIC8vIG5vIHByb2dyYW0gbm9kZSBtZWFucyBhIHN5bnRh
eCBlcnJvciBvY2N1cnJlZAogICBpZiAoIXByb2dOb2RlKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVy
cm9yOjpjcmVhdGUoZ2xvYkV4ZWMsU3ludGF4RXJyb3IsZXJyTXNnLmFzY2lpKCksZXJyTGluZSwg
LTEsICZzb3VyY2VVUkwpOwotICAgIGVyci5wdXQoZ2xvYkV4ZWMsInNpZCIsTnVtYmVyKHNpZCkp
OworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShnbG9iRXhlYyxTeW50YXhFcnJv
cixlcnJNc2cuYXNjaWkoKSxlcnJMaW5lLCAtMSwgJnNvdXJjZVVSTCk7CisgICAgZXJyLT5wdXQo
Z2xvYkV4ZWMsInNpZCIsTnVtYmVyKHNpZCkpOwogI2lmIEFQUExFX0NIQU5HRVMKICAgICB1bmxv
Y2tJbnRlcnByZXRlcigpOwogI2VuZGlmCkBAIC03ODgsMjEgKzczMSwyMSBAQCBDb21wbGV0aW9u
IEludGVycHJldGVySW1wOjpldmFsdWF0ZShjb25zCiAgIHJlY3Vyc2lvbisrOwogICBwcm9nTm9k
ZS0+cmVmKCk7CiAKLSAgT2JqZWN0ICZnbG9iYWxPYmogPSBnbG9iYWxPYmplY3QoKTsKLSAgT2Jq
ZWN0IHRoaXNPYmogPSBnbG9iYWxPYmplY3QoKTsKKyAgT2JqZWN0SW1wICpnbG9iYWxPYmogPSBn
bG9iYWxPYmplY3QoKTsKKyAgT2JqZWN0SW1wICp0aGlzT2JqID0gZ2xvYmFsT2JqZWN0KCk7CiAK
LSAgaWYgKCF0aGlzVi5pc051bGwoKSkgeworICBpZiAodGhpc1YpIHsKICAgICAvLyAidGhpcyIg
bXVzdCBiZSBhbiBvYmplY3QuLi4gdXNlIHNhbWUgcnVsZXMgYXMgRnVuY3Rpb24ucHJvdG90eXBl
LmFwcGx5KCkKLSAgICBpZiAodGhpc1YuaXNBKE51bGxUeXBlKSB8fCB0aGlzVi5pc0EoVW5kZWZp
bmVkVHlwZSkpCisgICAgaWYgKHRoaXNWLT5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgdGhp
c09iaiA9IGdsb2JhbE9iamVjdCgpOwogICAgIGVsc2UgewotICAgICAgdGhpc09iaiA9IHRoaXNW
LnRvT2JqZWN0KGdsb2JFeGVjKTsKKyAgICAgIHRoaXNPYmogPSB0aGlzVi0+dG9PYmplY3QoZ2xv
YkV4ZWMpOwogICAgIH0KICAgfQogCiAgIENvbXBsZXRpb24gcmVzOwogICBpZiAoZ2xvYkV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgLy8gdGhlIHRoaXNBcmcudG9PYmplY3QoKSBjb252ZXJz
aW9uIGFib3ZlIG1pZ2h0IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiAtIGlmIHNvLAorICAgIC8v
IHRoZSB0aGlzQXJnLT50b09iamVjdCgpIGNvbnZlcnNpb24gYWJvdmUgbWlnaHQgaGF2ZSB0aHJv
d24gYW4gZXhjZXB0aW9uIC0gaWYgc28sCiAgICAgLy8gcHJvcGFnYXRlIGl0IGJhY2sKICAgICBy
ZXMgPSBDb21wbGV0aW9uKFRocm93LGdsb2JFeGVjLT5leGNlcHRpb24oKSk7CiAgIH0KQEAgLTky
NiwzMyArODY5LDMyIEBAIGJvb2wgSW50ZXJuYWxGdW5jdGlvbkltcDo6aW1wbGVtZW50c0hhc0kK
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUJvb2xlYW4gSW50ZXJuYWxGdW5jdGlvbkltcDo6aGFzSW5z
dGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpCitib29sIEludGVybmFs
RnVuY3Rpb25JbXA6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVl
KQogewotICBpZiAodmFsdWUudHlwZSgpICE9IE9iamVjdFR5cGUpCi0gICAgcmV0dXJuIEJvb2xl
YW4oZmFsc2UpOworICBpZiAoIXZhbHVlLT5pc09iamVjdCgpKQorICAgIHJldHVybiBmYWxzZTsK
IAotICBWYWx1ZSBwcm90ID0gZ2V0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlOYW1lKTsKLSAgaWYg
KHByb3QudHlwZSgpICE9IE9iamVjdFR5cGUgJiYgcHJvdC50eXBlKCkgIT0gTnVsbFR5cGUpIHsK
LSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsICJJbnZhbGlk
IHByb3RvdHlwZSBlbmNvdW50ZXJlZCAiCisgIFZhbHVlSW1wICpwcm90ID0gZ2V0KGV4ZWMscHJv
dG90eXBlUHJvcGVydHlOYW1lKTsKKyAgaWYgKCFwcm90LT5pc09iamVjdCgpICYmICFwcm90LT5p
c051bGwoKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBUeXBl
RXJyb3IsICJJbnZhbGlkIHByb3RvdHlwZSBlbmNvdW50ZXJlZCAiCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImluIGluc3RhbmNlb2Ygb3BlcmF0aW9uLiIpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBCb29sZWFuKGZhbHNlKTsKKyAgICByZXR1cm4g
ZmFsc2U7CiAgIH0KIAotICBPYmplY3QgdiA9IE9iamVjdChzdGF0aWNfY2FzdDxPYmplY3RJbXAq
Pih2YWx1ZS5pbXAoKSkpOwotICB3aGlsZSAoKHYgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KHYucHJv
dG90eXBlKCkpKS5pbXAoKSkgewotICAgIGlmICh2LmltcCgpID09IHByb3QuaW1wKCkpCi0gICAg
ICByZXR1cm4gQm9vbGVhbih0cnVlKTsKKyAgT2JqZWN0SW1wICp2ID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KHZhbHVlKTsKKyAgd2hpbGUgKCh2ID0gdi0+cHJvdG90eXBlKCktPmdldE9iamVj
dCgpKSkgeworICAgIGlmICh2ID09IHByb3QpCisgICAgICByZXR1cm4gdHJ1ZTsKICAgfQotICBy
ZXR1cm4gQm9vbGVhbihmYWxzZSk7CisgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdsb2JhbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotZG91YmxlIEtKUzo6cm91bmRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IFZhbHVlICZ2KQorZG91YmxlIHJvdW5kVmFsdWUoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUlt
cCAqdikKIHsKLSAgTnVtYmVyIG4gPSB2LnRvTnVtYmVyKGV4ZWMpOwotICBkb3VibGUgZCA9IG4u
dmFsdWUoKTsKKyAgZG91YmxlIGQgPSB2LT50b051bWJlcihleGVjKTsKICAgZG91YmxlIGFkID0g
ZmFicyhkKTsKICAgaWYgKGFkID09IDAgfHwgaXNOYU4oZCkgfHwgaXNJbmYoZCkpCiAgICAgcmV0
dXJuIGQ7CkBAIC05NjEsMTUgKzkwMywxNSBAQCBkb3VibGUgS0pTOjpyb3VuZFZhbHVlKEV4ZWNT
dGF0ZSAqZXhlYywgCiAKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8c3RkaW8uaD4KLXZvaWQg
S0pTOjpwcmludEluZm8oRXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBjb25zdCBWYWx1
ZSAmbywgaW50IGxpbmVubykKK3ZvaWQgcHJpbnRJbmZvKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
Y2hhciAqcywgVmFsdWVJbXAgKm8sIGludCBsaW5lbm8pCiB7Ci0gIGlmIChvLmlzTnVsbCgpKQor
ICBpZiAoIW8pCiAgICAgZnByaW50ZihzdGRlcnIsICJLSlM6ICVzOiAobnVsbCkiLCBzKTsKICAg
ZWxzZSB7Ci0gICAgVmFsdWUgdiA9IG87CisgICAgVmFsdWVJbXAgKnYgPSBvOwogCiAgICAgVVN0
cmluZyBuYW1lOwotICAgIHN3aXRjaCAoIHYudHlwZSgpICkgeworICAgIHN3aXRjaCAodi0+dHlw
ZSgpKSB7CiAgICAgY2FzZSBVbnNwZWNpZmllZFR5cGU6CiAgICAgICBuYW1lID0gIlVuc3BlY2lm
aWVkIjsKICAgICAgIGJyZWFrOwpAQCAtOTg5LDE5ICs5MzEsMTkgQEAgdm9pZCBLSlM6OnByaW50
SW5mbyhFeGVjU3RhdGUgKmV4ZWMsIGNvbgogICAgICAgbmFtZSA9ICJOdW1iZXIiOwogICAgICAg
YnJlYWs7CiAgICAgY2FzZSBPYmplY3RUeXBlOgotICAgICAgbmFtZSA9IE9iamVjdDo6ZHluYW1p
Y0Nhc3QodikuY2xhc3NOYW1lKCk7CisgICAgICBuYW1lID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
ICo+KHYpLT5jbGFzc05hbWUoKTsKICAgICAgIGlmIChuYW1lLmlzTnVsbCgpKQogICAgICAgICBu
YW1lID0gIih1bmtub3duIGNsYXNzKSI7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgVVN0cmlu
ZyB2U3RyaW5nID0gdi50b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHZTdHJpbmcgPSB2LT50
b1N0cmluZyhleGVjKTsKICAgICBpZiAoIHZTdHJpbmcuc2l6ZSgpID4gNTAgKQogICAgICAgdlN0
cmluZyA9IHZTdHJpbmcuc3Vic3RyKCAwLCA1MCApICsgIi4uLiI7CiAgICAgLy8gQ2FuJ3QgdXNl
IHR3byBVU3RyaW5nOjphc2NpaSgpIGluIHRoZSBzYW1lIGZwcmludGYgY2FsbAogICAgIENTdHJp
bmcgdGVtcFN0cmluZyggdlN0cmluZy5jc3RyaW5nKCkgKTsKIAogICAgIGZwcmludGYoc3RkZXJy
LCAiS0pTOiAlczogJXMgOiAlcyAoJXApIiwKLSAgICAgICAgICAgIHMsIHRlbXBTdHJpbmcuY19z
dHIoKSwgbmFtZS5hc2NpaSgpLCAodm9pZCopdi5pbXAoKSk7CisgICAgICAgICAgICBzLCB0ZW1w
U3RyaW5nLmNfc3RyKCksIG5hbWUuYXNjaWkoKSwgKHZvaWQqKXYpOwogCiAgICAgaWYgKGxpbmVu
byA+PSAwKQogICAgICAgZnByaW50ZihzdGRlcnIsICIsIGxpbmUgJWRcbiIsbGluZW5vKTsKQEAg
LTEwMTAsMyArOTUyLDUgQEAgdm9pZCBLSlM6OnByaW50SW5mbyhFeGVjU3RhdGUgKmV4ZWMsIGNv
bgogICB9CiB9CiAjZW5kaWYKKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cm5hbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjMw
IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJuYWwuaAkyNyBKdWwgMjAwNSAyMzoxMDo0OSAtMDAwMAkxLjMwCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJuYWwuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA3IC0wMDAwCkBAIC0yMiw4ICsyMiw4
IEBACiAgKgogICovCiAKLSNpZm5kZWYgX0lOVEVSTkFMX0hfCi0jZGVmaW5lIF9JTlRFUk5BTF9I
XworI2lmbmRlZiBJTlRFUk5BTF9ICisjZGVmaW5lIElOVEVSTkFMX0gKIAogI2luY2x1ZGUgInVz
dHJpbmcuaCIKICNpbmNsdWRlICJ2YWx1ZS5oIgpAQCAtMzYsOSArMzYsNiBAQAogCiBuYW1lc3Bh
Y2UgS0pTIHsKIAotICBzdGF0aWMgY29uc3QgZG91YmxlIEQxNiA9IDY1NTM2LjA7Ci0gIHN0YXRp
YyBjb25zdCBkb3VibGUgRDMyID0gNDI5NDk2NzI5Ni4wOwotCiAgIGNsYXNzIFByb2dyYW1Ob2Rl
OwogICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwogICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZUlt
cDsKQEAgLTQ5LDExNSArNDYsOTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByaW1pdGl2ZSBpbXBscwogICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotICBjbGFzcyBVbmRlZmluZWRJbXAgOiBwdWJsaWMgVmFsdWVJbXAgeworICBjbGFzcyBVbmRl
ZmluZWRJbXAgOiBwdWJsaWMgQWxsb2NhdGVkVmFsdWVJbXAgewogICBwdWJsaWM6CiAgICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkVHlwZTsgfQogCi0gICAgVmFsdWUgdG9Q
cmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlw
ZSkgY29uc3Q7CisgICAgVmFsdWVJbXAgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlw
ZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwogICAgIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CiAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwotICAgIE9iamVjdCB0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gICAgc3Rh
dGljIFVuZGVmaW5lZEltcCAqc3RhdGljVW5kZWZpbmVkOworICAgIE9iamVjdEltcCAqdG9PYmpl
Y3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgfTsKIAotICBpbmxpbmUgVW5kZWZpbmVkOjpV
bmRlZmluZWQoVW5kZWZpbmVkSW1wICppbXApIDogVmFsdWUoaW1wKSB7IH0KLQotICBjbGFzcyBO
dWxsSW1wIDogcHVibGljIFZhbHVlSW1wIHsKKyAgY2xhc3MgTnVsbEltcCA6IHB1YmxpYyBBbGxv
Y2F0ZWRWYWx1ZUltcCB7CiAgIHB1YmxpYzoKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBOdWxsVHlwZTsgfQogCi0gICAgVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBU
eXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CisgICAgVmFsdWVJbXAgKnRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmllZFR5
cGUpIGNvbnN0OwogICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAg
ICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgVVN0cmluZyB0
b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotICAgIE9iamVjdCB0b09iamVjdChFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gICAgc3RhdGljIE51bGxJbXAgKnN0YXRpY051bGw7Cisg
ICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICB9OwogCi0g
IGlubGluZSBOdWxsOjpOdWxsKE51bGxJbXAgKmltcCkgOiBWYWx1ZShpbXApIHsgfQotCi0gIGNs
YXNzIEJvb2xlYW5JbXAgOiBwdWJsaWMgVmFsdWVJbXAgeworICBjbGFzcyBCb29sZWFuSW1wIDog
cHVibGljIEFsbG9jYXRlZFZhbHVlSW1wIHsKICAgcHVibGljOgogICAgIEJvb2xlYW5JbXAoYm9v
bCB2ID0gZmFsc2UpIDogdmFsKHYpIHsgfQogICAgIGJvb2wgdmFsdWUoKSBjb25zdCB7IHJldHVy
biB2YWw7IH0KIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEJvb2xlYW5UeXBlOyB9
CiAKLSAgICBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVk
ID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqdG9QcmltaXRpdmUoRXhl
Y1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CiAg
ICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBkb3VibGUgdG9O
dW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykg
Y29uc3Q7CisgICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Owog
Ci0gICAgc3RhdGljIEJvb2xlYW5JbXAgKnN0YXRpY1RydWU7Ci0gICAgc3RhdGljIEJvb2xlYW5J
bXAgKnN0YXRpY0ZhbHNlOwogICBwcml2YXRlOgogICAgIGJvb2wgdmFsOwogICB9OwogICAKLSAg
aW5saW5lIEJvb2xlYW46OkJvb2xlYW4oQm9vbGVhbkltcCAqaW1wKSA6IFZhbHVlKGltcCkgeyB9
Ci0KLSAgY2xhc3MgU3RyaW5nSW1wIDogcHVibGljIFZhbHVlSW1wIHsKKyAgY2xhc3MgU3RyaW5n
SW1wIDogcHVibGljIEFsbG9jYXRlZFZhbHVlSW1wIHsKICAgcHVibGljOgogICAgIFN0cmluZ0lt
cChjb25zdCBVU3RyaW5nJiB2KSA6IHZhbCh2KSB7IH0KICAgICBVU3RyaW5nIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gdmFsOyB9CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJp
bmdUeXBlOyB9CiAKLSAgICBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUg
cHJlZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkg
Y29uc3Q7CiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0KEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3Q7CisgICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgVVN0cmluZyB2YWw7CiAgIH07CiAKLSAgaW5saW5l
IFN0cmluZzo6U3RyaW5nKFN0cmluZ0ltcCAqaW1wKSA6IFZhbHVlKGltcCkgeyB9Ci0KLSAgY2xh
c3MgTnVtYmVySW1wIDogcHVibGljIFZhbHVlSW1wIHsKLSAgICBmcmllbmQgY2xhc3MgVmFsdWU7
Ci0gICAgZnJpZW5kIGNsYXNzIE51bWJlcjsKKyAgY2xhc3MgTnVtYmVySW1wIDogcHVibGljIEFs
bG9jYXRlZFZhbHVlSW1wIHsKKyAgICBmcmllbmQgY2xhc3MgQ29uc3RhbnRWYWx1ZXM7CiAgICAg
ZnJpZW5kIGNsYXNzIEludGVycHJldGVySW1wOwotICAgIGZyaWVuZCBWYWx1ZUltcCAqbnVtYmVy
KGludCk7Ci0gICAgZnJpZW5kIFZhbHVlSW1wICpudW1iZXIodW5zaWduZWQpOwotICAgIGZyaWVu
ZCBWYWx1ZUltcCAqbnVtYmVyKGxvbmcpOwotICAgIGZyaWVuZCBWYWx1ZUltcCAqbnVtYmVyKHVu
c2lnbmVkIGxvbmcpOwotICAgIGZyaWVuZCBWYWx1ZUltcCAqbnVtYmVyKGRvdWJsZSk7Ci0gICAg
ZnJpZW5kIFZhbHVlSW1wICpudW1iZXIoZG91YmxlLCBib29sKTsKKyAgICBmcmllbmQgVmFsdWVJ
bXAgKmpzTnVtYmVyKGludCk7CisgICAgZnJpZW5kIFZhbHVlSW1wICpqc051bWJlcih1bnNpZ25l
ZCk7CisgICAgZnJpZW5kIFZhbHVlSW1wICpqc051bWJlcihsb25nKTsKKyAgICBmcmllbmQgVmFs
dWVJbXAgKmpzTnVtYmVyKHVuc2lnbmVkIGxvbmcpOworICAgIGZyaWVuZCBWYWx1ZUltcCAqanNO
dW1iZXIoZG91YmxlKTsKKyAgICBmcmllbmQgVmFsdWVJbXAgKmpzTnVtYmVyKGRvdWJsZSwgYm9v
bCk7CiAgIHB1YmxpYzoKLSAgICBzdGF0aWMgVmFsdWVJbXAgKmNyZWF0ZShpbnQpOwotICAgIHN0
YXRpYyBWYWx1ZUltcCAqY3JlYXRlKGRvdWJsZSk7Ci0gICAgc3RhdGljIFZhbHVlSW1wICp6ZXJv
KCkgeyByZXR1cm4gU2ltcGxlTnVtYmVyOjptYWtlKDApOyB9Ci0gICAgc3RhdGljIFZhbHVlSW1w
ICpvbmUoKSB7IHJldHVybiBTaW1wbGVOdW1iZXI6Om1ha2UoMSk7IH0KLSAgICBzdGF0aWMgVmFs
dWVJbXAgKnR3bygpIHsgcmV0dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgyKTsgfQotICAgIAogICAg
IGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZhbDsgfQogCiAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gTnVtYmVyVHlwZTsgfQogCi0gICAgVmFsdWUgdG9QcmltaXRpdmUoRXhl
Y1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7Cisg
ICAgVmFsdWVJbXAgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQg
PSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwogICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CiAgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
CiAgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotICAgIE9iamVj
dCB0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gICAgc3RhdGljIE51bWJlcklt
cCAqc3RhdGljTmFOOworICAgIE9iamVjdEltcCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKIAogICBwcml2YXRlOgogICAgIE51bWJlckltcChkb3VibGUgdikgOiB2YWwodikgeyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdG9VSW50MzIodW5zaWduZWQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0VUludDMyKHVpbnQzMl90JikgY29uc3Q7CiAKICAgICBkb3VibGUgdmFsOwog
ICB9OwogCi0gIGlubGluZSBOdW1iZXI6Ok51bWJlcihOdW1iZXJJbXAgKmltcCkgOiBWYWx1ZShp
bXApIHsgfQotCiAgIC8qKgogICAgKiBAc2hvcnQgVGhlICJsYWJlbCBzZXQiIGluIEVjbWEtMjYy
IHNwZWMKICAgICovCkBAIC0yMDUsNyArMTc3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKIAogICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFy
c2luZyAmIGV2YWx1YXRlaW9uCisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNp
bmcgJiBldmFsdWF0aW9uCiAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgIGVudW0gQ29kZVR5
cGUgeyBHbG9iYWxDb2RlLApAQCAtMjc0LDcgKzI0Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHN0YXRpYyB2b2lkIGdsb2JhbEluaXQoKTsKICAgICBzdGF0aWMgdm9pZCBnbG9iYWxDbGVhcigp
OwogCi0gICAgSW50ZXJwcmV0ZXJJbXAoSW50ZXJwcmV0ZXIgKmludGVycCwgY29uc3QgT2JqZWN0
ICZnbG9iKTsKKyAgICBJbnRlcnByZXRlckltcChJbnRlcnByZXRlciAqaW50ZXJwLCBPYmplY3RJ
bXAgKmdsb2IpOwogICAgIH5JbnRlcnByZXRlckltcCgpOwogCiAgICAgUHJvdGVjdGVkT2JqZWN0
ICZnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFByb3RlY3RlZE9iamVj
dCAmPihnbG9iYWwpOyB9CkBAIC0yODksNDMgKzI2MSw0MyBAQCBuYW1lc3BhY2UgS0pTIHsKIAog
ICAgIEV4ZWNTdGF0ZSAqZ2xvYmFsRXhlYygpIHsgcmV0dXJuIGdsb2JFeGVjOyB9CiAgICAgYm9v
bCBjaGVja1N5bnRheChjb25zdCBVU3RyaW5nICZjb2RlKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1
YXRlKGNvbnN0IFVTdHJpbmcgJmNvZGUsIGNvbnN0IFZhbHVlICZ0aGlzViwgY29uc3QgVVN0cmlu
ZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDb21wbGV0aW9uIGV2
YWx1YXRlKGNvbnN0IFVTdHJpbmcgJmNvZGUsIFZhbHVlSW1wICp0aGlzViwgY29uc3QgVVN0cmlu
ZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKICAgICBEZWJ1Z2dlciAqZGVi
dWdnZXIoKSBjb25zdCB7IHJldHVybiBkYmc7IH0KICAgICB2b2lkIHNldERlYnVnZ2VyKERlYnVn
Z2VyICpkKSB7IGRiZyA9IGQ7IH0KIAotICAgIE9iamVjdCBidWlsdGluT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gYl9PYmplY3Q7IH0KLSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gYl9GdW5jdGlvbjsgfQotICAgIE9iamVjdCBidWlsdGluQXJyYXkoKSBjb25zdCB7
IHJldHVybiBiX0FycmF5OyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5Cb29sZWFuKCkgY29uc3QgeyBy
ZXR1cm4gYl9Cb29sZWFuOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBiX1N0cmluZzsgfQotICAgIE9iamVjdCBidWlsdGluTnVtYmVyKCkgY29uc3QgeyByZXR1
cm4gYl9OdW1iZXI7IH0KLSAgICBPYmplY3QgYnVpbHRpbkRhdGUoKSBjb25zdCB7IHJldHVybiBi
X0RhdGU7IH0KLSAgICBPYmplY3QgYnVpbHRpblJlZ0V4cCgpIGNvbnN0IHsgcmV0dXJuIGJfUmVn
RXhwOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3I7
IH0KLQotICAgIE9iamVjdCBidWlsdGluT2JqZWN0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
Yl9PYmplY3RQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gYl9GdW5jdGlvblByb3RvdHlwZTsgfQotICAgIE9iamVjdCBidWls
dGluQXJyYXlQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0FycmF5UHJvdG90eXBlOyB9Ci0g
ICAgT2JqZWN0IGJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9Cb29s
ZWFuUHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBiX1N0cmluZ1Byb3RvdHlwZTsgfQotICAgIE9iamVjdCBidWlsdGluTnVtYmVy
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXJQcm90b3R5cGU7IH0KLSAgICBPYmpl
Y3QgYnVpbHRpbkRhdGVQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0RhdGVQcm90b3R5cGU7
IH0KLSAgICBPYmplY3QgYnVpbHRpblJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJf
UmVnRXhwUHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5FcnJvclByb3RvdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGJfRXJyb3JQcm90b3R5cGU7IH0KLQotICAgIE9iamVjdCBidWlsdGluRXZh
bEVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9ldmFsRXJyb3I7IH0KLSAgICBPYmplY3QgYnVpbHRp
blJhbmdlRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3JhbmdlRXJyb3I7IH0KLSAgICBPYmplY3Qg
YnVpbHRpblJlZmVyZW5jZUVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9yZWZlcmVuY2VFcnJvcjsg
fQotICAgIE9iamVjdCBidWlsdGluU3ludGF4RXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3N5bnRh
eEVycm9yOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5UeXBlRXJyb3IoKSBjb25zdCB7IHJldHVybiBi
X3R5cGVFcnJvcjsgfQotICAgIE9iamVjdCBidWlsdGluVVJJRXJyb3IoKSBjb25zdCB7IHJldHVy
biBiX3VyaUVycm9yOyB9Ci0KLSAgICBPYmplY3QgYnVpbHRpbkV2YWxFcnJvclByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGJfZXZhbEVycm9yUHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0
aW5SYW5nZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9yYW5nZUVycm9yUHJvdG90
eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRp
blN5bnRheEVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9zeW50YXhFcnJvclByb3Rv
dHlwZTsgfQotICAgIE9iamVjdCBidWlsdGluVHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gYl90eXBlRXJyb3JQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRpblVSSUVycm9y
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl91cmlFcnJvclByb3RvdHlwZTsgfQorICAgIE9i
amVjdEltcCAqYnVpbHRpbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGJfT2JqZWN0OyB9CisgICAg
T2JqZWN0SW1wICpidWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBiX0Z1bmN0aW9uOyB9
CisgICAgT2JqZWN0SW1wICpidWlsdGluQXJyYXkoKSBjb25zdCB7IHJldHVybiBiX0FycmF5OyB9
CisgICAgT2JqZWN0SW1wICpidWlsdGluQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIGJfQm9vbGVh
bjsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGJfU3Ry
aW5nOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gYl9O
dW1iZXI7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5EYXRlKCkgY29uc3QgeyByZXR1cm4gYl9E
YXRlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVnRXhwKCkgY29uc3QgeyByZXR1cm4gYl9S
ZWdFeHA7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJf
RXJyb3I7IH0KKworICAgIE9iamVjdEltcCAqYnVpbHRpbk9iamVjdFByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGJfT2JqZWN0UHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluRnVu
Y3Rpb25Qcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0Z1bmN0aW9uUHJvdG90eXBlOyB9Cisg
ICAgT2JqZWN0SW1wICpidWlsdGluQXJyYXlQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0Fy
cmF5UHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluQm9vbGVhblByb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGJfQm9vbGVhblByb3RvdHlwZTsgfQorICAgIE9iamVjdEltcCAqYnVp
bHRpblN0cmluZ1Byb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfU3RyaW5nUHJvdG90eXBlOyB9
CisgICAgT2JqZWN0SW1wICpidWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
Yl9OdW1iZXJQcm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5EYXRlUHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gYl9EYXRlUHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWls
dGluUmVnRXhwUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9SZWdFeHBQcm90b3R5cGU7IH0K
KyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJf
RXJyb3JQcm90b3R5cGU7IH0KKworICAgIE9iamVjdEltcCAqYnVpbHRpbkV2YWxFcnJvcigpIGNv
bnN0IHsgcmV0dXJuIGJfZXZhbEVycm9yOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluUmFuZ2VF
cnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfcmFuZ2VFcnJvcjsgfQorICAgIE9iamVjdEltcCAqYnVp
bHRpblJlZmVyZW5jZUVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9yZWZlcmVuY2VFcnJvcjsgfQor
ICAgIE9iamVjdEltcCAqYnVpbHRpblN5bnRheEVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9zeW50
YXhFcnJvcjsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0IHsgcmV0
dXJuIGJfdHlwZUVycm9yOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluVVJJRXJyb3IoKSBjb25z
dCB7IHJldHVybiBiX3VyaUVycm9yOyB9CisKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FdmFsRXJy
b3JQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX2V2YWxFcnJvclByb3RvdHlwZTsgfQorICAg
IE9iamVjdEltcCAqYnVpbHRpblJhbmdlRXJyb3JQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBi
X3JhbmdlRXJyb3JQcm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SZWZlcmVuY2VF
cnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7
IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5TeW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGJfc3ludGF4RXJyb3JQcm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5U
eXBlRXJyb3JQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX3R5cGVFcnJvclByb3RvdHlwZTsg
fQorICAgIE9iamVjdEltcCAqYnVpbHRpblVSSUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gYl91cmlFcnJvclByb3RvdHlwZTsgfQogCiAgICAgdm9pZCBzZXRDb21wYXRNb2RlKEludGVy
cHJldGVyOjpDb21wYXRNb2RlIG1vZGUpIHsgbV9jb21wYXRNb2RlID0gbW9kZTsgfQogICAgIElu
dGVycHJldGVyOjpDb21wYXRNb2RlIGNvbXBhdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBh
dE1vZGU7IH0KQEAgLTQyMSwyMCArMzkzLDE5IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6
CiAgICAgSW50ZXJuYWxGdW5jdGlvbkltcChGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3Rv
KTsKICAgICBib29sIGltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0OwotICAgIEJvb2xlYW4g
aGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpOworICAgIGJv
b2wgaGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUpOwogCiAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCiAgIC8vIGhlbHBl
ciBmdW5jdGlvbiBmb3IgdG9JbnRlZ2VyLCB0b0ludDMyLCB0b1VJbnQzMiBhbmQgdG9VSW50MTYK
LSAgZG91YmxlIHJvdW5kVmFsdWUoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdik7Cisg
IGRvdWJsZSByb3VuZFZhbHVlKEV4ZWNTdGF0ZSAqLCBWYWx1ZUltcCAqKTsKIAogI2lmbmRlZiBO
REVCVUcKLSAgdm9pZCBwcmludEluZm8oRXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBj
b25zdCBWYWx1ZSAmbywgaW50IGxpbmVubyA9IC0xKTsKKyAgdm9pZCBwcmludEluZm8oRXhlY1N0
YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBWYWx1ZUltcCAqLCBpbnQgbGluZW5vID0gLTEpOwog
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlCiAKLQotI2VuZGlmIC8vICBfSU5URVJOQUxfSF8KKyNl
bmRpZiAvLyAgSU5URVJOQUxfSApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2lu
dGVycHJldGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC1wIC11IC11IC1w
IC1yMS4yNyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCi0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCTI3IEp1bCAyMDA1IDIzOjEwOjQ5IC0wMDAwCTEuMjcK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAJNyBBdWcgMjAwNSAwNDo0NDow
NyAtMDAwMApAQCAtNDcsMTIgKzQ3LDEyIEBAIGNvbnN0IFNjb3BlQ2hhaW4gJkNvbnRleHQ6OnNj
b3BlQ2hhaW4oKSAKICAgcmV0dXJuIHJlcC0+c2NvcGVDaGFpbigpOwogfQogCi1PYmplY3QgQ29u
dGV4dDo6dmFyaWFibGVPYmplY3QoKSBjb25zdAorT2JqZWN0SW1wICpDb250ZXh0Ojp2YXJpYWJs
ZU9iamVjdCgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPnZhcmlhYmxlT2JqZWN0KCk7CiB9CiAK
LU9iamVjdCBDb250ZXh0Ojp0aGlzVmFsdWUoKSBjb25zdAorT2JqZWN0SW1wICpDb250ZXh0Ojp0
aGlzVmFsdWUoKSBjb25zdAogewogICByZXR1cm4gcmVwLT50aGlzVmFsdWUoKTsKIH0KQEAgLTY0
LDE0ICs2NCwxNCBAQCBjb25zdCBDb250ZXh0IENvbnRleHQ6OmNhbGxpbmdDb250ZXh0KCkgCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlcnByZXRlciAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUludGVycHJldGVyOjpJbnRlcnByZXRlcihjb25z
dCBPYmplY3QgJmdsb2JhbCkgOiByZXAoMCkKK0ludGVycHJldGVyOjpJbnRlcnByZXRlcihPYmpl
Y3RJbXAgKmdsb2JhbCkgOiByZXAoMCkKIHsKICAgcmVwID0gbmV3IEludGVycHJldGVySW1wKHRo
aXMsZ2xvYmFsKTsKIH0KIAogSW50ZXJwcmV0ZXI6OkludGVycHJldGVyKCkKIHsKLSAgT2JqZWN0
IGdsb2JhbChuZXcgT2JqZWN0SW1wKCkpOworICBPYmplY3RJbXAgKmdsb2JhbChuZXcgT2JqZWN0
SW1wKCkpOwogICByZXAgPSBuZXcgSW50ZXJwcmV0ZXJJbXAodGhpcyxnbG9iYWwpOwogfQogCkBA
IC04MCw3ICs4MCw3IEBAIEludGVycHJldGVyOjp+SW50ZXJwcmV0ZXIoKQogICBkZWxldGUgcmVw
OwogfQogCi1PYmplY3QgJkludGVycHJldGVyOjpnbG9iYWxPYmplY3QoKSBjb25zdAorT2JqZWN0
SW1wICpJbnRlcnByZXRlcjo6Z2xvYmFsT2JqZWN0KCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+
Z2xvYmFsT2JqZWN0KCk7CiB9CkBAIC0xMTUsMTIgKzExNSwxMiBAQCBib29sIEludGVycHJldGVy
OjpjaGVja1N5bnRheChjb25zdCBVU3RyCiAgIHJldHVybiByZXAtPmNoZWNrU3ludGF4KGNvZGUp
OwogfQogCi1Db21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nICZj
b2RlLCBjb25zdCBWYWx1ZSAmdGhpc1YsIGNvbnN0IFVTdHJpbmcgJikKK0NvbXBsZXRpb24gSW50
ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcgJmNvZGUsIFZhbHVlSW1wICp0aGlzViwg
Y29uc3QgVVN0cmluZyAmKQogewogICByZXR1cm4gZXZhbHVhdGUoVVN0cmluZygpLCAwLCBjb2Rl
LCB0aGlzVik7CiB9CiAKLUNvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFVT
dHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVVN0cmluZyAm
Y29kZSwgY29uc3QgVmFsdWUgJnRoaXNWKQorQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVh
dGUoY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25z
dCBVU3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YpCiB7CiAgIENvbXBsZXRpb24gY29tcCA9
IHJlcC0+ZXZhbHVhdGUoY29kZSx0aGlzViwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIp
OwogCkBAIC0xMjksNyArMTI5LDcgQEAgQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUo
Y29uc3QgVQogICAgIGxvY2soKTsKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSByZXAtPmdsb2JhbEV4
ZWMoKTsKICAgICBjaGFyICpmID0gc3RyZHVwKHNvdXJjZVVSTC5hc2NpaSgpKTsKLSAgICBjb25z
dCBjaGFyICptZXNzYWdlID0gY29tcC52YWx1ZSgpLnRvT2JqZWN0KGV4ZWMpLnRvU3RyaW5nKGV4
ZWMpLmFzY2lpKCk7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IGNvbXAudmFsdWUoKS0+dG9P
YmplY3QoZXhlYyktPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCk7CiAgICAgcHJpbnRmKCJbJWRdICVz
OiVzXG4iLCBnZXRwaWQoKSwgZiwgbWVzc2FnZSk7CiAKICAgICBmcmVlKGYpOwpAQCAtMTQwLDE1
MiArMTQwLDE1MiBAQCBDb21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVCiAg
IHJldHVybiBjb21wOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5PYmplY3QoKSBj
b25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbk9iamVjdCgpIGNvbnN0CiB7CiAg
IHJldHVybiByZXAtPmJ1aWx0aW5PYmplY3QoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpi
dWlsdGluRnVuY3Rpb24oKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkZ1
bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkZ1bmN0aW9uKCk7CiB9CiAK
LU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpbkFycmF5KCkgY29uc3QKK09iamVjdEltcCAqSW50
ZXJwcmV0ZXI6OmJ1aWx0aW5BcnJheSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5B
cnJheSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuKCkgY29uc3QK
K09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuKCkgY29uc3QKIHsKICAgcmV0
dXJuIHJlcC0+YnVpbHRpbkJvb2xlYW4oKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWls
dGluU3RyaW5nKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5TdHJpbmco
KSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWlsdGluU3RyaW5nKCk7CiB9CiAKLU9iamVjdCBJ
bnRlcnByZXRlcjo6YnVpbHRpbk51bWJlcigpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVy
OjpidWlsdGluTnVtYmVyKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbk51bWJlcigp
OwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlKCkgY29uc3QKK09iamVjdElt
cCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVp
bHRpbkRhdGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmVnRXhwKCkgY29u
c3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWdFeHAoKSBjb25zdAogewogICBy
ZXR1cm4gcmVwLT5idWlsdGluUmVnRXhwKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVp
bHRpbkVycm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5FcnJvcigp
IGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5FcnJvcigpOwogfQogCi1PYmplY3QgSW50
ZXJwcmV0ZXI6OmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRl
cnByZXRlcjo6YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWls
dGluRnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVp
bHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkZ1
bmN0aW9uUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpbkFycmF5
UHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5BcnJheVBy
b3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5BcnJheVByb3RvdHlwZSgp
OwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29u
c3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29u
c3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKTsKIH0KIAotT2Jq
ZWN0IEludGVycHJldGVyOjpidWlsdGluU3RyaW5nUHJvdG90eXBlKCkgY29uc3QKK09iamVjdElt
cCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1
cm4gcmVwLT5idWlsdGluU3RyaW5nUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRl
cjo6YnVpbHRpbk51bWJlclByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVy
OjpidWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRp
bk51bWJlclByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRl
UHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlUHJv
dG90eXBlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKTsK
IH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmVnRXhwUHJvdG90eXBlKCkgY29uc3QK
K09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWdFeHBQcm90b3R5cGUoKSBjb25zdAog
ewogICByZXR1cm4gcmVwLT5idWlsdGluUmVnRXhwUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJ
bnRlcnByZXRlcjo6YnVpbHRpbkVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50
ZXJwcmV0ZXI6OmJ1aWx0aW5FcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAt
PmJ1aWx0aW5FcnJvclByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0
aW5FdmFsRXJyb3IoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkV2YWxF
cnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5FdmFsRXJyb3IoKTsKIH0KIAot
T2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmFuZ2VFcnJvcigpIGNvbnN0CitPYmplY3RJbXAg
KkludGVycHJldGVyOjpidWlsdGluUmFuZ2VFcnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAt
PmJ1aWx0aW5SYW5nZUVycm9yKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblJl
ZmVyZW5jZUVycm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWZl
cmVuY2VFcnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5SZWZlcmVuY2VFcnJv
cigpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5TeW50YXhFcnJvcigpIGNvbnN0
CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWlsdGluU3ludGF4RXJyb3IoKSBjb25zdAogewog
ICByZXR1cm4gcmVwLT5idWlsdGluU3ludGF4RXJyb3IoKTsKIH0KIAotT2JqZWN0IEludGVycHJl
dGVyOjpidWlsdGluVHlwZUVycm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1
aWx0aW5UeXBlRXJyb3IoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWlsdGluVHlwZUVycm9y
KCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblVSSUVycm9yKCkgY29uc3QKK09i
amVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5VUklFcnJvcigpIGNvbnN0CiB7CiAgIHJldHVy
biByZXAtPmJ1aWx0aW5VUklFcnJvcigpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0
aW5FdmFsRXJyb3JQcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVp
bHRpbkV2YWxFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5F
dmFsRXJyb3JQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmFu
Z2VFcnJvclByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWlsdGlu
UmFuZ2VFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5SYW5n
ZUVycm9yUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblJlZmVy
ZW5jZUVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0
aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0
aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1
aWx0aW5TeW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVy
OjpidWlsdGluU3ludGF4RXJyb3JQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5i
dWlsdGluU3ludGF4RXJyb3JQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpi
dWlsdGluVHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6
OmJ1aWx0aW5UeXBlRXJyb3JQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWls
dGluVHlwZUVycm9yUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRp
blVSSUVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0
aW5VUklFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5VUklF
cnJvclByb3RvdHlwZSgpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6
OnNldFNob3VsZFByaW50RXhjZXB0aW8KIH0KIAogCi12b2lkICpJbnRlcnByZXRlcjo6Y3JlYXRl
TGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIEJpbmRpbmdzOjpJbnN0
YW5jZTo6QmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25zdCBPYmplY3QgJnZhbHVlLCBjb25z
dCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVj
dCAqY3VycmVudCkKK3ZvaWQgKkludGVycHJldGVyOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9y
VmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ3M6Okluc3RhbmNlOjpCaW5kaW5nTGFuZ3Vh
Z2UgbGFuZ3VhZ2UsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0
ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KQogewogICAgIHJl
dHVybiBCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1ZSAo
ZXhlYywgbGFuZ3VhZ2UsIHZhbHVlLCBvcmlnaW4sIGN1cnJlbnQpOwogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjI1CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjI1IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRl
ci5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAkyNyBKdWwgMjAwNSAyMzox
MDo0OSAtMDAwMAkxLjI1CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAk3IEF1
ZyAyMDA1IDA0OjQ0OjA3IC0wMDAwCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAqCiAgICAgICogQHJldHVybiBUaGUgZXhlY3V0aW9uIGNvbnRleHQncyB2YXJpYWJsZSBv
YmplY3QKICAgICAgKi8KLSAgICBPYmplY3QgdmFyaWFibGVPYmplY3QoKSBjb25zdDsKKyAgICBP
YmplY3RJbXAgKnZhcmlhYmxlT2JqZWN0KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1
cm5zIHRoZSAidGhpcyIgdmFsdWUgZm9yIHRoZSBleGVjdXRpb24gY29udGV4dC4gVGhpcyBpcyB0
aGUgdmFsdWUKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICoKICAgICAg
KiBAcmV0dXJuIFRoZSBleGVjdXRpb24gY29udGV4dCdzICJ0aGlzIiB2YWx1ZQogICAgICAqLwot
ICAgIE9iamVjdCB0aGlzVmFsdWUoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKnRoaXNWYWx1ZSgp
IGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29udGV4dCBmcm9tIHdoaWNo
IHRoZSBjdXJyZW50IGNvbnRleHQgd2FzIGludm9rZWQuIEZvcgpAQCAtMTU0LDcgKzE1NCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAgICogQHBhcmFtIGdsb2JhbCBUaGUgb2JqZWN0
IHRvIHVzZSBhcyB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgdGhpcyBpbnRlcnByZXRlcgogICAgICAq
LwotICAgIEludGVycHJldGVyKGNvbnN0IE9iamVjdCAmZ2xvYmFsKTsKKyAgICBJbnRlcnByZXRl
cihPYmplY3RJbXAgKmdsb2JhbCk7CiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBpbnRl
cnByZXRlci4gQSBnbG9iYWwgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQKICAgICAgKiBpbml0
aWFsaXplZCB3aXRoIHRoZSBzdGFuZGFyZCBnbG9iYWwgcHJvcGVydGllcy4KQEAgLTE2Niw3ICsx
NjYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgdGhhdCBp
cyB1c2VkIGFzIHRoZSBnbG9iYWwgb2JqZWN0IGR1cmluZyBhbGwgc2NyaXB0CiAgICAgICogZXhl
Y3V0aW9uIHBlcmZvcm1lZCBieSB0aGlzIGludGVycHJldGVyCiAgICAgICovCi0gICAgT2JqZWN0
ICZnbG9iYWxPYmplY3QoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmdsb2JhbE9iamVjdCgpIGNv
bnN0OwogCiAgICAgdm9pZCBpbml0R2xvYmFsT2JqZWN0KCk7CiAKQEAgLTIxMCwxMCArMjEwLDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgZWl0aGVy
IGJlIE51bGwoKSBvciBhbiBPYmplY3QuCiAgICAgICogQHJldHVybiBBIGNvbXBsZXRpb24gb2Jq
ZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24uCiAgICAgICovCi0g
ICAgQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcgJmNvZGUsIGNvbnN0IFZhbHVlICZ0aGlzViA9
IFZhbHVlKCkpOworICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmc291cmNl
VVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1ZUlt
cCAqdGhpc1YgPSBOVUxMKTsKIAogCS8vIE92ZXJsb2FkIG9mIGV2YWx1YXRlIHRvIGtlZXAgSmF2
YVNjcmlwdEdsdWUgYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlLgotCUNvbXBsZXRp
b24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgY29uc3QgVmFsdWUgJnRoaXNWID0gVmFs
dWUoKSwgY29uc3QgVVN0cmluZyAmc291cmNlRmlsZW5hbWUgPSBVU3RyaW5nKCkpOworCUNvbXBs
ZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWID0gTlVM
TCwgY29uc3QgVVN0cmluZyAmc291cmNlRmlsZW5hbWUgPSBVU3RyaW5nKCkpOwogCiAgICAgLyoq
CiAgICAgICogQGludGVybmFsCkBAIC0yMzEsMTA5ICsyMzEsMTA5IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgYnVpbHRpbiAiT2JqZWN0IiBvYmplY3QKICAg
ICAgKi8KLSAgICBPYmplY3QgYnVpbHRpbk9iamVjdCgpIGNvbnN0OworICAgIE9iamVjdEltcCAq
YnVpbHRpbk9iamVjdCgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVp
bHRpbiAiRnVuY3Rpb24iIG9iamVjdC4KICAgICAgKi8KLSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0
aW9uKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluRnVuY3Rpb24oKSBjb25zdDsKIAog
ICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIkFycmF5IiBvYmplY3QuCiAgICAg
ICovCi0gICAgT2JqZWN0IGJ1aWx0aW5BcnJheSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVp
bHRpbkFycmF5KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGlu
ICJCb29sZWFuIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5Cb29sZWFuKCkg
Y29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluQm9vbGVhbigpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiU3RyaW5nIiBvYmplY3QuCiAgICAgICovCi0g
ICAgT2JqZWN0IGJ1aWx0aW5TdHJpbmcoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5T
dHJpbmcoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIk51
bWJlciIgb2JqZWN0LgogICAgICAqLwotICAgIE9iamVjdCBidWlsdGluTnVtYmVyKCkgY29uc3Q7
CisgICAgT2JqZWN0SW1wICpidWlsdGluTnVtYmVyKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAg
KiBSZXR1cm5zIHRoZSBidWlsdGluICJEYXRlIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0
IGJ1aWx0aW5EYXRlKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluRGF0ZSgpIGNvbnN0
OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiUmVnRXhwIiBvYmplY3Qu
CiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5SZWdFeHAoKSBjb25zdDsKKyAgICBPYmplY3RJ
bXAgKmJ1aWx0aW5SZWdFeHAoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhl
IGJ1aWx0aW4gIkVycm9yIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5FcnJv
cigpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkVycm9yKCkgY29uc3Q7CiAKICAgICAv
KioKICAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGluICJPYmplY3QucHJvdG90eXBlIiBvYmplY3Qu
CiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdDsKKyAg
ICBPYmplY3RJbXAgKmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgog
ICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIkZ1bmN0aW9uLnByb3RvdHlwZSIgb2JqZWN0Lgog
ICAgICAqLwotICAgIE9iamVjdCBidWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdDsKKyAg
ICBPYmplY3RJbXAgKmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiQXJyYXkucHJvdG90eXBlIiBvYmplY3QuCiAg
ICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5BcnJheVByb3RvdHlwZSgpIGNvbnN0OworICAgIE9i
amVjdEltcCAqYnVpbHRpbkFycmF5UHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAg
KiBSZXR1cm5zIHRoZSBidWlsdGluICJCb29sZWFuLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAq
LwotICAgIE9iamVjdCBidWlsdGluQm9vbGVhblByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVj
dEltcCAqYnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAq
IFJldHVybnMgdGhlIGJ1aWx0aW4gIlN0cmluZy5wcm90b3R5cGUiIG9iamVjdC4KICAgICAgKi8K
LSAgICBPYmplY3QgYnVpbHRpblN0cmluZ1Byb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdElt
cCAqYnVpbHRpblN0cmluZ1Byb3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0
dXJucyB0aGUgYnVpbHRpbiAiTnVtYmVyLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAqLwotICAg
IE9iamVjdCBidWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpi
dWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5z
IHRoZSBidWlsdGluICJEYXRlLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAqLwotICAgIE9iamVj
dCBidWlsdGluRGF0ZVByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkRh
dGVQcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0
aW4gIlJlZ0V4cC5wcm90b3R5cGUiIG9iamVjdC4KICAgICAgKi8KLSAgICBPYmplY3QgYnVpbHRp
blJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpblJlZ0V4cFBy
b3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAi
RXJyb3IucHJvdG90eXBlIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5FcnJv
clByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkVycm9yUHJvdG90eXBl
KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiAiRXJyb3Ii
IGdsb2JhbCBwcm9wZXJ0eQogICAgICAqLwotICAgIE9iamVjdCBidWlsdGluRXZhbEVycm9yKCkg
Y29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SYW5nZUVycm9yKCkgY29uc3Q7Ci0gICAgT2JqZWN0
IGJ1aWx0aW5SZWZlcmVuY2VFcnJvcigpIGNvbnN0OwotICAgIE9iamVjdCBidWlsdGluU3ludGF4
RXJyb3IoKSBjb25zdDsKLSAgICBPYmplY3QgYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0OwotICAg
IE9iamVjdCBidWlsdGluVVJJRXJyb3IoKSBjb25zdDsKLQotICAgIE9iamVjdCBidWlsdGluRXZh
bEVycm9yUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SYW5nZUVycm9yUHJv
dG90eXBlKCkgY29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlw
ZSgpIGNvbnN0OwotICAgIE9iamVjdCBidWlsdGluU3ludGF4RXJyb3JQcm90b3R5cGUoKSBjb25z
dDsKLSAgICBPYmplY3QgYnVpbHRpblR5cGVFcnJvclByb3RvdHlwZSgpIGNvbnN0OwotICAgIE9i
amVjdCBidWlsdGluVVJJRXJyb3JQcm90b3R5cGUoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1
aWx0aW5FdmFsRXJyb3IoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SYW5nZUVycm9y
KCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVmZXJlbmNlRXJyb3IoKSBjb25zdDsK
KyAgICBPYmplY3RJbXAgKmJ1aWx0aW5TeW50YXhFcnJvcigpIGNvbnN0OworICAgIE9iamVjdElt
cCAqYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpblVSSUVy
cm9yKCkgY29uc3Q7CisKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FdmFsRXJyb3JQcm90b3R5cGUo
KSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SYW5nZUVycm9yUHJvdG90eXBlKCkgY29u
c3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUoKSBjb25z
dDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5TeW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0Owor
ICAgIE9iamVjdEltcCAqYnVpbHRpblR5cGVFcnJvclByb3RvdHlwZSgpIGNvbnN0OworICAgIE9i
amVjdEltcCAqYnVpbHRpblVSSUVycm9yUHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICBlbnVtIENv
bXBhdE1vZGUgeyBOYXRpdmVNb2RlLCBJRUNvbXBhdCwgTmV0c2NhcGVDb21wYXQgfTsKICAgICAv
KioKQEAgLTM4Miw3ICszODIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBpcyB1c2VkIHRv
IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgdGhlIFdpbmRvdyBvYmplY3Qgc28gd2UgY2FuIHBl
cmZvcm0KICAgICAgKiBzZWN1cml0eSBjaGVja3MuCiAgICAgICovCi0gICAgdmlydHVhbCBib29s
IGlzR2xvYmFsT2JqZWN0KGNvbnN0IFZhbHVlICZ2KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc0dsb2JhbE9iamVjdChWYWx1ZUltcCAqdikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAKICAgICAvKiogCiAgICAgICogRmluZCB0aGUgaW50ZXJwcmV0ZXIgZm9yIGEgcGFydGlj
dWxhciBnbG9iYWwgb2JqZWN0LiAgVGhpcyBzaG91bGQgcmVhbGx5CkBAIC00MDEsNyArNDAxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGlzU2FmZVNjcmlw
dCAoY29uc3QgSW50ZXJwcmV0ZXIgKnRhcmdldCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAg
IHZpcnR1YWwgdm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUg
KmV4ZWMsIEJpbmRpbmdzOjpJbnN0YW5jZTo6QmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25z
dCBPYmplY3QgJnZhbHVlLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25z
dCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVudCk7CisgICAgdmlydHVhbCB2b2lkICpjcmVh
dGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ3M6Oklu
c3RhbmNlOjpCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3VhZ2UsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0
IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0
ICpjdXJyZW50KTsKICNlbmRpZgogICAgIAogICBwcml2YXRlOgpAQCAtNDYzLDEwICs0NjMsMTAg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgQ29udGV4dCBjb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gX2NvbnRleHQ7IH0KIAotICAgIHZvaWQgc2V0RXhjZXB0aW9uKGNvbnN0IFZhbHVl
ICZlKSB7IF9leGNlcHRpb24gPSBlOyB9Ci0gICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgX2V4
Y2VwdGlvbiA9IFZhbHVlKCk7IH0KLSAgICBWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7IHJldHVy
biBfZXhjZXB0aW9uOyB9Ci0gICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiAh
X2V4Y2VwdGlvbi5pc051bGwoKTsgfQorICAgIHZvaWQgc2V0RXhjZXB0aW9uKFZhbHVlSW1wICpl
KSB7IF9leGNlcHRpb24gPSBlOyB9CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgX2V4Y2Vw
dGlvbiA9IE5VTEw7IH0KKyAgICBWYWx1ZUltcCAqZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
X2V4Y2VwdGlvbjsgfQorICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gX2V4
Y2VwdGlvbjsgfQogCiAgIHByaXZhdGU6CiAgICAgRXhlY1N0YXRlKEludGVycHJldGVyICppbnRl
cnAsIENvbnRleHRJbXAgKmNvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjEzIEphdmFT
Y3JpcHRDb3JlL2tqcy9saXN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3BwCTE0
IEp1bCAyMDA1IDE4OjI3OjAyIC0wMDAwCTEuMTMKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9saXN0
LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA3IC0wMDAwCkBAIC0yMzMsMTEgKzIzMywxMSBAQCB2b2lk
IExpc3Q6OnJlbGVhc2UoKQogICAgIGRlYWxsb2NhdGVMaXN0SW1wKGltcCk7CiB9CiAKLVZhbHVl
SW1wICpMaXN0OjppbXBBdChpbnQgaSkgY29uc3QKK1ZhbHVlSW1wICpMaXN0OjphdChpbnQgaSkg
Y29uc3QKIHsKICAgICBMaXN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxMaXN0SW1wICo+KF9pbXBC
YXNlKTsKICAgICBpZiAoKHVuc2lnbmVkKWkgPj0gKHVuc2lnbmVkKWltcC0+c2l6ZSkKLSAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZEltcDo6c3RhdGljVW5kZWZpbmVkOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpZiAoaSA8IGlubGluZVZhbHVlc1NpemUpCiAgICAgICAgIHJl
dHVybiBpbXAtPnZhbHVlc1tpXTsKICAgICByZXR1cm4gaW1wLT5vdmVyZmxvd1tpIC0gaW5saW5l
VmFsdWVzU2l6ZV07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAtdSAtdSAtcCAtcjEuOSBKYXZhU2NyaXB0Q29yZS9ranMv
bGlzdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAy
IC0wMDAwCTEuOQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuaAk3IEF1ZyAyMDA1IDA0OjQ0
OjA3IC0wMDAwCkBAIC02Miw3ICs2Miw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgKgog
ICAgICAgICAgKiBAcGFyYW0gdmFsIFBvaW50ZXIgdG8gb2JqZWN0LgogICAgICAgICAgKi8KLSAg
ICAgICAgdm9pZCBhcHBlbmQoY29uc3QgVmFsdWUmIHZhbCkgeyBhcHBlbmQodmFsLmltcCgpKTsg
fQogICAgICAgICB2b2lkIGFwcGVuZChWYWx1ZUltcCAqdmFsKTsKICAgICAgICAgLyoqCiAgICAg
ICAgICAqIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgbGlzdC4KQEAgLTEwNCwxMyArMTAz
LDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgKiBAcmV0dXJuIFJldHVybiB0aGUgZWxl
bWVudCBhdCBwb3NpdGlvbiBpLiBLSlM6OlVuZGVmaW5lZCBpZiB0aGUKICAgICAgICAgICogaW5k
ZXggaXMgb3V0IG9mIHJhbmdlLgogICAgICAgICAgKi8KLSAgICAgICAgVmFsdWUgYXQoaW50IGkp
IGNvbnN0IHsgcmV0dXJuIFZhbHVlKGltcEF0KGkpKTsgfQorICAgICAgICBWYWx1ZUltcCAqYXQo
aW50IGkpIGNvbnN0OwogICAgICAgICAvKioKICAgICAgICAgICogRXF1aXZhbGVudCB0byBhdC4K
ICAgICAgICAgICovCi0gICAgICAgIFZhbHVlIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0
dXJuIFZhbHVlKGltcEF0KGkpKTsgfQotICAgICAgICAKLSAgICAgICAgVmFsdWVJbXAgKmltcEF0
KGludCBpKSBjb25zdDsKKyAgICAgICAgVmFsdWVJbXAgKm9wZXJhdG9yW10oaW50IGkpIGNvbnN0
IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgCiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5z
IGEgcG9pbnRlciB0byBhIHN0YXRpYyBpbnN0YW5jZSBvZiBhbiBlbXB0eSBsaXN0LiBVc2VmdWwg
aWYgYQpAQCAtMTQ2LDI1ICsxNDMsMjUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAqIERl
cmVmZXJlbmNlIHRoZSBpdGVyYXRvci4KICAgICAgICAgICogQHJldHVybiBBIHBvaW50ZXIgdG8g
dGhlIGVsZW1lbnQgdGhlIGl0ZXJhdG9yIG9wZXJhdGVzIG9uLgogICAgICAgICAgKi8KLSAgICAg
ICAgVmFsdWVJbXAgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfbGlzdC0+aW1wQXQoX2kp
OyB9Ci0gICAgICAgIFZhbHVlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIFZhbHVlKF9saXN0
LT5pbXBBdChfaSkpOyB9CisgICAgICAgIFZhbHVlSW1wICpvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gX2xpc3QtPmF0KF9pKTsgfQorICAgICAgICBWYWx1ZUltcCAqb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gX2xpc3QtPmF0KF9pKTsgfQogICAgICAgICAvKioKICAgICAgICAgICogUHJl
Zml4IGluY3JlbWVudCBvcGVyYXRvci4KICAgICAgICAgICogQHJldHVybiBUaGUgZWxlbWVudCBh
ZnRlciB0aGUgaW5jcmVtZW50LgogICAgICAgICAgKi8KLSAgICAgICAgVmFsdWUgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuIFZhbHVlKF9saXN0LT5pbXBBdCgrK19pKSk7IH0KKyAgICAgICAgVmFsdWVJ
bXAgKm9wZXJhdG9yKysoKSB7IHJldHVybiBfbGlzdC0+YXQoKytfaSk7IH0KICAgICAgICAgLyoq
CiAgICAgICAgICAqIFBvc3RmaXggaW5jcmVtZW50IG9wZXJhdG9yLgogICAgICAgICAgKi8KLSAg
ICAgICAgVmFsdWUgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIFZhbHVlKF9saXN0LT5pbXBBdChf
aSsrKSk7IH0KKyAgICAgICAgVmFsdWVJbXAgKm9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfbGlz
dC0+YXQoX2krKyk7IH0KICAgICAgICAgLyoqCiAgICAgICAgICAqIFByZWZpeCBkZWNyZW1lbnQg
b3BlcmF0b3IuCiAgICAgICAgICAqLwotICAgICAgICBWYWx1ZSBvcGVyYXRvci0tKCkgeyByZXR1
cm4gVmFsdWUoX2xpc3QtPmltcEF0KC0tX2kpKTsgfQorICAgICAgICBWYWx1ZUltcCAqb3BlcmF0
b3ItLSgpIHsgcmV0dXJuIF9saXN0LT5hdCgtLV9pKTsgfQogICAgICAgICAvKioKICAgICAgICAg
ICogUG9zdGZpeCBkZWNyZW1lbnQgb3BlcmF0b3IuCiAgICAgICAgICAqLwotICAgICAgICBWYWx1
ZSBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gVmFsdWUoX2xpc3QtPmltcEF0KF9pLS0pKTsgfQor
ICAgICAgICBWYWx1ZUltcCAqb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9saXN0LT5hdChfaS0t
KTsgfQogICAgICAgICAvKioKICAgICAgICAgICogQ29tcGFyZSB0aGUgaXRlcmF0b3Igd2l0aCBh
bm90aGVyIG9uZS4KICAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSB0d28gaXRlcmF0b3Jz
IG9wZXJhdGUgb24gdGhlIHNhbWUgbGlzdCBlbGVtZW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL2xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvbG9va3VwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtdSAt
cCAtcjEuMTYgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvbG9va3VwLmgJMjUgSnVsIDIwMDUgMjM6MzU6MzYgLTAwMDAJMS4xNgorKysgSmF2YVNjcmlw
dENvcmUva2pzL2xvb2t1cC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDcgLTAwMDAKQEAgLTEyNyw3ICsx
MjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICogSGVscGVyIGZvciBsb29rdXBGdW5jdGlvbiBh
bmQgbG9va3VwVmFsdWVPckZ1bmN0aW9uCiAgICAqLwogICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY0lt
cD4KLSAgaW5saW5lIFZhbHVlIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCisgIGlubGluZSBWYWx1ZUltcCAqbG9v
a3VwT3JDcmVhdGVGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T2JqZWN0SW1wICp0aGlzT2JqLCBpbnQgdG9rZW4sIGludCBwYXJhbXMsIGludCBhdHRyKQogICB7
CiAgICAgICAvLyBMb29rIGZvciBjYWNoZWQgdmFsdWUgaW4gZHluYW1pYyBtYXAgb2YgcHJvcGVy
dGllcyAoaW4gT2JqZWN0SW1wKQpAQCAtMTM1LDkgKzEzNSw5IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgLyppZiAoY2FjaGVkVmFsKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvb2t1cE9y
Q3JlYXRlRnVuY3Rpb246IEZ1bmN0aW9uIC0+IGxvb2tlZCB1cCBpbiBPYmplY3RJbXAsIGZvdW5k
IHR5cGU9JWRcbiIsIGNhY2hlZFZhbC0+dHlwZSgpKTsqLwogICAgICAgaWYgKGNhY2hlZFZhbCkK
LSAgICAgICAgcmV0dXJuIFZhbHVlKGNhY2hlZFZhbCk7CisgICAgICAgIHJldHVybiBjYWNoZWRW
YWw7CiAKLSAgICAgIFZhbHVlIHZhbCA9IFZhbHVlKG5ldyBGdW5jSW1wKGV4ZWMsdG9rZW4sIHBh
cmFtcykpOworICAgICAgVmFsdWVJbXAgKnZhbCA9IG5ldyBGdW5jSW1wKGV4ZWMsdG9rZW4sIHBh
cmFtcyk7CiAgICAgICBPYmplY3RJbXAgKnRoYXRPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCAq
Pih0aGlzT2JqKTsKICAgICAgIHRoYXRPYmotPk9iamVjdEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsLCBhdHRyKTsKICAgICAgIHJldHVybiB2YWw7CkBAIC0xNjUsNyArMTY1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY0ltcCwgY2xhc3Mg
VGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgogICBpbmxpbmUgYm9vbCBsb29rdXBHZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwg
Y29uc3QgVGhpc0ltcCogdGhpc09iaiwgVmFsdWUmIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgY29uc3QgVGhpc0ltcCog
dGhpc09iaiwgVmFsdWVJbXAgKiYgcmVzdWx0KQogICB7CiAgICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwogCkBAIC0xODYs
NyArMTg2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICB0ZW1wbGF0ZSA8Y2xhc3MgRnVu
Y0ltcCwgY2xhc3MgUGFyZW50SW1wPgogICBpbmxpbmUgYm9vbCBsb29rdXBHZXRPd25GdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgY29u
c3QgT2JqZWN0SW1wKiB0aGlzT2JqLCBWYWx1ZSYgcmVzdWx0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBjb25zdCBPYmplY3RJbXAq
IHRoaXNPYmosIFZhbHVlSW1wIComIHJlc3VsdCkKICAgewogICAgIGNvbnN0IEhhc2hFbnRyeSog
ZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKIApAQCAtMjA1
LDcgKzIwNSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgKi8KICAgdGVtcGxhdGUgPGNsYXNzIFRo
aXNJbXAsIGNsYXNzIFBhcmVudEltcD4KICAgaW5saW5lIGJvb2wgbG9va3VwR2V0T3duVmFsdWUo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIGNvbnN0IFRo
aXNJbXAqIHRoaXNPYmosIFZhbHVlJiByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIGNvbnN0IFRoaXNJbXAqIHRoaXNPYmosIFZh
bHVlSW1wIComIHJlc3VsdCkKICAgewogICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29r
dXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKIApAQCAtMjI0LDcgKzIyNCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgKi8KICAgdGVtcGxhdGUgPGNsYXNzIFRoaXNJbXAsIGNsYXNz
IFBhcmVudEltcD4KICAgaW5saW5lIHZvaWQgbG9va3VwUHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIYXNo
VGFibGUqIHRhYmxlLCBUaGlzSW1wKiB0aGlzT2JqKQogICB7CiAgICAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMjUz
LDE0ICsyNTMsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHRlbXBsYXRlIDxjbGFzcyBDbGFzc0N0
b3I+CiAgIGlubGluZSBPYmplY3RJbXAgKmNhY2hlR2xvYmFsT2JqZWN0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKQogICB7Ci0gICAgT2JqZWN0SW1wICpn
bG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmdsb2JhbE9iamVjdCgpLmltcCgpKTsKKyAgICBPYmplY3RJbXAgKmdsb2JhbE9i
amVjdCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIo
KS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgIFZhbHVlSW1wICpvYmogPSBnbG9iYWxPYmplY3QtPmdl
dERpcmVjdChwcm9wZXJ0eU5hbWUpOwogICAgIGlmIChvYmopIHsKICAgICAgIGFzc2VydChvYmot
PmlzT2JqZWN0KCkpOwogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihvYmop
OwogICAgIH0KICAgICBPYmplY3RJbXAgKm5ld09iamVjdCA9IG5ldyBDbGFzc0N0b3IoZXhlYyk7
Ci0gICAgZ2xvYmFsT2JqZWN0LT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBWYWx1ZShuZXdPYmpl
Y3QpLCBJbnRlcm5hbCk7CisgICAgZ2xvYmFsT2JqZWN0LT5wdXQoZXhlYywgcHJvcGVydHlOYW1l
LCBuZXdPYmplY3QsIEludGVybmFsKTsKICAgICByZXR1cm4gbmV3T2JqZWN0OwogICB9CiAKQEAg
LTI4Niw3ICsyODYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOiBcCiAgICAgc3RhdGlj
IE9iamVjdEltcCAqc2VsZihFeGVjU3RhdGUgKmV4ZWMpIFwKICAgICB7IFwKLSAgICAgIHJldHVy
biBjYWNoZUdsb2JhbE9iamVjdDxDbGFzc1Byb3RvPiggZXhlYywgIltbIiBDbGFzc05hbWUgIi5w
cm90b3R5cGVdXSIgKTsgXAorICAgICAgcmV0dXJuIGNhY2hlR2xvYmFsT2JqZWN0PENsYXNzUHJv
dG8+KGV4ZWMsICJbWyIgQ2xhc3NOYW1lICIucHJvdG90eXBlXV0iKTsgXAogICAgIH0gXAogICBw
cm90ZWN0ZWQ6IFwKICAgICBDbGFzc1Byb3RvKCBFeGVjU3RhdGUgKmV4ZWMgKSBcCkBAIC0yOTUs
MTMgKzI5NSwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOiBcCiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9IFwKICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87IFwKLSAgICBib29sIGdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdDsgXAorICAgIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3VsdCkgY29u
c3Q7IFwKICAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAogICB9OyBcCiAgIGNvbnN0IENsYXNzSW5m
byBDbGFzc1Byb3RvOjppbmZvID0geyBDbGFzc05hbWUsIDAsICZDbGFzc1Byb3RvIyNUYWJsZSwg
MCB9OwogCiAjZGVmaW5lIElNUExFTUVOVF9QUk9UT1RZUEUoQ2xhc3NQcm90byxDbGFzc0Z1bmMp
IFwKLSAgICBib29sIENsYXNzUHJvdG86OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdCBcCisg
ICAgYm9vbCBDbGFzc1Byb3RvOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdCBcCiAg
ICAgeyBcCiAgICAgICByZXR1cm4gbG9va3VwR2V0T3duRnVuY3Rpb248Q2xhc3NGdW5jLE9iamVj
dEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmQ2xhc3NQcm90byMjVGFibGUsIHRoaXMsIHJlc3Vs
dCk7IFwKICAgICB9IFwKQEAgLTMxMSw3ICszMTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9
CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BST1RPVFlQRV9XSVRIX1BBUkVOVChDbGFzc1Byb3RvLENs
YXNzRnVuYyxQYXJlbnRQcm90bykgIFwKLSAgICBib29sIENsYXNzUHJvdG86OmdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdCBcCisgICAgYm9vbCBDbGFzc1Byb3RvOjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAg
KiYgcmVzdWx0KSBjb25zdCBcCiAgICAgeyBcCiAgICAgICBpZiAobG9va3VwR2V0T3duRnVuY3Rp
b248Q2xhc3NGdW5jLE9iamVjdEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmQ2xhc3NQcm90byMj
VGFibGUsIHRoaXMsIHJlc3VsdCkpIFwKICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXApAQCAtMzMx
LDggKzMzMSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHsgXAogICAgICAgIHB1dChleGVjLCBs
ZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW4pLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRF
bnVtKTsgXAogICAgIH0gXAotICAgIC8qIE1hY3JvIHVzZXIgbmVlZHMgdG8gaW1wbGVtZW50IHRo
ZSBjYWxsIGZ1bmN0aW9uLiAqLyBcCi0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsgXAorICAgIC8qIE1hY3Jv
IHVzZXIgbmVlZHMgdG8gaW1wbGVtZW50IHRoZSBjYWxsQXNGdW5jdGlvbiBmdW5jdGlvbi4gKi8g
XAorICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsgXAogICBwcml2YXRlOiBcCiAg
ICAgaW50IGlkOyBcCiAgIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbWF0
aF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXUgLXAg
LXIxLjE1IEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9tYXRoX29iamVjdC5jcHAJMjUgSnVsIDIwMDUgMjI6MTc6MTIgLTAwMDAJMS4xNQor
KysgSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA3
IC0wMDAwCkBAIC04MCwxMyArODAsMTIgQEAgTWF0aE9iamVjdEltcDo6TWF0aE9iamVjdEltcChF
eGVjU3RhdGUgKgogfQogCiAvLyBFQ01BIDE1LjgKLQotYm9vbCBNYXRoT2JqZWN0SW1wOjpnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgTWF0aE9iamVjdEltcDo6Z2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wIComIHJlc3VsdCkgY29uc3QKIHsKICAgcmV0dXJuIGxvb2t1cEdldE93blByb3BlcnR5PE1h
dGhGdW5jSW1wLCBNYXRoT2JqZWN0SW1wLCBPYmplY3RJbXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
Jm1hdGhUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgTWF0aE9iamVjdEltcDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk1h
dGhPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKICAgZG91YmxlIGQgPSAtNDI7IC8vIDspCiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTEy
NSwxMCArMTI0LDkgQEAgVmFsdWUgTWF0aE9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAog
CiBNYXRoRnVuY0ltcDo6TWF0aEZ1bmNJbXAoRXhlY1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGwp
CiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcCgKLSAgICBzdGF0aWNfY2FzdDxGdW5jdGlvblByb3Rv
dHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRnVuY3Rpb25Qcm90
b3R5cGUoKS5pbXAoKSkKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvblByb3RvdHlwZUltcCo+KGV4
ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKSkKICAg
ICApLCBpZChpKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3Ro
UHJvcGVydHlOYW1lLCBsLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIApAQCAt
MTM3LDEwICsxMzUsMTAgQEAgYm9vbCBNYXRoRnVuY0ltcDo6aW1wbGVtZW50c0NhbGwoKSBjb25z
dAogICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWUgTWF0aEZ1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
Kk1hdGhGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
Lyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGRvdWJsZSBhcmcgPSBhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpOwotICBkb3VibGUgYXJnMiA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7
CisgIGRvdWJsZSBhcmcgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgZG91YmxlIGFyZzIg
PSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgZG91YmxlIHJlc3VsdDsKIAogICBzd2l0Y2gg
KGlkKSB7CkBAIC0xNzgsNyArMTc2LDcgQEAgVmFsdWUgTWF0aEZ1bmNJbXA6OmNhbGwoRXhlY1N0
YXRlICpleGVjLAogICAgIHVuc2lnbmVkIGludCBhcmdzQ291bnQgPSBhcmdzLnNpemUoKTsKICAg
ICByZXN1bHQgPSAtSW5mOwogICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gMCA7IGsgPCBhcmdz
Q291bnQgOyArK2sgKSB7Ci0gICAgICBkb3VibGUgdmFsID0gYXJnc1trXS50b051bWJlcihleGVj
KTsKKyAgICAgIGRvdWJsZSB2YWwgPSBhcmdzW2tdLT50b051bWJlcihleGVjKTsKICAgICAgIGlm
ICggaXNOYU4oIHZhbCApICkKICAgICAgIHsKICAgICAgICAgcmVzdWx0ID0gTmFOOwpAQCAtMTkz
LDcgKzE5MSw3IEBAIFZhbHVlIE1hdGhGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywKICAg
ICB1bnNpZ25lZCBpbnQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7CiAgICAgcmVzdWx0ID0gK0lu
ZjsKICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IDAgOyBrIDwgYXJnc0NvdW50IDsgKytrICkg
ewotICAgICAgZG91YmxlIHZhbCA9IGFyZ3Nba10udG9OdW1iZXIoZXhlYyk7CisgICAgICBkb3Vi
bGUgdmFsID0gYXJnc1trXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICBpZiAoIGlzTmFOKCB2YWwg
KSApCiAgICAgICB7CiAgICAgICAgIHJlc3VsdCA9IE5hTjsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9tYXRoX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvbWF0aF9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYg
LXAgLXUgLXUgLXAgLXIxLjYgSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmgKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5oCTI1IEp1bCAyMDA1IDIyOjE3OjEyIC0wMDAw
CTEuNgorKysgSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNDo0
NDowNyAtMDAwMApAQCAtMzEsOCArMzEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIE1hdGhPYmplY3RJbXAoRXhlY1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgT2Jq
ZWN0UHJvdG90eXBlSW1wICpvYmpQcm90byk7Ci0gICAgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3Vs
dCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25z
dDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
ICAgIGVudW0geyBFdWxlciwgTG4yLCBMbjEwLCBMb2cyRSwgTG9nMTBFLCBQaSwgU3FydDFfMiwg
U3FydDIsCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAg
TWF0aEZ1bmNJbXAoRXhlY1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGwpOwogICAgIHZpcnR1YWwg
Ym9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmly
dHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2YXRlOgogICAgIGludCBpZDsKICAg
fTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNjgKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNjggSmF2YVNjcmlwdENvcmUva2pzL25v
ZGVzLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkyNyBKdWwgMjAwNSAyMzox
MDo0OSAtMDAwMAkxLjY4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCTcgQXVnIDIw
MDUgMDQ6NDQ6MDggLTAwMDAKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIm5vZGVzLmgi
CiAKLS8vI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxh
c3NlcnQuaD4KICNpZmRlZiBLSlNfREVCVUdfTUVNCkBAIC00NCw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAibGV4ZXIuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAidXN0cmluZy5o
IgorI2luY2x1ZGUgInJlZmVyZW5jZV9saXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAK
QEAgLTExNiw3ICsxMTYsNyBAQCBOb2RlOjp+Tm9kZSgpCiAKIFJlZmVyZW5jZSBOb2RlOjpldmFs
dWF0ZVJlZmVyZW5jZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYgPSBldmFsdWF0ZShl
eGVjKTsKKyAgVmFsdWVJbXAgKnYgPSBldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OUkVGRVJFTkNFCiAgIHJldHVybiBSZWZlcmVuY2U6Om1ha2VWYWx1ZVJlZmVyZW5jZSh2KTsK
IH0KQEAgLTEzMywxNiArMTMzLDE2IEBAIHZvaWQgTm9kZTo6ZmluYWxDaGVjaygpCiB9CiAjZW5k
aWYKIAotVmFsdWUgTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBl
LCBjb25zdCBjaGFyICptc2cpCitWYWx1ZUltcCAqTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUg
KmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cpCiB7Ci0gIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsIGUsIG1zZywgbGluZU5vKCksIHNvdXJjZUlkKCksICZzb3VyY2VV
UkwpOworICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgZSwgbXNnLCBsaW5l
Tm8oKSwgc291cmNlSWQoKSwgJnNvdXJjZVVSTCk7CiAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICByZXR1cm4gZXJyOwogfQogCi1WYWx1ZSBOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAq
ZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgVmFsdWUgdiwgTm9kZSAqZXhwcikK
K1ZhbHVlSW1wICpOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUs
IGNvbnN0IGNoYXIgKm1zZywgVmFsdWVJbXAgKnYsIE5vZGUgKmV4cHIpCiB7Ci0gIGNoYXIgKnZT
dHIgPSBzdHJkdXAodi50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgY2hhciAqdlN0ciA9IHN0
cmR1cCh2LT50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgY2hhciAqZXhwclN0ciA9IHN0cmR1
cChleHByLT50b1N0cmluZygpLmFzY2lpKCkpOwogICAKICAgaW50IGxlbmd0aCA9ICBzdHJsZW4o
bXNnKSAtIDQgLyogdHdvICVzICovICsgc3RybGVuKHZTdHIpICsgc3RybGVuKGV4cHJTdHIpICsg
MSAvKiBudWxsIHRlcm1pbmF0b3IgKi87CkBAIC0xNTEsMjEgKzE1MSwyMSBAQCBWYWx1ZSBOb2Rl
Ojp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgCiAgIGZyZWUodlN0cik7CiAgIGZyZWUoZXhw
clN0cik7CiAKLSAgVmFsdWUgcmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBlLCBzdHIpOworICBW
YWx1ZUltcCAqcmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBlLCBzdHIpOwogICBkZWxldGUgW10g
c3RyOwogICAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCi1WYWx1ZSBOb2RlOjp0aHJvd0Vycm9y
KEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgSWRlbnRpZmll
ciBsYWJlbCkKK1ZhbHVlSW1wICpOb2RlOjp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJy
b3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgSWRlbnRpZmllciBsYWJlbCkKIHsKICAgY29uc3Qg
Y2hhciAqbCA9IGxhYmVsLmFzY2lpKCk7CiAgIGludCBsZW5ndGggPSBzdHJsZW4obXNnKSAtIDIg
LyogJXMgKi8gKyBzdHJsZW4obCkgKyAxIC8qIG51bGwgdGVybWluYXRvciAqLzsKICAgY2hhciAq
bWVzc2FnZSA9IG5ldyBjaGFyW2xlbmd0aF07CiAgIHNwcmludGYobWVzc2FnZSwgbXNnLCBsKTsK
IAotICBWYWx1ZSByZXN1bHQgPSB0aHJvd0Vycm9yKGV4ZWMsIGUsIG1lc3NhZ2UpOworICBWYWx1
ZUltcCAqcmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlKTsKICAgZGVsZXRlIFtd
IG1lc3NhZ2U7CiAKICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3NCwxMSArMTc0LDExIEBAIFZhbHVl
IE5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCAKIHZvaWQgTm9kZTo6c2V0RXhjZXB0
aW9uRGV0YWlsc0lmTmVlZGVkKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgT2JqZWN0IGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5oYXNQcm9wZXJ0eShl
eGVjLCAibGluZSIpICYmCi0gICAgICAgICAgICAhZXhjZXB0aW9uLmhhc1Byb3BlcnR5KGV4ZWMs
ICJzb3VyY2VVUkwiKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uLnB1dChleGVjLCAibGluZSIs
IE51bWJlcihsaW5lKSk7Ci0gICAgICAgICAgICBleGNlcHRpb24ucHV0KGV4ZWMsICJzb3VyY2VV
UkwiLCBTdHJpbmcoc291cmNlVVJMKSk7CisgICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpOworICAgICAgICBpZiAoIWV4Y2VwdGlv
bi0+aGFzUHJvcGVydHkoZXhlYywgImxpbmUiKSAmJgorICAgICAgICAgICAgIWV4Y2VwdGlvbi0+
aGFzUHJvcGVydHkoZXhlYywgInNvdXJjZVVSTCIpKSB7CisgICAgICAgICAgICBleGNlcHRpb24t
PnB1dChleGVjLCAibGluZSIsIE51bWJlcihsaW5lKSk7CisgICAgICAgICAgICBleGNlcHRpb24t
PnB1dChleGVjLCAic291cmNlVVJMIiwgU3RyaW5nKHNvdXJjZVVSTCkpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMjIyLDUwICsyMjIsNDggQEAgdm9pZCBTdGF0ZW1lbnROb2RlOjpwcm9jZXNz
RnVuY0RlY2woRXhlYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVsbE5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1WYWx1ZSBOdWxsTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1ZhbHVlSW1wICpOdWxsTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKIHsKICAgcmV0dXJuIE51bGwoKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5Ob2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVmFsdWUgQm9vbGVhbk5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqQm9vbGVhbk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqLypleGVjKi8pCiB7Ci0gIHJldHVybiBWYWx1ZSh2YWx1ZSk7CisgIHJldHVybiBqc0Jvb2xl
YW4odmFsdWUpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVy
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1WYWx1ZSBOdW1iZXJO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKQorVmFsdWVJbXAgKk51bWJlck5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pCiB7Ci0gIHJldHVybiBWYWx1ZSh2YWx1ZSk7
CisgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBTdHJpbmdOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLVZhbHVlIFN0cmluZ05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pCitWYWx1
ZUltcCAqU3RyaW5nTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKIHsKLSAgcmV0
dXJuIHZhbHVlOworICByZXR1cm4ganNTdHJpbmcodmFsdWUpOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVnRXhwTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1WYWx1ZSBSZWdFeHBOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
CitWYWx1ZUltcCAqUmVnRXhwTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICBM
aXN0IGxpc3Q7Ci0gIFN0cmluZyBwKHBhdHRlcm4pOwotICBTdHJpbmcgZihmbGFncyk7Ci0gIGxp
c3QuYXBwZW5kKHApOwotICBsaXN0LmFwcGVuZChmKTsKKyAgbGlzdC5hcHBlbmQoanNTdHJpbmco
cGF0dGVybikpOworICBsaXN0LmFwcGVuZChqc1N0cmluZyhmbGFncykpOwogCi0gIE9iamVjdCBy
ZWcgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+aW1wKCktPmJ1aWx0aW5SZWdFeHAoKTsK
LSAgcmV0dXJuIHJlZy5jb25zdHJ1Y3QoZXhlYyxsaXN0KTsKKyAgT2JqZWN0SW1wICpyZWcgPSBl
eGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+aW1wKCktPmJ1aWx0aW5SZWdFeHAoKTsKKyAgcmV0
dXJuIHJlZy0+Y29uc3RydWN0KGV4ZWMsbGlzdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBUaGlzTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIC8vIEVDTUEgMTEuMS4xCi1WYWx1ZSBUaGlzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQorVmFsdWVJbXAgKlRoaXNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7
CiAgIHJldHVybiBleGVjLT5jb250ZXh0KCkuaW1wKCktPnRoaXNWYWx1ZSgpOwogfQpAQCAtMjcz
LDE0ICsyNzEsMTQgQEAgVmFsdWUgVGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMS4xLjIgJiAxMC4xLjQKLVZhbHVl
IFJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqUmVzb2x2
ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgU2NvcGVDaGFpbiBjaGFpbiA9
IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2NvcGVDaGFpbigpOwogCi0gIFZhbHVlIHJlc3VsdDsK
ICAgd2hpbGUgKCFjaGFpbi5pc0VtcHR5KCkpIHsKICAgICBPYmplY3RJbXAgKm8gPSBjaGFpbi50
b3AoKTsKIAorICAgIFZhbHVlSW1wICpyZXN1bHQ7CiAgICAgaWYgKG8tPmdldFByb3BlcnR5KGV4
ZWMsIGlkZW50LCByZXN1bHQpKQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKQEAgLTI4OCw3
ICsyODYsNyBAQCBWYWx1ZSBSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICplCiAgIH0K
IAogICBVU3RyaW5nIG0gPSBJMThOX05PT1AoIkNhbid0IGZpbmQgdmFyaWFibGU6ICIpICsgaWRl
bnQudXN0cmluZygpOwotICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVu
Y2VFcnJvciwgbS5hc2NpaSgpKTsKKyAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFJlZmVyZW5jZUVycm9yLCBtLmFzY2lpKCkpOwogICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKICAgcmV0dXJuIGVycjsKIH0KQEAgLTI5NiwyNyArMjk0LDE1IEBAIFZhbHVlIFJlc29sdmVO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmUKIFJlZmVyZW5jZSBSZXNvbHZlTm9kZTo6ZXZhbHVh
dGVSZWZlcmVuY2UoRXhlY1N0YXRlICpleGVjKQogewogICBTY29wZUNoYWluIGNoYWluID0gZXhl
Yy0+Y29udGV4dCgpLmltcCgpLT5zY29wZUNoYWluKCk7Ci0KICAgd2hpbGUgKCFjaGFpbi5pc0Vt
cHR5KCkpIHsKICAgICBPYmplY3RJbXAgKm8gPSBjaGFpbi50b3AoKTsKLQotICAgIC8vY291dCA8
PCAiUmVzb2x2ZTogbG9va2luZyBhdCAnIiA8PCBpZGVudC5hc2NpaSgpIDw8ICInIgotICAgIC8v
ICAgICA8PCAiIGluICIgPDwgKHZvaWQqKW8gPDwgIiAiIDw8IG8tPmNsYXNzSW5mbygpLT5jbGFz
c05hbWUgPDwgZW5kbDsKLSAgICBpZiAoby0+aGFzUHJvcGVydHkoZXhlYyxpZGVudCkpIHsKLSAg
ICAgIC8vY291dCA8PCAiUmVzb2x2ZTogRk9VTkQgJyIgPDwgaWRlbnQuYXNjaWkoKSA8PCAiJyIK
LSAgICAgIC8vICAgICA8PCAiIGluICIgPDwgKHZvaWQqKW8gPDwgIiAiIDw8IG8tPmNsYXNzSW5m
bygpLT5jbGFzc05hbWUgPDwgZW5kbDsKKyAgICBpZiAoby0+aGFzUHJvcGVydHkoZXhlYywgaWRl
bnQpKQogICAgICAgcmV0dXJuIFJlZmVyZW5jZShvLCBpZGVudCk7Ci0gICAgfQotICAgIAogICAg
IGNoYWluLnBvcCgpOwogICB9Ci0KLSAgLy8gaWRlbnRpZmllciBub3QgZm91bmQKLSAgLy9jb3V0
IDw8ICJSZXNvbHZlOiBkaWRuJ3QgZmluZCAnIiA8PCBpZGVudC5hc2NpaSgpIDw8ICInIiA8PCBl
bmRsOwotICByZXR1cm4gUmVmZXJlbmNlKE51bGwoKSwgaWRlbnQpOworICByZXR1cm4gUmVmZXJl
bmNlKGlkZW50KTsKIH0KIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3Jv
dXBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEdyb3Vw
Tm9kZTo6cmVmKCkKQEAgLTMzNCw3ICszMjAsNyBAQCBib29sIEdyb3VwTm9kZTo6ZGVyZWYoKQog
fQogCiAvLyBFQ01BIDExLjEuNgotVmFsdWUgR3JvdXBOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCitWYWx1ZUltcCAqR3JvdXBOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7
CiAgIHJldHVybiBncm91cC0+ZXZhbHVhdGUoZXhlYyk7CiB9CkBAIC0zNjksMTUgKzM1NSwxNSBA
QCBib29sIEVsZW1lbnROb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMS40Ci1WYWx1ZSBF
bGVtZW50Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkVsZW1lbnRO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIE9iamVjdCBhcnJheSA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYywgTGlz
dDo6ZW1wdHkoKSk7CisgIE9iamVjdEltcCAqYXJyYXkgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVjdChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAg
aW50IGxlbmd0aCA9IDA7CiAgIGZvciAoRWxlbWVudE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+
bGlzdCkgewotICAgIFZhbHVlIHZhbCA9IG4tPm5vZGUtPmV2YWx1YXRlKGV4ZWMpOworICAgIFZh
bHVlSW1wICp2YWwgPSBuLT5ub2RlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQogICAgIGxlbmd0aCArPSBuLT5lbGlzaW9uOwotICAgIGFycmF5LnB1dChleGVj
LCBsZW5ndGgrKywgdmFsKTsKKyAgICBhcnJheS0+cHV0KGV4ZWMsIGxlbmd0aCsrLCB2YWwpOwog
ICB9CiAgIHJldHVybiBhcnJheTsKIH0KQEAgLTM5OSwyMyArMzg1LDIzIEBAIGJvb2wgQXJyYXlO
b2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMS40Ci1WYWx1ZSBBcnJheU5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpBcnJheU5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYykKIHsKLSAgT2JqZWN0IGFycmF5OworICBPYmplY3RJbXAgKmFycmF5OwogICBp
bnQgbGVuZ3RoOwogCiAgIGlmIChlbGVtZW50KSB7Ci0gICAgYXJyYXkgPSBPYmplY3Qoc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wKj4oZWxlbWVudC0+ZXZhbHVhdGUoZXhlYykuaW1wKCkpKTsKKyAgICBh
cnJheSA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGVsZW1lbnQtPmV2YWx1YXRlKGV4ZWMpKTsK
ICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICAgIGxlbmd0aCA9IG9wdCA/IGFycmF5Lmdl
dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSkudG9JbnQzMihleGVjKSA6IDA7CisgICAgbGVuZ3Ro
ID0gb3B0ID8gYXJyYXktPmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSktPnRvSW50MzIoZXhl
YykgOiAwOwogICB9IGVsc2UgewotICAgIFZhbHVlIG5ld0FyciA9IGV4ZWMtPmxleGljYWxJbnRl
cnByZXRlcigpLT5idWlsdGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsK
LSAgICBhcnJheSA9IE9iamVjdChzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihuZXdBcnIuaW1wKCkp
KTsKKyAgICBWYWx1ZUltcCAqbmV3QXJyID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKKyAgICBhcnJheSA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KG5ld0Fycik7CiAgICAgbGVuZ3RoID0gMDsKICAgfQog
CiAgIGlmIChvcHQpCi0gICAgYXJyYXkucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLCBWYWx1
ZShlbGlzaW9uICsgbGVuZ3RoKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBhcnJheS0+
cHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLCBqc051bWJlcihlbGlzaW9uICsgbGVuZ3RoKSwg
RG9udEVudW0gfCBEb250RGVsZXRlKTsKIAogICByZXR1cm4gYXJyYXk7CiB9CkBAIC00MzcsMTIg
KzQyMywxMiBAQCBib29sIE9iamVjdExpdGVyYWxOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEg
MTEuMS41Ci1WYWx1ZSBPYmplY3RMaXRlcmFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQorVmFsdWVJbXAgKk9iamVjdExpdGVyYWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
CiB7CiAgIGlmIChsaXN0KQogICAgIHJldHVybiBsaXN0LT5ldmFsdWF0ZShleGVjKTsKIAotICBy
ZXR1cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS5jb25zdHJ1
Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKKyAgcmV0dXJuIGV4ZWMtPmxleGljYWxJbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlWYWx1ZU5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDc0LDE3ICs0NjAsMTcgQEAgYm9vbCBQcm9w
ZXJ0eVZhbHVlTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjEuNQotVmFsdWUgUHJvcGVy
dHlWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpQcm9wZXJ0
eVZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBPYmplY3Qgb2JqID0g
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS5jb25zdHJ1Y3QoZXhl
YywgTGlzdDo6ZW1wdHkoKSk7CisgIE9iamVjdEltcCAqb2JqID0gZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkp
OwogICAKICAgZm9yIChQcm9wZXJ0eVZhbHVlTm9kZSAqcCA9IHRoaXM7IHA7IHAgPSBwLT5saXN0
KSB7Ci0gICAgVmFsdWUgbiA9IHAtPm5hbWUtPmV2YWx1YXRlKGV4ZWMpOworICAgIFZhbHVlSW1w
ICpuID0gcC0+bmFtZS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICBWYWx1ZSB2ID0gcC0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKKyAgICBWYWx1ZUlt
cCAqdiA9IHAtPmFzc2lnbi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKIAotICAgIG9iai5wdXQoZXhlYywgSWRlbnRpZmllcihuLnRvU3RyaW5nKGV4ZWMpKSwg
dik7CisgICAgb2JqLT5wdXQoZXhlYywgSWRlbnRpZmllcihuLT50b1N0cmluZyhleGVjKSksIHYp
OwogICB9CiAKICAgcmV0dXJuIG9iajsKQEAgLTQ5Myw5ICs0NzksOSBAQCBWYWx1ZSBQcm9wZXJ0
eVZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAv
LyBFQ01BIDExLjEuNQotVmFsdWUgUHJvcGVydHlOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8q
ZXhlYyovKQorVmFsdWVJbXAgKlByb3BlcnR5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4
ZWMqLykKIHsKLSAgVmFsdWUgczsKKyAgVmFsdWVJbXAgKnM7CiAKICAgaWYgKHN0ci5pc051bGwo
KSkgewogICAgIHMgPSBTdHJpbmcoVVN0cmluZzo6ZnJvbShudW1lcmljKSk7CkBAIC01MjcsMjYg
KzUxMywyNCBAQCBib29sIEFjY2Vzc29yTm9kZTE6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4y
LjFhCi1WYWx1ZSBBY2Nlc3Nvck5vZGUxOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1
ZUltcCAqQWNjZXNzb3JOb2RlMTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICByZXR1
cm4gZXZhbHVhdGVSZWZlcmVuY2UoZXhlYykuZ2V0VmFsdWUoZXhlYyk7CiB9CiAKIFJlZmVyZW5j
ZSBBY2Nlc3Nvck5vZGUxOjpldmFsdWF0ZVJlZmVyZW5jZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0g
IFZhbHVlIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSBleHBy
MS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlJFRkVSRU5DRQotICBWYWx1
ZSB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYyID0gZXhwcjItPmV2
YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05SRUZFUkVOQ0UKLSAgT2JqZWN0IG8g
PSB2MS50b09iamVjdChleGVjKTsKLSAgdW5zaWduZWQgaTsKLSAgaWYgKHYyLnRvVUludDMyKGkp
KQorICBPYmplY3RJbXAgKm8gPSB2MS0+dG9PYmplY3QoZXhlYyk7CisgIHVpbnQzMl90IGk7Cisg
IGlmICh2Mi0+Z2V0VUludDMyKGkpKQogICAgIHJldHVybiBSZWZlcmVuY2UobywgaSk7Ci0gIFN0
cmluZyBzID0gdjIudG9TdHJpbmcoZXhlYyk7Ci0gIHJldHVybiBSZWZlcmVuY2UobywgSWRlbnRp
ZmllcihzLnZhbHVlKCkpKTsKKyAgcmV0dXJuIFJlZmVyZW5jZShvLCBJZGVudGlmaWVyKHYyLT50
b1N0cmluZyhleGVjKSkpOwogfQogCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBBY2Nlc3Nvck5vZGUyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQg
QWNjZXNzb3JOb2RlMjo6cmVmKCkKQEAgLTU2NCwxNiArNTQ4LDE2IEBAIGJvb2wgQWNjZXNzb3JO
b2RlMjo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjIuMWIKLVZhbHVlIEFjY2Vzc29yTm9kZTI6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpBY2Nlc3Nvck5vZGUyOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJldHVybiBldmFsdWF0ZVJlZmVyZW5jZShleGVj
KS5nZXRWYWx1ZShleGVjKTsKIH0KIAogUmVmZXJlbmNlIEFjY2Vzc29yTm9kZTI6OmV2YWx1YXRl
UmVmZXJlbmNlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRl
KGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hF
Q0tFWENFUFRJT05SRUZFUkVOQ0UKLSAgT2JqZWN0IG8gPSB2LnRvT2JqZWN0KGV4ZWMpOworICBP
YmplY3RJbXAgKm8gPSB2LT50b09iamVjdChleGVjKTsKICAgcmV0dXJuIFJlZmVyZW5jZShvLCBp
ZGVudCk7CiB9CiAKQEAgLTYwMSwxMCArNTg1LDEwIEBAIGJvb2wgQXJndW1lbnRMaXN0Tm9kZTo6
ZGVyZWYoKQogICByZXR1cm4gTm9kZTo6ZGVyZWYoKTsKIH0KIAotVmFsdWUgQXJndW1lbnRMaXN0
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1ZhbHVlSW1wICpBcmd1bWVudExp
c3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKQogewogICBhc3NlcnQoMCk7Ci0g
IHJldHVybiBWYWx1ZSgpOyAvLyBkdW1teSwgc2VlIGV2YWx1YXRlTGlzdCgpCisgIHJldHVybiBO
VUxMOyAvLyBkdW1teSwgc2VlIGV2YWx1YXRlTGlzdCgpCiB9CiAKIC8vIEVDTUEgMTEuMi40CkBA
IC02MTMsNyArNTk3LDcgQEAgTGlzdCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QoRXhl
YwogICBMaXN0IGw7CiAKICAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9
IG4tPmxpc3QpIHsKLSAgICBWYWx1ZSB2ID0gbi0+ZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgICAg
VmFsdWVJbXAgKnYgPSBuLT5leHByLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENF
UFRJT05MSVNUCiAgICAgbC5hcHBlbmQodik7CiAgIH0KQEAgLTYzNywxMCArNjIxLDEwIEBAIGJv
b2wgQXJndW1lbnRzTm9kZTo6ZGVyZWYoKQogICByZXR1cm4gTm9kZTo6ZGVyZWYoKTsKIH0KIAot
VmFsdWUgQXJndW1lbnRzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1ZhbHVl
SW1wICpBcmd1bWVudHNOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKQogewogICBh
c3NlcnQoMCk7Ci0gIHJldHVybiBWYWx1ZSgpOyAvLyBkdW1teSwgc2VlIGV2YWx1YXRlTGlzdCgp
CisgIHJldHVybiBOVUxMOyAvLyBkdW1teSwgc2VlIGV2YWx1YXRlTGlzdCgpCiB9CiAKIC8vIEVD
TUEgMTEuMi40CkBAIC02NzQsOSArNjU4LDkgQEAgYm9vbCBOZXdFeHByTm9kZTo6ZGVyZWYoKQog
ICByZXR1cm4gTm9kZTo6ZGVyZWYoKTsKIH0KIAotVmFsdWUgTmV3RXhwck5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpOZXdFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVl
SW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
CiAKICAgTGlzdCBhcmdMaXN0OwpAQCAtNjg1LDE4ICs2NjksMTYgQEAgVmFsdWUgTmV3RXhwck5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZQogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAg
IH0KIAotICBpZiAodi50eXBlKCkgIT0gT2JqZWN0VHlwZSkgewotICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykg
aXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBuZXcuIiwgdiwgZXhwcik7Cisg
IGlmICghdi0+aXNPYmplY3QoKSkgeworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvciwgIlZhbHVlSW1wIColcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBv
YmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4cHIpOwogICB9CiAKLSAgT2Jq
ZWN0IGNvbnN0ciA9IE9iamVjdChzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2LmltcCgpKSk7Ci0g
IGlmICghY29uc3RyLmltcGxlbWVudHNDb25zdHJ1Y3QoKSkgewotICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykg
aXMgbm90IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4cHIp
OworICBPYmplY3RJbXAgKmNvbnN0ciA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOworICBp
ZiAoIWNvbnN0ci0+aW1wbGVtZW50c0NvbnN0cnVjdCgpKSB7CisgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWVJbXAgKiVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAl
cykgaXMgbm90IGEgY29uc3RydWN0b3IuIENhbm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4
cHIpOwogICB9CiAKLSAgVmFsdWUgcmVzID0gY29uc3RyLmNvbnN0cnVjdChleGVjLGFyZ0xpc3Qp
OwotCi0gIHJldHVybiByZXM7CisgIHJldHVybiBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdM
aXN0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2Fs
bE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyMCw3ICs3MDIsNyBAQCBi
b29sIEZ1bmN0aW9uQ2FsbE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4yLjMKLVZhbHVl
IEZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpG
dW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIFJlZmVyZW5j
ZSByZWYgPSBleHByLT5ldmFsdWF0ZVJlZmVyZW5jZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKQEAgLTcyOCwxNCArNzEwLDE0IEBAIFZhbHVlIEZ1bmN0aW9uQ2FsbE5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGEKICAgTGlzdCBhcmdMaXN0ID0gYXJncy0+ZXZhbHVhdGVMaXN0KGV4ZWMp
OwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gIFZhbHVlIHYgPSByZWYuZ2V0VmFsdWUo
ZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOwogICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQogCi0gIGlmICh2LnR5cGUoKSAhPSBPYmplY3RUeXBlKSB7Ci0gICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHBy
ZXNzaW9uICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIGV4cHIpOworICBpZiAoIXYtPmlzT2JqZWN0
KCkpIHsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZUltcCAq
JXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3Qgb2JqZWN0LiIsIHYsIGV4cHIpOwog
ICB9CiAKLSAgT2JqZWN0SW1wICpmdW5jID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odi5pbXAo
KSk7CisgIE9iamVjdEltcCAqZnVuYyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOwogCiAg
IGlmICghZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkgewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvciwgIk9iamVjdCAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGRvZXMg
bm90IGFsbG93IGNhbGxzLiIsIHYsIGV4cHIpOwpAQCAtNzQzLDcgKzcyNSw3IEBAIFZhbHVlIEZ1
bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKIAogICBPYmplY3RJbXAgKnRoaXNPYmpJ
bXAgPSAwOwogICBWYWx1ZUltcCAqdGhpc1ZhbEltcCA9IHJlZi5iYXNlSWZNdXRhYmxlKCk7Ci0g
IGlmICh0aGlzVmFsSW1wICYmIHRoaXNWYWxJbXAtPnR5cGUoKSA9PSBPYmplY3RUeXBlICYmICFz
dGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odGhpc1ZhbEltcCktPmluaGVyaXRzKCZBY3RpdmF0aW9u
SW1wOjppbmZvKSkKKyAgaWYgKHRoaXNWYWxJbXAgJiYgdGhpc1ZhbEltcC0+aXNPYmplY3QoKSAm
JiAhc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXNWYWxJbXApLT5pbmhlcml0cygmQWN0aXZh
dGlvbkltcDo6aW5mbykpCiAgICAgdGhpc09iakltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAq
Pih0aGlzVmFsSW1wKTsKIAogICBpZiAoIXRoaXNPYmpJbXApIHsKQEAgLTc1MywxMCArNzM1LDEw
IEBAIFZhbHVlIEZ1bmN0aW9uQ2FsbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKICAgICAvLyB0aGF0
IHRoZSBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIGludGVyYWwgZnVuY3Rpb25zLCBidXQgZm9y
IHNpbXBsaWNpdHkKICAgICAvLyBvZiBpbXBsZW1lbnRhdGlvbiB3ZSB1c2UgdGhlIGdsb2JhbCBv
YmplY3QgYW55d2F5IGhlcmUuIFRoaXMgZ3VhcmFudGVlcwogICAgIC8vIHRoYXQgaW4gaG9zdCBv
YmplY3RzIHlvdSBhbHdheXMgZ2V0IGEgdmFsaWQgb2JqZWN0IGZvciB0aGlzLgotICAgIHRoaXNP
YmpJbXAgPSBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCk7
CisgICAgdGhpc09iakltcCA9IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmpl
Y3QoKTsKICAgfQogCi0gIE9iamVjdCB0aGlzT2JqKHRoaXNPYmpJbXApOworICBPYmplY3RJbXAg
KnRoaXNPYmoodGhpc09iakltcCk7CiAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmos
IGFyZ0xpc3QpOwogfQogCkBAIC03NzcsMTkgKzc1OSwxOSBAQCBib29sIFBvc3RmaXhOb2RlOjpk
ZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMwotVmFsdWUgUG9zdGZpeE5vZGU6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpQb3N0Zml4Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQogewogICBSZWZlcmVuY2UgcmVmID0gZXhwci0+ZXZhbHVhdGVSZWZlcmVuY2UoZXhl
Yyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYgPSByZWYuZ2V0VmFsdWUo
ZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOwogCiAgIGJvb2wga25v
d25Ub0JlSW50ZWdlcjsKLSAgZG91YmxlIG4gPSB2LnRvTnVtYmVyKGV4ZWMsIGtub3duVG9CZUlu
dGVnZXIpOworICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMsIGtub3duVG9CZUludGVnZXIp
OwogCiAgIGRvdWJsZSBuZXdWYWx1ZSA9IChvcGVyID09IE9wUGx1c1BsdXMpID8gbiArIDEgOiBu
IC0gMTsKLSAgcmVmLnB1dFZhbHVlKGV4ZWMsIFZhbHVlKG5ld1ZhbHVlLCBrbm93blRvQmVJbnRl
Z2VyKSk7CisgIHJlZi5wdXRWYWx1ZShleGVjLCBqc051bWJlcihuZXdWYWx1ZSwga25vd25Ub0Jl
SW50ZWdlcikpOwogCi0gIHJldHVybiBWYWx1ZShuLCBrbm93blRvQmVJbnRlZ2VyKTsKKyAgcmV0
dXJuIGpzTnVtYmVyKG4sIGtub3duVG9CZUludGVnZXIpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRGVsZXRlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtODA5LDExICs3OTEsMTEgQEAgYm9vbCBEZWxldGVOb2RlOjpkZXJlZigpCiB9
CiAKIC8vIEVDTUEgMTEuNC4xCi1WYWx1ZSBEZWxldGVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCitWYWx1ZUltcCAqRGVsZXRlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQog
ewogICBSZWZlcmVuY2UgcmVmID0gZXhwci0+ZXZhbHVhdGVSZWZlcmVuY2UoZXhlYyk7CiAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHJldHVybiBWYWx1ZShyZWYuZGVsZXRlVmFsdWUoZXhl
YykpOworICByZXR1cm4ganNCb29sZWFuKHJlZi5kZWxldGVWYWx1ZShleGVjKSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb2lkTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzMsOSArODE1LDkgQEAgYm9vbCBWb2lkTm9kZTo6
ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQuMgotVmFsdWUgVm9pZE5vZGU6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpWb2lkTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKQogewotICBWYWx1ZSBkdW1teTEgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgZXhwci0+
ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtODU4LDE2ICs4NDAsMTYgQEAgYm9vbCBUeXBlT2ZOb2RlOjpkZXJlZigp
CiB9CiAKIC8vIEVDTUEgMTEuNC4zCi1WYWx1ZSBUeXBlT2ZOb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUgKmV4ZWMpCitWYWx1ZUltcCAqVHlwZU9mTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQogewogICBjb25zdCBjaGFyICpzID0gMEw7CiAgIFJlZmVyZW5jZSByZWYgPSBleHByLT5ldmFs
dWF0ZVJlZmVyZW5jZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgVmFsdWVJ
bXAgKmIgPSByZWYuYmFzZUlmTXV0YWJsZSgpOwotICBpZiAoYiAmJiBiLT5kaXNwYXRjaFR5cGUo
KSA9PSBOdWxsVHlwZSkKLSAgICByZXR1cm4gVmFsdWUoInVuZGVmaW5lZCIpOwotICBWYWx1ZSB2
ID0gcmVmLmdldFZhbHVlKGV4ZWMpOwotICBzd2l0Y2ggKHYudHlwZSgpKQorICBpZiAoYiAmJiBi
LT5pc051bGwoKSkKKyAgICByZXR1cm4ganNTdHJpbmcoInVuZGVmaW5lZCIpOworICBWYWx1ZUlt
cCAqdiA9IHJlZi5nZXRWYWx1ZShleGVjKTsKKyAgc3dpdGNoICh2LT50eXBlKCkpCiAgICAgewog
ICAgIGNhc2UgVW5kZWZpbmVkVHlwZToKICAgICAgIHMgPSAidW5kZWZpbmVkIjsKQEAgLTg4NSwx
NCArODY3LDE0IEBAIFZhbHVlIFR5cGVPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXgKICAg
ICAgIHMgPSAic3RyaW5nIjsKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAo
di50eXBlKCkgPT0gT2JqZWN0VHlwZSAmJiBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2LmltcCgp
KS0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICAgIGlmICh2LT5pc09iamVjdCgpICYmIHN0YXRpY19j
YXN0PE9iamVjdEltcCo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKQogCXMgPSAiZnVuY3Rpb24iOwog
ICAgICAgZWxzZQogCXMgPSAib2JqZWN0IjsKICAgICAgIGJyZWFrOwogICAgIH0KIAotICByZXR1
cm4gVmFsdWUocyk7CisgIHJldHVybiBqc1N0cmluZyhzKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTkxMiwxNyArODk0LDE3IEBAIGJvb2wgUHJlZml4Tm9kZTo6ZGVyZWYoKQog
fQogCiAvLyBFQ01BIDExLjQuNCBhbmQgMTEuNC41Ci1WYWx1ZSBQcmVmaXhOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqUHJlZml4Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogewogICBSZWZlcmVuY2UgcmVmID0gZXhwci0+ZXZhbHVhdGVSZWZlcmVuY2Uo
ZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYgPSByZWYuZ2V0VmFs
dWUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOwogCiAgIGJvb2wg
a25vd25Ub0JlSW50ZWdlcjsKLSAgZG91YmxlIG4gPSB2LnRvTnVtYmVyKGV4ZWMsIGtub3duVG9C
ZUludGVnZXIpOworICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMsIGtub3duVG9CZUludGVn
ZXIpOwogCiAgIGRvdWJsZSBuZXdWYWx1ZSA9IChvcGVyID09IE9wUGx1c1BsdXMpID8gbiArIDEg
OiBuIC0gMTsKLSAgVmFsdWUgbjIobmV3VmFsdWUsIGtub3duVG9CZUludGVnZXIpOworICBWYWx1
ZUltcCAqbjIgPSBqc051bWJlcihuZXdWYWx1ZSwga25vd25Ub0JlSW50ZWdlcik7CiAKICAgcmVm
LnB1dFZhbHVlKGV4ZWMsIG4yKTsKIApAQCAtOTQ2LDEyICs5MjgsMTIgQEAgYm9vbCBVbmFyeVBs
dXNOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuNC42Ci1WYWx1ZSBVbmFyeVBsdXNOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqVW5hcnlQbHVzTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVhdGUoZXhl
Yyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTlZBTFVFCiAKLSAgcmV0dXJuIFZhbHVlKHYudG9OdW1iZXIoZXhlYykpOyAvKiBUT0RP
OiBvcHRpbWl6ZSAqLworICByZXR1cm4ganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykpOyAvKiBU
T0RPOiBvcHRpbWl6ZSAqLwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
TmVnYXRlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTcxLDE0
ICs5NTMsMTQgQEAgYm9vbCBOZWdhdGVOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuNC43
Ci1WYWx1ZSBOZWdhdGVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAq
TmVnYXRlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXhw
ci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7
CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgYm9vbCBrbm93blRvQmVJbnRlZ2VyOwot
ICBkb3VibGUgbiA9IHYudG9OdW1iZXIoZXhlYywga25vd25Ub0JlSW50ZWdlcik7Ci0gIHJldHVy
biBWYWx1ZSgtbiwga25vd25Ub0JlSW50ZWdlciAmJiBuICE9IDApOworICBkb3VibGUgbiA9IHYt
PnRvTnVtYmVyKGV4ZWMsIGtub3duVG9CZUludGVnZXIpOworICByZXR1cm4ganNOdW1iZXIoLW4s
IGtub3duVG9CZUludGVnZXIgJiYgbiAhPSAwKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEJpdHdpc2VOb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTk5OCwxMSArOTgwLDExIEBAIGJvb2wgQml0d2lzZU5vdE5vZGU6OmRlcmVmKCkKIH0K
IAogLy8gRUNNQSAxMS40LjgKLVZhbHVlIEJpdHdpc2VOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUgKmV4ZWMpCitWYWx1ZUltcCAqQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKIHsKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAq
diA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBy
ZXR1cm4gVmFsdWUofnYudG9JbnQzMihleGVjKSk7CisgIHJldHVybiBqc051bWJlcih+di0+dG9J
bnQzMihleGVjKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dp
Y2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDIyLDExICsx
MDA0LDExIEBAIGJvb2wgTG9naWNhbE5vdE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS40
LjkKLVZhbHVlIExvZ2ljYWxOb3ROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1
ZUltcCAqTG9naWNhbE5vdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFs
dWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1
YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICByZXR1cm4gVmFsdWUoIXYu
dG9Cb29sZWFuKGV4ZWMpKTsKKyAgcmV0dXJuIGpzQm9vbGVhbighdi0+dG9Cb29sZWFuKGV4ZWMp
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHROb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNTAsMTIgKzEwMzIsMTIgQEAg
Ym9vbCBNdWx0Tm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjUKLVZhbHVlIE11bHROb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqTXVsdE5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7
CisgIFZhbHVlSW1wICp2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKIAotICBWYWx1ZSB2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFs
dWVJbXAgKnYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQogCiAgIHJldHVybiBtdWx0KGV4ZWMsIHYxLCB2Miwgb3Blcik7CkBAIC0xMDgyLDEyICsx
MDY0LDEyIEBAIGJvb2wgQWRkTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjYKLVZhbHVl
IEFkZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpBZGROb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYxID0gdGVybTEtPmV2YWx1YXRl
KGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCiAKLSAgVmFsdWUgdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7
CisgIFZhbHVlSW1wICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKIAogICByZXR1cm4gYWRkKGV4ZWMsIHYxLCB2Miwgb3Blcik7CkBAIC0xMTE0
LDIyICsxMDk2LDIyIEBAIGJvb2wgU2hpZnROb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEu
NwotVmFsdWUgU2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAq
U2hpZnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYxID0gdGVy
bTEtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhl
Yyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYyID0gdGVybTItPmV2YWx1
YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtK
U19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHVuc2lnbmVkIGludCBpMiA9IHYyLnRvVUludDMyKGV4
ZWMpOworICB1bnNpZ25lZCBpbnQgaTIgPSB2Mi0+dG9VSW50MzIoZXhlYyk7CiAgIGkyICY9IDB4
MWY7CiAKICAgc3dpdGNoIChvcGVyKSB7CiAgIGNhc2UgT3BMU2hpZnQ6Ci0gICAgcmV0dXJuIFZh
bHVlKHYxLnRvSW50MzIoZXhlYykgPDwgaTIpOworICAgIHJldHVybiBqc051bWJlcih2MS0+dG9J
bnQzMihleGVjKSA8PCBpMik7CiAgIGNhc2UgT3BSU2hpZnQ6Ci0gICAgcmV0dXJuIFZhbHVlKHYx
LnRvSW50MzIoZXhlYykgPj4gaTIpOworICAgIHJldHVybiBqc051bWJlcih2MS0+dG9JbnQzMihl
eGVjKSA+PiBpMik7CiAgIGNhc2UgT3BVUlNoaWZ0OgotICAgIHJldHVybiBWYWx1ZSh2MS50b1VJ
bnQzMihleGVjKSA+PiBpMik7CisgICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b1VJbnQzMihleGVj
KSA+PiBpMik7CiAgIGRlZmF1bHQ6CiAgICAgYXNzZXJ0KCEiU2hpZnROb2RlOiB1bmhhbmRsZWQg
c3dpdGNoIGNhc2UiKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMTU3LDExICsxMTM5
LDExIEBAIGJvb2wgUmVsYXRpb25hbE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS44Ci1W
YWx1ZSBSZWxhdGlvbmFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAg
KlJlbGF0aW9uYWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYx
ID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSBleHByMS0+ZXZhbHVh
dGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYyID0gZXhwcjIt
PmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7
CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgYm9vbCBiOwpAQCAtMTE3OSwzMCArMTE2
MSwzMCBAQCBWYWx1ZSBSZWxhdGlvbmFsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlCiAgICAgICBi
ID0gKG9wZXIgPT0gT3BHcmVhdGVyKSA/IChyID09IDEpIDogKHIgPT0gMCk7CiAgIH0gZWxzZSBp
ZiAob3BlciA9PSBPcEluKSB7CiAgICAgICAvLyBJcyBhbGwgb2YgdGhpcyBPSyBmb3IgaG9zdCBv
YmplY3RzPwotICAgICAgaWYgKHYyLnR5cGUoKSAhPSBPYmplY3RUeXBlKQorICAgICAgaWYgKCF2
Mi0+aXNPYmplY3QoKSkKICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCAgVHlwZUVy
cm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWUgJXMgKHJlc3VsdCBvZiBl
eHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIElOIGV4
cHJlc3Npb24uIiwgdjIsIGV4cHIyKTsKLSAgICAgIE9iamVjdCBvMihzdGF0aWNfY2FzdDxPYmpl
Y3RJbXAqPih2Mi5pbXAoKSkpOwotICAgICAgYiA9IG8yLmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50
aWZpZXIodjEudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlZhbHVlSW1wIColcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3Qu
IENhbm5vdCBiZSB1c2VkIHdpdGggSU4gZXhwcmVzc2lvbi4iLCB2MiwgZXhwcjIpOworICAgICAg
T2JqZWN0SW1wICpvMihzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2MikpOworICAgICAgYiA9IG8y
LT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKHYxLT50b1N0cmluZyhleGVjKSkpOwogICB9
IGVsc2UgewotICAgIGlmICh2Mi50eXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgICBpZiAoIXYyLT5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCAgVHlwZUVycm9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lv
biAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBpbnN0YW5jZW9mIG9w
ZXJhdG9yLiIsIHYyLCBleHByMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWVJ
bXAgKiVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90
IGJlIHVzZWQgd2l0aCBpbnN0YW5jZW9mIG9wZXJhdG9yLiIsIHYyLCBleHByMik7CiAKLSAgICBP
YmplY3QgbzIoc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odjIuaW1wKCkpKTsKLSAgICBpZiAoIW8y
LmltcGxlbWVudHNIYXNJbnN0YW5jZSgpKSB7Ci0gICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNw
ZWMsIG9ubHkgc29tZSB0eXBlcyBvZiBvYmplY3RzICJpbWxlbWVudCIgdGhlIFtbSGFzSW5zdGFu
Y2VdXSBwcm9wZXJ0eS4KKyAgICBPYmplY3RJbXAgKm8yKHN0YXRpY19jYXN0PE9iamVjdEltcCo+
KHYyKSk7CisgICAgaWYgKCFvMi0+aW1wbGVtZW50c0hhc0luc3RhbmNlKCkpIHsKKyAgICAgIC8v
IEFjY29yZGluZyB0byB0aGUgc3BlYywgb25seSBzb21lIHR5cGVzIG9mIG9iamVjdHMgImltcGxl
bWVudCIgdGhlIFtbSGFzSW5zdGFuY2VdXSBwcm9wZXJ0eS4KICAgICAgIC8vIEJ1dCB3ZSBhcmUg
c3VwcG9zZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHdoZXJlIHRoZSBvYmplY3QgZG9lcyBub3Qg
ImhhdmUiIHRoZSBbW0hhc0luc3RhbmNlXV0KICAgICAgIC8vIHByb3BlcnR5LiBJdCBzZWVtcyB0
aGF0IGFsbCBvYmplY3QgaGF2ZSB0aGUgcHJvcGVydHksIGJ1dCBub3QgYWxsIGltcGxlbWVudCBp
dCwgc28gaW4gdGhpcwogICAgICAgLy8gY2FzZSB3ZSByZXR1cm4gZmFsc2UgKGNvbnNpc3RlbnQg
d2l0aCBtb3ppbGxhKQotICAgICAgcmV0dXJuIFZhbHVlKGZhbHNlKTsKKyAgICAgIHJldHVybiBq
c0Jvb2xlYW4oZmFsc2UpOwogICAgICAgLy8gICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IsCiAgICAgICAvLwkJCSJPYmplY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbW0hh
c0luc3RhbmNlXV0gbWV0aG9kLiIgKTsKICAgICB9Ci0gICAgcmV0dXJuIG8yLmhhc0luc3RhbmNl
KGV4ZWMsIHYxKTsKKyAgICByZXR1cm4ganNCb29sZWFuKG8yLT5oYXNJbnN0YW5jZShleGVjLCB2
MSkpOwogICB9CiAKLSAgcmV0dXJuIFZhbHVlKGIpOworICByZXR1cm4ganNCb29sZWFuKGIpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXF1YWxOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTIyNiwxMSArMTIwOCwxMSBAQCBib29s
IEVxdWFsTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjkKLVZhbHVlIEVxdWFsTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkVxdWFsTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsK
KyAgVmFsdWVJbXAgKnYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICBWYWx1ZSB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJ
bXAgKnYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQogCiAgIGJvb2wgcmVzdWx0OwpAQCAtMTI0Myw3ICsxMjI1LDcgQEAgVmFsdWUgRXF1YWxOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZQogICAgIGJvb2wgZXEgPSBzdHJpY3RFcXVhbChleGVj
LHYxLCB2Mik7CiAgICAgcmVzdWx0ID0gb3BlciA9PSBPcFN0ckVxID8gZXEgOiAhZXE7CiAgIH0K
LSAgcmV0dXJuIFZhbHVlKHJlc3VsdCk7CisgIHJldHVybiBqc0Jvb2xlYW4ocmVzdWx0KTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpdE9wZXJOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyNjcsMTQgKzEyNDksMTQgQEAgYm9vbCBC
aXRPcGVyTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjEwCi1WYWx1ZSBCaXRPcGVyTm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkJpdE9wZXJOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4
ZWMpOworICBWYWx1ZUltcCAqdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVD
S0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICBW
YWx1ZUltcCAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElP
TlZBTFVFCi0gIGludCBpMSA9IHYxLnRvSW50MzIoZXhlYyk7Ci0gIGludCBpMiA9IHYyLnRvSW50
MzIoZXhlYyk7CisgIGludCBpMSA9IHYxLT50b0ludDMyKGV4ZWMpOworICBpbnQgaTIgPSB2Mi0+
dG9JbnQzMihleGVjKTsKICAgaW50IHJlc3VsdDsKICAgaWYgKG9wZXIgPT0gT3BCaXRBbmQpCiAg
ICAgcmVzdWx0ID0gaTEgJiBpMjsKQEAgLTEyODMsNyArMTI2NSw3IEBAIFZhbHVlIEJpdE9wZXJO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmUKICAgZWxzZQogICAgIHJlc3VsdCA9IGkxIHwgaTI7
CiAKLSAgcmV0dXJuIFZhbHVlKHJlc3VsdCk7CisgIHJldHVybiBqc051bWJlcihyZXN1bHQpOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmluYXJ5TG9naWNhbE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMwNywxNSArMTI4OSwxNSBAQCBib29s
IEJpbmFyeUxvZ2ljYWxOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMTEKLVZhbHVlIEJp
bmFyeUxvZ2ljYWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqQmlu
YXJ5TG9naWNhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdjEg
PSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2MSA9IGV4cHIxLT5ldmFsdWF0
ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgYm9vbCBiMSA9IHYxLnRvQm9v
bGVhbihleGVjKTsKKyAgYm9vbCBiMSA9IHYxLT50b0Jvb2xlYW4oZXhlYyk7CiAgIGlmICgoIWIx
ICYmIG9wZXIgPT0gT3BBbmQpIHx8IChiMSAmJiBvcGVyID09IE9wT3IpKQogICAgIHJldHVybiB2
MTsKIAotICBWYWx1ZSB2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYy
ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAg
IHJldHVybiB2MjsKQEAgLTEzNDYsMTEgKzEzMjgsMTEgQEAgYm9vbCBDb25kaXRpb25hbE5vZGU6
OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4xMgotVmFsdWUgQ29uZGl0aW9uYWxOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqQ29uZGl0aW9uYWxOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYgPSBsb2dpY2FsLT5ldmFsdWF0ZShleGVj
KTsKKyAgVmFsdWVJbXAgKnYgPSBsb2dpY2FsLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKLSAgYm9vbCBiID0gdi50b0Jvb2xlYW4oZXhlYyk7CisgIGJvb2wgYiA9
IHYtPnRvQm9vbGVhbihleGVjKTsKIAogICBpZiAoYikKICAgICB2ID0gZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwpAQCAtMTM4MiwxNyArMTM2NCwxNyBAQCBib29sIEFzc2lnbk5vZGU6OmRlcmVmKCkK
IH0KIAogLy8gRUNNQSAxMS4xMwotVmFsdWUgQXNzaWduTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQorVmFsdWVJbXAgKkFzc2lnbk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKICAgUmVmZXJlbmNlIGwgPSBsZWZ0LT5ldmFsdWF0ZVJlZmVyZW5jZShleGVjKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgVmFsdWUgZSwgdjsKKyAgVmFsdWVJbXAgKnY7CiAgIGlm
IChvcGVyID09IE9wRXF1YWwpIHsKICAgICB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgfSBlbHNlIHsKLSAgICBWYWx1ZSB2MSA9IGwuZ2V0
VmFsdWUoZXhlYyk7Ci0gICAgVmFsdWUgdjIgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgICBW
YWx1ZUltcCAqdjEgPSBsLmdldFZhbHVlKGV4ZWMpOworICAgIFZhbHVlSW1wICp2MiA9IGV4cHIt
PmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgaW50IGkx
OwogICAgIGludCBpMjsKQEAgLTE0MTEsNDEgKzEzOTMsNDEgQEAgVmFsdWUgQXNzaWduTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICpleAogICAgICAgdiA9IGFkZChleGVjLCB2MSwgdjIsICctJyk7
CiAgICAgICBicmVhazsKICAgICBjYXNlIE9wTFNoaWZ0OgotICAgICAgaTEgPSB2MS50b0ludDMy
KGV4ZWMpOwotICAgICAgaTIgPSB2Mi50b0ludDMyKGV4ZWMpOwotICAgICAgdiA9IFZhbHVlKGkx
IDw8IGkyKTsKKyAgICAgIGkxID0gdjEtPnRvSW50MzIoZXhlYyk7CisgICAgICBpMiA9IHYyLT50
b0ludDMyKGV4ZWMpOworICAgICAgdiA9IGpzTnVtYmVyKGkxIDw8IGkyKTsKICAgICAgIGJyZWFr
OwogICAgIGNhc2UgT3BSU2hpZnQ6Ci0gICAgICBpMSA9IHYxLnRvSW50MzIoZXhlYyk7Ci0gICAg
ICBpMiA9IHYyLnRvSW50MzIoZXhlYyk7Ci0gICAgICB2ID0gVmFsdWUoaTEgPj4gaTIpOworICAg
ICAgaTEgPSB2MS0+dG9JbnQzMihleGVjKTsKKyAgICAgIGkyID0gdjItPnRvSW50MzIoZXhlYyk7
CisgICAgICB2ID0ganNOdW1iZXIoaTEgPj4gaTIpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBP
cFVSU2hpZnQ6Ci0gICAgICB1aSA9IHYxLnRvVUludDMyKGV4ZWMpOwotICAgICAgaTIgPSB2Mi50
b0ludDMyKGV4ZWMpOwotICAgICAgdiA9IFZhbHVlKHVpID4+IGkyKTsKKyAgICAgIHVpID0gdjEt
PnRvVUludDMyKGV4ZWMpOworICAgICAgaTIgPSB2Mi0+dG9JbnQzMihleGVjKTsKKyAgICAgIHYg
PSBqc051bWJlcih1aSA+PiBpMik7CiAgICAgICBicmVhazsKICAgICBjYXNlIE9wQW5kRXE6Ci0g
ICAgICBpMSA9IHYxLnRvSW50MzIoZXhlYyk7Ci0gICAgICBpMiA9IHYyLnRvSW50MzIoZXhlYyk7
Ci0gICAgICB2ID0gVmFsdWUoaTEgJiBpMik7CisgICAgICBpMSA9IHYxLT50b0ludDMyKGV4ZWMp
OworICAgICAgaTIgPSB2Mi0+dG9JbnQzMihleGVjKTsKKyAgICAgIHYgPSBqc051bWJlcihpMSAm
IGkyKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BYT3JFcToKLSAgICAgIGkxID0gdjEudG9J
bnQzMihleGVjKTsKLSAgICAgIGkyID0gdjIudG9JbnQzMihleGVjKTsKLSAgICAgIHYgPSBWYWx1
ZShpMSBeIGkyKTsKKyAgICAgIGkxID0gdjEtPnRvSW50MzIoZXhlYyk7CisgICAgICBpMiA9IHYy
LT50b0ludDMyKGV4ZWMpOworICAgICAgdiA9IGpzTnVtYmVyKGkxIF4gaTIpOwogICAgICAgYnJl
YWs7CiAgICAgY2FzZSBPcE9yRXE6Ci0gICAgICBpMSA9IHYxLnRvSW50MzIoZXhlYyk7Ci0gICAg
ICBpMiA9IHYyLnRvSW50MzIoZXhlYyk7Ci0gICAgICB2ID0gVmFsdWUoaTEgfCBpMik7CisgICAg
ICBpMSA9IHYxLT50b0ludDMyKGV4ZWMpOworICAgICAgaTIgPSB2Mi0+dG9JbnQzMihleGVjKTsK
KyAgICAgIHYgPSBqc051bWJlcihpMSB8IGkyKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BN
b2RFcTogewogICAgICAgYm9vbCBkMUtub3duVG9CZUludGVnZXI7Ci0gICAgICBkb3VibGUgZDEg
PSB2MS50b051bWJlcihleGVjLCBkMUtub3duVG9CZUludGVnZXIpOworICAgICAgZG91YmxlIGQx
ID0gdjEtPnRvTnVtYmVyKGV4ZWMsIGQxS25vd25Ub0JlSW50ZWdlcik7CiAgICAgICBib29sIGQy
S25vd25Ub0JlSW50ZWdlcjsKLSAgICAgIGRvdWJsZSBkMiA9IHYyLnRvTnVtYmVyKGV4ZWMsIGQy
S25vd25Ub0JlSW50ZWdlcik7Ci0gICAgICB2ID0gVmFsdWUoZm1vZChkMSwgZDIpLCBkMUtub3du
VG9CZUludGVnZXIgJiYgZDJLbm93blRvQmVJbnRlZ2VyICYmIGQyICE9IDApOworICAgICAgZG91
YmxlIGQyID0gdjItPnRvTnVtYmVyKGV4ZWMsIGQyS25vd25Ub0JlSW50ZWdlcik7CisgICAgICB2
ID0ganNOdW1iZXIoZm1vZChkMSwgZDIpLCBkMUtub3duVG9CZUludGVnZXIgJiYgZDJLbm93blRv
QmVJbnRlZ2VyICYmIGQyICE9IDApOwogICAgIH0KICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CkBAIC0xNDgwLDExICsxNDYyLDExIEBAIGJvb2wgQ29tbWFOb2RlOjpkZXJlZigpCiB9CiAKIC8v
IEVDTUEgMTEuMTQKLVZhbHVlIENvbW1hTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQor
VmFsdWVJbXAgKkNvbW1hTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1
ZSBkdW1teSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgZXhwcjEtPmV2YWx1YXRlKGV4ZWMp
OwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBWYWx1ZSB2ID0gZXhwcjItPmV2YWx1YXRl
KGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKIAogICByZXR1cm4gdjsKQEAgLTE1MzMsNyArMTUxNSw3IEBAIENv
bXBsZXRpb24gU3RhdExpc3ROb2RlOjpleGVjdXRlKEV4ZWNTdGEKICAgQ29tcGxldGlvbiBjID0g
c3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwogICBLSlNfQUJPUlRQT0lOVAogICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICBWYWx1ZSBleCA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAg
IFZhbHVlSW1wICpleCA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGV4KTsKICAgfQpAQCAtMTU0MSw3
ICsxNTIzLDcgQEAgQ29tcGxldGlvbiBTdGF0TGlzdE5vZGU6OmV4ZWN1dGUoRXhlY1N0YQogICBp
ZiAoYy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCiAgICAgcmV0dXJuIGM7CiAgIAotICBWYWx1ZSB2
ID0gYy52YWx1ZSgpOworICBWYWx1ZUltcCAqdiA9IGMudmFsdWUoKTsKICAgCiAgIGZvciAoU3Rh
dExpc3ROb2RlICpuID0gbGlzdDsgbjsgbiA9IG4tPmxpc3QpIHsKICAgICBDb21wbGV0aW9uIGMy
ID0gbi0+c3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwpAQCAtMTU1MCw3ICsxNTMyLDcgQEAgQ29t
cGxldGlvbiBTdGF0TGlzdE5vZGU6OmV4ZWN1dGUoRXhlY1N0YQogICAgICAgcmV0dXJuIGMyOwog
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICBWYWx1ZSBleCA9IGV4ZWMt
PmV4Y2VwdGlvbigpOworICAgICAgVmFsdWVJbXAgKmV4ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CiAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhy
b3csIGV4KTsKICAgICB9CkBAIC0xNTg2LDcgKzE1NjgsNyBAQCBib29sIEFzc2lnbkV4cHJOb2Rl
OjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTIuMgotVmFsdWUgQXNzaWduRXhwck5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQogewogICByZXR1cm4gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiB9CkBA
IC0xNjE0LDE5ICsxNTk2LDE5IEBAIGJvb2wgVmFyRGVjbE5vZGU6OmRlcmVmKCkKIH0KIAogLy8g
RUNNQSAxMi4yCi1WYWx1ZSBWYXJEZWNsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQor
VmFsdWVJbXAgKlZhckRlY2xOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIE9i
amVjdCB2YXJpYWJsZSA9IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKTsK
KyAgT2JqZWN0SW1wICp2YXJpYWJsZSA9IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVP
YmplY3QoKTsKIAotICBWYWx1ZSB2YWw7CisgIFZhbHVlSW1wICp2YWw7CiAgIGlmIChpbml0KSB7
CiAgICAgICB2YWwgPSBpbml0LT5ldmFsdWF0ZShleGVjKTsKICAgICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCiAgIH0gZWxzZSB7CiAgICAgICAvLyBhbHJlYWR5IGRlY2xhcmVkPyAtIGNoZWNr
IHdpdGggZ2V0RGlyZWN0IHNvIHlvdSBjYW4gb3ZlcnJpZGUKICAgICAgIC8vIGJ1aWx0LWluIHBy
b3BlcnRpZXMgb2YgdGhlIGdsb2JhbCBvYmplY3Qgd2l0aCB2YXIgZGVjbGFyYXRpb25zLgotICAg
ICAgaWYgKCB2YXJpYWJsZS5pbXAoKS0+Z2V0RGlyZWN0KGlkZW50KSApIAotICAgICAgICAgIHJl
dHVybiBWYWx1ZSgpOworICAgICAgaWYgKHZhcmlhYmxlLT5nZXREaXJlY3QoaWRlbnQpKSAKKyAg
ICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIHZhbCA9IFVuZGVmaW5lZCgpOwogICB9CiAKQEAg
LTE2NDAsMjQgKzE2MjIsMjQgQEAgVmFsdWUgVmFyRGVjbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZQogICAgIGZsYWdzIHw9IERvbnREZWxldGU7CiAgIGlmICh2YXJUeXBlID09IFZhckRlY2xO
b2RlOjpDb25zdGFudCkKICAgICBmbGFncyB8PSBSZWFkT25seTsKLSAgdmFyaWFibGUucHV0KGV4
ZWMsIGlkZW50LCB2YWwsIGZsYWdzKTsKKyAgdmFyaWFibGUtPnB1dChleGVjLCBpZGVudCwgdmFs
LCBmbGFncyk7CiAKLSAgcmV0dXJuIGlkZW50LnVzdHJpbmcoKTsKKyAgcmV0dXJuIGpzU3RyaW5n
KGlkZW50LnVzdHJpbmcoKSk7CiB9CiAKIHZvaWQgVmFyRGVjbE5vZGU6OnByb2Nlc3NWYXJEZWNs
cyhFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIE9iamVjdCB2YXJpYWJsZSA9IGV4ZWMtPmNvbnRleHQo
KS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKTsKKyAgT2JqZWN0SW1wICp2YXJpYWJsZSA9IGV4ZWMt
PmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKTsKIAogICAvLyBJZiBhIHZhcmlhYmxl
IGJ5IHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cywgZG9uJ3QgY2xvYmJlciBpdCAtCiAgIC8vIGl0
IG1pZ2h0IGJlIGEgZnVuY3Rpb24gcGFyYW1ldGVyCi0gIGlmICghdmFyaWFibGUuaGFzUHJvcGVy
dHkoZXhlYywgaWRlbnQpKSB7CisgIGlmICghdmFyaWFibGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50KSkgewogICAgIGludCBmbGFncyA9IEludGVybmFsOwogICAgIGlmIChleGVjLT5jb250ZXh0
KCkuaW1wKCktPmNvZGVUeXBlKCkgIT0gRXZhbENvZGUpCiAgICAgICBmbGFncyB8PSBEb250RGVs
ZXRlOwogICAgIGlmICh2YXJUeXBlID09IFZhckRlY2xOb2RlOjpDb25zdGFudCkKICAgICAgIGZs
YWdzIHw9IFJlYWRPbmx5OwotICAgIHZhcmlhYmxlLnB1dChleGVjLCBpZGVudCwgVW5kZWZpbmVk
KCksIGZsYWdzKTsKKyAgICB2YXJpYWJsZS0+cHV0KGV4ZWMsIGlkZW50LCBVbmRlZmluZWQoKSwg
ZmxhZ3MpOwogICB9CiB9CiAKQEAgLTE2ODcsNyArMTY2OSw3IEBAIGJvb2wgVmFyRGVjbExpc3RO
b2RlOjpkZXJlZigpCiAKIAogLy8gRUNNQSAxMi4yCi1WYWx1ZSBWYXJEZWNsTGlzdE5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpWYXJEZWNsTGlzdE5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgZm9yIChWYXJEZWNsTGlzdE5vZGUgKm4gPSB0aGlz
OyBuOyBuID0gbi0+bGlzdCkgewogICAgIG4tPnZhci0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0xODA3
LDcgKzE3ODksNyBAQCBDb21wbGV0aW9uIEV4cHJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4CiB7
CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsK
KyAgVmFsdWVJbXAgKnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OCiAKICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCB2KTsKQEAgLTE4NDIsOSArMTgyNCw5
IEBAIENvbXBsZXRpb24gSWZOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXgKIHsKICAgS0pTX0JS
RUFLUE9JTlQ7CiAKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUlt
cCAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgYm9v
bCBiID0gdi50b0Jvb2xlYW4oZXhlYyk7CisgIGJvb2wgYiA9IHYtPnRvQm9vbGVhbihleGVjKTsK
IAogICAvLyBpZiAuLi4gdGhlbgogICBpZiAoYikKQEAgLTE4OTEsOSArMTg3Myw4IEBAIENvbXBs
ZXRpb24gRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXQKIHsKICAgS0pTX0JSRUFLUE9JTlQ7
CiAKLSAgVmFsdWUgYmUsIGJ2OworICBWYWx1ZUltcCAqYnY7CiAgIENvbXBsZXRpb24gYzsKLSAg
VmFsdWUgdmFsdWU7CiAKICAgZG8gewogICAgIC8vIGJhaWwgb3V0IG9uIGVycm9yCkBAIC0xOTA0
LDE1ICsxODg1LDE1IEBAIENvbXBsZXRpb24gRG9XaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXQK
ICAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMoKS0+cG9wSXRlcmF0aW9uKCk7
CiAgICAgaWYgKCEoKGMuY29tcGxUeXBlKCkgPT0gQ29udGludWUpICYmIGxzLmNvbnRhaW5zKGMu
dGFyZ2V0KCkpKSkgewogICAgICAgaWYgKChjLmNvbXBsVHlwZSgpID09IEJyZWFrKSAmJiBscy5j
b250YWlucyhjLnRhcmdldCgpKSkKLSAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCB2
YWx1ZSk7CisgICAgICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgTlVMTCk7CiAgICAgICBp
ZiAoYy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCiAgICAgICAgIHJldHVybiBjOwogICAgIH0KICAg
ICBidiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTgotICB9
IHdoaWxlIChidi50b0Jvb2xlYW4oZXhlYykpOworICB9IHdoaWxlIChidi0+dG9Cb29sZWFuKGV4
ZWMpKTsKIAotICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIHZhbHVlKTsKKyAgcmV0dXJuIENv
bXBsZXRpb24oTm9ybWFsLCBOVUxMKTsKIH0KIAogdm9pZCBEb1doaWxlTm9kZTo6cHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKQEAgLTE5NDUsMTUgKzE5MjYsMTUgQEAgQ29tcGxldGlv
biBXaGlsZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogewogICBLSlNfQlJFQUtQT0lOVDsKIAot
ICBWYWx1ZSBiZSwgYnY7CisgIFZhbHVlSW1wICpidjsKICAgQ29tcGxldGlvbiBjOwogICBib29s
IGIoZmFsc2UpOwotICBWYWx1ZSB2YWx1ZTsKKyAgVmFsdWVJbXAgKnZhbHVlID0gTlVMTDsKIAog
ICB3aGlsZSAoMSkgewogICAgIGJ2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NI
RUNLRVhDRVBUSU9OCi0gICAgYiA9IGJ2LnRvQm9vbGVhbihleGVjKTsKKyAgICBiID0gYnYtPnRv
Qm9vbGVhbihleGVjKTsKIAogICAgIC8vIGJhaWwgb3V0IG9uIGVycm9yCiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OCkBAIC0yMDE0LDcgKzE5OTUsNyBAQCBib29sIEZvck5vZGU6OmRlcmVmKCkKIC8v
IEVDTUEgMTIuNi4zCiBDb21wbGV0aW9uIEZvck5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVj
KQogewotICBWYWx1ZSB2LCBjdmFsOworICBWYWx1ZUltcCAqdiwgKmN2YWwgPSBOVUxMOwogCiAg
IGlmIChleHByMSkgewogICAgIHYgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0yMDI0LDcg
KzIwMDUsNyBAQCBDb21wbGV0aW9uIEZvck5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICplCiAgICAg
aWYgKGV4cHIyKSB7CiAgICAgICB2ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OCi0gICAgICBpZiAoIXYudG9Cb29sZWFuKGV4ZWMpKQorICAgICAgaWYg
KCF2LT50b0Jvb2xlYW4oZXhlYykpCiAJcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCBjdmFsKTsK
ICAgICB9CiAgICAgLy8gYmFpbCBvdXQgb24gZXJyb3IKQEAgLTIxMDYsOCArMjA4Nyw5IEBAIGJv
b2wgRm9ySW5Ob2RlOjpkZXJlZigpCiAvLyBFQ01BIDEyLjYuNAogQ29tcGxldGlvbiBGb3JJbk5v
ZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSBlLCByZXR2YWw7Ci0gIE9i
amVjdCB2OworICBWYWx1ZUltcCAqZTsKKyAgVmFsdWVJbXAgKnJldHZhbCA9IE5VTEw7CisgIE9i
amVjdEltcCAqdjsKICAgQ29tcGxldGlvbiBjOwogICBSZWZlcmVuY2VMaXN0IHByb3BMaXN0Owog
CkBAIC0yMTIyLDE5ICsyMTA0LDE5IEBAIENvbXBsZXRpb24gRm9ySW5Ob2RlOjpleGVjdXRlKEV4
ZWNTdGF0ZSAKICAgLy8gdGhlIGxvb3AgYXQgYWxsLCBiZWNhdXNlIHRoZWlyIG9iamVjdCB3cmFw
cGVycyB3aWxsIGhhdmUgYQogICAvLyBwcm9wZXJ0eSBsaXN0IGJ1dCB3aWxsIHRocm93IGFuIGV4
Y2VwdGlvbiBpZiB5b3UgYXR0ZW1wdCB0bwogICAvLyBhY2Nlc3MgYW55IHByb3BlcnR5LgotICBp
ZiAoZS50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSB8fCBlLnR5cGUoKSA9PSBOdWxsVHlwZSkgewot
ICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgcmV0dmFsKTsKKyAgaWYgKGUtPmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKKyAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIE5VTEwpOwogICB9
CiAKICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gIHYgPSBlLnRvT2JqZWN0KGV4ZWMpOwotICBwcm9w
TGlzdCA9IHYucHJvcExpc3QoZXhlYyk7CisgIHYgPSBlLT50b09iamVjdChleGVjKTsKKyAgcHJv
cExpc3QgPSB2LT5wcm9wTGlzdChleGVjKTsKIAogICBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgcHJv
cEl0ID0gcHJvcExpc3QuYmVnaW4oKTsKIAogICB3aGlsZSAocHJvcEl0ICE9IHByb3BMaXN0LmVu
ZCgpKSB7CiAgICAgSWRlbnRpZmllciBuYW1lID0gcHJvcEl0LT5nZXRQcm9wZXJ0eU5hbWUoZXhl
Yyk7Ci0gICAgaWYgKCF2Lmhhc1Byb3BlcnR5KGV4ZWMsbmFtZSkpIHsKKyAgICBpZiAoIXYtPmhh
c1Byb3BlcnR5KGV4ZWMsbmFtZSkpIHsKICAgICAgIHByb3BJdCsrOwogICAgICAgY29udGludWU7
CiAgICAgfQpAQCAtMjE3OCw4ICsyMTYwLDYgQEAgQ29tcGxldGlvbiBDb250aW51ZU5vZGU6OmV4
ZWN1dGUoRXhlY1N0YQogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICBWYWx1ZSBkdW1teTsKLQog
ICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVjLT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJl
bHMoKS0+aW5JdGVyYXRpb24oKSkKICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywKIAkJICAg
ICAgdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIkludmFsaWQgY29udGludWUgc3RhdGVt
ZW50LiIpKTsKQEAgLTIxODcsNyArMjE2Nyw3IEBAIENvbXBsZXRpb24gQ29udGludWVOb2RlOjpl
eGVjdXRlKEV4ZWNTdGEKICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywKICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTGFiZWwgJXMgbm90IGZv
dW5kLiIsIGlkZW50KSk7CiAgIGVsc2UKLSAgICByZXR1cm4gQ29tcGxldGlvbihDb250aW51ZSwg
ZHVtbXksIGlkZW50KTsKKyAgICByZXR1cm4gQ29tcGxldGlvbihDb250aW51ZSwgTlVMTCwgaWRl
bnQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJlYWtOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjE5Nyw4ICsyMTc3LDYgQEAg
Q29tcGxldGlvbiBCcmVha05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogewogICBLSlNfQlJFQUtQ
T0lOVDsKIAotICBWYWx1ZSBkdW1teTsKLQogICBpZiAoaWRlbnQuaXNFbXB0eSgpICYmICFleGVj
LT5jb250ZXh0KCkuaW1wKCktPnNlZW5MYWJlbHMoKS0+aW5JdGVyYXRpb24oKSAmJgogICAgICAg
IWV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2VlbkxhYmVscygpLT5pblN3aXRjaCgpKQogICAgIHJl
dHVybiBDb21wbGV0aW9uKFRocm93LApAQCAtMjIwNyw3ICsyMTg1LDcgQEAgQ29tcGxldGlvbiBC
cmVha05vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93
LAogICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJM
YWJlbCAlcyBub3QgZm91bmQuIiwgaWRlbnQpKTsKICAgZWxzZQotICAgIHJldHVybiBDb21wbGV0
aW9uKEJyZWFrLCBkdW1teSwgaWRlbnQpOworICAgIHJldHVybiBDb21wbGV0aW9uKEJyZWFrLCBO
VUxMLCBpZGVudCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXR1
cm5Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjM5LDcgKzIy
MTcsNyBAQCBDb21wbGV0aW9uIFJldHVybk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlCiAgIGlmICgh
dmFsdWUpCiAgICAgcmV0dXJuIENvbXBsZXRpb24oUmV0dXJuVmFsdWUsIFVuZGVmaW5lZCgpKTsK
IAotICBWYWx1ZSB2ID0gdmFsdWUtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IHZh
bHVlLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgcmV0dXJuIENv
bXBsZXRpb24oUmV0dXJuVmFsdWUsIHYpOwpAQCAtMjI3MCw5ICsyMjQ4LDkgQEAgQ29tcGxldGlv
biBXaXRoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKgogewogICBLSlNfQlJFQUtQT0lOVDsKIAot
ICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+
ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgotICBPYmplY3QgbyA9IHYudG9P
YmplY3QoZXhlYyk7CisgIE9iamVjdEltcCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogICBLSlNf
Q0hFQ0tFWENFUFRJT04KICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5wdXNoU2NvcGUobyk7CiAg
IENvbXBsZXRpb24gcmVzID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwpAQCAtMjMwNyw5ICsy
Mjg1LDkgQEAgYm9vbCBDYXNlQ2xhdXNlTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDEyLjEx
Ci1WYWx1ZSBDYXNlQ2xhdXNlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJ
bXAgKkNhc2VDbGF1c2VOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVl
IHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYgPSBleHByLT5ldmFsdWF0
ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICByZXR1cm4gdjsKQEAgLTIz
NTQsMTEgKzIzMzIsMTEgQEAgYm9vbCBDbGF1c2VMaXN0Tm9kZTo6ZGVyZWYoKQogICByZXR1cm4g
Tm9kZTo6ZGVyZWYoKTsKIH0KIAotVmFsdWUgQ2xhdXNlTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqQ2xhdXNlTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqLypleGVjKi8pCiB7CiAgIC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgKi8KICAgYXNz
ZXJ0KGZhbHNlKTsKLSAgcmV0dXJuIFZhbHVlKCk7CisgIHJldHVybiBOVUxMOwogfQogCiAvLyBF
Q01BIDEyLjExCkBAIC0yNDEzLDE3ICsyMzkxLDE3IEBAIGJvb2wgQ2FzZUJsb2NrTm9kZTo6ZGVy
ZWYoKQogICByZXR1cm4gTm9kZTo6ZGVyZWYoKTsKIH0KIAotVmFsdWUgQ2FzZUJsb2NrTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1ZhbHVlSW1wICpDYXNlQmxvY2tOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKQogewogICAvKiBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkICovCiAgIGFzc2VydChmYWxzZSk7Ci0gIHJldHVybiBWYWx1ZSgpOworICByZXR1cm4gTlVM
TDsKIH0KIAogLy8gRUNNQSAxMi4xMQotQ29tcGxldGlvbiBDYXNlQmxvY2tOb2RlOjpldmFsQmxv
Y2soRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgaW5wdXQpCitDb21wbGV0aW9uIENhc2VC
bG9ja05vZGU6OmV2YWxCbG9jayhFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICppbnB1dCkKIHsK
LSAgVmFsdWUgdjsKKyAgVmFsdWVJbXAgKnY7CiAgIENvbXBsZXRpb24gcmVzOwogICBDbGF1c2VM
aXN0Tm9kZSAqYSA9IGxpc3QxLCAqYiA9IGxpc3QyOwogICBDYXNlQ2xhdXNlTm9kZSAqY2xhdXNl
OwpAQCAtMjUxNyw3ICsyNDk1LDcgQEAgQ29tcGxldGlvbiBTd2l0Y2hOb2RlOjpleGVjdXRlKEV4
ZWNTdGF0ZQogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVh
dGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19D
SEVDS0VYQ0VQVElPTgogCiAgIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2VlbkxhYmVscygpLT5w
dXNoU3dpdGNoKCk7CkBAIC0yNTkzLDcgKzI1NzEsNyBAQCBDb21wbGV0aW9uIFRocm93Tm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdGUgCiB7CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIHYgPSBl
eHByLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYgPSBleHByLT5ldmFsdWF0ZShleGVj
KTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIHYp
OwpAQCAtMjYyMywxNCArMjYwMSwxNCBAQCBDb21wbGV0aW9uIENhdGNoTm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUgCiB9CiAKIC8vIEVDTUEgMTIuMTQKLUNvbXBsZXRpb24gQ2F0Y2hOb2RlOjpleGVj
dXRlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJmFyZykKK0NvbXBsZXRpb24gQ2F0Y2hO
b2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKmFyZykKIHsKICAgLyogVE9E
TzogY29ycmVjdCA/IE5vdCBwYXJ0IG9mIHRoZSBzcGVjICovCiAKICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKIAotICBPYmplY3Qgb2JqKG5ldyBPYmplY3RJbXAoKSk7Ci0gIG9iai5wdXQoZXhl
YywgaWRlbnQsIGFyZywgRG9udERlbGV0ZSk7CisgIE9iamVjdEltcCAqb2JqKG5ldyBPYmplY3RJ
bXAoKSk7CisgIG9iai0+cHV0KGV4ZWMsIGlkZW50LCBhcmcsIERvbnREZWxldGUpOwogICBleGVj
LT5jb250ZXh0KCkuaW1wKCktPnB1c2hTY29wZShvYmopOwogICBDb21wbGV0aW9uIGMgPSBibG9j
ay0+ZXhlY3V0ZShleGVjKTsKICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5wb3BTY29wZSgpOwpA
QCAtMjcxMCw3ICsyNjg4LDcgQEAgQ29tcGxldGlvbiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0
ZSAqZQogICB9CiAKICAgaWYgKCFfY2F0Y2gpIHsKLSAgICBWYWx1ZSBsYXN0RXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgVmFsdWVJbXAgKmxhc3RFeGNlcHRpb24gPSBleGVjLT5l
eGNlcHRpb24oKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIAogICAgIGMyID0g
X2ZpbmFsLT5leGVjdXRlKGV4ZWMpOwpAQCAtMjc1Nyw3ICsyNzM1LDcgQEAgYm9vbCBQYXJhbWV0
ZXJOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTMKLVZhbHVlIFBhcmFtZXRlck5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqUGFyYW1ldGVyTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKIHsKICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpA
QCAtMjgwMCwzOCArMjc3OCwzNCBAQCBib29sIEZ1bmNEZWNsTm9kZTo6ZGVyZWYoKQogLy8gRUNN
QSAxMwogdm9pZCBGdW5jRGVjbE5vZGU6OnByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUgKmV4ZWMp
CiB7CisgIENvbnRleHRJbXAgKmNvbnRleHQgPSBleGVjLT5jb250ZXh0KCkuaW1wKCk7CisKICAg
Ly8gVE9ETzogbGV0IHRoaXMgYmUgYW4gb2JqZWN0IHdpdGggW1tDbGFzc11dIHByb3BlcnR5ICJG
dW5jdGlvbiIKLSAgRnVuY3Rpb25JbXAgKmZpbXAgPSBuZXcgRGVjbGFyZWRGdW5jdGlvbkltcChl
eGVjLCBpZGVudCwgYm9keSwgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zY29wZUNoYWluKCkpOwot
ICBPYmplY3QgZnVuYyhmaW1wKTsgLy8gcHJvdGVjdCBmcm9tIEdDCisgIEZ1bmN0aW9uSW1wICpm
aW1wID0gbmV3IERlY2xhcmVkRnVuY3Rpb25JbXAoZXhlYywgaWRlbnQsIGJvZHksIGNvbnRleHQt
PnNjb3BlQ2hhaW4oKSk7CisgIE9iamVjdEltcCAqZnVuYyhmaW1wKTsgLy8gcHJvdGVjdCBmcm9t
IEdDCiAKLSAgLy8gIFZhbHVlIHByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3QoKS5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsKLSAgTGlzdCBlbXB0
eTsKLSAgT2JqZWN0IHByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3QoKS5jb25zdHJ1Y3QoZXhlYyxlbXB0eSk7Ci0gIHByb3RvLnB1dChleGVjLCBjb25zdHJ1
Y3RvclByb3BlcnR5TmFtZSwgZnVuYywgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Ci0g
IGZ1bmMucHV0KGV4ZWMsIHByb3RvdHlwZVByb3BlcnR5TmFtZSwgcHJvdG8sIEludGVybmFsfERv
bnREZWxldGUpOworICBPYmplY3RJbXAgKnByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpOworICBw
cm90by0+cHV0KGV4ZWMsIGNvbnN0cnVjdG9yUHJvcGVydHlOYW1lLCBmdW5jLCBSZWFkT25seXxE
b250RGVsZXRlfERvbnRFbnVtKTsKKyAgZnVuYy0+cHV0KGV4ZWMsIHByb3RvdHlwZVByb3BlcnR5
TmFtZSwgcHJvdG8sIEludGVybmFsfERvbnREZWxldGUpOwogCiAgIGludCBwbGVuID0gMDsKICAg
Zm9yKFBhcmFtZXRlck5vZGUgKnAgPSBwYXJhbTsgcCAhPSAwTDsgcCA9IHAtPm5leHRQYXJhbSgp
LCBwbGVuKyspCiAgICAgZmltcC0+YWRkUGFyYW1ldGVyKHAtPmlkZW50KCkpOwogCi0gIGZ1bmMu
cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKHBsZW4pLCBSZWFkT25seXxEb250
RGVsZXRlfERvbnRFbnVtKTsKKyAgZnVuYy0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVyKHBsZW4pLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKIAotICBpZiAoZXhl
Yy0+Y29udGV4dCgpLmltcCgpLT5jb2RlVHlwZSgpID09IEV2YWxDb2RlKSB7Ci0gICAgLy8gRUNN
QSAxMC4yLjIKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnZhcmlhYmxlT2JqZWN0KCkucHV0
KGV4ZWMsIGlkZW50LCBmdW5jLCBJbnRlcm5hbCk7Ci0gIH0gZWxzZSB7Ci0gICAgZXhlYy0+Y29u
dGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpLnB1dChleGVjLCBpZGVudCwgZnVuYywgSW50
ZXJuYWwgfCBEb250RGVsZXRlKTsKLSAgfQorICAvLyBFQ01BIDEwLjIuMgorICBjb250ZXh0LT52
YXJpYWJsZU9iamVjdCgpLT5wdXQoZXhlYywgaWRlbnQsIGZ1bmMsIEludGVybmFsIHwgKGNvbnRl
eHQtPmNvZGVUeXBlKCkgPT0gRXZhbENvZGUgPyAwIDogRG9udERlbGV0ZSkpOwogCiAgIGlmIChi
b2R5KSB7CiAgICAgLy8gaGFjayB0aGUgc2NvcGUgc28gdGhhdCB0aGUgZnVuY3Rpb24gZ2V0cyBw
dXQgYXMgYSBwcm9wZXJ0eSBvZiBmdW5jLCBhbmQgaXQncyBzY29wZQogICAgIC8vIGNvbnRhaW5z
IHRoZSBmdW5jIGFzIHdlbGwgYXMgb3VyIGN1cnJlbnQgc2NvcGUKLSAgICBPYmplY3Qgb2xkVmFy
ID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpOwotICAgIGV4ZWMtPmNv
bnRleHQoKS5pbXAoKS0+c2V0VmFyaWFibGVPYmplY3QoZnVuYyk7Ci0gICAgZXhlYy0+Y29udGV4
dCgpLmltcCgpLT5wdXNoU2NvcGUoZnVuYyk7CisgICAgT2JqZWN0SW1wICpvbGRWYXIgPSBjb250
ZXh0LT52YXJpYWJsZU9iamVjdCgpOworICAgIGNvbnRleHQtPnNldFZhcmlhYmxlT2JqZWN0KGZ1
bmMpOworICAgIGNvbnRleHQtPnB1c2hTY29wZShmdW5jKTsKICAgICBib2R5LT5wcm9jZXNzRnVu
Y0RlY2woZXhlYyk7Ci0gICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5wb3BTY29wZSgpOwotICAg
IGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2V0VmFyaWFibGVPYmplY3Qob2xkVmFyKTsKKyAgICBj
b250ZXh0LT5wb3BTY29wZSgpOworICAgIGNvbnRleHQtPnNldFZhcmlhYmxlT2JqZWN0KG9sZFZh
cik7CiAgIH0KIH0KIApAQCAtMjg1NywxMiArMjgzMSwxMSBAQCBib29sIEZ1bmNFeHByTm9kZTo6
ZGVyZWYoKQogCiAKIC8vIEVDTUEgMTMKLVZhbHVlIEZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQogewogICBGdW5jdGlvbkltcCAqZmltcCA9IG5ldyBEZWNsYXJlZEZ1bmN0aW9uSW1w
KGV4ZWMsIElkZW50aWZpZXI6Om51bGwoKSwgYm9keSwgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5z
Y29wZUNoYWluKCkpOwotICBWYWx1ZSByZXQoZmltcCk7Ci0gIExpc3QgZW1wdHk7Ci0gIFZhbHVl
IHByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS5jb25z
dHJ1Y3QoZXhlYyxlbXB0eSk7CisgIFZhbHVlSW1wICpyZXQoZmltcCk7CisgIFZhbHVlSW1wICpw
cm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0
cnVjdChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAgZmltcC0+cHV0KGV4ZWMsIHByb3RvdHlwZVBy
b3BlcnR5TmFtZSwgcHJvdG8sIEludGVybmFsfERvbnREZWxldGUpOwogCiAgIGludCBwbGVuID0g
MDsKQEAgLTI5MjUsNyArMjg5OCw3IEBAIENvbXBsZXRpb24gU291cmNlRWxlbWVudHNOb2RlOjpl
eGVjdXRlKEUKICAgICAgIHJldHVybiBjMjsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRvIHJldHVy
biBjMiBoZXJlLCBidXQgaXQgc2VlbXMgdGhhdCBtb3ppbGxhIHJldHVybnMgYzEgaWYKICAgICAv
LyBjMiBkb2Vzbid0IGhhdmUgYSB2YWx1ZQotICAgIGlmICghYzIudmFsdWUoKS5pc051bGwoKSkK
KyAgICBpZiAoYzIudmFsdWUoKSkKICAgICAgIGMxID0gYzI7CiAgIH0KICAgCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAt
cCAtdSAtdSAtcCAtcjEuMjMgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9ub2Rlcy5oCTE0IEp1bCAyMDA1IDE4OjI3OjAzIC0wMDAwCTEuMjMKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDggLTAwMDAKQEAgLTgy
LDcgKzgyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBLSlNfRkFTVF9BTExPQ0FURUQ7CiAK
LSAgICB2aXJ0dWFsIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykgPSAwOworICAgIHZp
cnR1YWwgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykgPSAwOwogICAgIHZpcnR1
YWwgUmVmZXJlbmNlIGV2YWx1YXRlUmVmZXJlbmNlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgVVN0
cmluZyB0b1N0cmluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0ID0gMDsKQEAgLTEwMyw5ICsxMDMsOSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBzdGF0aWMgdm9pZCBmaW5hbENoZWNrKCk7CiAjZW5kaWYKICAgcHJvdGVjdGVkOgotICAg
IFZhbHVlIHRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hh
ciAqbXNnKTsKLSAgICBWYWx1ZSB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBl
IGUsIGNvbnN0IGNoYXIgKm1zZywgVmFsdWUgdiwgTm9kZSAqZXhwcik7Ci0gICAgVmFsdWUgdGhy
b3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2csIElk
ZW50aWZpZXIgbGFiZWwpOworICAgIFZhbHVlSW1wICp0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhl
YywgRXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZyk7CisgICAgVmFsdWVJbXAgKnRocm93RXJy
b3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBWYWx1ZUlt
cCAqdiwgTm9kZSAqZXhwcik7CisgICAgVmFsdWVJbXAgKnRocm93RXJyb3IoRXhlY1N0YXRlICpl
eGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBJZGVudGlmaWVyIGxhYmVsKTsKICAg
ICB2b2lkIHNldEV4Y2VwdGlvbkRldGFpbHNJZk5lZWRlZChFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IGludCBsaW5lOwogICAgIFVTdHJpbmcgc291cmNlVVJMOwpAQCAtMTM2LDcgKzEzNiw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICBwcm90ZWN0ZWQ6CiAgICAgTGFiZWxTdGFjayBsczsKICAgcHJpdmF0
ZToKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKSB7IHJldHVybiBVbmRl
ZmluZWQoKTsgfQorICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKSB7
IHJldHVybiBVbmRlZmluZWQoKTsgfQogICAgIGludCBsMCwgbDE7CiAgICAgaW50IHNpZDsKICAg
ICBib29sIGJyZWFrUG9pbnQ7CkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgY2xhc3MgTnVsbE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBOdWxsTm9k
ZSgpIHt9Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUlt
cCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgfTsKIAogICBjbGFzcyBCb29sZWFuTm9kZSA6IHB1
YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIEJvb2xlYW5Ob2RlKGJvb2wgdikgOiB2YWx1ZSh2
KSB7fQotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgYm9vbCB2YWx1ZTsKQEAgLTE2
MSw3ICsxNjEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1Ymxp
YyBOb2RlIHsKICAgcHVibGljOgogICAgIE51bWJlck5vZGUoZG91YmxlIHYpIDogdmFsdWUodikg
eyB9Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBkb3VibGUgdmFsdWU7CkBAIC0x
NzAsNyArMTcwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIFN0cmluZ05vZGUgOiBwdWJs
aWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBTdHJpbmdOb2RlKGNvbnN0IFVTdHJpbmcgKnYpIHsg
dmFsdWUgPSAqdjsgfQotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAg
VmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgVVN0cmluZyB2
YWx1ZTsKQEAgLTE4MCw3ICsxODAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAg
IFJlZ0V4cE5vZGUoY29uc3QgVVN0cmluZyAmcCwgY29uc3QgVVN0cmluZyAmZikKICAgICAgIDog
cGF0dGVybihwKSwgZmxhZ3MoZikgeyB9Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAg
ICBVU3RyaW5nIHBhdHRlcm4sIGZsYWdzOwpAQCAtMTg5LDE0ICsxODksMTQgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIGNsYXNzIFRoaXNOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAg
VGhpc05vZGUoKSB7fQotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAg
VmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIH07CiAKICAgY2xhc3MgUmVzb2x2ZU5v
ZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBSZXNvbHZlTm9kZShjb25zdCBJZGVu
dGlmaWVyICZzKSA6IGlkZW50KHMpIHsgfQotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmly
dHVhbCBSZWZlcmVuY2UgZXZhbHVhdGVSZWZlcmVuY2UoRXhlY1N0YXRlICpleGVjKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToK
QEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBHcm91cE5vZGUoTm9kZSAq
ZykgOiBncm91cChnKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBi
b29sIGRlcmVmKCk7Ci0gICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCBSZWZlcmVuY2UgZXZhbHVhdGVSZWZlcmVuY2UoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdCB7IGdyb3VwLT5z
dHJlYW1UbyhzKTsgfQogICBwcml2YXRlOgpAQCAtMjIzLDcgKzIyMyw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgOiBsaXN0KGwtPmxpc3QpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsgbC0+bGlz
dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRl
cmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUlt
cCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJy
YXlOb2RlOwpAQCAtMjQxLDcgKzI0MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBlbGVt
ZW50KGVsZS0+bGlzdCksIGVsaXNpb24oZWxpKSwgb3B0KHRydWUpIHsgZWxlLT5saXN0ID0gMDsg
fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAg
ICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIEVsZW1lbnROb2RlICplbGVtZW50OwpAQCAt
MjU4LDcgKzI1OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBuYW1lKG4pLCBhc3NpZ24o
YSksIGxpc3QobC0+bGlzdCkgeyBsLT5saXN0ID0gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCBy
ZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZTsKQEAgLTI3Myw3ICsyNzMs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBPYmplY3RMaXRlcmFsTm9kZShQcm9wZXJ0eVZhbHVl
Tm9kZSAqbCkgOiBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKICAgICBQcm9wZXJ0eVZhbHVlTm9kZSAqbGlzdDsKQEAgLTI4Myw3ICsyODMsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIFByb3BlcnR5Tm9kZShkb3VibGUgZCkg
OiBudW1lcmljKGQpIHsgfQogICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyICZzKSA6
IHN0cihzKSB7IH0KLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZh
bHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIGRvdWJsZSBudW1l
cmljOwpAQCAtMjk1LDcgKzI5NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFjY2Vzc29yTm9k
ZTEoTm9kZSAqZTEsIE5vZGUgKmUyKSA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmly
dHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgdmlydHVhbCBSZWZlcmVuY2UgZXZhbHVhdGVSZWZlcmVuY2UoRXhlY1N0
YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBj
b25zdDsKICAgcHJpdmF0ZToKQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBBY2Nlc3Nvck5vZGUyKE5vZGUgKmUsIGNvbnN0IElkZW50aWZpZXIgJnMpIDogZXhwcihlKSwg
aWRlbnQocykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCBSZWZlcmVuY2UgZXZh
bHVhdGVSZWZlcmVuY2UoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTMyNCw3ICszMjQsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogbGlzdChsLT5saXN0KSwgZXhwcihlKSB7IGwtPmxp
c3QgPSB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgTGlzdCBldmFsdWF0ZUxpc3QoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZz
KSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTM0MCw3ICszNDAsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgIDogbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSAwOyB9CiAgICAgdmlydHVhbCB2b2lk
IHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7
CiAgICAgTGlzdCBldmFsdWF0ZUxpc3QoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTM1Myw3
ICszNTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBOZXdFeHByTm9kZShOb2RlICplLCBBcmd1
bWVudHNOb2RlICphKSA6IGV4cHIoZSksIGFyZ3MoYSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVm
KCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKICAgICBOb2RlICpleHByOwpAQCAtMzY1LDcgKzM2NSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIEZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZSwgQXJndW1lbnRzTm9kZSAqYSkgOiBleHByKGUp
LCBhcmdzKGEpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqZXhwcjsKQEAg
LTM3Nyw3ICszNzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBQb3N0Zml4Tm9kZShOb2RlICpl
LCBPcGVyYXRvciBvKSA6IGV4cHIoZSksIG9wZXIobykge30KICAgICB2aXJ0dWFsIHZvaWQgcmVm
KCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKICAgICBOb2RlICpleHByOwpAQCAtMzg5LDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIERlbGV0ZU5vZGUoTm9kZSAqZSkgOiBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJl
ZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6CiAgICAgTm9kZSAqZXhwcjsKQEAgLTQwMCw3ICs0MDAsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBWb2lkTm9kZShOb2RlICplKSA6IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVm
KCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0
ZToKICAgICBOb2RlICpleHByOwpAQCAtNDExLDcgKzQxMSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIFR5cGVPZk5vZGUoTm9kZSAqZSkgOiBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJl
ZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6CiAgICAgTm9kZSAqZXhwcjsKQEAgLTQyMiw3ICs0MjIsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBQcmVmaXhOb2RlKE9wZXJhdG9yIG8sIE5vZGUgKmUpIDogb3BlcihvKSwgZXhwcihlKSB7
fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAg
ICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE9wZXJhdG9yIG9wZXI7CkBAIC00MzQsNyAr
NDM0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVW5hcnlQbHVzTm9kZShOb2RlICplKSA6IGV4
cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVm
KCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAtNDQ1
LDcgKzQ0NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIE5lZ2F0ZU5vZGUoTm9kZSAqZSkgOiBl
eHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJl
ZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqZXhwcjsKQEAgLTQ1
Niw3ICs0NTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBCaXR3aXNlTm90Tm9kZShOb2RlICpl
KSA6IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29s
IGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1
ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpA
QCAtNDY3LDcgKzQ2Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIExvZ2ljYWxOb3ROb2RlKE5v
ZGUgKmUpIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFs
IGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAg
IFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4
cHI7CkBAIC00NzgsNyArNDc4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgTXVsdE5vZGUoTm9k
ZSAqdDEsIE5vZGUgKnQyLCBjaGFyIG9wKSA6IHRlcm0xKHQxKSwgdGVybTIodDIpLCBvcGVyKG9w
KSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsK
LSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKnRlcm0xLCAqdGVybTI7CkBA
IC00OTAsNyArNDkwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQWRkTm9kZShOb2RlICp0MSwg
Tm9kZSAqdDIsIGNoYXIgb3ApIDogdGVybTEodDEpLCB0ZXJtMih0MiksIG9wZXIob3ApIHt9CiAg
ICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZh
bHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqdGVybTEsICp0ZXJtMjsKQEAgLTUwMyw3
ICs1MDMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogdGVybTEodDEpLCB0ZXJtMih0Miks
IG9wZXIobykge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRl
cmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUlt
cCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICp0ZXJtMSwgKnRl
cm0yOwpAQCAtNTE2LDcgKzUxNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgZXhwcjEoZTEp
LCBleHByMihlMiksIG9wZXIobykge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmly
dHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsK
KyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2Rl
ICpleHByMSwgKmV4cHIyOwpAQCAtNTI5LDcgKzUyOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgOiBleHByMShlMSksIGV4cHIyKGUyKSwgb3BlcihvKSB7fQogICAgIHZpcnR1YWwgdm9pZCBy
ZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwog
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2
YXRlOgogICAgIE5vZGUgKmV4cHIxLCAqZXhwcjI7CkBAIC01NDIsNyArNTQyLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgb3BlcihvKSB7fQogICAgIHZp
cnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3Rh
dGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNv
bnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHIxLCAqZXhwcjI7CkBAIC01NTgsNyArNTU4
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgb3Blcihv
KSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsK
LSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHIxLCAqZXhwcjI7CkBA
IC01NzQsNyArNTc0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICBsb2dpY2FsKGwpLCBleHBy
MShlMSksIGV4cHIyKGUyKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFs
IGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAg
IFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmxv
Z2ljYWwsICpleHByMSwgKmV4cHIyOwpAQCAtNTg1LDcgKzU4NSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIEFzc2lnbk5vZGUoTm9kZSAqbCwgT3BlcmF0b3IgbywgTm9kZSAqZSkgOiBsZWZ0KGwp
LCBvcGVyKG8pLCBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1
YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7Cisg
ICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lk
IHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAq
bGVmdDsKQEAgLTU5OCw3ICs1OTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDb21tYU5vZGUo
Tm9kZSAqZTEsIE5vZGUgKmUyKSA6IGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAgdmlydHVh
bCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1
YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7
CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqZXhwcjEsICpleHByMjsKQEAgLTYyNSw3ICs2MjUsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBBc3NpZ25FeHByTm9kZShOb2RlICplKSA6IGV4cHIoZSkg
e30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0g
ICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAtNjM3LDcgKzYz
Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIg
JmlkLCBBc3NpZ25FeHByTm9kZSAqaW4sIFR5cGUgdCk7CiAgICAgdmlydHVhbCB2b2lkIHJlZigp
OwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgpAQCAt
NjU0LDcgKzY1NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBsaXN0KGwtPmxpc3QpLCB2
YXIodikgeyBsLT5saXN0ID0gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2
aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
OworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTgzMCw3ICs4
MzAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogZXhwcihlKSwgbGlzdChsLT5saXN0KSB7
IGwtPmxpc3QgPSAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9v
bCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFs
dWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgQ29tcGxldGlvbiBldmFsU3Rh
dGVtZW50cyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVj
bHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdDsKQEAgLTg0Nyw3ICs4NDcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
IDogY2woYyksIG54KG4tPm54KSB7IG4tPm54ID0gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCBy
ZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwog
ICAgIENhc2VDbGF1c2VOb2RlICpjbGF1c2UoKSBjb25zdCB7IHJldHVybiBjbDsgfQogICAgIENs
YXVzZUxpc3ROb2RlICpuZXh0KCkgY29uc3QgeyByZXR1cm4gbng7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CkBAIC04NjMsOCArODYzLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgQ2FzZUJsb2NrTm9kZShDbGF1c2VMaXN0Tm9kZSAqbDEsIENh
c2VDbGF1c2VOb2RlICpkLCBDbGF1c2VMaXN0Tm9kZSAqbDIpOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpOwotICAgIENvbXBsZXRpb24gZXZhbEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgVmFsdWUmIGlucHV0KTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKKyAgICBDb21wbGV0aW9uIGV2YWxCbG9jayhFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1w
ICppbnB1dCk7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0Owog
ICBwcml2YXRlOgpAQCAtOTE2LDcgKzkxNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1
YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKICAgICB2aXJ0dWFsIENv
bXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwotICAgIENvbXBsZXRpb24gZXhlY3V0
ZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZhcmcpOworICAgIENvbXBsZXRpb24gZXhl
Y3V0ZShFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICphcmcpOwogICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTk2Myw3ICs5NjMsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogaWQoaSksIG5leHQobGlzdC0+bmV4dCkgeyBsaXN0
LT5uZXh0ID0gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZh
bHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIElkZW50aWZpZXIgaWRlbnQo
KSB7IHJldHVybiBpZDsgfQogICAgIFBhcmFtZXRlck5vZGUgKm5leHRQYXJhbSgpIHsgcmV0dXJu
IG5leHQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25z
dDsKQEAgLTEwMDYsNyArMTAwNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBwYXJhbShw
LT5uZXh0KSwgYm9keShiKSB7IHAtPm5leHQgPSAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigp
OwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
CiAgICAgUGFyYW1ldGVyTm9kZSAqcGFyYW07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVt
YmVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRD
b3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZm
IC1wIC11IC11IC1wIC1yMS4xOCBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAK
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAkyNSBKdWwgMjAwNSAyMjox
NzoxMiAtMDAwMAkxLjE4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJ
NyBBdWcgMjAwNSAwNDo0NDowOCAtMDAwMApAQCAtNTIsOCArNTIsNyBAQCBOdW1iZXJQcm90b3R5
cGVJbXA6Ok51bWJlclByb3RvdHlwZUltcChFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKQogICA6IE51bWJlcklu
c3RhbmNlSW1wKG9ialByb3RvKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwotICBzZXRJbnRl
cm5hbFZhbHVlKE51bWJlckltcDo6emVybygpKTsKKyAgc2V0SW50ZXJuYWxWYWx1ZShqc1plcm8o
KSk7CiAKICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIE51
bWJlck9iamVjdEltcCBoYXMgYmVlbiBjb25zdHJ1Y3RlZAogCkBAIC03Miw3ICs3MSw2IEBAIE51
bWJlclByb3RvRnVuY0ltcDo6TnVtYmVyUHJvdG9GdW5jSW1wKEUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGlu
dCBpLCBpbnQgbGVuKQogICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKSwgaWQoaSkK
IHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFt
ZSwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIApAQCAtMTI3LDI2ICsx
MjUsMjQgQEAgc3RhdGljIFVTdHJpbmcgY2hhcl9zZXF1ZW5jZShjaGFyIGMsIGludAogfQogCiAv
LyBFQ01BIDE1LjcuNC4yIC0gMTUuNy40LjcKLVZhbHVlIE51bWJlclByb3RvRnVuY0ltcDo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBWYWx1ZSByZXN1
bHQ7Ci0KICAgLy8gbm8gZ2VuZXJpYyBmdW5jdGlvbi4gInRoaXMiIGhhcyB0byBiZSBhIE51bWJl
ciBvYmplY3QKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZUltcDo6aW5m
bykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Cisg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlSW1wOjppbmZvKSkgeworICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogCi0gIFZhbHVlIHYg
PSB0aGlzT2JqLmludGVybmFsVmFsdWUoKTsKKyAgVmFsdWVJbXAgKnYgPSB0aGlzT2JqLT5pbnRl
cm5hbFZhbHVlKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBUb1N0cmluZzogewogICAgIGRv
dWJsZSBkcmFkaXggPSAxMDsKICAgICBpZiAoIWFyZ3MuaXNFbXB0eSgpKQotICAgICAgZHJhZGl4
ID0gYXJnc1swXS50b0ludGVnZXIoZXhlYyk7CisgICAgICBkcmFkaXggPSBhcmdzWzBdLT50b0lu
dGVnZXIoZXhlYyk7CiAgICAgaWYgKGRyYWRpeCA+PSAyICYmIGRyYWRpeCA8PSAzNiAmJiBkcmFk
aXggIT0gMTApIHsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgaW50IHJhZGl4ID0gc3RhdGljX2Nh
c3Q8aW50PihkcmFkaXgpOwotICAgICAgdW5zaWduZWQgaSA9IHYudG9VSW50MzIoZXhlYyk7Cisg
ICAgICB1bnNpZ25lZCBpID0gdi0+dG9VSW50MzIoZXhlYyk7CiAgICAgICBjaGFyIHNbMzNdOwog
ICAgICAgY2hhciAqcCA9IHMgKyBzaXplb2Yocyk7CiAgICAgICAqLS1wID0gJ1wwJzsKQEAgLTE1
NCwyMyArMTUwLDIwIEBAIFZhbHVlIE51bWJlclByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUK
ICAgICAgICAgKi0tcCA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiW2kg
JSByYWRpeF07CiAgICAgICAgIGkgLz0gcmFkaXg7CiAgICAgICB9IHdoaWxlIChpKTsKLSAgICAg
IHJlc3VsdCA9IFN0cmluZyhwKTsKKyAgICAgIHJldHVybiBTdHJpbmcocCk7CiAgICAgfSBlbHNl
Ci0gICAgICByZXN1bHQgPSBTdHJpbmcodi50b1N0cmluZyhleGVjKSk7Ci0gICAgYnJlYWs7Cisg
ICAgICByZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgfQogICBjYXNlIFRvTG9j
YWxlU3RyaW5nOiAvKiBUT0RPICovCi0gICAgcmVzdWx0ID0gU3RyaW5nKHYudG9TdHJpbmcoZXhl
YykpOwotICAgIGJyZWFrOworICAgIHJldHVybiBTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOwog
ICBjYXNlIFZhbHVlT2Y6Ci0gICAgcmVzdWx0ID0gTnVtYmVyKHYudG9OdW1iZXIoZXhlYykpOwot
ICAgIGJyZWFrOworICAgIHJldHVybiBOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykpOwogICBjYXNl
IFRvRml4ZWQ6IAogICB7Ci0gICAgICBWYWx1ZSBmcmFjdGlvbkRpZ2l0cyA9IGFyZ3NbMF07Ci0g
ICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0cy50b0ludGVnZXIoZXhlYyk7CisgICAgICBW
YWx1ZUltcCAqZnJhY3Rpb25EaWdpdHMgPSBhcmdzWzBdOworICAgICAgZG91YmxlIGRmID0gZnJh
Y3Rpb25EaWdpdHMtPnRvSW50ZWdlcihleGVjKTsKICAgICAgIGlmICghKGRmID49IDAgJiYgZGYg
PD0gMjApKSB7IC8vIHRydWUgZm9yIE5hTgotICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCisgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRvRml4ZWQoKSBkaWdpdHMgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5k
IDIwIik7CiAgICAgICAgICAgCiAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CkBA
IC0xNzgsNyArMTcxLDcgQEAgVmFsdWUgTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0
ZQogICAgICAgfQogICAgICAgaW50IGYgPSAoaW50KWRmOwogICAgICAgCi0gICAgICBkb3VibGUg
eCA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgaWYgKGlzTmFOKHgpKQogICAgICAgICAgIHJldHVybiBTdHJpbmcoIk5hTiIpOwog
ICAgICAgCkBAIC0yMTIsMTUgKzIwNSwxNSBAQCBWYWx1ZSBOdW1iZXJQcm90b0Z1bmNJbXA6OmNh
bGwoRXhlY1N0YXRlCiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzK20uc3Vic3RyKDAsay1mKSk7
CiAgIH0KICAgY2FzZSBUb0V4cG9uZW50aWFsOiB7Ci0gICAgICBkb3VibGUgeCA9IHYudG9OdW1i
ZXIoZXhlYyk7CisgICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgCiAg
ICAgICBpZiAoaXNOYU4oeCkgfHwgaXNJbmYoeCkpCiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhV
U3RyaW5nOjpmcm9tKHgpKTsKICAgICAgIAotICAgICAgVmFsdWUgZnJhY3Rpb25EaWdpdHMgPSBh
cmdzWzBdOwotICAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMudG9JbnRlZ2VyKGV4ZWMp
OworICAgICAgVmFsdWVJbXAgKmZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKKyAgICAgIGRvdWJs
ZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7CiAgICAgICBpZiAoIShkZiA+
PSAwICYmIGRmIDw9IDIwKSkgeyAvLyB0cnVlIGZvciBOYU4KLSAgICAgICAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLAorICAgICAgICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0b0V4cG9uZW50aWFsKCkgYXJndW1lbnQgbXVzdCBiZXR3ZWVu
IDAgYW5kIDIwIik7CiAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAg
ICAgcmV0dXJuIGVycjsKQEAgLTIyOCw3ICsyMjEsNyBAQCBWYWx1ZSBOdW1iZXJQcm90b0Z1bmNJ
bXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgICBpbnQgZiA9IChpbnQpZGY7CiAgICAgICAKICAgICAg
IGludCBkZWNpbWFsQWRqdXN0ID0gMDsKLSAgICAgIGlmICghZnJhY3Rpb25EaWdpdHMuaXNBKFVu
ZGVmaW5lZFR5cGUpKSB7CisgICAgICBpZiAoIWZyYWN0aW9uRGlnaXRzLT5pc1VuZGVmaW5lZCgp
KSB7CiAgICAgICAgICAgZG91YmxlIGxvZ3ggPSBmbG9vcihsb2cxMCh4KSk7CiAgICAgICAgICAg
eCAvPSBwb3coMTAsbG9neCk7CiAgICAgICAgICAgZG91YmxlIGZ4ID0gZmxvb3IoeCpwb3coMTAs
ZikpL3BvdygxMCxmKTsKQEAgLTI2Myw3ICsyNTYsNyBAQCBWYWx1ZSBOdW1iZXJQcm90b0Z1bmNJ
bXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgICB9IGVsc2UgewogICAgICAgICAgIGJ1ZltpKytdID0g
cmVzdWx0WzBdOwogICAgICAgICAgIAotICAgICAgICAgIGlmIChmcmFjdGlvbkRpZ2l0cy5pc0Eo
VW5kZWZpbmVkVHlwZSkpCisgICAgICAgICAgaWYgKGZyYWN0aW9uRGlnaXRzLT5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICAgICAgICBmID0gbGVuZ3RoLTE7CiAgICAgICAgICAgCiAgICAgICAgICAg
aWYgKGxlbmd0aCA+IDEgJiYgZiA+IDApIHsKQEAgLTMxMCwxMCArMzAzLDEwIEBAIFZhbHVlIE51
bWJlclByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAgIGludCBlID0gMDsKICAgICAg
IFVTdHJpbmcgbTsKICAgICAgIAotICAgICAgZG91YmxlIGRwID0gYXJnc1swXS50b0ludGVnZXIo
ZXhlYyk7Ci0gICAgICBkb3VibGUgeCA9IHYudG9OdW1iZXIoZXhlYyk7CisgICAgICBkb3VibGUg
ZHAgPSBhcmdzWzBdLT50b0ludGVnZXIoZXhlYyk7CisgICAgICBkb3VibGUgeCA9IHYtPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgaWYgKGlzTmFOKGRwKSB8fCBpc05hTih4KSB8fCBpc0luZih4KSkK
LSAgICAgICAgICByZXR1cm4gU3RyaW5nKHYudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgIHJl
dHVybiBTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOwogICAgICAgCiAgICAgICBVU3RyaW5nIHMg
PSAiIjsKICAgICAgIGlmICh4IDwgMCkgewpAQCAtMzIyLDcgKzMxNSw3IEBAIFZhbHVlIE51bWJl
clByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAgIH0KICAgICAgIAogICAgICAgaWYg
KGRwIDwgMSB8fCBkcCA+IDIxKSB7Ci0gICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYywgUmFuZ2VFcnJvciwKKyAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYywgUmFuZ2VFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidG9QcmVjaXNpb24oKSBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjEiKTsK
ICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICByZXR1cm4gZXJy
OwpAQCAtMzcyLDcgKzM2NSw3IEBAIFZhbHVlIE51bWJlclByb3RvRnVuY0ltcDo6Y2FsbChFeGVj
U3RhdGUKICAgIH0KICAgICAgIAogIH0KLSAgcmV0dXJuIHJlc3VsdDsKKyAgcmV0dXJuIE5VTEw7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJPYmplY3RJbXAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTQsMjUgKzM4NywyNCBAQCBOdW1i
ZXJPYmplY3RJbXA6Ok51bWJlck9iamVjdEltcChFeGVjU3RhCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOdW1iZXJQcm90b3R5cGVJbXAgKm51bWJlclByb3RvKQogICA6IEludGVy
bmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICAv
LyBOdW1iZXIuUHJvdG90eXBlCiAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIG51
bWJlclByb3RvLERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgIC8vIG5vLiBvZiBh
cmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUs
IE51bWJlckltcDo6b25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBwdXRE
aXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBSZWFkT25seXxEb250RGVsZXRlfERv
bnRFbnVtKTsKIH0KIAotYm9vbCBOdW1iZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdAorYm9vbCBOdW1iZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQp
IGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxOdW1iZXJPYmplY3RJbXAsIElu
dGVybmFsRnVuY3Rpb25JbXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJm51bWJlclRhYmxlLCB0aGlz
LCByZXN1bHQpOwogfQogCi1WYWx1ZSBOdW1iZXJPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpOdW1iZXJPYmplY3RJbXA6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgLy8g
RUNNQSAxNS43LjMKICAgc3dpdGNoKHRva2VuKSB7CiAgIGNhc2UgTmFOVmFsdWU6Ci0gICAgcmV0
dXJuIE51bWJlcihOYU4pOworICAgIHJldHVybiBqc05hTigpOwogICBjYXNlIE5lZ0luZmluaXR5
OgogICAgIHJldHVybiBOdW1iZXIoLUluZik7CiAgIGNhc2UgUG9zSW5maW5pdHk6CkBAIC00MzIs
MTggKzQyNCwxOCBAQCBib29sIE51bWJlck9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjCiAK
IAogLy8gRUNNQSAxNS43LjEKLU9iamVjdCBOdW1iZXJPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmplY3RJbXAgKk51bWJlck9iamVjdElt
cDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgT2Jq
ZWN0SW1wICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluTnVtYmVy
UHJvdG90eXBlKCkuaW1wKCk7Ci0gIE9iamVjdCBvYmoobmV3IE51bWJlckluc3RhbmNlSW1wKHBy
b3RvKSk7CisgIE9iamVjdEltcCAqcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk51bWJlclByb3RvdHlwZSgpOworICBPYmplY3RJbXAgKm9iaihuZXcgTnVtYmVySW5z
dGFuY2VJbXAocHJvdG8pKTsKIAotICBOdW1iZXIgbjsKKyAgZG91YmxlIG47CiAgIGlmIChhcmdz
LmlzRW1wdHkoKSkKLSAgICBuID0gTnVtYmVyKDApOworICAgIG4gPSAwOwogICBlbHNlCi0gICAg
biA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgbiA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpOwogCi0gIG9iai5zZXRJbnRlcm5hbFZhbHVlKG4pOworICBvYmotPnNldEludGVybmFsVmFs
dWUoanNOdW1iZXIobikpOwogCiAgIHJldHVybiBvYmo7CiB9CkBAIC00NTQsMTAgKzQ0NiwxMCBA
QCBib29sIE51bWJlck9iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBjCiB9CiAKIC8vIEVDTUEg
MTUuNy4yCi1WYWx1ZSBOdW1iZXJPYmplY3RJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk51bWJlck9iamVj
dEltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09i
aiovLCBjb25zdCBMaXN0ICZhcmdzKQogewogICBpZiAoYXJncy5pc0VtcHR5KCkpCiAgICAgcmV0
dXJuIE51bWJlcigwKTsKICAgZWxzZQotICAgIHJldHVybiBOdW1iZXIoYXJnc1swXS50b051bWJl
cihleGVjKSk7CisgICAgcmV0dXJuIE51bWJlcihhcmdzWzBdLT50b051bWJlcihleGVjKSk7CiB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtdSAtcCAtcjEuOCBKYXZhU2NyaXB0Q29y
ZS9ranMvbnVtYmVyX29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVj
dC5oCTI1IEp1bCAyMDA1IDIyOjE3OjEyIC0wMDAwCTEuOAorKysgSmF2YVNjcmlwdENvcmUva2pz
L251bWJlcl9vYmplY3QuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC02MCw3ICs2MCw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgaW50IGxl
bik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAogICAgIGVu
dW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcsIFZhbHVlT2YsIFRvRml4ZWQsIFRvRXhwb25l
bnRpYWwsIFRvUHJlY2lzaW9uIH07CiAgIHByaXZhdGU6CkBAIC03OSwxOSArNzksMTkgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgICAgIE51bWJlclByb3RvdHlwZUltcCAqbnVt
YmVyUHJvdG8pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0Nh
bGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKTsKIAotICAgIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAg
IFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgTmFO
VmFsdWUsIE5lZ0luZmluaXR5LCBQb3NJbmZpbml0eSwgTWF4VmFsdWUsIE1pblZhbHVlIH07CiAK
ICAgICBDb21wbGV0aW9uIGV4ZWN1dGUoY29uc3QgTGlzdCAmKTsKLSAgICBPYmplY3QgY29uc3Ry
dWN0KGNvbnN0IExpc3QgJik7CisgICAgT2JqZWN0SW1wICpjb25zdHJ1Y3QoY29uc3QgTGlzdCAm
KTsKICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMv
b2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC1wIC11IC11IC1wIC1y
MS40OCBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pz
L29iamVjdC5jcHAJNiBBdWcgMjAwNSAwMToxNjoyNSAtMDAwMAkxLjQ4CisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvb2JqZWN0LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC00MCwxMCAr
NDAsMTAgQEAKICNpbmNsdWRlICJub2Rlcy5oIgogCiAjaWZuZGVmIE5ERUJVRwotI2RlZmluZSBK
QVZBU0NSSVBUX0NBTExfVFJBQ0lORyBZZXMKKy8vI2RlZmluZSBKQVZBU0NSSVBUX0NBTExfVFJB
Q0lORyAxCiAjZW5kaWYKIAotI2lmZGVmIEpBVkFTQ1JJUFRfQ0FMTF9UUkFDSU5HCisjaWYgSkFW
QVNDUklQVF9DQUxMX1RSQUNJTkcKIHN0YXRpYyBib29sIF90cmFjZUphdmFTY3JpcHQgPSBmYWxz
ZTsKIAogZXh0ZXJuICJDIiB7CkBAIC02MywyMSArNjMsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3QgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU9iamVjdCBPYmplY3Q6OmR5bmFtaWNDYXN0KGNv
bnN0IFZhbHVlICZ2KQorVmFsdWVJbXAgKk9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKHYuaXNOdWxs
KCkgfHwgdi50eXBlKCkgIT0gT2JqZWN0VHlwZSkKLSAgICByZXR1cm4gT2JqZWN0KDApOworICBh
c3NlcnQoaW1wbGVtZW50c0NhbGwoKSk7CiAKLSAgcmV0dXJuIE9iamVjdChzdGF0aWNfY2FzdDxP
YmplY3RJbXAqPih2LmltcCgpKSk7Ci19Ci0KLQotVmFsdWUgT2JqZWN0OjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQoteyAKICNpZiBLSlNf
TUFYX1NUQUNLID4gMAogICBzdGF0aWMgaW50IGRlcHRoID0gMDsgLy8gc3VtIG9mIGFsbCBjb25j
dXJyZW50IGludGVycHJldGVycwogCi0jaWZkZWYgSkFWQVNDUklQVF9DQUxMX1RSQUNJTkcKKyNp
ZiBKQVZBU0NSSVBUX0NBTExfVFJBQ0lORwogICAgIHN0YXRpYyBib29sIHRyYWNpbmcgPSBmYWxz
ZTsKICAgICBpZiAodHJhY2VKYXZhU2NyaXB0KCkgJiYgIXRyYWNpbmcpIHsKICAgICAgICAgdHJh
Y2luZyA9IHRydWU7CkBAIC04Nyw3ICs4MCw3IEBAIFZhbHVlIE9iamVjdDo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamUKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmdzLnNpemUoKTsg
aisrKSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCiAgICAg
ICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsKLSAgICAgICAgICAgIHByaW50ZiAoIioqKiBhcmdb
JWRdID0gJXNcbiIsIGosIGFyZ3Nbal0udG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAg
ICAgICBwcmludGYgKCIqKiogYXJnWyVkXSA9ICVzXG4iLCBqLCBhcmdzW2pdLT50b1N0cmluZyhl
eGVjKS5hc2NpaSgpKTsKICAgICAgICAgfQogICAgICAgICB0cmFjaW5nID0gZmFsc2U7CiAgICAg
fQpAQCAtOTUsMjUgKzg4LDI1IEBAIFZhbHVlIE9iamVjdDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamUKIAogICBpZiAoKytkZXB0aCA+IEtKU19NQVhfU1RBQ0spIHsKICAgICAtLWRlcHRoOwot
ICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCisgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkLiIp
OwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICNl
bmRpZgogCi0gIFZhbHVlIHJldCA9IGltcCgpLT5jYWxsKGV4ZWMsdGhpc09iaixhcmdzKTsgCisg
IFZhbHVlSW1wICpyZXQgPSBjYWxsQXNGdW5jdGlvbihleGVjLHRoaXNPYmosYXJncyk7IAogCiAj
aWYgS0pTX01BWF9TVEFDSyA+IDAKICAgLS1kZXB0aDsKICNlbmRpZgogCi0jaWZkZWYgSkFWQVND
UklQVF9DQUxMX1RSQUNJTkcKKyNpZiBKQVZBU0NSSVBUX0NBTExfVFJBQ0lORwogICAgIGlmICh0
cmFjZUphdmFTY3JpcHQoKSAmJiAhdHJhY2luZykgewogICAgICAgICB0cmFjaW5nID0gdHJ1ZTsK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQogICAgICAgICAgICAgcHV0
Y2hhciAoJyAnKTsKLSAgICAgICAgcHJpbnRmICgiKioqIHJldHVybmluZzogICVzXG4iLCByZXQu
dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAgIHByaW50ZiAoIioqKiByZXR1cm5pbmc6
ICAlc1xuIiwgcmV0LT50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgICAgICAgdHJhY2luZyA9
IGZhbHNlOwogICAgIH0KICNlbmRpZgpAQCAtMTIzLDM2ICsxMTYsMTEgQEAgVmFsdWUgT2JqZWN0
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gT2JqZWN0SW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1PYmplY3RJbXA6Ok9iamVjdEltcChjb25zdCBPYmplY3QgJnByb3RvKQotICA6IF9wcm90byhz
dGF0aWNfY2FzdDxPYmplY3RJbXAqPihwcm90by5pbXAoKSkpLCBfaW50ZXJuYWxWYWx1ZSgwTCkK
LXsKLSAgLy9mcHJpbnRmKHN0ZGVyciwiT2JqZWN0SW1wOjpPYmplY3RJbXAgJXBcbiIsKHZvaWQq
KXRoaXMpOwotfQotCi1PYmplY3RJbXA6Ok9iamVjdEltcChPYmplY3RJbXAgKnByb3RvKQotICA6
IF9wcm90byhwcm90byksIF9pbnRlcm5hbFZhbHVlKDBMKQotewotICAvL2ZwcmludGYoc3RkZXJy
LCJPYmplY3RJbXA6Ok9iamVjdEltcCAlcFxuIiwodm9pZCopdGhpcyk7Ci19Ci0KLU9iamVjdElt
cDo6T2JqZWN0SW1wKCkKLXsKLSAgLy9mcHJpbnRmKHN0ZGVyciwiT2JqZWN0SW1wOjpPYmplY3RJ
bXAgJXBcbiIsKHZvaWQqKXRoaXMpOwotICBfcHJvdG8gPSBOdWxsSW1wOjpzdGF0aWNOdWxsOwot
ICBfaW50ZXJuYWxWYWx1ZSA9IDBMOwotfQotCi1PYmplY3RJbXA6On5PYmplY3RJbXAoKQotewot
ICAvL2ZwcmludGYoc3RkZXJyLCJPYmplY3RJbXA6On5PYmplY3RJbXAgJXBcbiIsKHZvaWQqKXRo
aXMpOwotfQotCiB2b2lkIE9iamVjdEltcDo6bWFyaygpCiB7Ci0gIC8vZnByaW50ZihzdGRlcnIs
Ik9iamVjdEltcDo6bWFyaygpICVwXG4iLCh2b2lkKil0aGlzKTsKLSAgVmFsdWVJbXA6Om1hcmso
KTsKKyAgQWxsb2NhdGVkVmFsdWVJbXA6Om1hcmsoKTsKIAotICBpZiAoX3Byb3RvICYmICFfcHJv
dG8tPm1hcmtlZCgpKQorICBpZiAoIV9wcm90by0+bWFya2VkKCkpCiAgICAgX3Byb3RvLT5tYXJr
KCk7CiAKICAgX3Byb3AubWFyaygpOwpAQCAtMTYzLDM5ICsxMzEsMTQgQEAgdm9pZCBPYmplY3RJ
bXA6Om1hcmsoKQogICBfc2NvcGUubWFyaygpOwogfQogCi1jb25zdCBDbGFzc0luZm8gKk9iamVj
dEltcDo6Y2xhc3NJbmZvKCkgY29uc3QKLXsKLSAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgT2JqZWN0
SW1wOjppbmhlcml0cyhjb25zdCBDbGFzc0luZm8gKmluZm8pIGNvbnN0Ci17Ci0gIGlmICghaW5m
bykKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgY29uc3QgQ2xhc3NJbmZvICpjaSA9IGNsYXNzSW5m
bygpOwotICBpZiAoIWNpKQotICAgIHJldHVybiBmYWxzZTsKLQotICB3aGlsZSAoY2kgJiYgY2kg
IT0gaW5mbykKLSAgICBjaSA9IGNpLT5wYXJlbnRDbGFzczsKLQotICByZXR1cm4gKGNpID09IGlu
Zm8pOwotfQotCiBUeXBlIE9iamVjdEltcDo6dHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiBPYmpl
Y3RUeXBlOwogfQogCi1WYWx1ZSBPYmplY3RJbXA6OnByb3RvdHlwZSgpIGNvbnN0Ci17Ci0gIHJl
dHVybiBWYWx1ZShfcHJvdG8pOwotfQotCi12b2lkIE9iamVjdEltcDo6c2V0UHJvdG90eXBlKGNv
bnN0IFZhbHVlICZwcm90bykKK2NvbnN0IENsYXNzSW5mbyAqT2JqZWN0SW1wOjpjbGFzc0luZm8o
KSBjb25zdAogewotICBfcHJvdG8gPSBwcm90by5pbXAoKTsKKyAgcmV0dXJuIDA7CiB9CiAKIFVT
dHJpbmcgT2JqZWN0SW1wOjpjbGFzc05hbWUoKSBjb25zdApAQCAtMjA2LDE4ICsxNDksMTcgQEAg
VVN0cmluZyBPYmplY3RJbXA6OmNsYXNzTmFtZSgpIGNvbnN0CiAgIHJldHVybiAiT2JqZWN0IjsK
IH0KIAotVmFsdWUgT2JqZWN0SW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CitWYWx1ZUltcCAqT2JqZWN0SW1wOjpnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gIFZh
bHVlIHJlc3VsdDsKLQogICBjb25zdCBPYmplY3RJbXAgKmltcCA9IHRoaXM7CiAKICAgd2hpbGUg
KHRydWUpIHsKKyAgICBWYWx1ZUltcCAqcmVzdWx0OwogICAgIGlmIChpbXAtPmdldE93blByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KSkKICAgICAgIHJldHVybiByZXN1bHQ7CiAK
ICAgICBjb25zdCBWYWx1ZUltcCAqcHJvdG8gPSBpbXAtPl9wcm90bzsKLSAgICBpZiAocHJvdG8t
PmRpc3BhdGNoVHlwZSgpICE9IE9iamVjdFR5cGUpCisgICAgaWYgKCFwcm90by0+aXNPYmplY3Qo
KSkKICAgICAgIGJyZWFrOwogCiAgICAgaW1wID0gc3RhdGljX2Nhc3Q8Y29uc3QgT2JqZWN0SW1w
ICo+KHByb3RvKTsKQEAgLTIyNiwyMyArMTY4LDIyIEBAIFZhbHVlIE9iamVjdEltcDo6Z2V0KEV4
ZWNTdGF0ZSAqZXhlYywgY28KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIE9iamVj
dEltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3Vs
dCkgY29uc3QKIHsKICAgcmV0dXJuIGdldE93blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXI6OmZy
b20ocHJvcGVydHlOYW1lKSwgcmVzdWx0KTsKIH0KIAotVmFsdWUgT2JqZWN0SW1wOjpnZXQoRXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitWYWx1ZUltcCAqT2Jq
ZWN0SW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0
CiB7Ci0gIFZhbHVlIHJlc3VsdDsKLQogICBjb25zdCBPYmplY3RJbXAgKmltcCA9IHRoaXM7CiAK
ICAgd2hpbGUgKGltcCkgeworICAgIFZhbHVlSW1wICpyZXN1bHQ7CiAgICAgaWYgKGltcC0+Z2V0
T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpKQogICAgICAgcmV0dXJuIHJl
c3VsdDsKIAogICAgIGNvbnN0IFZhbHVlSW1wICpwcm90byA9IGltcC0+X3Byb3RvOwotICAgIGlm
IChwcm90by0+ZGlzcGF0Y2hUeXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgICBpZiAoIXByb3RvLT5p
c09iamVjdCgpKQogICAgICAgYnJlYWs7CiAKICAgICBpbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBP
YmplY3RJbXAgKj4ocHJvdG8pOwpAQCAtMjUxLDcgKzE5Miw3IEBAIFZhbHVlIE9iamVjdEltcDo6
Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW4KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29s
IE9iamVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIE9iamVjdEltcDo6Z2V0UHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3Vs
dCkgY29uc3QKIHsKICAgY29uc3QgT2JqZWN0SW1wICppbXAgPSB0aGlzOwogICAKQEAgLTI2MCwy
MCArMjAxLDE5IEBAIGJvb2wgT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmUKICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGNvbnN0IFZhbHVlSW1wICpwcm90byA9IGltcC0+
X3Byb3RvOwotICAgICAgaWYgKHByb3RvLT5kaXNwYXRjaFR5cGUoKSAhPSBPYmplY3RUeXBlKQot
ICAgICAgICBicmVhazsKKyAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKQorICAgICAgYnJlYWs7
CiAgICAgICAKLSAgICAgIGltcCA9IHN0YXRpY19jYXN0PGNvbnN0IE9iamVjdEltcCAqPihwcm90
byk7CisgICAgaW1wID0gc3RhdGljX2Nhc3Q8Y29uc3QgT2JqZWN0SW1wICo+KHByb3RvKTsKICAg
fQogICAKICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBFQ01BIDguNi4yLjIKLXZvaWQgT2JqZWN0
SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQordm9p
ZCBPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKLSAgYXNzZXJ0KCF2YWx1ZS5p
c051bGwoKSk7CisgIGFzc2VydCh2YWx1ZSk7CiAKICAgLy8gbm9uLXN0YW5kYXJkIG5ldHNjYXBl
IGV4dGVuc2lvbgogICBpZiAocHJvcGVydHlOYW1lID09IHNwZWNpYWxQcm90b3R5cGVQcm9wZXJ0
eU5hbWUpIHsKQEAgLTI5MywxMSArMjMzLDExIEBAIHZvaWQgT2JqZWN0SW1wOjpwdXQoRXhlY1N0
YXRlICpleGVjLCBjb24KICAgICByZXR1cm47CiAgIH0KIAotICBfcHJvcC5wdXQocHJvcGVydHlO
YW1lLHZhbHVlLmltcCgpLGF0dHIpOworICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLHZhbHVlLGF0
dHIpOwogfQogCiB2b2lkIE9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWUgJnZhbHVlLCBp
bnQgYXR0cikKKyAgICAgICAgICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
CiB7CiAgIHB1dChleGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksIHZhbHVlLCBh
dHRyKTsKIH0KQEAgLTMyNiw3ICsyNjYsNyBAQCBib29sIE9iamVjdEltcDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICplCiAgIGlmIChoYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQog
ICAgIHJldHVybiB0cnVlOwogCi0gIGlmICghX3Byb3RvIHx8IF9wcm90by0+ZGlzcGF0Y2hUeXBl
KCkgIT0gT2JqZWN0VHlwZSkgeworICBpZiAoIV9wcm90byB8fCAhX3Byb3RvLT5pc09iamVjdCgp
KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKQEAgLTMzOSw3ICsyNzksNyBAQCBib29sIE9i
amVjdEltcDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICplCiAgICAgaWYgKGhhc093blByb3BlcnR5
KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghX3By
b3RvIHx8IF9wcm90by0+ZGlzcGF0Y2hUeXBlKCkgIT0gT2JqZWN0VHlwZSkgeworICAgIGlmICgh
X3Byb3RvIHx8IF9wcm90by0+aXNPYmplY3QoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMzk5LDI4ICszMzksMjggQEAgdm9pZCBPYmplY3RJbXA6OmRlbGV0ZUFsbFByb3Bl
cnRpZXMoIEV4ZQogfQogCiAvLyBFQ01BIDguNi4yLjYKLVZhbHVlIE9iamVjdEltcDo6ZGVmYXVs
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdAorVmFsdWVJbXAgKk9iamVj
dEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdAogewog
ICBpZiAoaGludCAhPSBTdHJpbmdUeXBlICYmIGhpbnQgIT0gTnVtYmVyVHlwZSkgewogICAgIC8q
IFByZWZlciBTdHJpbmcgZm9yIERhdGUgb2JqZWN0cyAqLwotICAgIGlmIChfcHJvdG8gPT0gZXhl
Yy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5EYXRlUHJvdG90eXBlKCkuaW1wKCkpCisg
ICAgaWYgKF9wcm90byA9PSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkRhdGVQ
cm90b3R5cGUoKSkKICAgICAgIGhpbnQgPSBTdHJpbmdUeXBlOwogICAgIGVsc2UKICAgICAgIGhp
bnQgPSBOdW1iZXJUeXBlOwogICB9CiAKLSAgVmFsdWUgdjsKKyAgVmFsdWVJbXAgKnY7CiAgIGlm
IChoaW50ID09IFN0cmluZ1R5cGUpCiAgICAgdiA9IGdldChleGVjLHRvU3RyaW5nUHJvcGVydHlO
YW1lKTsKICAgZWxzZQogICAgIHYgPSBnZXQoZXhlYyx2YWx1ZU9mUHJvcGVydHlOYW1lKTsKIAot
ICBpZiAodi50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewotICAgIE9iamVjdCBvID0gT2JqZWN0KHN0
YXRpY19jYXN0PE9iamVjdEltcCo+KHYuaW1wKCkpKTsKLSAgICBpZiAoby5pbXBsZW1lbnRzQ2Fs
bCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCi0gICAgICBP
YmplY3QgdGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMpKTsKLSAg
ICAgIFZhbHVlIGRlZiA9IG8uY2FsbChleGVjLHRoaXNPYmosTGlzdDo6ZW1wdHkoKSk7Ci0gICAg
ICBUeXBlIGRlZlR5cGUgPSBkZWYudHlwZSgpOworICBpZiAodi0+aXNPYmplY3QoKSkgeworICAg
IE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOworICAgIGlmIChvLT5p
bXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQg
Li4uCisgICAgICBPYmplY3RJbXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCo+KHRo
aXMpOworICAgICAgVmFsdWVJbXAgKmRlZiA9IG8tPmNhbGwoZXhlYyx0aGlzT2JqLExpc3Q6OmVt
cHR5KCkpOworICAgICAgVHlwZSBkZWZUeXBlID0gZGVmLT50eXBlKCk7CiAgICAgICBpZiAoZGVm
VHlwZSA9PSBVbnNwZWNpZmllZFR5cGUgfHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8CiAg
ICAgICAgICAgZGVmVHlwZSA9PSBOdWxsVHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5UeXBlIHx8
CiAgICAgICAgICAgZGVmVHlwZSA9PSBTdHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVtYmVyVHlw
ZSkgewpAQCAtNDM0LDEyICszNzQsMTIgQEAgVmFsdWUgT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUo
RXhlY1N0YXRlIAogICBlbHNlCiAgICAgdiA9IGdldChleGVjLHRvU3RyaW5nUHJvcGVydHlOYW1l
KTsKIAotICBpZiAodi50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewotICAgIE9iamVjdCBvID0gT2Jq
ZWN0KHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYuaW1wKCkpKTsKLSAgICBpZiAoby5pbXBsZW1l
bnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCi0g
ICAgICBPYmplY3QgdGhpc09iaiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMp
KTsKLSAgICAgIFZhbHVlIGRlZiA9IG8uY2FsbChleGVjLHRoaXNPYmosTGlzdDo6ZW1wdHkoKSk7
Ci0gICAgICBUeXBlIGRlZlR5cGUgPSBkZWYudHlwZSgpOworICBpZiAodi0+aXNPYmplY3QoKSkg
eworICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOworICAgIGlm
IChvLT5pbXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBl
IiBidXQgLi4uCisgICAgICBPYmplY3RJbXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdElt
cCo+KHRoaXMpOworICAgICAgVmFsdWVJbXAgKmRlZiA9IG8tPmNhbGwoZXhlYyx0aGlzT2JqLExp
c3Q6OmVtcHR5KCkpOworICAgICAgVHlwZSBkZWZUeXBlID0gZGVmLT50eXBlKCk7CiAgICAgICBp
ZiAoZGVmVHlwZSA9PSBVbnNwZWNpZmllZFR5cGUgfHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBl
IHx8CiAgICAgICAgICAgZGVmVHlwZSA9PSBOdWxsVHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5U
eXBlIHx8CiAgICAgICAgICAgZGVmVHlwZSA9PSBTdHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVt
YmVyVHlwZSkgewpAQCAtNDUxLDIzICszOTEsMjAgQEAgVmFsdWUgT2JqZWN0SW1wOjpkZWZhdWx0
VmFsdWUoRXhlY1N0YXRlIAogICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgcmV0dXJu
IGV4ZWMtPmV4Y2VwdGlvbigpOwogCi0gIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IFR5cGVFcnJvciwgSTE4Tl9OT09QKCJObyBkZWZhdWx0IHZhbHVlIikpOworICBPYmplY3RJbXAg
KmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1AoIk5vIGRlZmF1
bHQgdmFsdWUiKSk7CiAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICByZXR1cm4gZXJyOwog
fQogCi1jb25zdCBIYXNoRW50cnkqIE9iamVjdEltcDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUgKSBjb25zdAorY29uc3QgSGFzaEVudHJ5KiBP
YmplY3RJbXA6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0CiB7Ci0gIGNvbnN0IENsYXNzSW5mbyAqaW5mbyA9IGNsYXNzSW5mbygpOwot
ICB3aGlsZSAoaW5mbykgewotICAgIGlmIChpbmZvLT5wcm9wSGFzaFRhYmxlKSB7Ci0gICAgICBj
b25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeShpbmZvLT5wcm9wSGFzaFRhYmxl
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgaWYgKGUpCisgIGZvciAoY29uc3QgQ2xhc3NJbmZvICpp
bmZvID0gY2xhc3NJbmZvKCk7IGluZm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAg
IGlmIChjb25zdCBIYXNoVGFibGUgKnByb3BIYXNoVGFibGUgPSBpbmZvLT5wcm9wSGFzaFRhYmxl
KSB7CisgICAgICBpZiAoY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkocHJv
cEhhc2hUYWJsZSwgcHJvcGVydHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGU7CiAgICAgfQotICAg
IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzczsKICAgfQotICByZXR1cm4gMEw7CisgIHJldHVybiAw
OwogfQogCiBib29sIE9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0CkBAIC00
NzUsMTMgKzQxMiwxMyBAQCBib29sIE9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNv
CiAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IE9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSAqLypleGVjKi8sIGNvbnN0IExpc3QgJi8qYXJncyovKQorT2JqZWN0SW1wICpPYmplY3RJ
bXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKi8qZXhlYyovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykK
IHsKICAgYXNzZXJ0KGZhbHNlKTsKLSAgcmV0dXJuIE9iamVjdCgwKTsKKyAgcmV0dXJuIE5VTEw7
CiB9CiAKLU9iamVjdCBPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IExpc3QgJmFyZ3MsIGNvbnN0IFVTdHJpbmcgJi8qc291cmNlVVJMKi8sIGludCAvKmxpbmVOdW1i
ZXIqLykKK09iamVjdEltcCAqT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzLCBjb25zdCBVU3RyaW5nICYvKnNvdXJjZVVSTCovLCBpbnQgLypsaW5l
TnVtYmVyKi8pCiB7CiAgIHJldHVybiBjb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CkBAIC00OTEs
MTAgKzQyOCwxMCBAQCBib29sIE9iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdAogICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKi8qZXhl
YyovLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKK1ZhbHVlSW1w
ICpPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLypleGVjKi8sIE9iamVjdElt
cCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJi8qYXJncyovKQogewogICBhc3NlcnQoZmFsc2Up
OwotICByZXR1cm4gT2JqZWN0KDApOworICByZXR1cm4gTlVMTDsKIH0KIAogYm9vbCBPYmplY3RJ
bXA6OmltcGxlbWVudHNIYXNJbnN0YW5jZSgpIGNvbnN0CkBAIC01MDIsMTkgKzQzOSwxOSBAQCBi
b29sIE9iamVjdEltcDo6aW1wbGVtZW50c0hhc0luc3RhbmNlKCkgCiAgIHJldHVybiBmYWxzZTsK
IH0KIAotQm9vbGVhbiBPYmplY3RJbXA6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSAqLypleGVjKi8s
IGNvbnN0IFZhbHVlICYvKnZhbHVlKi8pCitib29sIE9iamVjdEltcDo6aGFzSW5zdGFuY2UoRXhl
Y1N0YXRlICovKmV4ZWMqLywgVmFsdWVJbXAgKi8qdmFsdWUqLykKIHsKICAgYXNzZXJ0KGZhbHNl
KTsKLSAgcmV0dXJuIEJvb2xlYW4oZmFsc2UpOworICByZXR1cm4gZmFsc2U7CiB9CiAKIFJlZmVy
ZW5jZUxpc3QgT2JqZWN0SW1wOjpwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJz
aXZlKQogewogICBSZWZlcmVuY2VMaXN0IGxpc3Q7Ci0gIGlmIChfcHJvdG8gJiYgX3Byb3RvLT5k
aXNwYXRjaFR5cGUoKSA9PSBPYmplY3RUeXBlICYmIHJlY3Vyc2l2ZSkKKyAgaWYgKF9wcm90by0+
aXNPYmplY3QoKSAmJiByZWN1cnNpdmUpCiAgICAgbGlzdCA9IHN0YXRpY19jYXN0PE9iamVjdElt
cCo+KF9wcm90byktPnByb3BMaXN0KGV4ZWMscmVjdXJzaXZlKTsKIAotICBfcHJvcC5hZGRFbnVt
ZXJhYmxlc1RvUmVmZXJlbmNlTGlzdChsaXN0LCBPYmplY3QodGhpcykpOworICBfcHJvcC5hZGRF
bnVtZXJhYmxlc1RvUmVmZXJlbmNlTGlzdChsaXN0LCB0aGlzKTsKIAogICAvLyBBZGQgcHJvcGVy
dGllcyBmcm9tIHRoZSBzdGF0aWMgaGFzaHRhYmxlIG9mIHByb3BlcnRpZXMKICAgY29uc3QgQ2xh
c3NJbmZvICppbmZvID0gY2xhc3NJbmZvKCk7CkBAIC01MzMsMjIgKzQ3MCw3IEBAIFJlZmVyZW5j
ZUxpc3QgT2JqZWN0SW1wOjpwcm9wTGlzdChFeGVjU3QKICAgcmV0dXJuIGxpc3Q7CiB9CiAKLVZh
bHVlIE9iamVjdEltcDo6aW50ZXJuYWxWYWx1ZSgpIGNvbnN0Ci17Ci0gIHJldHVybiBWYWx1ZShf
aW50ZXJuYWxWYWx1ZSk7Ci19Ci0KLXZvaWQgT2JqZWN0SW1wOjpzZXRJbnRlcm5hbFZhbHVlKGNv
bnN0IFZhbHVlICZ2KQotewotICBfaW50ZXJuYWxWYWx1ZSA9IHYuaW1wKCk7Ci19Ci0KLXZvaWQg
T2JqZWN0SW1wOjpzZXRJbnRlcm5hbFZhbHVlKFZhbHVlSW1wICp2KQotewotICBfaW50ZXJuYWxW
YWx1ZSA9IHY7Ci19Ci0KLVZhbHVlIE9iamVjdEltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpl
eGVjLCBUeXBlIHByZWZlcnJlZFR5cGUpIGNvbnN0CitWYWx1ZUltcCAqT2JqZWN0SW1wOjp0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKIHsKICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZShleGVjLHByZWZlcnJlZFR5cGUpOwogfQpAQCAtNTYwLDIzICs0
ODIsMjMgQEAgYm9vbCBPYmplY3RJbXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKi8qZQogCiBkb3Vi
bGUgT2JqZWN0SW1wOjp0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIFZhbHVl
IHByaW0gPSB0b1ByaW1pdGl2ZShleGVjLE51bWJlclR5cGUpOworICBWYWx1ZUltcCAqcHJpbSA9
IHRvUHJpbWl0aXZlKGV4ZWMsTnVtYmVyVHlwZSk7CiAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIG5vZGVzLmNwcAogICAgIHJldHVybiAw
LjA7Ci0gIHJldHVybiBwcmltLnRvTnVtYmVyKGV4ZWMpOworICByZXR1cm4gcHJpbS0+dG9OdW1i
ZXIoZXhlYyk7CiB9CiAKIFVTdHJpbmcgT2JqZWN0SW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKmV4
ZWMpIGNvbnN0CiB7Ci0gIFZhbHVlIHByaW0gPSB0b1ByaW1pdGl2ZShleGVjLFN0cmluZ1R5cGUp
OworICBWYWx1ZUltcCAqcHJpbSA9IHRvUHJpbWl0aXZlKGV4ZWMsU3RyaW5nVHlwZSk7CiAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIG5v
ZGVzLmNwcAogICAgIHJldHVybiAiIjsKLSAgcmV0dXJuIHByaW0udG9TdHJpbmcoZXhlYyk7Cisg
IHJldHVybiBwcmltLT50b1N0cmluZyhleGVjKTsKIH0KIAotT2JqZWN0IE9iamVjdEltcDo6dG9P
YmplY3QoRXhlY1N0YXRlICovKmV4ZWMqLykgY29uc3QKK09iamVjdEltcCAqT2JqZWN0SW1wOjp0
b09iamVjdChFeGVjU3RhdGUgKi8qZXhlYyovKSBjb25zdAogewotICByZXR1cm4gT2JqZWN0KGNv
bnN0X2Nhc3Q8T2JqZWN0SW1wKj4odGhpcykpOworICByZXR1cm4gY29uc3RfY2FzdDxPYmplY3RJ
bXAqPih0aGlzKTsKIH0KIAogdm9pZCBPYmplY3RJbXA6OnB1dERpcmVjdChjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCkBAIC01ODYsNyAr
NTA4LDcgQEAgdm9pZCBPYmplY3RJbXA6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaQogCiB2b2lk
IE9iamVjdEltcDo6cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgaW50
IHZhbHVlLCBpbnQgYXR0cikKIHsKLSAgICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLCBOdW1iZXJJ
bXA6OmNyZWF0ZSh2YWx1ZSksIGF0dHIpOworICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIGpz
TnVtYmVyKHZhbHVlKSwgYXR0cik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBFcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02
MDMsMTAgKzUyNSwxMCBAQCBjb25zdCBjaGFyICogY29uc3QgZXJyb3JOYW1lc0FycltdID0gewog
CiBjb25zdCBjaGFyICogY29uc3QgKiBjb25zdCBFcnJvcjo6ZXJyb3JOYW1lcyA9IGVycm9yTmFt
ZXNBcnI7CiAKLU9iamVjdCBFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBl
IGVycnR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCitPYmplY3RJbXAgKkVycm9yOjpjcmVhdGUo
RXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZXJydHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSwK
ICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBzb3VyY2VJZCwgY29uc3QgVVN0
cmluZyAqc291cmNlVVJMKQogewotICBPYmplY3QgY29uczsKKyAgT2JqZWN0SW1wICpjb25zOwog
ICBzd2l0Y2ggKGVycnR5cGUpIHsKICAgY2FzZSBFdmFsRXJyb3I6CiAgICAgY29ucyA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRXZhbEVycm9yKCk7CkBAIC02MzUsMjEgKzU1
NywyMSBAQCBPYmplY3QgRXJyb3I6OmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsIEVyCiAgICAgbWVz
c2FnZSA9IGVycm9yTmFtZXNbZXJydHlwZV07CiAgIExpc3QgYXJnczsKICAgYXJncy5hcHBlbmQo
U3RyaW5nKG1lc3NhZ2UpKTsKLSAgT2JqZWN0IGVyciA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoY29u
cy5jb25zdHJ1Y3QoZXhlYyxhcmdzKSk7CisgIE9iamVjdEltcCAqZXJyID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KGNvbnMtPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIAogICBpZiAobGluZW5v
ICE9IC0xKQotICAgIGVyci5wdXQoZXhlYywgImxpbmUiLCBOdW1iZXIobGluZW5vKSk7CisgICAg
ZXJyLT5wdXQoZXhlYywgImxpbmUiLCBOdW1iZXIobGluZW5vKSk7CiAgIGlmIChzb3VyY2VJZCAh
PSAtMSkKLSAgICBlcnIucHV0KGV4ZWMsICJzb3VyY2VJZCIsIE51bWJlcihzb3VyY2VJZCkpOwor
ICAgIGVyci0+cHV0KGV4ZWMsICJzb3VyY2VJZCIsIE51bWJlcihzb3VyY2VJZCkpOwogCiAgIGlm
KHNvdXJjZVVSTCkKLSAgIGVyci5wdXQoZXhlYywic291cmNlVVJMIiwgU3RyaW5nKCpzb3VyY2VV
UkwpKTsKKyAgIGVyci0+cHV0KGV4ZWMsInNvdXJjZVVSTCIsIFN0cmluZygqc291cmNlVVJMKSk7
CiAgCiAgIHJldHVybiBlcnI7CiAKIC8qCiAjaWZuZGVmIE5ERUJVRwotICBjb25zdCBjaGFyICpt
c2cgPSBlcnIuZ2V0KCJtZXNzYWdlIikudG9TdHJpbmcoKS52YWx1ZSgpLmFzY2lpKCk7CisgIGNv
bnN0IGNoYXIgKm1zZyA9IGVyci0+Z2V0KCJtZXNzYWdlIiktPnRvU3RyaW5nKCkudmFsdWUoKS5h
c2NpaSgpOwogICBpZiAobCA+PSAwKQogICAgICAgZnByaW50ZihzdGRlcnIsICJLSlM6ICVzIGF0
IGxpbmUgJWQuICVzXG4iLCBlc3RyLCBsLCBtc2cpOwogICBlbHNlCkBAIC02NjIsNyArNTg0LDcg
QEAgT2JqZWN0IEVycm9yOjpjcmVhdGUoRXhlY1N0YXRlICpleGVjLCBFcgogCiBPYmplY3RJbXAg
KmVycm9yKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3Nh
Z2UsIGludCBsaW5lLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJpbmcgKnNvdXJjZVVSTCkKIHsK
LSAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCB0eXBlLCBtZXNzYWdlLCBsaW5lLCBzb3Vy
Y2VJZCwgc291cmNlVVJMKS5pbXAoKTsKKyAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCB0
eXBlLCBtZXNzYWdlLCBsaW5lLCBzb3VyY2VJZCwgc291cmNlVVJMKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11IC11IC1wIC1yMS4zOSBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkyNSBKdWwgMjAwNSAy
MjoxNzoxMiAtMDAwMAkxLjM5CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJNyBBdWcg
MjAwNSAwNDo0NDowOCAtMDAwMApAQCAtMjIsOSArMjIsOCBAQAogICoKICAqLwogCi0KLSNpZm5k
ZWYgX0tKU19PQkpFQ1RfSF8KLSNkZWZpbmUgX0tKU19PQkpFQ1RfSF8KKyNpZm5kZWYgS0pTX09C
SkVDVF9ICisjZGVmaW5lIEtKU19PQkpFQ1RfSAogCiAvLyBPYmplY3RzCiAKQEAgLTQwLDcgKzM5
LDYgQEAKIAogI2luY2x1ZGUgInZhbHVlLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKLSNpbmNsdWRl
ICJyZWZlcmVuY2VfbGlzdC5oIgogI2luY2x1ZGUgInByb3BlcnR5X21hcC5oIgogI2luY2x1ZGUg
InNjb3BlX2NoYWluLmgiCiAKQEAgLTUyLDEyICs1MCwxMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
Y2xhc3MgUmVmZXJlbmNlTGlzdDsKIAogICAvLyBFQ01BIDI2Mi0zIDguNi4xCi0gIC8vIEF0dHJp
YnV0ZXMgKG9ubHkgYXBwbGljYWJsZSB0byB0aGUgT2JqZWN0IHR5cGUpCisgIC8vIFByb3BlcnR5
IGF0dHJpYnV0ZXMKICAgZW51bSBBdHRyaWJ1dGUgeyBOb25lICAgICAgID0gMCwKICAgICAgICAg
ICAgICAgICAgICBSZWFkT25seSAgID0gMSA8PCAxLCAvLyBwcm9wZXJ0eSBjYW4gYmUgb25seSBy
ZWFkLCBub3Qgd3JpdHRlbgogICAgICAgICAgICAgICAgICAgIERvbnRFbnVtICAgPSAxIDw8IDIs
IC8vIHByb3BlcnR5IGRvZXNuJ3QgYXBwZWFyIGluIChmb3IgLi4gaW4gLi4pCiAgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZSA9IDEgPDwgMywgLy8gcHJvcGVydHkgY2FuJ3QgYmUgZGVsZXRl
ZAotICAgICAgICAgICAgICAgICAgIEludGVybmFsICAgPSAxIDw8IDQsIC8vIGFuIGludGVybmFs
IHByb3BlcnR5LCBzZXQgdG8gYnkgcGFzcyBjaGVja3MKKyAgICAgICAgICAgICAgICAgICBJbnRl
cm5hbCAgID0gMSA8PCA0LCAvLyBhbiBpbnRlcm5hbCBwcm9wZXJ0eSwgc2V0IHRvIGJ5cGFzcyBj
aGVja3MKICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiAgID0gMSA8PCA1IH07IC8vIHByb3Bl
cnR5IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKIAogICAv
KioKQEAgLTgzLDMwICs4MSw5NCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkICpkdW1teTsK
ICAgfTsKICAgCi0gIC8qKgotICAgKiBSZXByZXNlbnRzIGFuIE9iamVjdC4gVGhpcyBpcyBhIHdy
YXBwZXIgZm9yIE9iamVjdEltcAotICAgKi8KLSAgY2xhc3MgT2JqZWN0IDogcHVibGljIFZhbHVl
IHsKKyAgY2xhc3MgT2JqZWN0SW1wIDogcHVibGljIEFsbG9jYXRlZFZhbHVlSW1wIHsKICAgcHVi
bGljOgotICAgIE9iamVjdCgpIHsgfQotICAgIE9iamVjdChPYmplY3RJbXAgKik7Ci0gICAgb3Bl
cmF0b3IgT2JqZWN0SW1wICooKSBjb25zdCB7IHJldHVybiBpbXAoKTsgfQotICAgIAotICAgIE9i
amVjdEltcCAqaW1wKCkgY29uc3Q7CisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBPYmpl
Y3RJbXAgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3RvdHlwZQorICAgICAqCisgICAgICogQHBhcmFt
IHByb3RvIFRoZSBwcm90b3R5cGUKKyAgICAgKi8KKyAgICBPYmplY3RJbXAoT2JqZWN0SW1wICpw
cm90byk7CiAKLSAgICBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0OwotICAgIGJv
b2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvICpjaW5mbykgY29uc3Q7CisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyBhIG5ldyBPYmplY3RJbXAgd2l0aCBhIHByb3RvdHlwZSBvZiBOdWxsKCkKKyAg
ICAgKiAodGhhdCBpcywgdGhlIEVDTUFTY3JpcHQgIm51bGwiIHZhbHVlLCBub3QgYSBudWxsIG9i
amVjdCBwb2ludGVyKS4KKyAgICAgKgorICAgICAqLworICAgIE9iamVjdEltcCgpOworCisgICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0OworCisgICAgLyoq
CisgICAgICogQSBwb2ludGVyIHRvIGEgQ2xhc3NJbmZvIHN0cnVjdCBmb3IgdGhpcyBjbGFzcy4g
VGhpcyBwcm92aWRlcyBhIGJhc2ljCisgICAgICogZmFjaWxpdHkgZm9yIHJ1bi10aW1lIHR5cGUg
aW5mb3JtYXRpb24sIGFuZCBjYW4gYmUgdXNlZCB0byBjaGVjayBhbgorICAgICAqIG9iamVjdCdz
IGNsYXNzIGFuIGluaGVyaXRhbmNlIChzZWUgaW5oZXJpdHMoKSkuIFRoaXMgc2hvdWxkCisgICAg
ICogYWx3YXlzIHJldHVybiBhIHN0YXRpY2FsbHkgZGVjbGFyZWQgcG9pbnRlciwgb3IgMCB0byBp
bmRpY2F0ZSB0aGF0CisgICAgICogdGhlcmUgaXMgbm8gY2xhc3MgaW5mb3JtYXRpb24uCisgICAg
ICoKKyAgICAgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgaWYgeW91IGhhdmUgYXBwbGljYXRp
b24tZGVmaW5lZCBjbGFzc2VzIHRoYXQgeW91CisgICAgICogd2lzaCB0byBjaGVjayBhZ2FpbnN0
IGZvciBjYXN0aW5nIHB1cnBvc2VzLgorICAgICAqCisgICAgICogRm9yIGV4YW1wbGUsIHRvIHNw
ZWNpZnkgdGhlIGNsYXNzIGluZm8gZm9yIGNsYXNzZXMgRm9vSW1wIGFuZCBCYXJJbXAsCisgICAg
ICogd2hlcmUgRm9vSW1wIGluaGVyaXRzIGZyb20gQmFySW1wLCB5b3Ugd291bGQgYWRkIHRoZSBm
b2xsb3dpbmcgaW4geW91cgorICAgICAqIGNsYXNzIGRlY2xhcmF0aW9uczoKKyAgICAgKgorICAg
ICAqIFxjb2RlCisgICAgICogICBjbGFzcyBCYXJJbXAgOiBwdWJsaWMgT2JqZWN0SW1wIHsKKyAg
ICAgKiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CisgICAgICogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAg
ICAgKiAgICAgLy8gLi4uCisgICAgICogICB9OworICAgICAqCisgICAgICogICBjbGFzcyBGb29J
bXAgOiBwdWJsaWMgT2JqZWN0SW1wIHsKKyAgICAgKiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKyAgICAgKiAgICAgLy8gLi4uCisgICAgICogICB9Owor
ICAgICAqIFxlbmRjb2RlCisgICAgICoKKyAgICAgKiBBbmQgaW4geW91ciBzb3VyY2UgZmlsZToK
KyAgICAgKgorICAgICAqIFxjb2RlCisgICAgICogICBjb25zdCBDbGFzc0luZm8gQmFySW1wOjpp
bmZvID0geyJCYXIiLCAwLCAwLCAwfTsgLy8gbm8gcGFyZW50IGNsYXNzCisgICAgICogICBjb25z
dCBDbGFzc0luZm8gRm9vSW1wOjppbmZvID0geyJGb28iLCAmQmFySW1wOjppbmZvLCAwLCAwfTsK
KyAgICAgKiBcZW5kY29kZQorICAgICAqCisgICAgICogQHNlZSBpbmhlcml0cygpCisgICAgICov
CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0OwogCiAgICAg
LyoqCi0gICAgICogQ29udmVydHMgYSBWYWx1ZSBpbnRvIGFuIE9iamVjdC4gSWYgdGhlIHZhbHVl
J3MgdHlwZSBpcyBub3QgT2JqZWN0VHlwZSwKLSAgICAgKiBhIG51bGwgb2JqZWN0IHdpbGwgYmUg
cmV0dXJuZWQgKGkuZS4gb25lIHdpdGggaXQncyBpbnRlcm5hbCBwb2ludGVyIHNldAotICAgICAq
IHRvIDApLiBJZiB5b3UgZG8gbm90IGtub3cgZm9yIHN1cmUgd2hldGhlciB0aGUgdmFsdWUgaXMg
b2YgdHlwZQotICAgICAqIE9iamVjdFR5cGUsIHlvdSBzaG91bGQgY2hlY2sgdGhlIGlzVmFsaWQo
KSBtZXRob2RzIGFmdGVyd2FyZHMgYmVmb3JlCi0gICAgICogY2FsbGluZyBhbnkgbWV0aG9kcyBv
biB0aGUgT2JqZWN0LgorICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgb2JqZWN0IGluaGVyaXRz
IGZyb20gdGhlIGNsYXNzIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAqIGNsYXNzSW5mbygpIHBv
aW50ZXIuIFRoaXMgcmVxdWlyZXMgdGhhdCBib3RoIHRoaXMgY2xhc3MgYW5kIHRoZSBvdGhlcgor
ICAgICAqIGNsYXNzIHJldHVybiBhIG5vbi1OVUxMIHBvaW50ZXIgZm9yIHRoZWlyIGNsYXNzSW5m
bygpIG1ldGhvZHMgKG90aGVyd2lzZQorICAgICAqIGl0IHdpbGwgcmV0dXJuIGZhbHNlKS4KKyAg
ICAgKgorICAgICAqIEZvciBleGFtcGxlLCBmb3IgdHdvIE9iamVjdEltcCBwb2ludGVycyBvYmox
IGFuZCBvYmoyLCB5b3UgY2FuIGNoZWNrCisgICAgICogaWYgb2JqMSdzIGNsYXNzIGluaGVyaXRz
IGZyb20gb2JqMidzIGNsYXNzIHVzaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICoKKyAgICAgKiAg
IGlmIChvYmoxLT5pbmhlcml0cyhvYmoyLT5jbGFzc0luZm8oKSkpIHsKKyAgICAgKiAgICAgLy8g
Li4uCisgICAgICogICB9CisgICAgICoKKyAgICAgKiBJZiB5b3UgaGF2ZSBhIGhhbmRsZSB0byBh
IHN0YXRpY2FsbHkgZGVjbGFyZWQgQ2xhc3NJbmZvLCBzdWNoIGFzIGluIHRoZQorICAgICAqIGNs
YXNzSW5mbygpIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgZm9yIGluaGVyaXRhbmNlIHdpdGhvdXQg
bmVlZGluZworICAgICAqIGFuIGluc3RhbmNlIG9mIHRoZSBvdGhlciBjbGFzczoKICAgICAgKgot
ICAgICAqIEByZXR1cm4gVGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBvYmplY3QKKyAgICAgKiAg
IGlmIChvYmoxLT5pbmhlcml0cyhGb29JbXA6OmluZm8pKSB7CisgICAgICogICAgIC8vIC4uLgor
ICAgICAqICAgfQorICAgICAqCisgICAgICogQHBhcmFtIGNpbmZvIFRoZSBDbGFzc0luZm8gcG9p
bnRlciBmb3IgdGhlIGNsYXNzIHlvdSB3YW50IHRvIGNoZWNrCisgICAgICogaW5oZXJpdGFuY2Ug
YWdhaW5zdC4KKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBvYmplY3QncyBjbGFzcyBpbmhl
cml0cyBmcm9tIGNsYXNzIHdpdGggdGhlCisgICAgICogQ2xhc3NJbmZvIHBvaW50ZXIgc3BlY2lm
aWVkIGluIGNpbmZvCiAgICAgICovCi0gICAgc3RhdGljIE9iamVjdCBkeW5hbWljQ2FzdChjb25z
dCBWYWx1ZSAmdik7CisgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8gKmNpbmZvKSBj
b25zdDsKKworICAgIC8vIGludGVybmFsIHByb3BlcnRpZXMgKEVDTUEgMjYyLTMgOC42LjIpCiAK
ICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBwcm90b3R5cGUgb2YgdGhpcyBvYmplY3QuIE5v
dGUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcwpAQCAtMTE2LDcgKzE3OCwxMiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIG9iamVjdCdzIHByb3RvdHlw
ZQogICAgICAqLwotICAgIFZhbHVlIHByb3RvdHlwZSgpIGNvbnN0OworICAgIC8qKgorICAgICAq
IEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IChp
bXBsZW1lbnRlZCBieQorICAgICAqIGFsbCBPYmplY3RzKQorICAgICAqLworICAgIFZhbHVlSW1w
ICpwcm90b3R5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFByb3RvdHlwZShWYWx1ZUltcCAqcHJv
dG8pOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgb2Jq
ZWN0CkBAIC0xMjUsNyArMTkyLDE2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAgICog
QHJldHVybiBUaGUgb2JqZWN0J3MgY2xhc3MgbmFtZQogICAgICAqLwotICAgIFVTdHJpbmcgY2xh
c3NOYW1lKCkgY29uc3Q7CisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtb
Q2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkgYWxsCisgICAgICogT2Jq
ZWN0cykKKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgY2xh
c3NJbmZvKCkuCisgICAgICogWW91IHNob3VsZCBlaXRoZXIgaW1wbGVtZW50IGNsYXNzSW5mbygp
LCBvcgorICAgICAqIGlmIHlvdSBzaW1wbHkgbmVlZCBhIGNsYXNzbmFtZSwgeW91IGNhbiByZWlt
cGxlbWVudCBjbGFzc05hbWUoKQorICAgICAqIGluc3RlYWQuCisgICAgICovCisgICAgdmlydHVh
bCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVz
IHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0LiBJZiBuZWl0aGVyIHRoZSBv
YmplY3QKQEAgLTEzOSw4ICsyMTUsMTkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICoKICAgICAg
KiBAcmV0dXJuIFRoZSBzcGVjaWZpZWQgcHJvcGVydHksIG9yIFVuZGVmaW5lZAogICAgICAqLwot
ICAgIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUg
W1tHZXRdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkgYWxsCisgICAgICogT2Jq
ZWN0cykKKyAgICAgKi8KKyAgICAvLyBbW0dldF1dIC0gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBh
bGwgT2JqZWN0cworICAgIFZhbHVlSW1wICpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXQoRXhlY1N0YXRl
ICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25zdDsKIAogICAgIC8qKgogICAgICAq
IFNldHMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS4KQEAgLTE1MSwxMCArMjM4LDE0IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBy
b3BlcnR5IHRvIHNldAogICAgICAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlIFRoZSB2YWx1ZSB0byBz
ZXQKICAgICAgKi8KLSAgICB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsCi0gICAgICAgICAgICAgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5v
bmUpOworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW1B1dF1dIGludGVy
bmFsIHByb3BlcnR5IChpbXBsZW1lbnRlZCBieSBhbGwKKyAgICAgKiBPYmplY3RzKQorICAgICAq
LworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICBWYWx1ZUltcCAqdmFsdWUsIGlu
dCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1
ZSwgaW50IGF0dHIgPSBOb25lKTsKIAogICAgIC8qKgogICAgICAqIFVzZWQgdG8gY2hlY2sgd2hl
dGhlciBvciBub3QgYSBwYXJ0aWN1bGFyIHByb3BlcnR5IGlzIGFsbG93ZWQgdG8gYmUgc2V0CkBA
IC0xNjYsNyArMjU3LDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICogQHJldHVybiB0cnVlIGlmIHRo
ZSBwcm9wZXJ0eSBjYW4gYmUgc2V0LCBvdGhlcndpc2UgZmFsc2UKICAgICAgKi8KLSAgICBib29s
IGNhblB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkg
Y29uc3Q7CisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbQ2FuUHV0XV0g
aW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5IGFsbAorICAgICAqIE9iamVjdHMpCisg
ICAgICovCisgICAgdmlydHVhbCBib29sIGNhblB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mg
dG8gc2VlIHdoZXRoZXIgdGhlIG9iamVjdCAob3IgYW55IG9iamVjdCBpbiBpdCdzIHByb3RvdHlw
ZSBjaGFpbikKQEAgLTE3OCw3ICsyNzMsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQHBh
cmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2sgZm9yCiAg
ICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSwgb3RoZXJ3
aXNlIGZhbHNlCiAgICAgICovCi0gICAgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgLyoqCisgICAgICog
SW1wbGVtZW50YXRpb24gb2YgdGhlIFtbSGFzUHJvcGVydHldXSBpbnRlcm5hbCBwcm9wZXJ0eSAo
aW1wbGVtZW50ZWQgYnkKKyAgICAgKiBhbGwgT2JqZWN0cykKKyAgICAgKi8KKyAgICBib29sIGhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywKKwkJCSAgICAgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdDsKICAgICBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIC8qKgpAQCAtMTkwLDggKzI5MCw5
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUg
b2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrIGZvcgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUg
b2JqZWN0IGhhcyB0aGUgcHJvcGVydHksIG90aGVyd2lzZSBmYWxzZQogICAgICAqLwotICAgIGJv
b2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUpIGNvbnN0OwotICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsCisgICAgCQkgICAgIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIC8qKgogICAg
ICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBmcm9tIHRoZSBvYmplY3QuCkBAIC0y
MDQsOCArMzA1LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIGV4aXN0IG9uIHRoZSBvYmpl
Y3QuIGZhbHNlIGlmIGRlbGV0aW5nIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaXMgbm90CiAgICAg
ICogYWxsb3dlZC4KICAgICAgKi8KLSAgICBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAvKioK
KyAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBwcm9wZXJ0
eSAoaW1wbGVtZW50ZWQgYnkgYWxsCisgICAgICogT2JqZWN0cykKKyAgICAgKi8KKyAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOworICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIHByb3BlcnRpZXMgZnJvbSB0
aGlzIG9iamVjdC4KKyAgICAgKiBUaGlzIGRvZXNuJ3QgdGFrZSBEb250RGVsZXRlIGludG8gYWNj
b3VudCwgYW5kIGlzbid0IGluIHRoZSBFQ01BIHNwZWMuCisgICAgICogSXQncyBzaW1wbHkgYSBx
dWljayB3YXkgdG8gcmVtb3ZlIGV2ZXJ5dGhpbmcgYmVmb3JlIGRlc3Ryb3lpbmcuCisgICAgICov
CisgICAgdm9pZCBkZWxldGVBbGxQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSAqKTsKIAogICAgIC8qKgog
ICAgICAqIENvbnZlcnRzIHRoZSBvYmplY3QgaW50byBhIHByaW1pdGl2ZSB2YWx1ZS4gVGhlIHZh
bHVlIHJldHVybiBtYXkgZGlmZmVyCkBAIC0yMTksNyArMzMyLDExIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAqIHR5cGUgb2YgcHJpbWl0aXZlIHZhbHVlIHJldHVybmVkIG1heSBub3QgYmUgdGhl
IHNhbWUgYXMgdGhlIHJlcXVlc3RlZAogICAgICAqIGhpbnQuCiAgICAgICovCi0gICAgVmFsdWUg
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdDsKKyAgICAvKioK
KyAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWZhdWx0VmFsdWVdXSBpbnRlcm5hbCBw
cm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkKKyAgICAgKiBhbGwgT2JqZWN0cykKKyAgICAgKi8KKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhp
bnQpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBp
bXBsZW1lbnRzIHRoZSBjb25zdHJ1Y3QoKSBtZXRob2QuIElmIHRoaXMKQEAgLTIyOSw3ICszNDYs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBvYmplY3Qg
aW1wbGVtZW50cyB0aGUgY29uc3RydWN0KCkgbWV0aG9kLCBvdGhlcndpc2UKICAgICAgKiBmYWxz
ZQogICAgICAqLwotICAgIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAg
KiBDcmVhdGVzIGEgbmV3IG9iamVjdCBiYXNlZCBvbiB0aGlzIG9iamVjdC4gVHlwaWNhbGx5IHRo
aXMgbWVhbnMgdGhlCkBAIC0yNTYsOCArMzczLDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAq
IGJlZW4gY3JlYXRlZAogICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgJmFtcDsgaW5p
dGlhbGl6ZWQgb2JqZWN0CiAgICAgICovCi0gICAgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwotICAgIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBs
aW5lTnVtYmVyKTsKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tDb25z
dHJ1Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0eQorICAgICAqLworICAgIHZpcnR1YWwgT2JqZWN0SW1w
ICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0
dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJn
cywgY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CiAKICAgICAvKioK
ICAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIGNhbGwoKSBt
ZXRob2QuIElmIHRoaXMgcmV0dXJucwpAQCAtMjY3LDggKzM4Nyw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBjYWxs
KCkgbWV0aG9kLCBvdGhlcndpc2UKICAgICAgKiBmYWxzZQogICAgICAqLwotICAgIGJvb2wgaW1w
bGVtZW50c0NhbGwoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgp
IGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogQ2FsbHMgdGhpcyBvYmplY3QgYXMgaWYgaXQgaXMg
YSBmdW5jdGlvbi4KQEAgLTI4MSwxMyArNDAwLDE3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAq
IEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQogICAgICAqIEBwYXJhbSB0
aGlzT2JqIFRoZSBvYmogdG8gYmUgdXNlZCBhcyAidGhpcyIgd2l0aGluIGZ1bmN0aW9uIGV4ZWN1
dGlvbi4KICAgICAgKiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUgZGlmZmVy
ZW50IGZyb20gdGhlIEMrKyAidGhpcyIKLSAgICAgKiBvYmplY3QuIEZvciBleGFtcGxlLCBpZiB0
aGUgRUNNQVNjcmlwdCBjb2RlICJ3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKSIKKyAgICAgKiBv
YmplY3QuIEZvciBleGFtcGxlLCBpZiB0aGUgRUNNQVNjcmlwdCBjb2RlICJ3aW5kb3cubG9jYXRp
b24tPnRvU3RyaW5nKCkiCiAgICAgICogaXMgZXhlY3V0ZWQsIGNhbGwoKSB3aWxsIGJlIGludm9r
ZWQgb24gdGhlIEMrKyBvYmplY3Qgd2hpY2ggaW1wbGVtZW50cwogICAgICAqIHRoZSB0b1N0cmlu
ZyBtZXRob2QsIHdpdGggdGhlIHRoaXNPYmogYmVpbmcgd2luZG93LmxvY2F0aW9uCiAgICAgICog
QHBhcmFtIGFyZ3MgTGlzdCBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlv
bgogICAgICAqIEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbgogICAg
ICAqLwotICAgIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBb
W0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eQorICAgICAqLworICAgIFZhbHVlSW1wICpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICAvKioKICAgICAgKiBXaGV0
aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIGhhc0luc3RhbmNlKCkgbWV0aG9k
LiBJZiB0aGlzCkBAIC0yOTcsNyArNDIwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQHJl
dHVybiB0cnVlIGlmIHRoaXMgb2JqZWN0IGltcGxlbWVudHMgdGhlIGhhc0luc3RhbmNlKCkgbWV0
aG9kLAogICAgICAqIG90aGVyd2lzZSBmYWxzZQogICAgICAqLwotICAgIGJvb2wgaW1wbGVtZW50
c0hhc0luc3RhbmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNIYXNJbnN0
YW5jZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdmFsdWUgZGVs
ZWdhdGVzIGJlaGF2aW9yIHRvIHRoaXMgb2JqZWN0LiBVc2VkIGJ5IHRoZQpAQCAtMzA4LDcgKzQz
MSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdmFsdWUgZGVs
ZWdhdGVzIGJlaGF2aW9yIHRvIHRoaXMgb2JqZWN0LCBvdGhlcndpc2UKICAgICAgKiBmYWxzZQog
ICAgICAqLwotICAgIEJvb2xlYW4gaGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBW
YWx1ZSAmdmFsdWUpOworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0hh
c0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGJvb2wg
aGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUpOwogCiAgICAgLyoq
CiAgICAgICogUmV0dXJucyB0aGUgc2NvcGUgb2YgdGhpcyBvYmplY3QuIFRoaXMgaXMgdXNlZCB3
aGVuIGV4ZWN1dGlvbiBkZWNsYXJlZApAQCAtMzM2LDggKzQ2MiwxMSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUKICAgICAg
KiBAcmV0dXJuIFRoZSBmdW5jdGlvbidzIHNjb3BlCiAgICAgICovCi0gICAgY29uc3QgU2NvcGVD
aGFpbiAmc2NvcGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNjb3BlKGNvbnN0IFNjb3BlQ2hhaW4g
JnMpOworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW1Njb3BlXV0gaW50
ZXJuYWwgcHJvcGVydHkKKyAgICAgKi8KKyAgICBjb25zdCBTY29wZUNoYWluICZzY29wZSgpIGNv
bnN0IHsgcmV0dXJuIF9zY29wZTsgfQorICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFp
biAmcykgeyBfc2NvcGUgPSBzOyB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgTGlzdCBv
ZiBSZWZlcmVuY2VzIHRvIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LiBVc2VkCkBA
IC0zNTUsNyArNDg0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogaW5jbHVkZWQgaW4gdGhl
IGxpc3QuCiAgICAgICogQHJldHVybiBBIExpc3Qgb2YgUmVmZXJlbmNlcyB0byBwcm9wZXJ0aWVz
IG9mIHRoZSBvYmplY3QuCiAgICAgICoqLwotICAgIFJlZmVyZW5jZUxpc3QgcHJvcExpc3QoRXhl
Y1N0YXRlICpleGVjLCBib29sIHJlY3Vyc2l2ZSA9IHRydWUpOworICAgIHZpcnR1YWwgUmVmZXJl
bmNlTGlzdCBwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7
CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0aGUgb2Jq
ZWN0LiBUaGlzIGlzIHVzZWQgZm9yIG9iamVjdHMgc3VjaApAQCAtMzY1LDcgKzQ5NCw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAqIEBzZWUgRUNNQSA4LjYuMgogICAgICAqIEByZXR1cm4gVGhl
IGludGVybmFsIHZhbHVlIG9mIHRoZSBvYmplY3QKICAgICAgKi8KLSAgICBWYWx1ZSBpbnRlcm5h
bFZhbHVlKCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmludGVybmFsVmFsdWUoKSBjb25zdDsKIAog
ICAgIC8qKgogICAgICAqIFNldHMgdGhlIGludGVybmFsIHZhbHVlIG9mIHRoZSBvYmplY3QKQEAg
LTM3NCwyNDggKzUwMywxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKgogICAgICAqIEBwYXJh
bSB2IFRoZSBuZXcgaW50ZXJuYWwgdmFsdWUKICAgICAgKi8KLSAgICB2b2lkIHNldEludGVybmFs
VmFsdWUoY29uc3QgVmFsdWUgJnYpOwotCi0gICAgdm9pZCBzYXZlUHJvcGVydGllcyhTYXZlZFBy
b3BlcnRpZXMgJnApIGNvbnN0OwotICAgIHZvaWQgcmVzdG9yZVByb3BlcnRpZXMoY29uc3QgU2F2
ZWRQcm9wZXJ0aWVzICZwKTsKLSAgfTsKLQotICBpbmxpbmUgT2JqZWN0IFZhbHVlOjp0b09iamVj
dChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hUb09iamVjdChl
eGVjKTsgfQotICAKLSAgY2xhc3MgT2JqZWN0SW1wIDogcHVibGljIFZhbHVlSW1wIHsKLSAgcHVi
bGljOgotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgT2JqZWN0SW1wIHdpdGggdGhlIHNw
ZWNpZmllZCBwcm90b3R5cGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm90byBUaGUgcHJvdG90
eXBlCi0gICAgICovCi0gICAgT2JqZWN0SW1wKGNvbnN0IE9iamVjdCAmcHJvdG8pOwotICAgIE9i
amVjdEltcChPYmplY3RJbXAgKnByb3RvKTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBu
ZXcgT2JqZWN0SW1wIHdpdGggYSBwcm90b3R5cGUgb2YgTnVsbCgpCi0gICAgICogKHRoYXQgaXMs
IHRoZSBFQ01BU2NyaXB0ICJudWxsIiB2YWx1ZSwgbm90IGEgbnVsbCBPYmplY3QpLgotICAgICAq
Ci0gICAgICovCi0gICAgT2JqZWN0SW1wKCk7Ci0KLSAgICB2aXJ0dWFsIH5PYmplY3RJbXAoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdDsKLQot
ICAgIC8qKgotICAgICAqIEEgcG9pbnRlciB0byBhIENsYXNzSW5mbyBzdHJ1Y3QgZm9yIHRoaXMg
Y2xhc3MuIFRoaXMgcHJvdmlkZXMgYSBiYXNpYwotICAgICAqIGZhY2lsaXR5IGZvciBydW4tdGlt
ZSB0eXBlIGluZm9ybWF0aW9uLCBhbmQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgYW4KLSAgICAgKiBv
YmplY3QncyBjbGFzcyBhbiBpbmhlcml0YW5jZSAoc2VlIGluaGVyaXRzKCkpLiBUaGlzIHNob3Vs
ZAotICAgICAqIGFsd2F5cyByZXR1cm4gYSBzdGF0aWNhbGx5IGRlY2xhcmVkIHBvaW50ZXIsIG9y
IDAgdG8gaW5kaWNhdGUgdGhhdAotICAgICAqIHRoZXJlIGlzIG5vIGNsYXNzIGluZm9ybWF0aW9u
LgotICAgICAqCi0gICAgICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGFw
cGxpY2F0aW9uLWRlZmluZWQgY2xhc3NlcyB0aGF0IHlvdQotICAgICAqIHdpc2ggdG8gY2hlY2sg
YWdhaW5zdCBmb3IgY2FzdGluZyBwdXJwb3Nlcy4KLSAgICAgKgotICAgICAqIEZvciBleGFtcGxl
LCB0byBzcGVjaWZ5IHRoZSBjbGFzcyBpbmZvIGZvciBjbGFzc2VzIEZvb0ltcCBhbmQgQmFySW1w
LAotICAgICAqIHdoZXJlIEZvb0ltcCBpbmhlcml0cyBmcm9tIEJhckltcCwgeW91IHdvdWxkIGFk
ZCB0aGUgZm9sbG93aW5nIGluIHlvdXIKLSAgICAgKiBjbGFzcyBkZWNsYXJhdGlvbnM6Ci0gICAg
ICoKLSAgICAgKiBcY29kZQotICAgICAqICAgY2xhc3MgQmFySW1wIDogcHVibGljIE9iamVjdElt
cCB7Ci0gICAgICogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgICAqICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87Ci0gICAgICogICAgIC8vIC4uLgotICAgICAqICAgfTsKLSAgICAgKgotICAgICAqICAgY2xh
c3MgRm9vSW1wIDogcHVibGljIE9iamVjdEltcCB7Ci0gICAgICogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAqICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICogICAgIC8vIC4uLgotICAgICAq
ICAgfTsKLSAgICAgKiBcZW5kY29kZQotICAgICAqCi0gICAgICogQW5kIGluIHlvdXIgc291cmNl
IGZpbGU6Ci0gICAgICoKLSAgICAgKiBcY29kZQotICAgICAqICAgY29uc3QgQ2xhc3NJbmZvIEJh
ckltcDo6aW5mbyA9IHsiQmFyIiwgMCwgMCwgMH07IC8vIG5vIHBhcmVudCBjbGFzcwotICAgICAq
ICAgY29uc3QgQ2xhc3NJbmZvIEZvb0ltcDo6aW5mbyA9IHsiRm9vIiwgJkJhckltcDo6aW5mbywg
MCwgMH07Ci0gICAgICogXGVuZGNvZGUKLSAgICAgKgotICAgICAqIEBzZWUgaW5oZXJpdHMoKQot
ICAgICAqLwotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgb2JqZWN0IGluaGVyaXRzIGZy
b20gdGhlIGNsYXNzIHdpdGggdGhlIHNwZWNpZmllZAotICAgICAqIGNsYXNzSW5mbygpIHBvaW50
ZXIuIFRoaXMgcmVxdWlyZXMgdGhhdCBib3RoIHRoaXMgY2xhc3MgYW5kIHRoZSBvdGhlcgotICAg
ICAqIGNsYXNzIHJldHVybiBhIG5vbi1OVUxMIHBvaW50ZXIgZm9yIHRoZWlyIGNsYXNzSW5mbygp
IG1ldGhvZHMgKG90aGVyd2lzZQotICAgICAqIGl0IHdpbGwgcmV0dXJuIGZhbHNlKS4KLSAgICAg
KgotICAgICAqIEZvciBleGFtcGxlLCBmb3IgdHdvIE9iamVjdEltcCBwb2ludGVycyBvYmoxIGFu
ZCBvYmoyLCB5b3UgY2FuIGNoZWNrCi0gICAgICogaWYgb2JqMSdzIGNsYXNzIGluaGVyaXRzIGZy
b20gb2JqMidzIGNsYXNzIHVzaW5nIHRoZSBmb2xsb3dpbmc6Ci0gICAgICoKLSAgICAgKiAgIGlm
IChvYmoxLT5pbmhlcml0cyhvYmoyLT5jbGFzc0luZm8oKSkpIHsKLSAgICAgKiAgICAgLy8gLi4u
Ci0gICAgICogICB9Ci0gICAgICoKLSAgICAgKiBJZiB5b3UgaGF2ZSBhIGhhbmRsZSB0byBhIHN0
YXRpY2FsbHkgZGVjbGFyZWQgQ2xhc3NJbmZvLCBzdWNoIGFzIGluIHRoZQotICAgICAqIGNsYXNz
SW5mbygpIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgZm9yIGluaGVyaXRhbmNlIHdpdGhvdXQgbmVl
ZGluZwotICAgICAqIGFuIGluc3RhbmNlIG9mIHRoZSBvdGhlciBjbGFzczoKLSAgICAgKgotICAg
ICAqICAgaWYgKG9iajEtPmluaGVyaXRzKEZvb0ltcDo6aW5mbykpIHsKLSAgICAgKiAgICAgLy8g
Li4uCi0gICAgICogICB9Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gY2luZm8gVGhlIENsYXNzSW5m
byBwb2ludGVyIGZvciB0aGUgY2xhc3MgeW91IHdhbnQgdG8gY2hlY2sKLSAgICAgKiBpbmhlcml0
YW5jZSBhZ2FpbnN0LgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCdzIGNsYXNz
IGluaGVyaXRzIGZyb20gY2xhc3Mgd2l0aCB0aGUKLSAgICAgKiBDbGFzc0luZm8gcG9pbnRlciBz
cGVjaWZpZWQgaW4gY2luZm8KLSAgICAgKi8KLSAgICBib29sIGluaGVyaXRzKGNvbnN0IENsYXNz
SW5mbyAqY2luZm8pIGNvbnN0OwotCi0gICAgLy8gaW50ZXJuYWwgcHJvcGVydGllcyAoRUNNQSAy
NjItMyA4LjYuMikKLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW1By
b3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IChpbXBsZW1lbnRlZCBieQotICAgICAqIGFsbCBP
YmplY3RzKQotICAgICAqCi0gICAgICogQHNlZSBPYmplY3Q6OnByb3RvdHlwZSgpCi0gICAgICov
Ci0gICAgVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcm90b3R5cGUoY29u
c3QgVmFsdWUgJnByb3RvKTsKLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRo
ZSBbW0NsYXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5IGFsbAotICAgICAq
IE9iamVjdHMpCi0gICAgICoKLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB1c2Vz
IGNsYXNzSW5mbygpLgotICAgICAqIFlvdSBzaG91bGQgZWl0aGVyIGltcGxlbWVudCBjbGFzc0lu
Zm8oKSwgb3IKLSAgICAgKiBpZiB5b3Ugc2ltcGx5IG5lZWQgYSBjbGFzc25hbWUsIHlvdSBjYW4g
cmVpbXBsZW1lbnQgY2xhc3NOYW1lKCkKLSAgICAgKiBpbnN0ZWFkLgotICAgICAqCi0gICAgICog
QHNlZSBPYmplY3Q6OmNsYXNzTmFtZSgpCi0gICAgICovCi0gICAgdmlydHVhbCBVU3RyaW5nIGNs
YXNzTmFtZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhl
IFtbR2V0XV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5IGFsbAotICAgICAqIE9i
amVjdHMpCi0gICAgICoKLSAgICAgKiBAc2VlIE9iamVjdDo6Z2V0KCkKLSAgICAgKi8KLSAgICAv
LyBbW0dldF1dIC0gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgT2JqZWN0cwotICAgIFZhbHVl
IGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3Q7Ci0gICAgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdDsKLQotICAgIGJvb2wgZ2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIGJvb2wg
Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVl
JiByZXN1bHQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbUHV0XV0gaW50ZXJuYWwgcHJvcGVydHkg
KGltcGxlbWVudGVkIGJ5IGFsbAotICAgICAqIE9iamVjdHMpCi0gICAgICoKLSAgICAgKiBAc2Vl
IE9iamVjdDo6cHV0KCkKLSAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0KLSAgICAv
KioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tDYW5QdXRdXSBpbnRlcm5hbCBwcm9w
ZXJ0eSAoaW1wbGVtZW50ZWQgYnkgYWxsCi0gICAgICogT2JqZWN0cykKLSAgICAgKgotICAgICAq
IEBzZWUgT2JqZWN0OjpjYW5QdXQoKQotICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBjYW5QdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbSGFzUHJvcGVydHldXSBp
bnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkKLSAgICAgKiBhbGwgT2JqZWN0cykKLSAg
ICAgKgotICAgICAqIEBzZWUgT2JqZWN0OjpoYXNQcm9wZXJ0eSgpCi0gICAgICovCi0gICAgYm9v
bCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsCi0JCQkgICAgIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFz
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLAotICAgIAkJICAgICBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBwcm9wZXJ0
eSAoaW1wbGVtZW50ZWQgYnkgYWxsCi0gICAgICogT2JqZWN0cykKLSAgICAgKgotICAgICAqIEBz
ZWUgT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSgpCi0gICAgICovCi0gICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwot
Ci0gICAgLyoqCi0gICAgICogUmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhpcyBvYmplY3Qu
Ci0gICAgICogVGhpcyBkb2Vzbid0IHRha2UgRG9udERlbGV0ZSBpbnRvIGFjY291bnQsIGFuZCBp
c24ndCBpbiB0aGUgRUNNQSBzcGVjLgotICAgICAqIEl0J3Mgc2ltcGx5IGEgcXVpY2sgd2F5IHRv
IHJlbW92ZSBldmVyeXRoaW5nIGJlZm9yZSBkZXN0cm95aW5nLgotICAgICAqLwotICAgIHZvaWQg
ZGVsZXRlQWxsUHJvcGVydGllcyhFeGVjU3RhdGUgKik7Ci0KLSAgICAvKioKLSAgICAgKiBJbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWZhdWx0VmFsdWVdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1w
bGVtZW50ZWQgYnkKLSAgICAgKiBhbGwgT2JqZWN0cykKLSAgICAgKgotICAgICAqIEBzZWUgT2Jq
ZWN0OjpkZWZhdWx0VmFsdWUoKQotICAgICAqLwotICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZh
bHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9v
bCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgLyoqCi0gICAgICogSW1wbGVtZW50
YXRpb24gb2YgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkKLSAgICAgKgotICAg
ICAqIEBzZWUgT2JqZWN0Ojpjb25zdHJ1Y3QoKQotICAgICAqLwotICAgIHZpcnR1YWwgT2JqZWN0
IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwotICAgIHZpcnR1
YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNv
bnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwotCi0gICAgdmlydHVhbCBi
b29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRp
b24gb2YgdGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5Ci0gICAgICoKLSAgICAgKiBAc2Vl
IE9iamVjdDo6Y2FsbCgpCi0gICAgICovCi0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBM
aXN0ICZhcmdzKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBj
b25zdDsKLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tIYXNJbnN0YW5j
ZV1dIGludGVybmFsIHByb3BlcnR5Ci0gICAgICoKLSAgICAgKiBAc2VlIE9iamVjdDo6aGFzSW5z
dGFuY2UoKQotICAgICAqLwotICAgIHZpcnR1YWwgQm9vbGVhbiBoYXNJbnN0YW5jZShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZ2YWx1ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1l
bnRhdGlvbiBvZiB0aGUgW1tTY29wZV1dIGludGVybmFsIHByb3BlcnR5Ci0gICAgICoKLSAgICAg
KiBAc2VlIE9iamVjdDo6c2NvcGUoKQotICAgICAqLwotICAgIGNvbnN0IFNjb3BlQ2hhaW4gJnNj
b3BlKCkgY29uc3QgeyByZXR1cm4gX3Njb3BlOyB9Ci0gICAgdm9pZCBzZXRTY29wZShjb25zdCBT
Y29wZUNoYWluICZzKSB7IF9zY29wZSA9IHM7IH0KLQotICAgIHZpcnR1YWwgUmVmZXJlbmNlTGlz
dCBwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJzaXZlID0gdHJ1ZSk7Ci0KLSAg
ICBWYWx1ZSBpbnRlcm5hbFZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJbnRlcm5hbFZhbHVl
KGNvbnN0IFZhbHVlICZ2KTsKICAgICB2b2lkIHNldEludGVybmFsVmFsdWUoVmFsdWVJbXAgKnYp
OwogCi0gICAgVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAg
ICAgICAgICAgIFR5cGUgcHJlZmVycmVkVHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7Cisg
ICAgVmFsdWVJbXAgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWRU
eXBlID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKICAgICBib29sIHRvQm9vbGVhbihFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OwogICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwogICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBP
YmplY3QgdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKnRv
T2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAKICAgICAvLyBUaGlzIGdldCBtZXRob2Qg
b25seSBsb29rcyBhdCB0aGUgcHJvcGVydHkgbWFwLgogICAgIC8vIEEgYml0IGxpa2UgaGFzUHJv
cGVydHkocmVjdXJzaXZlPWZhbHNlKSwgdGhpcyBkb2Vzbid0IGdvIHRvIHRoZSBwcm90b3R5cGUu
CkBAIC02NDEsNyArNTM1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgLy8gaXQgbWF5IHNlZW0g
Y3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSBidXQgaXQgbWFrZXMgYSBiaWcg
ZGlmZmVyZW5jZQogICAvLyBzaW5jZSB0aGlzIGlzIGZ1bmN0aW9uIHZlcnkgaG90IGluIHZhcmlh
YmxlIGxvb2t1cAotICBpbmxpbmUgYm9vbCBPYmplY3RJbXA6OmdldFByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdAorICBpbmxpbmUgYm9vbCBPYmplY3RJbXA6OmdldFByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNv
bnN0CiAgIHsKICAgICBjb25zdCBPYmplY3RJbXAgKmltcCA9IHRoaXM7CiAKQEAgLTY1MCw3ICs1
NDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAKICAg
ICAgIGNvbnN0IFZhbHVlSW1wICpwcm90byA9IGltcC0+X3Byb3RvOwotICAgICAgaWYgKHByb3Rv
LT5kaXNwYXRjaFR5cGUoKSAhPSBPYmplY3RUeXBlKQorICAgICAgaWYgKCFwcm90by0+aXNPYmpl
Y3QoKSkKICAgICAgICAgYnJlYWs7CiAgICAgICAKICAgICAgIGltcCA9IHN0YXRpY19jYXN0PGNv
bnN0IE9iamVjdEltcCAqPihwcm90byk7CkBAIC02NjIsMTcgKzU1NiwxNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgLy8gaXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBs
YXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCiAgIC8vIGJ1dCBpdCBtYWtlcyBh
IGJpZyBkaWZmZXJlbmNlIHRvIHByb3BlcnR5IGxvb2t1cCBpZiBzdWJjbGFzc2VzIGNhbiBpbmxp
bmUgdGhlaXIKICAgLy8gc3VwZXJjbGFzcyBjYWxsIHRvIHRoaXMKLSAgaW5saW5lIGJvb2wgT2Jq
ZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSwgVmFsdWUgJnJlc3VsdCkgY29uc3QKKyAgaW5saW5lIGJvb2wgT2JqZWN0
SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiAgIHsKICAgICAgIFZhbHVlSW1w
ICppbXAgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKICAgICAgIGlmIChpbXApIHsKLSAgICAg
ICAgcmVzdWx0ID0gVmFsdWUoaW1wKTsKKyAgICAgICAgcmVzdWx0ID0gaW1wOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgIH0KIAogICAgICAgLy8gbm9uLXN0YW5kYXJkIG5ldHNjYXBlIGV4
dGVuc2lvbgogICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBzcGVjaWFsUHJvdG90eXBlUHJvcGVy
dHlOYW1lKSB7Ci0gICAgICAgIHJlc3VsdCA9IFZhbHVlKF9wcm90byk7CisgICAgICAgIHJlc3Vs
dCA9IF9wcm90bzsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICB9CiAKQEAgLTcwOCw5ICs2
MDIsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcGFyYW0gbGluZW5vIE9wdGlvbmFsIGxp
bmUgbnVtYmVyLgogICAgICAqIEBwYXJhbSBsaW5lbm8gT3B0aW9uYWwgc291cmNlIGlkLgogICAg
ICAqLwotICAgIHN0YXRpYyBPYmplY3QgY3JlYXRlKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBl
IGVycnR5cGUgPSBHZW5lcmFsRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbWVzc2FnZSA9IDAsIGludCBsaW5lbm8gPSAtMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc291cmNlSWQgPSAtMSwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMID0gMCk7Cisg
ICAgc3RhdGljIE9iamVjdEltcCAqY3JlYXRlKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGVy
cnR5cGUgPSBHZW5lcmFsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKm1lc3NhZ2UgPSAwLCBpbnQgbGluZW5vID0gLTEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VJZCA9IC0xLCBjb25zdCBVU3RyaW5nICpzb3VyY2VVUkwgPSAw
KTsKIAogICAgIC8qKgogICAgICAqIEFycmF5IG9mIGVycm9yIG5hbWVzIGNvcnJlc3BvbmRpbmcg
dG8gRXJyb3JUeXBlCkBAIC03MTgsMTAzICs2MTIsNDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAqIGNvbnN0IGVycm9yTmFtZXM7CiAgIH07CiAKLSAg
aW5saW5lIGJvb2wgVmFsdWVJbXA6OmlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqaW5mbykgY29u
c3QKLSAgICB7IHJldHVybiBpc09iamVjdCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IE9iamVjdElt
cCAqPih0aGlzKS0+aW5oZXJpdHMoaW5mbyk7IH0KLQotICBpbmxpbmUgT2JqZWN0SW1wICpWYWx1
ZUltcDo6YXNPYmplY3QoKQotICAgIHsgcmV0dXJuIGlzT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4odGhpcykgOiAwOyB9Ci0KLSAgaW5saW5lIE9iamVjdDo6T2JqZWN0KE9iamVj
dEltcCAqbykgOiBWYWx1ZShvKSB7IH0KLQotICBpbmxpbmUgT2JqZWN0SW1wICpPYmplY3Q6Omlt
cCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KFZhbHVlOjpp
bXAoKSk7IH0KLQotICBpbmxpbmUgY29uc3QgQ2xhc3NJbmZvICpPYmplY3Q6OmNsYXNzSW5mbygp
IGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmNsYXNzSW5mbygpOyB9Ci0KLSAgaW5saW5lIGJv
b2wgT2JqZWN0Ojppbmhlcml0cyhjb25zdCBDbGFzc0luZm8gKmNpbmZvKSBjb25zdAotICAgIHsg
cmV0dXJuIGltcCgpLT5pbmhlcml0cyhjaW5mbyk7IH0KLQotICBpbmxpbmUgVmFsdWUgT2JqZWN0
Ojpwcm90b3R5cGUoKSBjb25zdAotICAgIHsgcmV0dXJuIFZhbHVlKGltcCgpLT5wcm90b3R5cGUo
KSk7IH0KLQotICBpbmxpbmUgVVN0cmluZyBPYmplY3Q6OmNsYXNzTmFtZSgpIGNvbnN0Ci0gICAg
eyByZXR1cm4gaW1wKCktPmNsYXNzTmFtZSgpOyB9CisgICAgaW5saW5lIGJvb2wgQWxsb2NhdGVk
VmFsdWVJbXA6OmlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqaW5mbykgY29uc3QKKyAgICAgICAg
eyByZXR1cm4gaXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBPYmplY3RJbXAgKj4odGhp
cyktPmluaGVyaXRzKGluZm8pOyB9CiAKLSAgaW5saW5lIFZhbHVlIE9iamVjdDo6Z2V0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAotICAgIHsg
cmV0dXJuIGltcCgpLT5nZXQoZXhlYyxwcm9wZXJ0eU5hbWUpOyB9Ci0KLSAgaW5saW5lIFZhbHVl
IE9iamVjdDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25z
dAotICAgIHsgcmV0dXJuIGltcCgpLT5nZXQoZXhlYyxwcm9wZXJ0eU5hbWUpOyB9Ci0KLSAgaW5s
aW5lIHZvaWQgT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCi0gICAgeyBpbXAoKS0+
cHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlLGF0dHIpOyB9Ci0KLSAgaW5saW5lIHZvaWQgT2Jq
ZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIGNvbnN0IFZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpCi0gICAgeyBpbXAoKS0+cHV0KGV4ZWMscHJvcGVydHlOYW1l
LHZhbHVlLGF0dHIpOyB9Ci0KLSAgaW5saW5lIGJvb2wgT2JqZWN0OjpjYW5QdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Ci0gICAgeyByZXR1
cm4gaW1wKCktPmNhblB1dChleGVjLHByb3BlcnR5TmFtZSk7IH0KLQotICBpbmxpbmUgYm9vbCBP
YmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5oYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpOyB9Ci0KLSAgaW5saW5lIGJvb2wgT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKLSAgICB7IHJldHVybiBp
bXAoKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsgfQotCi0gIGlubGluZSBib29s
IE9iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmhhc093blByb3BlcnR5
KGV4ZWMsIHByb3BlcnR5TmFtZSk7IH0KLQotICBpbmxpbmUgYm9vbCBPYmplY3Q6Omhhc093blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAotICAg
IHsgcmV0dXJuIGltcCgpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOyB9Ci0K
LSAgaW5saW5lIGJvb2wgT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkKLSAgICB7IHJldHVybiBpbXAoKS0+ZGVsZXRl
UHJvcGVydHkoZXhlYyxwcm9wZXJ0eU5hbWUpOyB9Ci0KLSAgaW5saW5lIGJvb2wgT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKLSAg
ICB7IHJldHVybiBpbXAoKS0+ZGVsZXRlUHJvcGVydHkoZXhlYyxwcm9wZXJ0eU5hbWUpOyB9Ci0K
LSAgaW5saW5lIFZhbHVlIE9iamVjdDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlw
ZSBoaW50KSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5kZWZhdWx0VmFsdWUoZXhlYyxoaW50
KTsgfQotCi0gIGlubGluZSBib29sIE9iamVjdDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0
Ci0gICAgeyByZXR1cm4gaW1wKCktPmltcGxlbWVudHNDb25zdHJ1Y3QoKTsgfQotCi0gIGlubGlu
ZSBPYmplY3QgT2JqZWN0Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKQotICAgIHsgcmV0dXJuIGltcCgpLT5jb25zdHJ1Y3QoZXhlYyxhcmdzKTsgfQotICAKLSAg
aW5saW5lIE9iamVjdCBPYmplY3Q6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExp
c3QgJmFyZ3MsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpCi0gIHsg
cmV0dXJuIGltcCgpLT5jb25zdHJ1Y3QoZXhlYyxhcmdzLHNvdXJjZVVSTCxsaW5lTnVtYmVyKTsg
fQotCi0gIGlubGluZSBib29sIE9iamVjdDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdAotICAgIHsg
cmV0dXJuIGltcCgpLT5pbXBsZW1lbnRzQ2FsbCgpOyB9Ci0KLSAgaW5saW5lIGJvb2wgT2JqZWN0
OjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5pbXBs
ZW1lbnRzSGFzSW5zdGFuY2UoKTsgfQotCi0gIGlubGluZSBCb29sZWFuIE9iamVjdDo6aGFzSW5z
dGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpCi0gICAgeyByZXR1cm4g
aW1wKCktPmhhc0luc3RhbmNlKGV4ZWMsdmFsdWUpOyB9Ci0KLSAgaW5saW5lIGNvbnN0IFNjb3Bl
Q2hhaW4gJk9iamVjdDo6c2NvcGUoKSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5zY29wZSgp
OyB9Ci0KLSAgaW5saW5lIHZvaWQgT2JqZWN0OjpzZXRTY29wZShjb25zdCBTY29wZUNoYWluICZz
KQotICAgIHsgaW1wKCktPnNldFNjb3BlKHMpOyB9Ci0KLSAgaW5saW5lIFJlZmVyZW5jZUxpc3Qg
T2JqZWN0Ojpwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJzaXZlKQotICAgIHsg
cmV0dXJuIGltcCgpLT5wcm9wTGlzdChleGVjLHJlY3Vyc2l2ZSk7IH0KLQotICBpbmxpbmUgVmFs
dWUgT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkgY29uc3QKLSAgICB7IHJldHVybiBpbXAoKS0+aW50
ZXJuYWxWYWx1ZSgpOyB9Ci0KLSAgaW5saW5lIHZvaWQgT2JqZWN0OjpzZXRJbnRlcm5hbFZhbHVl
KGNvbnN0IFZhbHVlICZ2KQotICAgIHsgaW1wKCktPnNldEludGVybmFsVmFsdWUodik7IH0KLQot
ICBpbmxpbmUgdm9pZCBPYmplY3Q6OnNhdmVQcm9wZXJ0aWVzKFNhdmVkUHJvcGVydGllcyAmcCkg
Y29uc3QKLSAgICB7IGltcCgpLT5zYXZlUHJvcGVydGllcyhwKTsgfQotICBpbmxpbmUgdm9pZCBP
YmplY3Q6OnJlc3RvcmVQcm9wZXJ0aWVzKGNvbnN0IFNhdmVkUHJvcGVydGllcyAmcCkKLSAgICB7
IGltcCgpLT5yZXN0b3JlUHJvcGVydGllcyhwKTsgfQoraW5saW5lIE9iamVjdEltcDo6T2JqZWN0
SW1wKE9iamVjdEltcCAqcHJvdG8pCisgICAgOiBfcHJvdG8ocHJvdG8pLCBfaW50ZXJuYWxWYWx1
ZSgwKQoreworfQorCitpbmxpbmUgT2JqZWN0SW1wOjpPYmplY3RJbXAoKQorICAgIDogX3Byb3Rv
KGpzTnVsbCgpKSwgX2ludGVybmFsVmFsdWUoMCkKK3sKK30KKworaW5saW5lIFZhbHVlSW1wICpP
YmplY3RJbXA6OmludGVybmFsVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBfaW50ZXJuYWxW
YWx1ZTsKK30KKworaW5saW5lIHZvaWQgT2JqZWN0SW1wOjpzZXRJbnRlcm5hbFZhbHVlKFZhbHVl
SW1wICp2KQoreworICAgIF9pbnRlcm5hbFZhbHVlID0gdjsKK30KKworaW5saW5lIFZhbHVlSW1w
ICpPYmplY3RJbXA6OnByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIF9wcm90bzsKK30K
KworaW5saW5lIHZvaWQgT2JqZWN0SW1wOjpzZXRQcm90b3R5cGUoVmFsdWVJbXAgKnByb3RvKQor
eworICAgIF9wcm90byA9IHByb3RvOworfQorCitpbmxpbmUgYm9vbCBPYmplY3RJbXA6OmluaGVy
aXRzKGNvbnN0IENsYXNzSW5mbyAqaW5mbykgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IENsYXNz
SW5mbyAqY2kgPSBjbGFzc0luZm8oKTsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNzKQorICAgICAg
ICBpZiAoY2kgPT0gaW5mbykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmIC8vIF9LSlNfT0JKRUNUX0hfCisj
ZW5kaWYgLy8gS0pTX09CSkVDVF9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3Rfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11
IC11IC1wIC1yMS4xMiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAkyNSBKdWwgMjAwNSAyMjoxNzoxMiAt
MDAwMAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAJNyBBdWcg
MjAwNSAwNDo0NDowOCAtMDAwMApAQCAtMzcsNyArMzcsNiBAQCBPYmplY3RQcm90b3R5cGVJbXA6
Ok9iamVjdFByb3RvdHlwZUltcChFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKQogICA6IE9iamVjdEltcCgpIC8v
IFtbUHJvdG90eXBlXV0gaXMgTnVsbCgpCiB7Ci0gICAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAg
ICBwdXREaXJlY3QodG9TdHJpbmdQcm9wZXJ0eU5hbWUsIG5ldyBPYmplY3RQcm90b0Z1bmNJbXAo
ZXhlYyxmdW5jUHJvdG8sT2JqZWN0UHJvdG9GdW5jSW1wOjpUb1N0cmluZywgICAgICAgICAgICAw
KSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh0b0xvY2FsZVN0cmluZ1Byb3BlcnR5TmFtZSwg
bmV3IE9iamVjdFByb3RvRnVuY0ltcChleGVjLGZ1bmNQcm90byxPYmplY3RQcm90b0Z1bmNJbXA6
OlRvTG9jYWxlU3RyaW5nLDApLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZhbHVlT2ZQcm9w
ZXJ0eU5hbWUsICBuZXcgT2JqZWN0UHJvdG9GdW5jSW1wKGV4ZWMsZnVuY1Byb3RvLE9iamVjdFBy
b3RvRnVuY0ltcDo6VmFsdWVPZiwgICAgICAgICAgICAgMCksIERvbnRFbnVtKTsKQEAgLTUyLDcg
KzUxLDYgQEAgT2JqZWN0UHJvdG9GdW5jSW1wOjpPYmplY3RQcm90b0Z1bmNJbXAoRQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGludCBsZW4pCiAgIDogSW50
ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBwcm90ZWN0KHRo
aXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8UmVh
ZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC02NCwyMiArNjIsMTkgQEAgYm9vbCBPYmplY3RQcm90
b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKAogCiAvLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwg
MTUuMi40LjUKIAotVmFsdWUgT2JqZWN0UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk9iamVjdFBy
b3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBj
YXNlIFZhbHVlT2Y6CiAgICAgICAgICAgICByZXR1cm4gdGhpc09iajsKLSAgICAgICAgY2FzZSBI
YXNPd25Qcm9wZXJ0eTogeworICAgICAgICBjYXNlIEhhc093blByb3BlcnR5OgogICAgICAgICAg
ICAgLy8gU2FtZSBhcyB0aGUgaW4gb3BlcmF0b3IgYnV0IHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBy
b3RvdHlwZQotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoYXJnc1swXS50b1N0
cmluZyhleGVjKSk7Ci0gICAgICAgICAgICBib29sIGV4aXN0cyA9IHRoaXNPYmouaGFzT3duUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZShleGlz
dHMgPyBCb29sZWFuSW1wOjpzdGF0aWNUcnVlIDogQm9vbGVhbkltcDo6c3RhdGljRmFsc2UpOwot
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPmhhc093blBy
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKSk7CiAgICAg
ICAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6Ci0gICAgICAgICAgcmV0dXJuIHRoaXNPYmouaW1wKCkt
PnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHRoaXNPYmotPnRv
U3RyaW5nKGV4ZWMpKTsKICAgICAgICAgY2FzZSBUb1N0cmluZzoKICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIltvYmplY3QgIiArIHRoaXNPYmouY2xhc3NOYW1l
KCkgKyAiXSIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiW29iamVjdCAiICsgdGhpc09i
ai0+Y2xhc3NOYW1lKCkgKyAiXSIpOwogICAgIH0KIH0KIApAQCAtOTAsMTIgKzg1LDExIEBAIE9i
amVjdE9iamVjdEltcDo6T2JqZWN0T2JqZWN0SW1wKEV4ZWNTdGEKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8pCiAgIDogSW50
ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAg
IC8vIEVDTUEgMTUuMi4zLjEKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwgb2Jq
UHJvdG8sIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgIC8vIG5vLiBvZiBhcmd1
bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIE51
bWJlckltcDo6b25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBwdXREaXJl
Y3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRF
bnVtKTsKIH0KIAogCkBAIC0xMDUsMzIgKzk5LDI5IEBAIGJvb2wgT2JqZWN0T2JqZWN0SW1wOjpp
bXBsZW1lbnRzQ29uc3RydWMKIH0KIAogLy8gRUNNQSAxNS4yLjIKLU9iamVjdCBPYmplY3RPYmpl
Y3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmpl
Y3RJbXAgKk9iamVjdE9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncykKIHsKICAgLy8gaWYgbm8gYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNzZWQgLi4u
CiAgIGlmIChhcmdzLmlzRW1wdHkoKSkgewotICAgIE9iamVjdCBwcm90byA9IGV4ZWMtPmxleGlj
YWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgT2JqZWN0IHJl
c3VsdChuZXcgT2JqZWN0SW1wKHByb3RvKSk7CisgICAgT2JqZWN0SW1wICpwcm90byA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7CisgICAgT2Jq
ZWN0SW1wICpyZXN1bHQobmV3IE9iamVjdEltcChwcm90bykpOwogICAgIHJldHVybiByZXN1bHQ7
CiAgIH0KIAotICBWYWx1ZSBhcmcgPSAqKGFyZ3MuYmVnaW4oKSk7Ci0gIE9iamVjdCBvYmogPSBP
YmplY3Q6OmR5bmFtaWNDYXN0KGFyZyk7Ci0gIGlmICghb2JqLmlzTnVsbCgpKSB7CisgIFZhbHVl
SW1wICphcmcgPSAqKGFyZ3MuYmVnaW4oKSk7CisgIGlmIChPYmplY3RJbXAgKm9iaiA9IGFyZy0+
Z2V0T2JqZWN0KCkpCiAgICAgcmV0dXJuIG9iajsKLSAgfQogCi0gIHN3aXRjaCAoYXJnLnR5cGUo
KSkgeworICBzd2l0Y2ggKGFyZy0+dHlwZSgpKSB7CiAgIGNhc2UgU3RyaW5nVHlwZToKICAgY2Fz
ZSBCb29sZWFuVHlwZToKICAgY2FzZSBOdW1iZXJUeXBlOgotICAgIHJldHVybiBhcmcudG9PYmpl
Y3QoZXhlYyk7CisgICAgcmV0dXJuIGFyZy0+dG9PYmplY3QoZXhlYyk7CiAgIGRlZmF1bHQ6CiAg
ICAgYXNzZXJ0KCEidW5oYW5kbGVkIHN3aXRjaCBjYXNlIGluIE9iamVjdENvbnN0cnVjdG9yIik7
CiAgIGNhc2UgTnVsbFR5cGU6CiAgIGNhc2UgVW5kZWZpbmVkVHlwZToKLSAgICBPYmplY3QgcHJv
dG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3QobmV3IE9iamVjdEltcChwcm90bykpOworICAgIHJldHVybiBu
ZXcgT2JqZWN0SW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCkpOwogICB9CiB9CiAKQEAgLTEzOSwyMSArMTMwLDIxIEBAIGJvb2wgT2JqZWN0T2Jq
ZWN0SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGMKICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlIE9i
amVjdE9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8s
IGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqT2JqZWN0T2JqZWN0SW1wOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIFZhbHVlIHJlc3VsdDsKKyAgVmFsdWVJbXAgKnJlc3VsdDsKIAogICBMaXN0
IGFyZ0xpc3Q7CiAgIC8vIENvbnN0cnVjdCBhIG5ldyBPYmplY3QKICAgaWYgKGFyZ3MuaXNFbXB0
eSgpKSB7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsYXJnTGlzdCk7CiAgIH0gZWxzZSB7
Ci0gICAgVmFsdWUgYXJnID0gYXJnc1swXTsKLSAgICBpZiAoYXJnLnR5cGUoKSA9PSBOdWxsVHlw
ZSB8fCBhcmcudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsKKyAgICBWYWx1ZUltcCAqYXJnID0g
YXJnc1swXTsKKyAgICBpZiAoYXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICBhcmdM
aXN0LmFwcGVuZChhcmcpOwogICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsYXJnTGlzdCk7
CiAgICAgfSBlbHNlCi0gICAgICByZXN1bHQgPSBhcmcudG9PYmplY3QoZXhlYyk7CisgICAgICBy
ZXN1bHQgPSBhcmctPnRvT2JqZWN0KGV4ZWMpOwogICB9CiAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtdSAtcCAtcjEuOCBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0X29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5o
CTE0IEp1bCAyMDA1IDE4OjI3OjAzIC0wMDAwCTEuOAorKysgSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdF9vYmplY3QuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC00NywxMSArNDcsMTAg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFzcyBPYmplY3RQcm90b0Z1bmNJbXAgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgIHB1YmxpYzoKLSAgICBPYmplY3RQcm90b0Z1
bmNJbXAoRXhlY1N0YXRlICpleGVjLCBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvLAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgaW50IGxlbik7CisgICAgT2JqZWN0UHJvdG9G
dW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywg
aW50IGksIGludCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKiwgT2JqZWN0SW1wICosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAg
ZW51bSB7IFRvU3RyaW5nLCBUb0xvY2FsZVN0cmluZywgVmFsdWVPZiwgSGFzT3duUHJvcGVydHkg
fTsKICAgcHJpdmF0ZToKQEAgLTcxLDkgKzcwLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8pOwogCiAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVj
dCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0
dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqLCBjb25zdCBMaXN0ICZhcmdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZh
bHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBP
YmplY3RJbXAgKiwgY29uc3QgTGlzdCAmYXJncyk7CiAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vcGVyYXRpb25zLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjcgSmF2YVNjcmlwdENvcmUva2pz
L29wZXJhdGlvbnMuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5jcHAJMTQg
SnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0
aW9ucy5jcHAJNyBBdWcgMjAwNSAwNDo0NDowOCAtMDAwMApAQCAtMTExLDEwICsxMTEsMTAgQEAg
Ym9vbCBLSlM6OmlzTmVnSW5mKGRvdWJsZSBkKQogI2VuZGlmCiAKIC8vIEVDTUEgMTEuOS4zCi1i
b29sIEtKUzo6ZXF1YWwoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgdjEsIGNvbnN0IFZh
bHVlJiB2MikKK2Jvb2wgS0pTOjplcXVhbChFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2MSwg
VmFsdWVJbXAgKnYyKQogewotICAgIFR5cGUgdDEgPSB2MS50eXBlKCk7Ci0gICAgVHlwZSB0MiA9
IHYyLnR5cGUoKTsKKyAgICBUeXBlIHQxID0gdjEtPnR5cGUoKTsKKyAgICBUeXBlIHQyID0gdjIt
PnR5cGUoKTsKIAogICAgIGlmICh0MSAhPSB0MikgewogICAgICAgICBpZiAodDEgPT0gVW5kZWZp
bmVkVHlwZSkKQEAgLTEzNCw5ICsxMzQsOSBAQCBib29sIEtKUzo6ZXF1YWwoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBWCiAgICAgICAgICAgICAvLyB1c2UgdG9OdW1iZXIKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmICgodDEgPT0gU3RyaW5nVHlwZSB8fCB0MSA9PSBOdW1iZXJUeXBl
KSAmJiB0MiA+PSBPYmplY3RUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVj
LCB2MSwgdjIudG9QcmltaXRpdmUoZXhlYykpOworICAgICAgICAgICAgICAgIHJldHVybiBlcXVh
bChleGVjLCB2MSwgdjItPnRvUHJpbWl0aXZlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmICh0MSA+
PSBPYmplY3RUeXBlICYmICh0MiA9PSBTdHJpbmdUeXBlIHx8IHQyID09IE51bWJlclR5cGUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVjLCB2MS50b1ByaW1pdGl2ZShleGVjKSwg
djIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVjLCB2MS0+dG9QcmltaXRpdmUo
ZXhlYyksIHYyKTsKICAgICAgICAgICAgIGlmICh0MSAhPSB0MikKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTE0Niw4ICsxNDYsOCBAQCBib29sIEtKUzo6ZXF1
YWwoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
aWYgKHQxID09IE51bWJlclR5cGUpIHsKLSAgICAgICAgZG91YmxlIGQxID0gdjEudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgIGRvdWJsZSBkMiA9IHYyLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBk
b3VibGUgZDEgPSB2MS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBkMiA9IHYyLT50
b051bWJlcihleGVjKTsKICAgICAgICAgLy8gRklYTUU6IElzbid0IHRoaXMgYWxyZWFkeSBob3cg
TmFOIGJlaGF2ZXM/CiAgICAgICAgIC8vIFdoeSB0aGUgZXh0cmEgbGluZSBvZiBjb2RlPwogICAg
ICAgICBpZiAoaXNOYU4oZDEpIHx8IGlzTmFOKGQyKSkKQEAgLTE1NiwyNyArMTU2LDI3IEBAIGJv
b2wgS0pTOjplcXVhbChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFYKICAgICB9CiAKICAgICBpZiAo
dDEgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgcmV0dXJuIHYxLnRvU3RyaW5nKGV4ZWMpID09IHYy
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gdjEtPnRvU3RyaW5nKGV4ZWMpID09IHYy
LT50b1N0cmluZyhleGVjKTsKIAogICAgIGlmICh0MSA9PSBCb29sZWFuVHlwZSkKLSAgICAgICAg
cmV0dXJuIHYxLnRvQm9vbGVhbihleGVjKSA9PSB2Mi50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAg
IHJldHVybiB2MS0+dG9Cb29sZWFuKGV4ZWMpID09IHYyLT50b0Jvb2xlYW4oZXhlYyk7CiAKICAg
ICAvLyB0eXBlcyBhcmUgT2JqZWN0Ci0gICAgcmV0dXJuIHYxLmltcCgpID09IHYyLmltcCgpOwor
ICAgIHJldHVybiB2MSA9PSB2MjsKIH0KIAotYm9vbCBLSlM6OnN0cmljdEVxdWFsKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIpCitib29sIEtKUzo6c3Ry
aWN0RXF1YWwoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2MikKIHsK
LSAgVHlwZSB0MSA9IHYxLnR5cGUoKTsKLSAgVHlwZSB0MiA9IHYyLnR5cGUoKTsKKyAgVHlwZSB0
MSA9IHYxLT50eXBlKCk7CisgIFR5cGUgdDIgPSB2Mi0+dHlwZSgpOwogCiAgIGlmICh0MSAhPSB0
MikKICAgICByZXR1cm4gZmFsc2U7CiAgIGlmICh0MSA9PSBVbmRlZmluZWRUeXBlIHx8IHQxID09
IE51bGxUeXBlKQogICAgIHJldHVybiB0cnVlOwogICBpZiAodDEgPT0gTnVtYmVyVHlwZSkgewot
ICAgIGRvdWJsZSBuMSA9IHYxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBuMiA9IHYyLnRv
TnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IHYxLT50b051bWJlcihleGVjKTsKKyAgICBk
b3VibGUgbjIgPSB2Mi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgLy8gRklYTUU6IElzbid0IHRoaXMg
YWxyZWFkeSBob3cgTmFOIGJlaGF2ZXM/CiAgICAgLy8gV2h5IHRoZSBleHRyYSBsaW5lIG9mIGNv
ZGU/CiAgICAgaWYgKGlzTmFOKG4xKSB8fCBpc05hTihuMikpCkBAIC0xODYsMjcgKzE4NiwyNyBA
QCBib29sIEtKUzo6c3RyaWN0RXF1YWwoRXhlY1N0YXRlICpleGVjLCBjCiAgICAgLyogVE9ETzog
KzAgYW5kIC0wICovCiAgICAgcmV0dXJuIGZhbHNlOwogICB9IGVsc2UgaWYgKHQxID09IFN0cmlu
Z1R5cGUpIHsKLSAgICByZXR1cm4gdjEudG9TdHJpbmcoZXhlYykgPT0gdjIudG9TdHJpbmcoZXhl
Yyk7CisgICAgcmV0dXJuIHYxLT50b1N0cmluZyhleGVjKSA9PSB2Mi0+dG9TdHJpbmcoZXhlYyk7
CiAgIH0gZWxzZSBpZiAodDIgPT0gQm9vbGVhblR5cGUpIHsKLSAgICByZXR1cm4gdjEudG9Cb29s
ZWFuKGV4ZWMpID09IHYyLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gdjEtPnRvQm9vbGVh
bihleGVjKSA9PSB2Mi0+dG9Cb29sZWFuKGV4ZWMpOwogICB9Ci0gIGlmICh2MS5pbXAoKSA9PSB2
Mi5pbXAoKSkKKyAgaWYgKHYxID09IHYyKQogICAgIHJldHVybiB0cnVlOwogICAvKiBUT0RPOiBq
b2luZWQgb2JqZWN0cyAqLwogCiAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IEtKUzo6cmVsYXRp
b24oRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgdjEsIGNvbnN0IFZhbHVlJiB2MikKK2lu
dCBLSlM6OnJlbGF0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnYxLCBWYWx1ZUltcCAq
djIpCiB7Ci0gIFZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoZXhlYyxOdW1iZXJUeXBlKTsKLSAg
VmFsdWUgcDIgPSB2Mi50b1ByaW1pdGl2ZShleGVjLE51bWJlclR5cGUpOworICBWYWx1ZUltcCAq
cDEgPSB2MS0+dG9QcmltaXRpdmUoZXhlYyxOdW1iZXJUeXBlKTsKKyAgVmFsdWVJbXAgKnAyID0g
djItPnRvUHJpbWl0aXZlKGV4ZWMsTnVtYmVyVHlwZSk7CiAKLSAgaWYgKHAxLnR5cGUoKSA9PSBT
dHJpbmdUeXBlICYmIHAyLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQotICAgIHJldHVybiBwMS50b1N0
cmluZyhleGVjKSA8IHAyLnRvU3RyaW5nKGV4ZWMpID8gMSA6IDA7CisgIGlmIChwMS0+aXNTdHJp
bmcoKSAmJiBwMi0+aXNTdHJpbmcoKSkKKyAgICByZXR1cm4gcDEtPnRvU3RyaW5nKGV4ZWMpIDwg
cDItPnRvU3RyaW5nKGV4ZWMpID8gMSA6IDA7CiAKLSAgZG91YmxlIG4xID0gcDEudG9OdW1iZXIo
ZXhlYyk7Ci0gIGRvdWJsZSBuMiA9IHAyLnRvTnVtYmVyKGV4ZWMpOworICBkb3VibGUgbjEgPSBw
MS0+dG9OdW1iZXIoZXhlYyk7CisgIGRvdWJsZSBuMiA9IHAyLT50b051bWJlcihleGVjKTsKICAg
aWYgKG4xIDwgbjIpCiAgICAgcmV0dXJuIDE7CiAgIGlmIChuMSA+PSBuMikKQEAgLTIyNSwzNyAr
MjI1LDM3IEBAIGludCBLSlM6Om1pbkludChpbnQgZDEsIGludCBkMikKIH0KIAogLy8gRUNNQSAx
MS42Ci1WYWx1ZSBLSlM6OmFkZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZ2MSwgY29u
c3QgVmFsdWUgJnYyLCBjaGFyIG9wZXIpCitWYWx1ZUltcCAqS0pTOjphZGQoRXhlY1N0YXRlICpl
eGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2MiwgY2hhciBvcGVyKQogewogICAvLyBleGNl
cHRpb24gZm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBpbiBkZWZhdWx0VmFsdWUoKQogICBUeXBlIHBy
ZWZlcnJlZCA9IG9wZXIgPT0gJysnID8gVW5zcGVjaWZpZWRUeXBlIDogTnVtYmVyVHlwZTsKLSAg
VmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWQpOwotICBWYWx1ZSBwMiA9
IHYyLnRvUHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZCk7CisgIFZhbHVlSW1wICpwMSA9IHYxLT50
b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWQpOworICBWYWx1ZUltcCAqcDIgPSB2Mi0+dG9Qcmlt
aXRpdmUoZXhlYywgcHJlZmVycmVkKTsKIAotICBpZiAoKHAxLnR5cGUoKSA9PSBTdHJpbmdUeXBl
IHx8IHAyLnR5cGUoKSA9PSBTdHJpbmdUeXBlKSAmJiBvcGVyID09ICcrJykgewotICAgIHJldHVy
biBwMS50b1N0cmluZyhleGVjKSArIHAyLnRvU3RyaW5nKGV4ZWMpOworICBpZiAoKHAxLT5pc1N0
cmluZygpIHx8IHAyLT5pc1N0cmluZygpKSAmJiBvcGVyID09ICcrJykgeworICAgIHJldHVybiBq
c1N0cmluZyhwMS0+dG9TdHJpbmcoZXhlYykgKyBwMi0+dG9TdHJpbmcoZXhlYykpOwogICB9CiAK
ICAgYm9vbCBuMUtub3duVG9CZUludGVnZXI7Ci0gIGRvdWJsZSBuMSA9IHAxLnRvTnVtYmVyKGV4
ZWMsIG4xS25vd25Ub0JlSW50ZWdlcik7CisgIGRvdWJsZSBuMSA9IHAxLT50b051bWJlcihleGVj
LCBuMUtub3duVG9CZUludGVnZXIpOwogICBib29sIG4yS25vd25Ub0JlSW50ZWdlcjsKLSAgZG91
YmxlIG4yID0gcDIudG9OdW1iZXIoZXhlYywgbjJLbm93blRvQmVJbnRlZ2VyKTsKKyAgZG91Ymxl
IG4yID0gcDItPnRvTnVtYmVyKGV4ZWMsIG4yS25vd25Ub0JlSW50ZWdlcik7CiAKICAgYm9vbCBy
ZXN1bHRLbm93blRvQmVJbnRlZ2VyID0gbjFLbm93blRvQmVJbnRlZ2VyICYmIG4yS25vd25Ub0Jl
SW50ZWdlcjsKIAogICBpZiAob3BlciA9PSAnKycpCi0gICAgcmV0dXJuIFZhbHVlKG4xICsgbjIs
IHJlc3VsdEtub3duVG9CZUludGVnZXIpOworICAgIHJldHVybiBqc051bWJlcihuMSArIG4yLCBy
ZXN1bHRLbm93blRvQmVJbnRlZ2VyKTsKICAgZWxzZQotICAgIHJldHVybiBWYWx1ZShuMSAtIG4y
LCByZXN1bHRLbm93blRvQmVJbnRlZ2VyKTsKKyAgICByZXR1cm4ganNOdW1iZXIobjEgLSBuMiwg
cmVzdWx0S25vd25Ub0JlSW50ZWdlcik7CiB9CiAKIC8vIEVDTUEgMTEuNQotVmFsdWUgS0pTOjpt
dWx0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIsIGNo
YXIgb3BlcikKK1ZhbHVlSW1wICpLSlM6Om11bHQoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAq
djEsIFZhbHVlSW1wICp2MiwgY2hhciBvcGVyKQogewogICBib29sIG4xS25vd25Ub0JlSW50ZWdl
cjsKLSAgZG91YmxlIG4xID0gdjEudG9OdW1iZXIoZXhlYywgbjFLbm93blRvQmVJbnRlZ2VyKTsK
KyAgZG91YmxlIG4xID0gdjEtPnRvTnVtYmVyKGV4ZWMsIG4xS25vd25Ub0JlSW50ZWdlcik7CiAg
IGJvb2wgbjJLbm93blRvQmVJbnRlZ2VyOwotICBkb3VibGUgbjIgPSB2Mi50b051bWJlcihleGVj
LCBuMktub3duVG9CZUludGVnZXIpOworICBkb3VibGUgbjIgPSB2Mi0+dG9OdW1iZXIoZXhlYywg
bjJLbm93blRvQmVJbnRlZ2VyKTsKIAogICBkb3VibGUgcmVzdWx0OwogICBib29sIHJlc3VsdEtu
b3duVG9CZUludGVnZXI7CkBAIC0yNzEsNSArMjcxLDUgQEAgVmFsdWUgS0pTOjptdWx0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgVgogICAgIHJlc3VsdEtub3duVG9CZUludGVnZXIgPSBuMUtub3du
VG9CZUludGVnZXIgJiYgbjJLbm93blRvQmVJbnRlZ2VyICYmIG4yICE9IDA7CiAgIH0KIAotICBy
ZXR1cm4gVmFsdWUocmVzdWx0LCByZXN1bHRLbm93blRvQmVJbnRlZ2VyKTsKKyAgcmV0dXJuIGpz
TnVtYmVyKHJlc3VsdCwgcmVzdWx0S25vd25Ub0JlSW50ZWdlcik7CiB9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9K
YXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUK
ZGlmZiAtcCAtdSAtdSAtcCAtcjEuNSBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oCi0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oCTE0IEp1bCAyMDA1IDE4OjI3OjAzIC0w
MDAwCTEuNQorKysgSmF2YVNjcmlwdENvcmUva2pzL29wZXJhdGlvbnMuaAk3IEF1ZyAyMDA1IDA0
OjQ0OjA4IC0wMDAwCkBAIC00Nyw4ICs0Nyw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBib29sIGlz
TmVnSW5mKGRvdWJsZSBkKTsKICNlbmRpZgogCi0gIGJvb2wgZXF1YWwoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBWYWx1ZSYgdjEsIGNvbnN0IFZhbHVlJiB2Mik7Ci0gIGJvb2wgc3RyaWN0RXF1YWwo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdjEsIGNvbnN0IFZhbHVlICZ2Mik7CisgIGJv
b2wgZXF1YWwoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2Mik7Cisg
IGJvb2wgc3RyaWN0RXF1YWwoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1w
ICp2Mik7CiAgIC8qKgogICAgKiBUaGlzIG9wZXJhdG9yIHBlcmZvcm1zIGFuIGFic3RyYWN0IHJl
bGF0aW9uYWwgY29tcGFyaXNvbiBvZiB0aGUgdHdvCiAgICAqIGFyZ3VtZW50cyB0aGF0IGNhbiBi
ZSBvZiBhcmJpdHJhcnkgdHlwZS4gSWYgcG9zc2libGUsIGNvbnZlcnNpb25zIHRvIHRoZQpAQCAt
NTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICogQHJldHVybiAxIGlmIHYxIGlzICJs
ZXNzLXRoYW4iIHYyLCAwIGlmIHRoZSByZWxhdGlvbiBpcyAiZ3JlYXRlci10aGFuLW9yLQogICAg
KiBlcXVhbCIuIC0xIGlmIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgogICAgKi8KLSAgaW50IHJl
bGF0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUmIHYxLCBjb25zdCBWYWx1ZSYgdjIp
OworICBpbnQgcmVsYXRpb24oRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1w
ICp2Mik7CiAgIGludCBtYXhJbnQoaW50IGQxLCBpbnQgZDIpOwogICBpbnQgbWluSW50KGludCBk
MSwgaW50IGQyKTsKICAgLyoqCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
KiBAcGFyYW0gb3BlciAnKycgb3IgJy0nIGZvciBhbiBhZGRpdGlvbiBvciBzdWJzdHJhY3Rpb24s
IHJlc3BlY3RpdmVseS4KICAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24u
CiAgICAqLwotICBWYWx1ZSBhZGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdjEsIGNv
bnN0IFZhbHVlICZ2MiwgY2hhciBvcGVyKTsKKyAgVmFsdWVJbXAgKmFkZChFeGVjU3RhdGUgKmV4
ZWMsIFZhbHVlSW1wICp2MSwgVmFsdWVJbXAgKnYyLCBjaGFyIG9wZXIpOwogICAvKioKICAgICog
TXVsdGlwbGljYXRpdmUgb3BlcmF0b3IuIEVpdGhlciBtdWx0aXBsaWVzL2RpdmlkZXMgdjEgYW5k
IHYyIG9yCiAgICAqIGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmRlciBmcm9tIGFuIGRpdmlzaW9uLgpA
QCAtNzQsNyArNzQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICogbW9kdWxvIG9wZXJhdGlvbi4K
ICAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCiAgICAqLwotICBWYWx1
ZSBtdWx0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIs
IGNoYXIgb3Blcik7CisgIFZhbHVlSW1wICptdWx0KEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAg
KnYxLCBWYWx1ZUltcCAqdjIsIGNoYXIgb3Blcik7CiAKIH07CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9wcm9wZXJ0eV9tYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9K
YXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MwpkaWZmIC1wIC11IC11IC1wIC1yMS40MyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlf
bWFwLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAJMSBBdWcgMjAw
NSAwNTowMjoxMiAtMDAwMAkxLjQzCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFw
LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC01MDgsNyArNTA4LDcgQEAgdm9pZCBQ
cm9wZXJ0eU1hcDo6bWFyaygpIGNvbnN0CiAKICAgICBpbnQgc2l6ZSA9IF90YWJsZS0+c2l6ZTsK
ICAgICBFbnRyeSAqZW50cmllcyA9IF90YWJsZS0+ZW50cmllczsKLSAgICBmb3IgKGludCBpID0g
MDsgaSAhPSBzaXplOyArK2kpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewogICAgICAgICBWYWx1ZUltcCAqdiA9IGVudHJpZXNbaV0udmFsdWU7CiAgICAgICAgIGlmICh2
ICYmICF2LT5tYXJrZWQoKSkKICAgICAgICAgICAgIHYtPm1hcmsoKTsKQEAgLTUyNiw3ICs1MjYs
NyBAQCBzdGF0aWMgaW50IGNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgUHJvcGVydHlNYXA6OmFkZEVudW1lcmFibGVzVG9SZWZlcmVuY2VMaXN0
KFJlZmVyZW5jZUxpc3QgJmxpc3QsIGNvbnN0IE9iamVjdCAmYmFzZSkgY29uc3QKK3ZvaWQgUHJv
cGVydHlNYXA6OmFkZEVudW1lcmFibGVzVG9SZWZlcmVuY2VMaXN0KFJlZmVyZW5jZUxpc3QgJmxp
c3QsIE9iamVjdEltcCAqYmFzZSkgY29uc3QKIHsKICAgICBpZiAoIV90YWJsZSkgewogI2lmIFVT
RV9TSU5HTEVfRU5UUlkKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIFByb3BlcnR5TWFwOjphZGRF
bnVtZXJhYmxlc1RvUmVmZXJlCiAgICAgICAgIGRlbGV0ZSBbXSBzb3J0ZWRFbnVtZXJhYmxlczsK
IH0KIAotdm9pZCBQcm9wZXJ0eU1hcDo6YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVu
Y2VMaXN0KFJlZmVyZW5jZUxpc3QgJmxpc3QsIGNvbnN0IE9iamVjdCAmYmFzZSkgY29uc3QKK3Zv
aWQgUHJvcGVydHlNYXA6OmFkZFNwYXJzZUFycmF5UHJvcGVydGllc1RvUmVmZXJlbmNlTGlzdChS
ZWZlcmVuY2VMaXN0ICZsaXN0LCBPYmplY3RJbXAgKmJhc2UpIGNvbnN0CiB7CiAgICAgaWYgKCFf
dGFibGUpIHsKICNpZiBVU0VfU0lOR0xFX0VOVFJZCkBAIC01ODgsOCArNTg4LDcgQEAgdm9pZCBQ
cm9wZXJ0eU1hcDo6YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aQogICAgIEVudHJ5ICplbnRyaWVzID0g
X3RhYmxlLT5lbnRyaWVzOwogICAgIGZvciAoaW50IGkgPSAwOyBpICE9IHNpemU7ICsraSkgewog
ICAgICAgICBVU3RyaW5nOjpSZXAgKmtleSA9IGVudHJpZXNbaV0ua2V5OwotICAgICAgICBpZiAo
a2V5ICYmIGtleSAhPSAmVVN0cmluZzo6UmVwOjpudWxsKQotICAgICAgICB7CisgICAgICAgIGlm
IChrZXkgJiYga2V5ICE9ICZVU3RyaW5nOjpSZXA6Om51bGwpIHsKICAgICAgICAgICAgIFVTdHJp
bmcgayhrZXkpOwogICAgICAgICAgICAgYm9vbCBmaXRzSW5VSW50MzI7CiAgICAgICAgICAgICBr
LnRvVUludDMyKCZmaXRzSW5VSW50MzIpOwpAQCAtNjMzLDcgKzYzMiw3IEBAIHZvaWQgUHJvcGVy
dHlNYXA6OnNhdmUoU2F2ZWRQcm9wZXJ0aWVzICYKICNpZiBVU0VfU0lOR0xFX0VOVFJZCiAgICAg
ICAgIGlmIChfc2luZ2xlRW50cnkua2V5ICYmICEoX3NpbmdsZUVudHJ5LmF0dHJpYnV0ZXMgJiAo
UmVhZE9ubHkgfCBGdW5jdGlvbikpKSB7CiAgICAgICAgICAgICBwcm9wLT5rZXkgPSBJZGVudGlm
aWVyKF9zaW5nbGVFbnRyeS5rZXkpOwotICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBWYWx1ZShf
c2luZ2xlRW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBfc2luZ2xlRW50
cnkudmFsdWU7CiAgICAgICAgICAgICBwcm9wLT5hdHRyaWJ1dGVzID0gX3NpbmdsZUVudHJ5LmF0
dHJpYnV0ZXM7CiAgICAgICAgICAgICArK3Byb3A7CiAgICAgICAgIH0KQEAgLTY2OSw3ICs2Njgs
NyBAQCB2b2lkIFByb3BlcnR5TWFwOjpzYXZlKFNhdmVkUHJvcGVydGllcyAmCiAgICAgICAgIHdo
aWxlIChxICE9IHApIHsKICAgICAgICAgICAgIEVudHJ5ICplID0gKnErKzsKICAgICAgICAgICAg
IHByb3AtPmtleSA9IElkZW50aWZpZXIoZS0+a2V5KTsKLSAgICAgICAgICAgIHByb3AtPnZhbHVl
ID0gVmFsdWUoZS0+dmFsdWUpOworICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBlLT52YWx1ZTsK
ICAgICAgICAgICAgIHByb3AtPmF0dHJpYnV0ZXMgPSBlLT5hdHRyaWJ1dGVzOwogICAgICAgICAg
ICAgKytwcm9wOwogICAgICAgICB9CkBAIC02ODMsNyArNjgyLDcgQEAgdm9pZCBQcm9wZXJ0eU1h
cDo6c2F2ZShTYXZlZFByb3BlcnRpZXMgJgogdm9pZCBQcm9wZXJ0eU1hcDo6cmVzdG9yZShjb25z
dCBTYXZlZFByb3BlcnRpZXMgJnApCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gcC5fY291
bnQ7ICsraSkKLSAgICAgICAgcHV0KHAuX3Byb3BlcnRpZXNbaV0ua2V5LCBwLl9wcm9wZXJ0aWVz
W2ldLnZhbHVlLmltcCgpLCBwLl9wcm9wZXJ0aWVzW2ldLmF0dHJpYnV0ZXMpOworICAgICAgICBw
dXQocC5fcHJvcGVydGllc1tpXS5rZXksIHAuX3Byb3BlcnRpZXNbaV0udmFsdWUsIHAuX3Byb3Bl
cnRpZXNbaV0uYXR0cmlidXRlcyk7CiB9CiAKICNpZiBET19DT05TSVNURU5DWV9DSEVDSwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMjEgSmF2YVNjcmlwdENvcmUva2pz
L3Byb3BlcnR5X21hcC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJMTQg
SnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS4yMQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3Bl
cnR5X21hcC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDggLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAog
bmFtZXNwYWNlIEtKUyB7CiAKLSAgICBjbGFzcyBPYmplY3Q7CisgICAgY2xhc3MgT2JqZWN0SW1w
OwogICAgIGNsYXNzIFJlZmVyZW5jZUxpc3Q7CiAgICAgY2xhc3MgVmFsdWVJbXA7CiAgICAgCkBA
IC04MCw4ICs4MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBWYWx1ZUltcCAqZ2V0KGNv
bnN0IElkZW50aWZpZXIgJm5hbWUsIGludCAmYXR0cmlidXRlcykgY29uc3Q7CiAKICAgICAgICAg
dm9pZCBtYXJrKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgYWRkRW51bWVyYWJsZXNUb1JlZmVyZW5j
ZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBjb25zdCBPYmplY3QgJikgY29uc3Q7Ci0Jdm9pZCBhZGRT
cGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBjb25z
dCBPYmplY3QgJikgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkRW51bWVyYWJsZXNUb1JlZmVyZW5j
ZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBPYmplY3RJbXAgKikgY29uc3Q7CisJdm9pZCBhZGRTcGFy
c2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBPYmplY3RJ
bXAgKikgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzYXZlKFNhdmVkUHJvcGVydGllcyAmKSBjb25z
dDsKICAgICAgICAgdm9pZCByZXN0b3JlKGNvbnN0IFNhdmVkUHJvcGVydGllcyAmcCk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjUKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdC5oCi0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdC5oCTkgTWF5IDIwMDUgMjM6NTc6MzMgLTAwMDAJ
MS41CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdC5oCTcgQXVnIDIwMDUgMDQ6NDQ6MDgg
LTAwMDAKQEAgLTUxLDgwICs1MSw1NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIH0KIAogICAg
IAotICAgIGNsYXNzIFByb3RlY3RlZFZhbHVlIDogcHVibGljIFZhbHVlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICBQcm90ZWN0ZWRWYWx1ZSgpIDogVmFsdWUoKSB7fQotICAgICAgUHJvdGVjdGVkVmFs
dWUoY29uc3QgVmFsdWUmdikgIDogVmFsdWUodikgeyBnY1Byb3RlY3ROdWxsVG9sZXJhbnQodi5p
bXAoKSk7IH07Ci0gICAgICBQcm90ZWN0ZWRWYWx1ZShjb25zdCBQcm90ZWN0ZWRWYWx1ZSZ2KSAg
OiBWYWx1ZSh2KSB7IGdjUHJvdGVjdE51bGxUb2xlcmFudCh2LmltcCgpKTsgfTsKLSAgICAgIH5Q
cm90ZWN0ZWRWYWx1ZSgpIHsgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQoaW1wKCkpO30KLSAgICAg
IFByb3RlY3RlZFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgVmFsdWUgJnYpCi0JeyAKLQkgIFZhbHVl
SW1wICpvbGQgPSBpbXAoKTsKLQkgIFZhbHVlOjpvcGVyYXRvcj0odik7IAotCSAgZ2NQcm90ZWN0
TnVsbFRvbGVyYW50KHYuaW1wKCkpOwotCSAgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQob2xkKTsg
Ci0JICByZXR1cm4gKnRoaXM7Ci0JfQotICAgICAgUHJvdGVjdGVkVmFsdWUmIG9wZXJhdG9yPShj
b25zdCBQcm90ZWN0ZWRWYWx1ZSAmdikKLQl7IAotCSAgVmFsdWVJbXAgKm9sZCA9IGltcCgpOwot
CSAgVmFsdWU6Om9wZXJhdG9yPSh2KTsgCi0JICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQodi5pbXAo
KSk7Ci0JICBnY1VucHJvdGVjdE51bGxUb2xlcmFudChvbGQpOyAKLQkgIHJldHVybiAqdGhpczsK
LQl9Ci0gICAgcHJpdmF0ZToKLSAgICAgIGV4cGxpY2l0IFByb3RlY3RlZFZhbHVlKFZhbHVlSW1w
ICp2KTsKLSAgICB9OwotCi0KLSAgICBjbGFzcyBQcm90ZWN0ZWRPYmplY3QgOiBwdWJsaWMgT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICBQcm90ZWN0ZWRPYmplY3QoKSA6IE9iamVjdCgpIHt9
Ci0gICAgICBQcm90ZWN0ZWRPYmplY3QoY29uc3QgT2JqZWN0ICZvKSAgOiBPYmplY3QobykgeyBn
Y1Byb3RlY3ROdWxsVG9sZXJhbnQoby5pbXAoKSk7IH07Ci0gICAgICBQcm90ZWN0ZWRPYmplY3Qo
Y29uc3QgUHJvdGVjdGVkT2JqZWN0ICZvKSAgOiBPYmplY3QobykgeyBnY1Byb3RlY3ROdWxsVG9s
ZXJhbnQoby5pbXAoKSk7IH07Ci0gICAgICB+UHJvdGVjdGVkT2JqZWN0KCkgeyBnY1VucHJvdGVj
dE51bGxUb2xlcmFudChpbXAoKSk7fQotICAgICAgUHJvdGVjdGVkT2JqZWN0JiBvcGVyYXRvcj0o
Y29uc3QgT2JqZWN0ICZvKQotCXsgCi0JICBWYWx1ZUltcCAqb2xkID0gaW1wKCk7Ci0JICBPYmpl
Y3Q6Om9wZXJhdG9yPShvKTsgCi0JICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQoby5pbXAoKSk7Ci0J
ICBnY1VucHJvdGVjdE51bGxUb2xlcmFudChvbGQpOyAKLQkgIHJldHVybiAqdGhpczsKLQl9Ci0g
ICAgICBQcm90ZWN0ZWRPYmplY3QmIG9wZXJhdG9yPShjb25zdCBQcm90ZWN0ZWRPYmplY3QgJm8p
Ci0JeyAKLQkgIFZhbHVlSW1wICpvbGQgPSBpbXAoKTsKLQkgIE9iamVjdDo6b3BlcmF0b3I9KG8p
OyAKLQkgIGdjUHJvdGVjdE51bGxUb2xlcmFudChvLmltcCgpKTsKLQkgIGdjVW5wcm90ZWN0TnVs
bFRvbGVyYW50KG9sZCk7IAotCSAgcmV0dXJuICp0aGlzOwotCX0KLSAgICBwcml2YXRlOgotICAg
ICAgZXhwbGljaXQgUHJvdGVjdGVkT2JqZWN0KE9iamVjdEltcCAqbyk7Ci0gICAgfTsKLQorY2xh
c3MgUHJvdGVjdGVkVmFsdWUgeworcHVibGljOgorICAgIFByb3RlY3RlZFZhbHVlKCkgOiBtX3Zh
bHVlKDApIHsgfQorICAgIFByb3RlY3RlZFZhbHVlKFZhbHVlSW1wICp2KSA6IG1fdmFsdWUodikg
eyBnY1Byb3RlY3ROdWxsVG9sZXJhbnQodik7IH0KKyAgICBQcm90ZWN0ZWRWYWx1ZShjb25zdCBQ
cm90ZWN0ZWRWYWx1ZSYgdikgOiBtX3ZhbHVlKHYubV92YWx1ZSkgeyBnY1Byb3RlY3ROdWxsVG9s
ZXJhbnQobV92YWx1ZSk7IH0KKyAgICB+UHJvdGVjdGVkVmFsdWUoKSB7IGdjVW5wcm90ZWN0TnVs
bFRvbGVyYW50KG1fdmFsdWUpOyB9CisgICAgUHJvdGVjdGVkVmFsdWUmIG9wZXJhdG9yPShWYWx1
ZUltcCAqdikKKyAgICB7CisgICAgICAgIGdjUHJvdGVjdE51bGxUb2xlcmFudCh2KTsKKyAgICAg
ICAgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQobV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSB2
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFByb3RlY3RlZFZhbHVlJiBvcGVy
YXRvcj0oY29uc3QgUHJvdGVjdGVkVmFsdWUmIHYpIHsgcmV0dXJuICp0aGlzID0gdi5tX3ZhbHVl
OyB9CisgICAgb3BlcmF0b3IgVmFsdWVJbXAgKigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KyAgICBWYWx1ZUltcCAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KK3By
b3RlY3RlZDoKKyAgICBWYWx1ZUltcCAqbV92YWx1ZTsKK307CisKK2NsYXNzIFByb3RlY3RlZE9i
amVjdCA6IHByaXZhdGUgUHJvdGVjdGVkVmFsdWUgeworcHVibGljOgorICAgIFByb3RlY3RlZE9i
amVjdCgpIHsgfQorICAgIFByb3RlY3RlZE9iamVjdChPYmplY3RJbXAgKnYpIDogUHJvdGVjdGVk
VmFsdWUodikgeyB9CisgICAgUHJvdGVjdGVkT2JqZWN0KGNvbnN0IFByb3RlY3RlZE9iamVjdCYg
dikgOiBQcm90ZWN0ZWRWYWx1ZSh2KSB7IH0KKyAgICBQcm90ZWN0ZWRPYmplY3QmIG9wZXJhdG9y
PShPYmplY3RJbXAgKnYpIHsgUHJvdGVjdGVkVmFsdWU6Om9wZXJhdG9yPSh2KTsgcmV0dXJuICp0
aGlzOyB9CisgICAgUHJvdGVjdGVkT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkT2Jq
ZWN0JiB2KSB7IFByb3RlY3RlZFZhbHVlOjpvcGVyYXRvcj0odik7IHJldHVybiAqdGhpczsgfQor
ICAgIG9wZXJhdG9yIFZhbHVlSW1wICooKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAg
b3BlcmF0b3IgT2JqZWN0SW1wICooKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJ
bXAgKj4obV92YWx1ZSk7IH0KKyAgICBPYmplY3RJbXAgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4obV92YWx1ZSk7IH0KK307CiAKICAgICBjbGFz
cyBQcm90ZWN0ZWRSZWZlcmVuY2UgOiBwdWJsaWMgUmVmZXJlbmNlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgUmVmZXJlbmNlJnIpICA6IFJlZmVyZW5jZShy
KSB7IGdjUHJvdGVjdE51bGxUb2xlcmFudChyLmJhc2UuaW1wKCkpOyB9OwotICAgICAgflByb3Rl
Y3RlZFJlZmVyZW5jZSgpIHsgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQoYmFzZS5pbXAoKSk7fQor
ICAgICAgUHJvdGVjdGVkUmVmZXJlbmNlKGNvbnN0IFJlZmVyZW5jZSYgcikgOiBSZWZlcmVuY2Uo
cikgeyBnY1Byb3RlY3ROdWxsVG9sZXJhbnQoci5iYXNlKTsgfTsKKyAgICAgIH5Qcm90ZWN0ZWRS
ZWZlcmVuY2UoKSB7IGdjVW5wcm90ZWN0TnVsbFRvbGVyYW50KGJhc2UpO30KICAgICAgIFByb3Rl
Y3RlZFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IFJlZmVyZW5jZSAmcikKIAl7IAotCSAgVmFs
dWVJbXAgKm9sZCA9IGJhc2UuaW1wKCk7CisJICBWYWx1ZUltcCAqb2xkID0gYmFzZTsKIAkgIFJl
ZmVyZW5jZTo6b3BlcmF0b3I9KHIpOyAKLQkgIGdjUHJvdGVjdE51bGxUb2xlcmFudChyLmJhc2Uu
aW1wKCkpOworCSAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KHIuYmFzZSk7CiAJICBnY1VucHJvdGVj
dE51bGxUb2xlcmFudChvbGQpOyAKIAkgIHJldHVybiAqdGhpczsKIAl9CiAgICAgcHJpdmF0ZToK
ICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZSgpOwotICAgICAgUHJvdGVjdGVkUmVmZXJlbmNlKGNv
bnN0IE9iamVjdCYgYiwgY29uc3QgSWRlbnRpZmllciYgcCk7Ci0gICAgICBQcm90ZWN0ZWRSZWZl
cmVuY2UoY29uc3QgT2JqZWN0JiBiLCB1bnNpZ25lZCBwKTsKICAgICAgIFByb3RlY3RlZFJlZmVy
ZW5jZShPYmplY3RJbXAgKmIsIGNvbnN0IElkZW50aWZpZXImIHApOwogICAgICAgUHJvdGVjdGVk
UmVmZXJlbmNlKE9iamVjdEltcCAqYiwgdW5zaWduZWQgcCk7Ci0gICAgICBQcm90ZWN0ZWRSZWZl
cmVuY2UoY29uc3QgTnVsbCYgYiwgY29uc3QgSWRlbnRpZmllciYgcCk7Ci0gICAgICBQcm90ZWN0
ZWRSZWZlcmVuY2UoY29uc3QgTnVsbCYgYiwgdW5zaWduZWQgcCk7CisgICAgICBQcm90ZWN0ZWRS
ZWZlcmVuY2UoY29uc3QgSWRlbnRpZmllciYgcCk7CisgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2Uo
dW5zaWduZWQgcCk7CiAgICAgfTsKIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3Rl
Y3RlZF92YWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvcHJvdGVjdGVkX3ZhbHVlcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApk
aWZmIC1wIC11IC11IC1wIC1yMS40IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0ZWRfdmFsdWVz
LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3RlZF92YWx1ZXMuY3BwCTI4IEp1biAy
MDA1IDAwOjAyOjA4IC0wMDAwCTEuNAorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3RlZF92
YWx1ZXMuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MDggLTAwMDAKQEAgLTI1LDYgKzI1LDcgQEAKICNp
bmNsdWRlICJwb2ludGVyX2hhc2guaCIKICNpbmNsdWRlICJzaW1wbGVfbnVtYmVyLmgiCiAjaW5j
bHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAidmFsdWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7CiAK
QEAgLTQzLDE0ICs0NCwxNCBAQCBpbnQgUHJvdGVjdGVkVmFsdWVzOjpnZXRQcm90ZWN0Q291bnQo
VmFsCiAgICAgaWYgKFNpbXBsZU51bWJlcjo6aXMoaykpCiAgICAgICByZXR1cm4gMDsKIAotICAg
IHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlSGFzaChrKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gcG9p
bnRlckhhc2goayk7CiAgICAgCiAgICAgaW50IGkgPSBoYXNoICYgX3RhYmxlU2l6ZU1hc2s7CiAj
aWYgRFVNUF9TVEFUSVNUSUNTCiAgICAgKytudW1Qcm9iZXM7CiAgICAgbnVtQ29sbGlzaW9ucyAr
PSBfdGFibGVbaV0ua2V5ICYmIF90YWJsZVtpXS5rZXkgIT0gazsKICNlbmRpZgotICAgIHdoaWxl
IChWYWx1ZUltcCAqa2V5ID0gX3RhYmxlW2ldLmtleSkgeworICAgIHdoaWxlIChBbGxvY2F0ZWRW
YWx1ZUltcCAqa2V5ID0gX3RhYmxlW2ldLmtleSkgewogICAgICAgICBpZiAoa2V5ID09IGspIHsK
IAkgICAgcmV0dXJuIF90YWJsZVtpXS52YWx1ZTsKIAl9CkBAIC03MSwxNCArNzIsMTQgQEAgdm9p
ZCBQcm90ZWN0ZWRWYWx1ZXM6OmluY3JlYXNlUHJvdGVjdENvdQogICAgIGlmICghX3RhYmxlKQog
ICAgICAgICBleHBhbmQoKTsKICAgICAKLSAgICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUhhc2go
ayk7CisgICAgdW5zaWduZWQgaGFzaCA9IHBvaW50ZXJIYXNoKGspOwogICAgIAogICAgIGludCBp
ID0gaGFzaCAmIF90YWJsZVNpemVNYXNrOwogI2lmIERVTVBfU1RBVElTVElDUwogICAgICsrbnVt
UHJvYmVzOwogICAgIG51bUNvbGxpc2lvbnMgKz0gX3RhYmxlW2ldLmtleSAmJiBfdGFibGVbaV0u
a2V5ICE9IGs7CiAjZW5kaWYKLSAgICB3aGlsZSAoVmFsdWVJbXAgKmtleSA9IF90YWJsZVtpXS5r
ZXkpIHsKKyAgICB3aGlsZSAoQWxsb2NhdGVkVmFsdWVJbXAgKmtleSA9IF90YWJsZVtpXS5rZXkp
IHsKICAgICAgICAgaWYgKGtleSA9PSBrKSB7CiAJICAgIF90YWJsZVtpXS52YWx1ZSsrOwogCSAg
ICByZXR1cm47CkBAIC04Niw3ICs4Nyw3IEBAIHZvaWQgUHJvdGVjdGVkVmFsdWVzOjppbmNyZWFz
ZVByb3RlY3RDb3UKICAgICAgICAgaSA9IChpICsgMSkgJiBfdGFibGVTaXplTWFzazsKICAgICB9
CiAgICAgCi0gICAgX3RhYmxlW2ldLmtleSA9IGs7CisgICAgX3RhYmxlW2ldLmtleSA9IGstPmRv
d25jYXN0KCk7CiAgICAgX3RhYmxlW2ldLnZhbHVlID0gMTsKICAgICArK19rZXlDb3VudDsKICAg
ICAKQEAgLTk0LDkgKzk1LDkgQEAgdm9pZCBQcm90ZWN0ZWRWYWx1ZXM6OmluY3JlYXNlUHJvdGVj
dENvdQogICAgICAgICBleHBhbmQoKTsKIH0KIAotaW5saW5lIHZvaWQgUHJvdGVjdGVkVmFsdWVz
OjppbnNlcnQoVmFsdWVJbXAgKmssIGludCB2KQoraW5saW5lIHZvaWQgUHJvdGVjdGVkVmFsdWVz
OjppbnNlcnQoQWxsb2NhdGVkVmFsdWVJbXAgKmssIGludCB2KQogewotICAgIHVuc2lnbmVkIGhh
c2ggPSBjb21wdXRlSGFzaChrKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gcG9pbnRlckhhc2goayk7
CiAgICAgCiAgICAgaW50IGkgPSBoYXNoICYgX3RhYmxlU2l6ZU1hc2s7CiAjaWYgRFVNUF9TVEFU
SVNUSUNTCkBAIC0xMTcsOSArMTE4LDkgQEAgdm9pZCBQcm90ZWN0ZWRWYWx1ZXM6OmRlY3JlYXNl
UHJvdGVjdENvdQogICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKGspKQogICAgICAgcmV0dXJuOwog
Ci0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVIYXNoKGspOworICAgIHVuc2lnbmVkIGhhc2gg
PSBwb2ludGVySGFzaChrKTsKICAgICAKLSAgICBWYWx1ZUltcCAqa2V5OworICAgIEFsbG9jYXRl
ZFZhbHVlSW1wICprZXk7CiAgICAgCiAgICAgaW50IGkgPSBoYXNoICYgX3RhYmxlU2l6ZU1hc2s7
CiAjaWYgRFVNUF9TVEFUSVNUSUNTCkBAIC0xODYsOSArMTg3LDQgQEAgdm9pZCBQcm90ZWN0ZWRW
YWx1ZXM6OnJlaGFzaChpbnQgbmV3VGFibAogICAgIGZyZWUob2xkVGFibGUpOwogfQogCi11bnNp
Z25lZCBQcm90ZWN0ZWRWYWx1ZXM6OmNvbXB1dGVIYXNoKFZhbHVlSW1wICpwb2ludGVyKQotewot
ICByZXR1cm4gcG9pbnRlckhhc2gocG9pbnRlcik7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX3ZhbHVlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX3ZhbHVlcy5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMiBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvdGVjdGVkX3ZhbHVlcy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVk
X3ZhbHVlcy5oCTIwIEFwciAyMDA1IDEwOjE0OjM1IC0wMDAwCTEuMgorKysgSmF2YVNjcmlwdENv
cmUva2pzL3Byb3RlY3RlZF92YWx1ZXMuaAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC0y
MCwxOSArMjAsMTQgQEAKICAqCiAgKi8KIAotCi0jaWZuZGVmIF9LSlNfUFJPVEVDVEVEX1ZBTFVF
U19IXwotI2RlZmluZSBfS0pTX1BST1RFQ1RFRF9WQUxVRVNfSF8KKyNpZm5kZWYgS0pTX1BST1RF
Q1RFRF9WQUxVRVNfSAorI2RlZmluZSBLSlNfUFJPVEVDVEVEX1ZBTFVFU19ICiAKIG5hbWVzcGFj
ZSBLSlMgewogICAgIGNsYXNzIFZhbHVlSW1wOworICAgIGNsYXNzIEFsbG9jYXRlZFZhbHVlSW1w
OwogCiAgICAgY2xhc3MgUHJvdGVjdGVkVmFsdWVzIHsKLQlzdHJ1Y3QgS2V5VmFsdWUgewotCSAg
ICBWYWx1ZUltcCAqa2V5OwotCSAgICBpbnQgdmFsdWU7Ci0JfTsKLQogICAgIHB1YmxpYzoKIAlz
dGF0aWMgdm9pZCBpbmNyZWFzZVByb3RlY3RDb3VudChWYWx1ZUltcCAqa2V5KTsKIAlzdGF0aWMg
dm9pZCBkZWNyZWFzZVByb3RlY3RDb3VudChWYWx1ZUltcCAqa2V5KTsKQEAgLTQwLDE1ICszNSwx
OSBAQCBuYW1lc3BhY2UgS0pTIHsKIAlzdGF0aWMgaW50IGdldFByb3RlY3RDb3VudChWYWx1ZUlt
cCAqa2V5KTsKIAogICAgIHByaXZhdGU6Ci0Jc3RhdGljIHZvaWQgaW5zZXJ0KFZhbHVlSW1wICpr
ZXksIGludCB2YWx1ZSk7CisJc3RhdGljIHZvaWQgaW5zZXJ0KEFsbG9jYXRlZFZhbHVlSW1wICpr
ZXksIGludCB2YWx1ZSk7CiAJc3RhdGljIHZvaWQgZXhwYW5kKCk7CiAJc3RhdGljIHZvaWQgc2hy
aW5rKCk7CiAJc3RhdGljIHZvaWQgcmVoYXNoKGludCBuZXdUYWJsZVNpemUpOwotCXN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlSGFzaChWYWx1ZUltcCAqcG9pbnRlcik7CiAKIAkvLyBsZXQgdGhlIGNv
bGxlY3RvciBzY2FuIHRoZSB0YWJsZSBkaXJlY3RseSBmb3IgcHJvdGVjdGVkIHZhbHVlcwogCWZy
aWVuZCBjbGFzcyBDb2xsZWN0b3I7CiAKKwlzdHJ1Y3QgS2V5VmFsdWUgeworCSAgICBBbGxvY2F0
ZWRWYWx1ZUltcCAqa2V5OworCSAgICBpbnQgdmFsdWU7CisJfTsKKwogCXN0YXRpYyBLZXlWYWx1
ZSAqX3RhYmxlOwogCXN0YXRpYyBpbnQgX3RhYmxlU2l6ZTsKIAlzdGF0aWMgaW50IF90YWJsZVNp
emVNYXNrOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjEyIEphdmFTY3Jp
cHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNl
LmNwcAkxNCBKdWwgMjAwNSAxODoyNzowMyAtMDAwMAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvcmVmZXJlbmNlLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA4IC0wMDAwCkBAIC0yNywyMiArMjcs
NiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFJlZmVyZW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUmVmZXJl
bmNlOjpSZWZlcmVuY2UoY29uc3QgT2JqZWN0JiBiLCBjb25zdCBJZGVudGlmaWVyJiBwKQotICA6
IGJhc2UoYiksCi0gICAgYmFzZUlzVmFsdWUoZmFsc2UpLAotICAgIHByb3BlcnR5TmFtZUlzTnVt
YmVyKGZhbHNlKSwKLSAgICBwcm9wKHApCi17Ci19Ci0KLVJlZmVyZW5jZTo6UmVmZXJlbmNlKGNv
bnN0IE9iamVjdCYgYiwgdW5zaWduZWQgcCkKLSAgOiBiYXNlKGIpLAotICAgIHByb3BlcnR5TmFt
ZUFzTnVtYmVyKHApLAotICAgIGJhc2VJc1ZhbHVlKGZhbHNlKSwKLSAgICBwcm9wZXJ0eU5hbWVJ
c051bWJlcih0cnVlKQotewotfQotCiBSZWZlcmVuY2U6OlJlZmVyZW5jZShPYmplY3RJbXAgKmIs
IGNvbnN0IElkZW50aWZpZXImIHApCiAgIDogYmFzZShiKSwKICAgICBiYXNlSXNWYWx1ZShmYWxz
ZSksCkBAIC01OSwyMyArNDMsMjMgQEAgUmVmZXJlbmNlOjpSZWZlcmVuY2UoT2JqZWN0SW1wICpi
LCB1bnNpZwogewogfQogCi1SZWZlcmVuY2U6OlJlZmVyZW5jZShjb25zdCBOdWxsJiBiLCBjb25z
dCBJZGVudGlmaWVyJiBwKQotICA6IGJhc2UoYiksCitSZWZlcmVuY2U6OlJlZmVyZW5jZShjb25z
dCBJZGVudGlmaWVyJiBwKQorICA6IGJhc2UoanNOdWxsKCkpLAogICAgIGJhc2VJc1ZhbHVlKGZh
bHNlKSwKICAgICBwcm9wZXJ0eU5hbWVJc051bWJlcihmYWxzZSksCiAgICAgcHJvcChwKQogewog
fQogCi1SZWZlcmVuY2U6OlJlZmVyZW5jZShjb25zdCBOdWxsJiBiLCB1bnNpZ25lZCBwKQotICA6
IGJhc2UoYiksCitSZWZlcmVuY2U6OlJlZmVyZW5jZSh1bnNpZ25lZCBwKQorICA6IGJhc2UoanNO
dWxsKCkpLAogICAgIHByb3BlcnR5TmFtZUFzTnVtYmVyKHApLAogICAgIGJhc2VJc1ZhbHVlKGZh
bHNlKSwKICAgICBwcm9wZXJ0eU5hbWVJc051bWJlcih0cnVlKQogewogfQogCi1SZWZlcmVuY2Ug
UmVmZXJlbmNlOjptYWtlVmFsdWVSZWZlcmVuY2UoY29uc3QgVmFsdWUmIHYpCitSZWZlcmVuY2Ug
UmVmZXJlbmNlOjptYWtlVmFsdWVSZWZlcmVuY2UoVmFsdWVJbXAgKnYpCiB7CiAgIFJlZmVyZW5j
ZSB2YWx1ZVJlZjsKICAgdmFsdWVSZWYuYmFzZSA9IHY7CkBAIC04MywxMCArNjcsMTAgQEAgUmVm
ZXJlbmNlIFJlZmVyZW5jZTo6bWFrZVZhbHVlUmVmZXJlbmNlKAogICByZXR1cm4gdmFsdWVSZWY7
CiB9CiAKLVZhbHVlIFJlZmVyZW5jZTo6Z2V0QmFzZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitW
YWx1ZUltcCAqUmVmZXJlbmNlOjpnZXRCYXNlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKICAg
aWYgKGJhc2VJc1ZhbHVlKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywg
UmVmZXJlbmNlRXJyb3IsIEkxOE5fTk9PUCgiSW52YWxpZCByZWZlcmVuY2UgYmFzZSIpKTsKKyAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmVmZXJlbmNlRXJyb3IsIEkx
OE5fTk9PUCgiSW52YWxpZCByZWZlcmVuY2UgYmFzZSIpKTsKICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9CkBAIC0xMDgsMjUgKzkyLDI1IEBAIElkZW50
aWZpZXIgUmVmZXJlbmNlOjpnZXRQcm9wZXJ0eU5hbWUoRXgKICAgcmV0dXJuIHByb3A7CiB9CiAK
LVZhbHVlIFJlZmVyZW5jZTo6Z2V0VmFsdWUoRXhlY1N0YXRlICpleGVjKSBjb25zdCAKK1ZhbHVl
SW1wICpSZWZlcmVuY2U6OmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgCiB7CiAgIGlm
IChiYXNlSXNWYWx1ZSkgewogICAgIHJldHVybiBiYXNlOwogICB9CiAKLSAgVmFsdWVJbXAgKm8g
PSBiYXNlLmltcCgpOwotICBUeXBlIHQgPSBvID8gby0+ZGlzcGF0Y2hUeXBlKCkgOiBOdWxsVHlw
ZTsKKyAgVmFsdWVJbXAgKm8gPSBiYXNlOworICBUeXBlIHQgPSBvID8gby0+dHlwZSgpIDogTnVs
bFR5cGU7CiAKICAgaWYgKHQgPT0gTnVsbFR5cGUpIHsKICAgICBVU3RyaW5nIG0gPSBJMThOX05P
T1AoIkNhbid0IGZpbmQgdmFyaWFibGU6ICIpICsgZ2V0UHJvcGVydHlOYW1lKGV4ZWMpLnVzdHJp
bmcoKTsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJv
ciwgbS5hc2NpaSgpKTsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywg
UmVmZXJlbmNlRXJyb3IsIG0uYXNjaWkoKSk7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
CiAgICAgcmV0dXJuIGVycjsKICAgfQogCiAgIGlmICh0ICE9IE9iamVjdFR5cGUpIHsKICAgICBV
U3RyaW5nIG0gPSBJMThOX05PT1AoIkJhc2UgaXMgbm90IGFuIG9iamVjdCIpOwotICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBtLmFzY2lpKCkpOwor
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvciwg
bS5hc2NpaSgpKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJy
OwogICB9CkBAIC0xMzYsMTAgKzEyMCwxMCBAQCBWYWx1ZSBSZWZlcmVuY2U6OmdldFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlCiAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihvKS0+Z2V0KGV4
ZWMsIHByb3ApOwogfQogCi12b2lkIFJlZmVyZW5jZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBWYWx1ZSAmdykKK3ZvaWQgUmVmZXJlbmNlOjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4
ZWMsIFZhbHVlSW1wICp3KQogewogICBpZiAoYmFzZUlzVmFsdWUpIHsKLSAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VFcnJvcik7CisgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yKTsKICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKICAgICByZXR1cm47CiAgIH0KQEAgLTE0OCwxMSArMTMyLDExIEBAIHZv
aWQgUmVmZXJlbmNlOjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMKICAgcHJpbnRJbmZvKGV4ZWMs
KFVTdHJpbmcoInNldHRpbmcgcHJvcGVydHkgIikrZ2V0UHJvcGVydHlOYW1lKGV4ZWMpLnVzdHJp
bmcoKSkuY3N0cmluZygpLmNfc3RyKCksdyk7CiAjZW5kaWYKIAotICBWYWx1ZUltcCAqbyA9IGJh
c2UuaW1wKCk7Ci0gIFR5cGUgdCA9IG8gPyBvLT5kaXNwYXRjaFR5cGUoKSA6IE51bGxUeXBlOwor
ICBWYWx1ZUltcCAqbyA9IGJhc2U7CisgIFR5cGUgdCA9IG8gPyBvLT50eXBlKCkgOiBOdWxsVHlw
ZTsKIAogICBpZiAodCA9PSBOdWxsVHlwZSkKLSAgICBvID0gZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmdsb2JhbE9iamVjdCgpLmltcCgpOworICAgIG8gPSBleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgaWYgKHByb3BlcnR5TmFtZUlzTnVtYmVyKQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihvKS0+cHV0KGV4ZWMsIHByb3BlcnR5
TmFtZUFzTnVtYmVyLCB3KTsKQEAgLTE2MiwxMyArMTQ2LDEzIEBAIHZvaWQgUmVmZXJlbmNlOjpw
dXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMKIGJvb2wgUmVmZXJlbmNlOjpkZWxldGVWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMpCiB7CiAgIGlmIChiYXNlSXNWYWx1ZSkgewotICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsUmVmZXJlbmNlRXJyb3IpOworICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFJlZmVyZW5jZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICBWYWx1ZUltcCAqbyA9IGJhc2Uu
aW1wKCk7Ci0gIFR5cGUgdCA9IG8gPyBvLT5kaXNwYXRjaFR5cGUoKSA6IE51bGxUeXBlOworICBW
YWx1ZUltcCAqbyA9IGJhc2U7CisgIFR5cGUgdCA9IG8gPyBvLT50eXBlKCkgOiBOdWxsVHlwZTsK
IAogICAvLyBUaGUgc3BlYyBkb2Vzbid0IG1lbnRpb24gd2hhdCB0byBkbyBpZiB0aGUgYmFzZSBp
cyBudWxsLi4uIGp1c3QgcmV0dXJuIHRydWUKICAgaWYgKHQgIT0gT2JqZWN0VHlwZSkgewpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTAKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMTAgSmF2YVNjcmlwdENvcmUva2pzL3JlZmVy
ZW5jZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmgJMTQgSnVsIDIwMDUgMTg6
Mjc6MDMgLTAwMDAJMS4xMAorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5oCTcgQXVn
IDIwMDUgMDQ6NDQ6MDggLTAwMDAKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgX0tKU19SRUZF
UkVOQ0VfSF8KIAogI2luY2x1ZGUgImlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJ2YWx1ZS5oIgor
I2luY2x1ZGUgIm9iamVjdC5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtMzMsMTMgKzMzLDEx
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGZyaWVuZCBjbGFzcyBSZWZlcmVuY2VMaXN0SXRlcmF0
b3I7CiAgICAgZnJpZW5kIGNsYXNzIFByb3RlY3RlZFJlZmVyZW5jZTsKICAgcHVibGljOgotICAg
IFJlZmVyZW5jZShjb25zdCBPYmplY3QmIGIsIGNvbnN0IElkZW50aWZpZXImIHApOwotICAgIFJl
ZmVyZW5jZShjb25zdCBPYmplY3QmIGIsIHVuc2lnbmVkIHApOwogICAgIFJlZmVyZW5jZShPYmpl
Y3RJbXAgKmIsIGNvbnN0IElkZW50aWZpZXImIHApOwogICAgIFJlZmVyZW5jZShPYmplY3RJbXAg
KmIsIHVuc2lnbmVkIHApOwotICAgIFJlZmVyZW5jZShjb25zdCBOdWxsJiBiLCBjb25zdCBJZGVu
dGlmaWVyJiBwKTsKLSAgICBSZWZlcmVuY2UoY29uc3QgTnVsbCYgYiwgdW5zaWduZWQgcCk7Ci0g
ICAgc3RhdGljIFJlZmVyZW5jZSBtYWtlVmFsdWVSZWZlcmVuY2UoY29uc3QgVmFsdWUmIHYpOwor
ICAgIFJlZmVyZW5jZShjb25zdCBJZGVudGlmaWVyJiBwKTsKKyAgICBSZWZlcmVuY2UodW5zaWdu
ZWQgcCk7CisgICAgc3RhdGljIFJlZmVyZW5jZSBtYWtlVmFsdWVSZWZlcmVuY2UoVmFsdWVJbXAg
Kik7CiAgICAgCiAgICAgLyoqCiAgICAgICogUGVyZm9ybXMgdGhlIEdldEJhc2UgdHlwZSBjb252
ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlzIHZhbHVlIChFQ01BIDguNykKQEAgLTQ3LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogU2luY2UgcmVmZXJlbmNlcyBhcmUgc3VwcG9zZWQg
dG8gaGF2ZSBhbiBPYmplY3Qgb3IgbnVsbCBhcyB0aGVpciBiYXNlLAogICAgICAqIHRoaXMgbWV0
aG9kIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGVpdGhlciBOdWxsKCkgb3IgYW4gT2JqZWN0IHZh
bHVlLgogICAgICAqLwotICAgIFZhbHVlIGdldEJhc2UoRXhlY1N0YXRlICpleGVjKSBjb25zdDsK
KyAgICBWYWx1ZUltcCAqZ2V0QmFzZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogUGVyZm9ybXMgdGhlIEdldFByb3BlcnR5TmFtZSB0eXBlIGNvbnZlcnNpb24gb3Bl
cmF0aW9uIG9uIHRoaXMgdmFsdWUKQEAgLTU5LDI2ICs1NywyNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgKiBQZXJmb3JtcyB0aGUgR2V0VmFsdWUgdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBv
biB0aGlzIHZhbHVlCiAgICAgICogKEVDTUEgOC43LjEpCiAgICAgICovCi0gICAgVmFsdWUgZ2V0
VmFsdWUoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWUoRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFBlcmZvcm1zIHRoZSBQdXRW
YWx1ZSB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUKICAgICAgKiAoRUNN
QSA4LjcuMSkKICAgICAgKi8KLSAgICB2b2lkIHB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgVmFsdWUgJncpOworICAgIHZvaWQgcHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUlt
cCAqKTsKICAgICBib29sIGRlbGV0ZVZhbHVlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKLSAgICBWYWx1
ZUltcCAqYmFzZUlmTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGJhc2VJc1ZhbHVlID8gMCA6IGJh
c2UuaW1wKCk7IH0KKyAgICBWYWx1ZUltcCAqYmFzZUlmTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IGJhc2VJc1ZhbHVlID8gMCA6IGJhc2U7IH0KIAogICBwcml2YXRlOgogICAgIFJlZmVyZW5jZSgp
IHsgfQogCi0gICAgVmFsdWUgYmFzZTsKKyAgICBWYWx1ZUltcCAqYmFzZTsKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWVBc051bWJlcjsKICAgICBib29sIGJhc2VJc1ZhbHVlOwogICAgIGJvb2wg
cHJvcGVydHlOYW1lSXNOdW1iZXI7CiAgICAgbXV0YWJsZSBJZGVudGlmaWVyIHByb3A7CiAgIH07
CisKIH0KIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9yZWdl
eHBfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1wIC11IC11IC1w
IC1yMS4xOSBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAKLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNwcAkyNSBKdWwgMjAwNSAyMjoxNzoxMiAtMDAwMAkx
LjE5CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAJNyBBdWcgMjAwNSAw
NDo0NDowOSAtMDAwMApAQCAtNDUsNyArNDUsNiBAQCBSZWdFeHBQcm90b3R5cGVJbXA6OlJlZ0V4
cFByb3RvdHlwZUltcChFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
dW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKQogICA6IE9iamVjdEltcChvYmpQcm90bykK
IHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgc2V0SW50ZXJuYWxWYWx1ZShTdHJpbmcoIiIp
KTsKIAogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciBpbiBSZWdFeHBP
YmplY3QncyBjb25zdHJ1Y3RvciAoPykKQEAgLTYzLDcgKzYyLDYgQEAgUmVnRXhwUHJvdG9GdW5j
SW1wOjpSZWdFeHBQcm90b0Z1bmNJbXAoRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4p
CiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBw
cm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnRE
ZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC03Miw0NSArNzAsNDUgQEAgYm9vbCBS
ZWdFeHBQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKAogICByZXR1cm4gdHJ1ZTsKIH0KIAot
VmFsdWUgUmVnRXhwUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlJlZ0V4cFByb3RvRnVuY0ltcDo6
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZv
KSkgewotICAgIGlmICh0aGlzT2JqLmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGVJbXA6OmluZm8p
KSB7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpIHsKKyAgICBp
ZiAodGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cFByb3RvdHlwZUltcDo6aW5mbykpIHsKICAgICAg
IHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBUb1N0cmluZzogcmV0dXJuIFN0cmluZygiLy8i
KTsKICAgICAgIH0KICAgICB9Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxU
eXBlRXJyb3IpOworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAg
fQogCi0gIFJlZ0V4cEltcCAqcmVpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2Jq
LmltcCgpKTsKKyAgUmVnRXhwSW1wICpyZWltcCA9IHN0YXRpY19jYXN0PFJlZ0V4cEltcCo+KHRo
aXNPYmopOwogICBSZWdFeHAgKnJlID0gcmVpbXAtPnJlZ0V4cCgpOwotICBTdHJpbmcgczsKKyAg
VVN0cmluZyBzOwogICBVU3RyaW5nIHN0cjsKICAgc3dpdGNoIChpZCkgewogICBjYXNlIEV4ZWM6
ICAgICAgLy8gMTUuMTAuNi4yCiAgIGNhc2UgVGVzdDoKICAgewotICAgIHMgPSBhcmdzWzBdLnRv
U3RyaW5nKGV4ZWMpOwotICAgIGludCBsZW5ndGggPSBzLnZhbHVlKCkuc2l6ZSgpOwotICAgIFZh
bHVlIGxhc3RJbmRleCA9IHRoaXNPYmouZ2V0KGV4ZWMsImxhc3RJbmRleCIpOwotICAgIGludCBp
ID0gbGFzdEluZGV4LmlzTnVsbCgpID8gMCA6IGxhc3RJbmRleC50b0ludDMyKGV4ZWMpOwotICAg
IGJvb2wgZ2xvYmFsRmxhZyA9IHRoaXNPYmouZ2V0KGV4ZWMsImdsb2JhbCIpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICBzID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CisgICAgaW50IGxlbmd0aCA9
IHMuc2l6ZSgpOworICAgIFZhbHVlSW1wICpsYXN0SW5kZXggPSB0aGlzT2JqLT5nZXQoZXhlYywi
bGFzdEluZGV4Iik7CisgICAgaW50IGkgPSBsYXN0SW5kZXgtPnRvSW50MzIoZXhlYyk7CisgICAg
Ym9vbCBnbG9iYWxGbGFnID0gdGhpc09iai0+Z2V0KGV4ZWMsImdsb2JhbCIpLT50b0Jvb2xlYW4o
ZXhlYyk7CiAgICAgaWYgKCFnbG9iYWxGbGFnKQogICAgICAgaSA9IDA7CiAgICAgaWYgKGkgPCAw
IHx8IGkgPiBsZW5ndGgpIHsKLSAgICAgIHRoaXNPYmoucHV0KGV4ZWMsImxhc3RJbmRleCIsIE51
bWJlcigwKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVj
LCJsYXN0SW5kZXgiLCBOdW1iZXIoMCksIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICBp
ZiAoaWQgPT0gVGVzdCkKICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZmFsc2UpOwogICAgICAgZWxz
ZQogICAgICAgICByZXR1cm4gTnVsbCgpOwogICAgIH0KLSAgICBSZWdFeHBPYmplY3RJbXAqIHJl
Z0V4cE9iaiA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdEltcCo+KGV4ZWMtPmxleGljYWxJbnRl
cnByZXRlcigpLT5idWlsdGluUmVnRXhwKCkuaW1wKCkpOwotICAgIGludCAqKm92ZWN0b3IgPSBy
ZWdFeHBPYmotPnJlZ2lzdGVyUmVnZXhwKCByZSwgcy52YWx1ZSgpICk7CisgICAgUmVnRXhwT2Jq
ZWN0SW1wKiByZWdFeHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAqPihleGVjLT5s
ZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblJlZ0V4cCgpKTsKKyAgICBpbnQgKipvdmVjdG9y
ID0gcmVnRXhwT2JqLT5yZWdpc3RlclJlZ2V4cCggcmUsIHMgKTsKIAotICAgIHN0ciA9IHJlLT5t
YXRjaChzLnZhbHVlKCksIGksIDBMLCBvdmVjdG9yKTsKKyAgICBzdHIgPSByZS0+bWF0Y2gocywg
aSwgMEwsIG92ZWN0b3IpOwogICAgIHJlZ0V4cE9iai0+c2V0U3ViUGF0dGVybnMocmUtPnN1YlBh
dHRlcm5zKCkpOwogCiAgICAgaWYgKGlkID09IFRlc3QpCkBAIC0xMTksMjkgKzExNywyOSBAQCBW
YWx1ZSBSZWdFeHBQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgaWYgKHN0ci5pc051
bGwoKSkgLy8gbm8gbWF0Y2gKICAgICB7CiAgICAgICBpZiAoZ2xvYmFsRmxhZykKLSAgICAgICAg
dGhpc09iai5wdXQoZXhlYywibGFzdEluZGV4IixOdW1iZXIoMCksIERvbnREZWxldGUgfCBEb250
RW51bSk7CisgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCJsYXN0SW5kZXgiLE51bWJlcigwKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAgIHJldHVybiBOdWxsKCk7CiAgICAgfQogICAg
IGVsc2UgLy8gc3VjY2VzcwogICAgIHsKICAgICAgIGlmIChnbG9iYWxGbGFnKQotICAgICAgICB0
aGlzT2JqLnB1dChleGVjLCJsYXN0SW5kZXgiLE51bWJlciggKCpvdmVjdG9yKVsxXSApLCBEb250
RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywibGFzdEluZGV4
IixOdW1iZXIoICgqb3ZlY3RvcilbMV0gKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKICAgICAg
IHJldHVybiByZWdFeHBPYmotPmFycmF5T2ZNYXRjaGVzKGV4ZWMsc3RyKTsKICAgICB9CiAgIH0K
ICAgYnJlYWs7CiAgIGNhc2UgVG9TdHJpbmc6Ci0gICAgcyA9IHRoaXNPYmouZ2V0KGV4ZWMsInNv
dXJjZSIpLnRvU3RyaW5nKGV4ZWMpOworICAgIHMgPSB0aGlzT2JqLT5nZXQoZXhlYywic291cmNl
IiktPnRvU3RyaW5nKGV4ZWMpOwogICAgIHN0ciA9ICIvIjsKLSAgICBzdHIgKz0gcy52YWx1ZSgp
OworICAgIHN0ciArPSBzOwogICAgIHN0ciArPSAiLyI7Ci0gICAgaWYgKHRoaXNPYmouZ2V0KGV4
ZWMsImdsb2JhbCIpLnRvQm9vbGVhbihleGVjKSkgeworICAgIGlmICh0aGlzT2JqLT5nZXQoZXhl
YywiZ2xvYmFsIiktPnRvQm9vbGVhbihleGVjKSkgewogICAgICAgc3RyICs9ICJnIjsKICAgICB9
Ci0gICAgaWYgKHRoaXNPYmouZ2V0KGV4ZWMsImlnbm9yZUNhc2UiKS50b0Jvb2xlYW4oZXhlYykp
IHsKKyAgICBpZiAodGhpc09iai0+Z2V0KGV4ZWMsImlnbm9yZUNhc2UiKS0+dG9Cb29sZWFuKGV4
ZWMpKSB7CiAgICAgICBzdHIgKz0gImkiOwogICAgIH0KLSAgICBpZiAodGhpc09iai5nZXQoZXhl
YywibXVsdGlsaW5lIikudG9Cb29sZWFuKGV4ZWMpKSB7CisgICAgaWYgKHRoaXNPYmotPmdldChl
eGVjLCJtdWx0aWxpbmUiKS0+dG9Cb29sZWFuKGV4ZWMpKSB7CiAgICAgICBzdHIgKz0gIm0iOwog
ICAgIH0KICAgICByZXR1cm4gU3RyaW5nKHN0cik7CkBAIC0xNzIsMTIgKzE3MCwxMSBAQCBSZWdF
eHBPYmplY3RJbXA6OlJlZ0V4cE9iamVjdEltcChFeGVjU3RhCiAKICAgOiBJbnRlcm5hbEZ1bmN0
aW9uSW1wKGZ1bmNQcm90byksIGxhc3RPdmVjdG9yKDBMKSwgbGFzdE5yU3ViUGF0dGVybnMoMCkK
IHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgLy8gRUNNQSAxNS4xMC41LjEgUmVnRXhwLnBy
b3RvdHlwZQogICBwdXREaXJlY3QocHJvdG90eXBlUHJvcGVydHlOYW1lLCByZWdQcm90bywgRG9u
dEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3Ig
Y29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVySW1wOjp0
d28oKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERpcmVjdChsZW5ndGhQ
cm9wZXJ0eU5hbWUsIGpzVHdvKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQog
CiBSZWdFeHBPYmplY3RJbXA6On5SZWdFeHBPYmplY3RJbXAoKQpAQCAtMTk0LDcgKzE5MSw3IEBA
IGludCAqKlJlZ0V4cE9iamVjdEltcDo6cmVnaXN0ZXJSZWdleHAoIGMKICAgcmV0dXJuICZsYXN0
T3ZlY3RvcjsKIH0KIAotT2JqZWN0IFJlZ0V4cE9iamVjdEltcDo6YXJyYXlPZk1hdGNoZXMoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBVU3RyaW5nICZyZXN1bHQpIGNvbnN0CitPYmplY3RJbXAgKlJl
Z0V4cE9iamVjdEltcDo6YXJyYXlPZk1hdGNoZXMoRXhlY1N0YXRlICpleGVjLCBjb25zdCBVU3Ry
aW5nICZyZXN1bHQpIGNvbnN0CiB7CiAgIExpc3QgbGlzdDsKICAgLy8gVGhlIHJldHVybmVkIGFy
cmF5IGNvbnRhaW5zICdyZXN1bHQnIGFzIGZpcnN0IGl0ZW0sIGZvbGxvd2VkIGJ5IHRoZSBsaXN0
IG9mIG1hdGNoZXMKQEAgLTIwNCwxOSArMjAxLDE5IEBAIE9iamVjdCBSZWdFeHBPYmplY3RJbXA6
OmFycmF5T2ZNYXRjaGVzKEUKICAgICB7CiAgICAgICBpbnQgc3RhcnQgPSBsYXN0T3ZlY3Rvclsy
KmldOwogICAgICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICBsaXN0LmFwcGVuZChVbmRlZmlu
ZWRJbXA6OnN0YXRpY1VuZGVmaW5lZCk7CisgICAgICAgIGxpc3QuYXBwZW5kKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgZWxzZSB7CiAgICAgICAgIFVTdHJpbmcgc3Vic3RyaW5nID0gbGFzdFN0cmlu
Zy5zdWJzdHIoIHN0YXJ0LCBsYXN0T3ZlY3RvclsyKmkrMV0gLSBzdGFydCApOwogICAgICAgICBs
aXN0LmFwcGVuZChTdHJpbmcoc3Vic3RyaW5nKSk7CiAgICAgICB9CiAgICAgfQotICBPYmplY3Qg
YXJyID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVj
dChleGVjLCBsaXN0KTsKLSAgYXJyLnB1dChleGVjLCAiaW5kZXgiLCBOdW1iZXIobGFzdE92ZWN0
b3JbMF0pKTsKLSAgYXJyLnB1dChleGVjLCAiaW5wdXQiLCBTdHJpbmcobGFzdFN0cmluZykpOwor
ICBPYmplY3RJbXAgKmFyciA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJy
YXkoKS0+Y29uc3RydWN0KGV4ZWMsIGxpc3QpOworICBhcnItPnB1dChleGVjLCAiaW5kZXgiLCBO
dW1iZXIobGFzdE92ZWN0b3JbMF0pKTsKKyAgYXJyLT5wdXQoZXhlYywgImlucHV0IiwgU3RyaW5n
KGxhc3RTdHJpbmcpKTsKICAgcmV0dXJuIGFycjsKIH0KIAotYm9vbCBSZWdFeHBPYmplY3RJbXA6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgUmVnRXhwT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComIHJlc3VsdCkg
Y29uc3QKIHsKICAgVVN0cmluZyBzID0gcC51c3RyaW5nKCk7CiAgIGlmIChzWzBdID09ICckJyAm
JiBsYXN0T3ZlY3RvcikKQEAgLTI0NSwzNiArMjQyLDM1IEBAIGJvb2wgUmVnRXhwT2JqZWN0SW1w
OjppbXBsZW1lbnRzQ29uc3RydWMKIH0KIAogLy8gRUNNQSAxNS4xMC40Ci1PYmplY3QgUmVnRXhw
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQor
T2JqZWN0SW1wICpSZWdFeHBPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0gIE9iamVjdCBvID0gT2JqZWN0OjpkeW5hbWljQ2FzdChhcmdz
WzBdKTsKLSAgaWYgKCFvLmlzTnVsbCgpICYmIG8uaW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykp
IHsKLSAgICBpZiAoYXJnc1sxXS50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSkgewotICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBPYmplY3RJbXAgKm8g
PSBhcmdzWzBdLT5nZXRPYmplY3QoKTsKKyAgaWYgKG8gJiYgby0+aW5oZXJpdHMoJlJlZ0V4cElt
cDo6aW5mbykpIHsKKyAgICBpZiAoIWFyZ3NbMV0tPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIHJldHVy
biBvOwogICB9CiAgIAotICBVU3RyaW5nIHAgPSBhcmdzWzBdLnR5cGUoKSA9PSBVbmRlZmluZWRU
eXBlID8gVVN0cmluZygiIikgOiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOwotICBVU3RyaW5nIGZs
YWdzID0gYXJnc1sxXS50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSA/IFVTdHJpbmcoIiIpIDogYXJn
c1sxXS50b1N0cmluZyhleGVjKTsKKyAgVVN0cmluZyBwID0gYXJnc1swXS0+aXNVbmRlZmluZWQo
KSA/IFVTdHJpbmcoIiIpIDogYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CisgIFVTdHJpbmcgZmxh
Z3MgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmdzWzFdLT50b1N0
cmluZyhleGVjKTsKIAotICBSZWdFeHBQcm90b3R5cGVJbXAgKnByb3RvID0gc3RhdGljX2Nhc3Q8
UmVnRXhwUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5S
ZWdFeHBQcm90b3R5cGUoKS5pbXAoKSk7CisgIFJlZ0V4cFByb3RvdHlwZUltcCAqcHJvdG8gPSBz
dGF0aWNfY2FzdDxSZWdFeHBQcm90b3R5cGVJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIo
KS0+YnVpbHRpblJlZ0V4cFByb3RvdHlwZSgpKTsKICAgUmVnRXhwSW1wICpkYXQgPSBuZXcgUmVn
RXhwSW1wKHByb3RvKTsKLSAgT2JqZWN0IG9iaihkYXQpOyAvLyBwcm90ZWN0IGZyb20gR0MKIAog
ICBib29sIGdsb2JhbCA9IChmbGFncy5maW5kKCJnIikgPj0gMCk7CiAgIGJvb2wgaWdub3JlQ2Fz
ZSA9IChmbGFncy5maW5kKCJpIikgPj0gMCk7CiAgIGJvb2wgbXVsdGlsaW5lID0gKGZsYWdzLmZp
bmQoIm0iKSA+PSAwKTsKICAgLy8gVE9ETzogdGhyb3cgYSBzeW50YXggZXJyb3Igb24gaW52YWxp
ZCBmbGFncwogCi0gIGRhdC0+cHV0RGlyZWN0KCJnbG9iYWwiLCBnbG9iYWwgPyBCb29sZWFuSW1w
OjpzdGF0aWNUcnVlIDogQm9vbGVhbkltcDo6c3RhdGljRmFsc2UsIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKLSAgZGF0LT5wdXREaXJlY3QoImlnbm9yZUNhc2UiLCBpZ25vcmVD
YXNlID8gQm9vbGVhbkltcDo6c3RhdGljVHJ1ZSA6IEJvb2xlYW5JbXA6OnN0YXRpY0ZhbHNlLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gIGRhdC0+cHV0RGlyZWN0KCJtdWx0
aWxpbmUiLCBtdWx0aWxpbmUgPyBCb29sZWFuSW1wOjpzdGF0aWNUcnVlIDogQm9vbGVhbkltcDo6
c3RhdGljRmFsc2UsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgZGF0LT5w
dXREaXJlY3QoImdsb2JhbCIsIGpzQm9vbGVhbihnbG9iYWwpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkgfCBEb250RW51bSk7CisgIGRhdC0+cHV0RGlyZWN0KCJpZ25vcmVDYXNlIiwganNCb29sZWFu
KGlnbm9yZUNhc2UpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgIGRhdC0+
cHV0RGlyZWN0KCJtdWx0aWxpbmUiLCBqc0Jvb2xlYW4obXVsdGlsaW5lKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOwogCi0gIGRhdC0+cHV0RGlyZWN0KCJzb3VyY2UiLCBuZXcg
U3RyaW5nSW1wKHApLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gIGRhdC0+
cHV0RGlyZWN0KCJsYXN0SW5kZXgiLCBOdW1iZXJJbXA6Onplcm8oKSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKKyAgZGF0LT5wdXREaXJlY3QoInNvdXJjZSIsIGpzU3RyaW5nKHApLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgIGRhdC0+cHV0RGlyZWN0KCJsYXN0SW5kZXgi
LCBqc1plcm8oKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIAogICBpbnQgcmVmbGFncyA9IFJl
Z0V4cDo6Tm9uZTsKICAgaWYgKGdsb2JhbCkKQEAgLTI4NSw3ICsyODEsNyBAQCBPYmplY3QgUmVn
RXhwT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0CiAgICAgICByZWZsYWdzIHw9IFJlZ0V4cDo6
TXVsdGlsaW5lOwogICBkYXQtPnNldFJlZ0V4cChuZXcgUmVnRXhwKHAsIHJlZmxhZ3MpKTsKIAot
ICByZXR1cm4gb2JqOworICByZXR1cm4gZGF0OwogfQogCiBib29sIFJlZ0V4cE9iamVjdEltcDo6
aW1wbGVtZW50c0NhbGwoKSBjb25zdApAQCAtMjk0LDcgKzI5MCw3IEBAIGJvb2wgUmVnRXhwT2Jq
ZWN0SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGMKIH0KIAogLy8gRUNNQSAxNS4xMC4zCi1WYWx1ZSBS
ZWdFeHBPYmplY3RJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiov
LAorVmFsdWVJbXAgKlJlZ0V4cE9iamVjdEltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLAogCQkJICAgIGNvbnN0IExpc3QgJmFyZ3MpCiB7
CiAgIC8vIFRPRE86IGhhbmRsZSBSZWdFeHAgYXJndW1lbnQgY2FzZSAoMTUuMTAuMy4xKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjkgSmF2YVNjcmlwdENvcmUva2pz
L3JlZ2V4cF9vYmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuaAky
NSBKdWwgMjAwNSAyMjoxNzoxMiAtMDAwMAkxLjkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdl
eHBfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNDo0NDowOSAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJ
bXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncyk7CiAKICAgICBlbnVtIHsgRXhlYywgVGVzdCwgVG9TdHJpbmcgfTsK
ICAgcHJpdmF0ZToKQEAgLTcwLDE0ICs3MCwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
ICAgICAgICAgICAgUmVnRXhwUHJvdG90eXBlSW1wICpyZWdQcm90byk7CiAgICAgdmlydHVhbCB+
UmVnRXhwT2JqZWN0SW1wKCk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3Qo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1w
ICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBjb25z
dDsKICAgICBpbnQgKiogcmVnaXN0ZXJSZWdleHAoIGNvbnN0IFJlZ0V4cCogcmUsIGNvbnN0IFVT
dHJpbmcmIHMgKTsKICAgICB2b2lkIHNldFN1YlBhdHRlcm5zKGludCBudW0pIHsgbGFzdE5yU3Vi
UGF0dGVybnMgPSBudW07IH0KLSAgICBPYmplY3QgYXJyYXlPZk1hdGNoZXMoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBVU3RyaW5nICZyZXN1bHQpIGNvbnN0OworICAgIE9iamVjdEltcCAqYXJyYXlP
Zk1hdGNoZXMoRXhlY1N0YXRlICpleGVjLCBjb25zdCBVU3RyaW5nICZyZXN1bHQpIGNvbnN0Owog
ICBwcml2YXRlOgogICAgIFVTdHJpbmcgbGFzdFN0cmluZzsKICAgICBpbnQgKmxhc3RPdmVjdG9y
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNDAgSmF2YVNj
cmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3Ry
aW5nX29iamVjdC5jcHAJMjUgSnVsIDIwMDUgMjI6MTc6MTIgLTAwMDAJMS40MAorKysgSmF2YVNj
cmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MDkgLTAwMDAK
QEAgLTUwLDI5ICs1MCwyOSBAQCBTdHJpbmdJbnN0YW5jZUltcDo6U3RyaW5nSW5zdGFuY2VJbXAo
T2JqCiAgIHNldEludGVybmFsVmFsdWUoU3RyaW5nKHN0cmluZykpOwogfQogCi1ib29sIFN0cmlu
Z0luc3RhbmNlSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgU3RyaW5nSW5z
dGFuY2VJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0CiB7CiAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7Ci0gICAgcmVzdWx0ID0gVmFsdWUoaW50
ZXJuYWxWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLnNpemUoKSk7CisgICAgcmVzdWx0ID0gTnVtYmVy
KGludGVybmFsVmFsdWUoKS0+dG9TdHJpbmcoZXhlYykuc2l6ZSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKICAgfQogCiAgIGJvb2wgb2s7CiAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLnRvQXJyYXlJbmRleCgmb2spOwogICBpZiAob2spIHsKLSAgICBjb25zdCBVU3RyaW5nIHMg
PSBpbnRlcm5hbFZhbHVlKCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyBzID0g
aW50ZXJuYWxWYWx1ZSgpLT50b1N0cmluZyhleGVjKTsKICAgICBjb25zdCB1bnNpZ25lZCBsZW5n
dGggPSBzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKQogICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogICAgIGNvbnN0IFVDaGFyIGMgPSBzW2luZGV4XTsKLSAgICByZXN1bHQgPSBW
YWx1ZShVU3RyaW5nKCZjLCAxKSk7CisgICAgcmVzdWx0ID0ganNTdHJpbmcoVVN0cmluZygmYywg
MSkpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgcmV0dXJuIE9iamVjdEltcDo6Z2V0T3du
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOwogfQogCi12b2lkIFN0cmluZ0lu
c3RhbmNlSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2b2lkIFN0cmluZ0luc3RhbmNl
SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVu
Z3RoUHJvcGVydHlOYW1lKQogICAgIHJldHVybjsKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBTdHJp
bmdJbnN0YW5jZUltcDo6aGFzT3duUHJvcGVydHkoRQogICBib29sIG9rOwogICBjb25zdCB1bnNp
Z25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKICAgaWYgKG9rKSB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gaW50ZXJuYWxWYWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpLnNpemUoKTsKKyAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBpbnRlcm5hbFZhbHVlKCkt
PnRvU3RyaW5nKGV4ZWMpLnNpemUoKTsKICAgICBpZiAoaW5kZXggPCBsZW5ndGgpCiAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgfQpAQCAtMTQ4LDEzICsxNDgsMTEgQEAgU3RyaW5nUHJvdG90eXBlSW1w
OjpTdHJpbmdQcm90b3R5cGVJbXAoRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvdG90eXBlSW1wICpvYmpQcm90bykKICAgOiBTdHJpbmdJbnN0YW5jZUlt
cChvYmpQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgLy8gVGhlIGNvbnN0cnVj
dG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIFN0cmluZ09iamVjdEltcCBoYXMgYmVlbiBi
dWlsdAotICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXJJbXA6Onplcm8oKSwg
RG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7Ci0KKyAgcHV0RGlyZWN0KGxlbmd0aFByb3Bl
cnR5TmFtZSwganNaZXJvKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCi1i
b29sIFN0cmluZ1Byb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29s
IFN0cmluZ1Byb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComIHJlc3VsdCkgY29uc3QKIHsK
ICAgcmV0dXJuIGxvb2t1cEdldE93bkZ1bmN0aW9uPFN0cmluZ1Byb3RvRnVuY0ltcCwgU3RyaW5n
SW5zdGFuY2VJbXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJnN0cmluZ1RhYmxlLCB0aGlzLCByZXN1
bHQpOwogfQpAQCAtMTYzLDEwICsxNjEsOSBAQCBib29sIFN0cmluZ1Byb3RvdHlwZUltcDo6Z2V0
T3duUHJvcGVydHkoCiAKIFN0cmluZ1Byb3RvRnVuY0ltcDo6U3RyaW5nUHJvdG9GdW5jSW1wKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IGksIGludCBsZW4pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcCgK
LSAgICBzdGF0aWNfY2FzdDxGdW5jdGlvblByb3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRl
cnByZXRlcigpLT5idWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKS5pbXAoKSkKKyAgICBzdGF0aWNf
Y2FzdDxGdW5jdGlvblByb3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5i
dWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKSkKICAgICApLCBpZChpKQogewotICBWYWx1ZSBwcm90
ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxl
dGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC0xNzcsOCArMTc0LDggQEAgYm9vbCBTdHJp
bmdQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKAogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVn
RXhwSXNHbG9iYWwoUmVnRXhwSW1wICpyZWdFeHAsIEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgICBW
YWx1ZSBnbG9iYWxQcm9wZXJ0eSA9IHJlZ0V4cC0+Z2V0KGV4ZWMsImdsb2JhbCIpOwotICAgIHJl
dHVybiBnbG9iYWxQcm9wZXJ0eS50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSAmJiBnbG9iYWxQcm9w
ZXJ0eS50b0Jvb2xlYW4oZXhlYyk7CisgICAgVmFsdWVJbXAgKmdsb2JhbFByb3BlcnR5ID0gcmVn
RXhwLT5nZXQoZXhlYywiZ2xvYmFsIik7CisgICAgcmV0dXJuICFnbG9iYWxQcm9wZXJ0eS0+aXNV
bmRlZmluZWQoKSAmJiBnbG9iYWxQcm9wZXJ0eS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgZXhwYW5kU291cmNlUmFuZ2VzKFVTdHJpbmc6OlJhbmdlICogJiBhcnJh
eSwgaW50JiBjb3VudCwgaW50JiBjYXBhY2l0eSkKQEAgLTI2NSwyMiArMjYyLDIyIEBAIHN0YXRp
YyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmUKICAgcmV0dXJuIHN1YnN0aXR1dGVk
UmVwbGFjZW1lbnQ7CiB9CiAKLXN0YXRpYyBWYWx1ZSByZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgVVN0cmluZyAmc291cmNlLCBjb25zdCBWYWx1ZSAmcGF0dGVybiwgY29uc3QgVmFsdWUg
JnJlcGxhY2VtZW50KQorc3RhdGljIFZhbHVlSW1wICpyZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgVVN0cmluZyAmc291cmNlLCBWYWx1ZUltcCAqcGF0dGVybiwgVmFsdWVJbXAgKnJlcGxh
Y2VtZW50KQogewogICBPYmplY3RJbXAgKnJlcGxhY2VtZW50RnVuY3Rpb24gPSAwOwogICBVU3Ry
aW5nIHJlcGxhY2VtZW50U3RyaW5nOwogCi0gIGlmIChyZXBsYWNlbWVudC50eXBlKCkgPT0gT2Jq
ZWN0VHlwZSAmJiByZXBsYWNlbWVudC50b09iamVjdChleGVjKS5pbXBsZW1lbnRzQ2FsbCgpKQot
ICAgIHJlcGxhY2VtZW50RnVuY3Rpb24gPSByZXBsYWNlbWVudC50b09iamVjdChleGVjKS5pbXAo
KTsKKyAgaWYgKHJlcGxhY2VtZW50LT5pc09iamVjdCgpICYmIHJlcGxhY2VtZW50LT50b09iamVj
dChleGVjKS0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICByZXBsYWNlbWVudEZ1bmN0aW9uID0gcmVw
bGFjZW1lbnQtPnRvT2JqZWN0KGV4ZWMpOwogICBlbHNlCi0gICAgcmVwbGFjZW1lbnRTdHJpbmcg
PSByZXBsYWNlbWVudC50b1N0cmluZyhleGVjKTsKKyAgICByZXBsYWNlbWVudFN0cmluZyA9IHJl
cGxhY2VtZW50LT50b1N0cmluZyhleGVjKTsKIAotICBpZiAocGF0dGVybi50eXBlKCkgPT0gT2Jq
ZWN0VHlwZSAmJiBwYXR0ZXJuLnRvT2JqZWN0KGV4ZWMpLmluaGVyaXRzKCZSZWdFeHBJbXA6Omlu
Zm8pKSB7Ci0gICAgUmVnRXhwSW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIHBh
dHRlcm4udG9PYmplY3QoZXhlYykuaW1wKCkgKTsKKyAgaWYgKHBhdHRlcm4tPmlzT2JqZWN0KCkg
JiYgcGF0dGVybi0+dG9PYmplY3QoZXhlYyktPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7
CisgICAgUmVnRXhwSW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIHBhdHRlcm4t
PnRvT2JqZWN0KGV4ZWMpICk7CiAgICAgUmVnRXhwICpyZWcgPSBpbXAtPnJlZ0V4cCgpOwogICAg
IGJvb2wgZ2xvYmFsID0gcmVnRXhwSXNHbG9iYWwoaW1wLCBleGVjKTsKIAotICAgIFJlZ0V4cE9i
amVjdEltcCogcmVnRXhwT2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0SW1wKj4oZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5SZWdFeHAoKS5pbXAoKSk7CisgICAgUmVnRXhw
T2JqZWN0SW1wKiByZWdFeHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAqPihleGVj
LT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblJlZ0V4cCgpKTsKIAogICAgIGludCBtYXRj
aEluZGV4ID0gMDsKICAgICBpbnQgbGFzdEluZGV4ID0gMDsKQEAgLTMwOCwyMCArMzA1LDIwIEBA
IHN0YXRpYyBWYWx1ZSByZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywgY28KICAgICAgICAgICBpbnQg
Y29tcGxldGVNYXRjaFN0YXJ0ID0gKCpvdmVjdG9yKVswXTsKICAgICAgICAgICBMaXN0IGFyZ3M7
CiAKLSAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1ZShtYXRjaFN0cmluZykpOworICAgICAgICAg
IGFyZ3MuYXBwZW5kKGpzU3RyaW5nKG1hdGNoU3RyaW5nKSk7CiAgICAgICAgICAgCiAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZy0+c3ViUGF0dGVybnMoKTsgaSsrKSB7CiAg
ICAgICAgICAgICAgIGludCBtYXRjaFN0YXJ0ID0gKCpvdmVjdG9yKVsoaSArIDEpICogMl07CiAg
ICAgICAgICAgICAgIGludCBtYXRjaExlbiA9ICgqb3ZlY3RvcilbKGkgKyAxKSAqIDIgKyAxXSAt
IG1hdGNoU3RhcnQ7CiAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICBhcmdzLmFwcGVuZChW
YWx1ZShzb3VyY2Uuc3Vic3RyKG1hdGNoU3RhcnQsIG1hdGNoTGVuKSkpOworICAgICAgICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2Uuc3Vic3RyKG1hdGNoU3RhcnQsIG1hdGNoTGVu
KSkpOwogICAgICAgICAgIH0KICAgICAgICAgICAKLSAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1
ZShjb21wbGV0ZU1hdGNoU3RhcnQpKTsKLSAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1ZShzb3Vy
Y2UpKTsKKyAgICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQp
KTsKKyAgICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2UpKTsKIAogICAgICAgICAg
IHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZW1lbnRGdW5jdGlvbi0+Y2FsbChleGVjLCBleGVj
LT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJncyktPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgfQogICAgICAgCiAgICAgICBVU3Ry
aW5nIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVw
bGFjZW1lbnRTdHJpbmcsIHNvdXJjZSwgb3ZlY3RvciwgcmVnKTsKQEAgLTM1MCw3ICszNDcsNyBA
QCBzdGF0aWMgVmFsdWUgcmVwbGFjZShFeGVjU3RhdGUgKmV4ZWMsIGNvCiAgIH0KICAgCiAgIC8v
IEZpcnN0IGFyZyBpcyBhIHN0cmluZwotICBVU3RyaW5nIHBhdHRlcm5TdHJpbmcgPSBwYXR0ZXJu
LnRvU3RyaW5nKGV4ZWMpOworICBVU3RyaW5nIHBhdHRlcm5TdHJpbmcgPSBwYXR0ZXJuLT50b1N0
cmluZyhleGVjKTsKICAgaW50IG1hdGNoUG9zID0gc291cmNlLmZpbmQocGF0dGVyblN0cmluZyk7
CiAgIGludCBtYXRjaExlbiA9IHBhdHRlcm5TdHJpbmcuc2l6ZSgpOwogICAvLyBEbyB0aGUgcmVw
bGFjZW1lbnQKQEAgLTM2MCwzMSArMzU3LDMxIEBAIHN0YXRpYyBWYWx1ZSByZXBsYWNlKEV4ZWNT
dGF0ZSAqZXhlYywgY28KICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24pIHsKICAgICAgIExpc3Qg
YXJnczsKICAgICAgIAotICAgICAgYXJncy5hcHBlbmQoVmFsdWUoc291cmNlLnN1YnN0cihtYXRj
aFBvcywgbWF0Y2hMZW4pKSk7Ci0gICAgICBhcmdzLmFwcGVuZChWYWx1ZShtYXRjaFBvcykpOwot
ICAgICAgYXJncy5hcHBlbmQoVmFsdWUoc291cmNlKSk7CisgICAgICBhcmdzLmFwcGVuZChqc1N0
cmluZyhzb3VyY2Uuc3Vic3RyKG1hdGNoUG9zLCBtYXRjaExlbikpKTsKKyAgICAgIGFyZ3MuYXBw
ZW5kKGpzTnVtYmVyKG1hdGNoUG9zKSk7CisgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3Vy
Y2UpKTsKICAgICAgIAogICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudEZ1bmN0
aW9uLT5jYWxsKGV4ZWMsIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3Qo
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJncykudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncyktPnRvU3RyaW5nKGV4ZWMpOwogICB9CiAKICAgcmV0dXJu
IFN0cmluZyhzb3VyY2Uuc3Vic3RyKDAsIG1hdGNoUG9zKSArIHJlcGxhY2VtZW50U3RyaW5nICsg
c291cmNlLnN1YnN0cihtYXRjaFBvcyArIG1hdGNoTGVuKSk7CiB9CiAKIC8vIEVDTUEgMTUuNS40
LjIgLSAxNS41LjQuMjAKLVZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHJp
bmdQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBWYWx1ZSByZXN1bHQ7CisgIFZhbHVl
SW1wICpyZXN1bHQgPSBOVUxMOwogCiAgIC8vIHRvU3RyaW5nIGFuZCB2YWx1ZU9mIGFyZSBubyBn
ZW5lcmljIGZ1bmN0aW9uLgogICBpZiAoaWQgPT0gVG9TdHJpbmcgfHwgaWQgPT0gVmFsdWVPZikg
ewotICAgIGlmICh0aGlzT2JqLmlzTnVsbCgpIHx8ICF0aGlzT2JqLmluaGVyaXRzKCZTdHJpbmdJ
bnN0YW5jZUltcDo6aW5mbykpIHsKLSAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKKyAgICBpZiAoIXRoaXNPYmogfHwgIXRoaXNPYmotPmluaGVyaXRzKCZT
dHJpbmdJbnN0YW5jZUltcDo6aW5mbykpIHsKKyAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyh0aGlzT2JqLmlu
dGVybmFsVmFsdWUoKS50b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIFN0cmluZyh0aGlzT2Jq
LT5pbnRlcm5hbFZhbHVlKCktPnRvU3RyaW5nKGV4ZWMpKTsKICAgfQogCiAgIFVTdHJpbmcgdSwg
dTIsIHUzOwpAQCAtMzkyLDExICszODksMTEgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpj
YWxsKEV4ZWNTdGF0ZQogICBkb3VibGUgZHBvczsKICAgZG91YmxlIGQgPSAwLjA7CiAKLSAgVVN0
cmluZyBzID0gdGhpc09iai50b1N0cmluZyhleGVjKTsKKyAgVVN0cmluZyBzID0gdGhpc09iai0+
dG9TdHJpbmcoZXhlYyk7CiAKICAgaW50IGxlbiA9IHMuc2l6ZSgpOwotICBWYWx1ZSBhMCA9IGFy
Z3NbMF07Ci0gIFZhbHVlIGExID0gYXJnc1sxXTsKKyAgVmFsdWVJbXAgKmEwID0gYXJnc1swXTsK
KyAgVmFsdWVJbXAgKmExID0gYXJnc1sxXTsKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgVG9T
dHJpbmc6CkBAIC00MDYsNyArNDAzLDcgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxs
KEV4ZWNTdGF0ZQogICBjYXNlIENoYXJBdDoKICAgICAvLyBPdGhlciBicm93c2VycyB0cmVhdCBh
biBvbWl0dGVkIHBhcmFtZXRlciBhcyAwIHJhdGhlciB0aGFuIE5hTi4KICAgICAvLyBUaGF0IGRv
ZXNuJ3QgbWF0Y2ggdGhlIEVDTUEgc3RhbmRhcmQsIGJ1dCBpcyBuZWVkZWQgZm9yIHNpdGUgY29t
cGF0aWJpbGl0eS4KLSAgICBkcG9zID0gYTAuaXNBKFVuZGVmaW5lZFR5cGUpID8gMCA6IGEwLnRv
SW50ZWdlcihleGVjKTsKKyAgICBkcG9zID0gYTAtPmlzVW5kZWZpbmVkKCkgPyAwIDogYTAtPnRv
SW50ZWdlcihleGVjKTsKICAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCBsZW4pIC8vIGZhbHNl
IGZvciBOYU4KICAgICAgIHUgPSBzLnN1YnN0cihzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpLCAxKTsK
ICAgICBlbHNlCkBAIC00MTYsMjYgKzQxMywyNiBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6
OmNhbGwoRXhlY1N0YXRlCiAgIGNhc2UgQ2hhckNvZGVBdDoKICAgICAvLyBPdGhlciBicm93c2Vy
cyB0cmVhdCBhbiBvbWl0dGVkIHBhcmFtZXRlciBhcyAwIHJhdGhlciB0aGFuIE5hTi4KICAgICAv
LyBUaGF0IGRvZXNuJ3QgbWF0Y2ggdGhlIEVDTUEgc3RhbmRhcmQsIGJ1dCBpcyBuZWVkZWQgZm9y
IHNpdGUgY29tcGF0aWJpbGl0eS4KLSAgICBkcG9zID0gYTAuaXNBKFVuZGVmaW5lZFR5cGUpID8g
MCA6IGEwLnRvSW50ZWdlcihleGVjKTsKKyAgICBkcG9zID0gYTAtPmlzVW5kZWZpbmVkKCkgPyAw
IDogYTAtPnRvSW50ZWdlcihleGVjKTsKICAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCBsZW4p
IC8vIGZhbHNlIGZvciBOYU4KICAgICAgIHJlc3VsdCA9IE51bWJlcihzW3N0YXRpY19jYXN0PGlu
dD4oZHBvcyldLnVuaWNvZGUoKSk7CiAgICAgZWxzZQotICAgICAgcmVzdWx0ID0gTnVtYmVyKE5h
Tik7CisgICAgICByZXN1bHQgPSBqc05hTigpOwogICAgIGJyZWFrOwogICBjYXNlIENvbmNhdDog
ewogICAgIExpc3RJdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsKICAgICBmb3IgKCA7IGl0ICE9
IGFyZ3MuZW5kKCkgOyArK2l0KSB7Ci0gICAgICAgIHMgKz0gaXQtPmRpc3BhdGNoVG9TdHJpbmco
ZXhlYyk7CisgICAgICAgIHMgKz0gaXQtPnRvU3RyaW5nKGV4ZWMpOwogICAgIH0KICAgICByZXN1
bHQgPSBTdHJpbmcocyk7CiAgICAgYnJlYWs7CiAgIH0KICAgY2FzZSBJbmRleE9mOgotICAgIHUy
ID0gYTAudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGExLnR5cGUoKSA9PSBVbmRlZmluZWRUeXBl
KQorICAgIHUyID0gYTAtPnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChhMS0+aXNVbmRlZmluZWQo
KSkKICAgICAgIGRwb3MgPSAwOwogICAgIGVsc2UgewotICAgICAgZHBvcyA9IGExLnRvSW50ZWdl
cihleGVjKTsKKyAgICAgIGRwb3MgPSBhMS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgICAgaWYgKGRw
b3MgPj0gMCkgeyAvLyBmYWxzZSBmb3IgTmFOCiAgICAgICAgIGlmIChkcG9zID4gbGVuKQogICAg
ICAgICAgIGRwb3MgPSBsZW47CkBAIC00NDUsMTIgKzQ0MiwxMiBAQCBWYWx1ZSBTdHJpbmdQcm90
b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgcmVzdWx0ID0gTnVtYmVyKHMuZmluZCh1Miwg
c3RhdGljX2Nhc3Q8aW50PihkcG9zKSkpOwogICAgIGJyZWFrOwogICBjYXNlIExhc3RJbmRleE9m
OgotICAgIHUyID0gYTAudG9TdHJpbmcoZXhlYyk7Ci0gICAgZCA9IGExLnRvTnVtYmVyKGV4ZWMp
OwotICAgIGlmIChhMS50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSB8fCBLSlM6OmlzTmFOKGQpKQor
ICAgIHUyID0gYTAtPnRvU3RyaW5nKGV4ZWMpOworICAgIGQgPSBhMS0+dG9OdW1iZXIoZXhlYyk7
CisgICAgaWYgKGExLT5pc1VuZGVmaW5lZCgpIHx8IEtKUzo6aXNOYU4oZCkpCiAgICAgICBkcG9z
ID0gbGVuOwogICAgIGVsc2UgewotICAgICAgZHBvcyA9IGExLnRvSW50ZWdlcihleGVjKTsKKyAg
ICAgIGRwb3MgPSBhMS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgICAgaWYgKGRwb3MgPj0gMCkgeyAv
LyBmYWxzZSBmb3IgTmFOCiAgICAgICAgIGlmIChkcG9zID4gbGVuKQogICAgICAgICAgIGRwb3Mg
PSBsZW47CkBAIC00NjQsOSArNDYxLDkgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxs
KEV4ZWNTdGF0ZQogICAgIHUgPSBzOwogICAgIFJlZ0V4cCAqcmVnLCAqdG1wUmVnID0gMDsKICAg
ICBSZWdFeHBJbXAgKmltcCA9IDA7Ci0gICAgaWYgKGEwLmlzQShPYmplY3RUeXBlKSAmJiBhMC50
b09iamVjdChleGVjKS5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkKKyAgICBpZiAoYTAtPmlz
T2JqZWN0KCkgJiYgYTAtPmdldE9iamVjdCgpLT5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkK
ICAgICB7Ci0gICAgICBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIGEwLnRvT2JqZWN0
KGV4ZWMpLmltcCgpICk7CisgICAgICBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oYTAp
OwogICAgICAgcmVnID0gaW1wLT5yZWdFeHAoKTsKICAgICB9CiAgICAgZWxzZQpAQCAtNDc1LDkg
KzQ3Miw5IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAg
ICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkg
aXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9m
IHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAqLwotICAgICAgcmVn
ID0gdG1wUmVnID0gbmV3IFJlZ0V4cChhMC50b1N0cmluZyhleGVjKSwgUmVnRXhwOjpOb25lKTsK
KyAgICAgIHJlZyA9IHRtcFJlZyA9IG5ldyBSZWdFeHAoYTAtPnRvU3RyaW5nKGV4ZWMpLCBSZWdF
eHA6Ok5vbmUpOwogICAgIH0KLSAgICBSZWdFeHBPYmplY3RJbXAqIHJlZ0V4cE9iaiA9IHN0YXRp
Y19jYXN0PFJlZ0V4cE9iamVjdEltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluUmVnRXhwKCkuaW1wKCkpOworICAgIFJlZ0V4cE9iamVjdEltcCogcmVnRXhwT2JqID0gc3Rh
dGljX2Nhc3Q8UmVnRXhwT2JqZWN0SW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5SZWdFeHAoKSk7CiAgICAgaW50ICoqb3ZlY3RvciA9IHJlZ0V4cE9iai0+cmVnaXN0ZXJS
ZWdleHAocmVnLCB1KTsKICAgICBVU3RyaW5nIG1zdHIgPSByZWctPm1hdGNoKHUsIC0xLCAmcG9z
LCBvdmVjdG9yKTsKICAgICBpZiAoaWQgPT0gU2VhcmNoKSB7CkBAIC00OTgsNyArNDk1LDcgQEAg
VmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogCWludCBsYXN0SW5kZXgg
PSAwOwogCXdoaWxlIChwb3MgPj0gMCkgewogICAgICAgICAgIGlmIChtc3RyLmlzTnVsbCgpKQot
ICAgICAgICAgICAgbGlzdC5hcHBlbmQoVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpOwor
ICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgZWxzZQog
CSAgICBsaXN0LmFwcGVuZChTdHJpbmcobXN0cikpOwogCSAgbGFzdEluZGV4ID0gcG9zOwpAQCAt
NTE0LDcgKzUxMSw3IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUK
IAkgIC8vIG90aGVyIGJyb3dzZXJzIGFuZCBiZWNhdXNlIE51bGwgaXMgYSBmYWxzZSB2YWx1ZS4K
IAkgIHJlc3VsdCA9IE51bGwoKTsgCiAJfSBlbHNlIHsKLQkgIHJlc3VsdCA9IGV4ZWMtPmxleGlj
YWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CisJ
ICByZXN1bHQgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNv
bnN0cnVjdChleGVjLCBsaXN0KTsKIAl9CiAgICAgICB9CiAgICAgfQpAQCAtNTI3LDcgKzUyNCw3
IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgY2FzZSBTbGlj
ZTogLy8gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20vZG9jcy9tYW51YWxzL2pzL2NsaWVu
dC9qc3JlZi9zdHJpbmcuaHRtIzExOTQzNjYKICAgICB7CiAgICAgICAgIC8vIFRoZSBhcmcgcHJv
Y2Vzc2luZyBpcyB2ZXJ5IG11Y2ggbGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKLSAgICAgICAg
ZG91YmxlIGJlZ2luID0gYXJnc1swXS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBi
ZWdpbiA9IGFyZ3NbMF0tPnRvSW50ZWdlcihleGVjKTsKICAgICAgICAgaWYgKGJlZ2luID49IDAp
IHsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICAgIGlmIChiZWdpbiA+IGxlbikKICAgICAgICAg
ICAgIGJlZ2luID0gbGVuOwpAQCAtNTM3LDggKzUzNCw4IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVu
Y0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAgICAgICAgIGJlZ2luID0gMDsKICAgICAgICAgfQog
ICAgICAgICBkb3VibGUgZW5kID0gbGVuOwotICAgICAgICBpZiAoYXJnc1sxXS50eXBlKCkgIT0g
VW5kZWZpbmVkVHlwZSkgewotICAgICAgICAgIGVuZCA9IGFyZ3NbMV0udG9JbnRlZ2VyKGV4ZWMp
OworICAgICAgICBpZiAoIWFyZ3NbMV0tPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICBlbmQg
PSBhcmdzWzFdLT50b0ludGVnZXIoZXhlYyk7CiAgICAgICAgICAgaWYgKGVuZCA+PSAwKSB7IC8v
IGZhbHNlIGZvciBOYU4KICAgICAgICAgICAgIGlmIChlbmQgPiBsZW4pCiAgICAgICAgICAgICAg
IGVuZCA9IGxlbjsKQEAgLTU1MywxOCArNTUwLDE4IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0lt
cDo6Y2FsbChFeGVjU3RhdGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgU3BsaXQ6
IHsKLSAgICBPYmplY3QgY29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbkFycmF5KCk7Ci0gICAgT2JqZWN0IHJlcyA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoY29u
c3RydWN0b3IuY29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOworICAgIE9iamVjdEltcCAq
Y29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCk7
CisgICAgT2JqZWN0SW1wICpyZXMgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oY29uc3RydWN0
b3ItPmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsKICAgICByZXN1bHQgPSByZXM7CiAg
ICAgdSA9IHM7CiAgICAgaSA9IHAwID0gMDsKLSAgICB1aW50MzJfdCBsaW1pdCA9IGExLnR5cGUo
KSA9PSBVbmRlZmluZWRUeXBlID8gMHhGRkZGRkZGRlUgOiBhMS50b1VJbnQzMihleGVjKTsKLSAg
ICBpZiAoYTAudHlwZSgpID09IE9iamVjdFR5cGUgJiYgT2JqZWN0OjpkeW5hbWljQ2FzdChhMCku
aW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpIHsKLSAgICAgIE9iamVjdCBvYmowID0gT2JqZWN0
OjpkeW5hbWljQ2FzdChhMCk7Ci0gICAgICBSZWdFeHAgcmVnKG9iajAuZ2V0KGV4ZWMsInNvdXJj
ZSIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICB1aW50MzJfdCBsaW1pdCA9IGExLT5pc1VuZGVmaW5l
ZCgpID8gMHhGRkZGRkZGRlUgOiBhMS0+dG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGEwLT5pc09i
amVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihhMCktPmluaGVyaXRzKCZSZWdFeHBJ
bXA6OmluZm8pKSB7CisgICAgICBPYmplY3RJbXAgKm9iajAgPSBzdGF0aWNfY2FzdDxPYmplY3RJ
bXAgKj4oYTApOworICAgICAgUmVnRXhwIHJlZyhvYmowLT5nZXQoZXhlYywic291cmNlIiktPnRv
U3RyaW5nKGV4ZWMpKTsKICAgICAgIGlmICh1LmlzRW1wdHkoKSAmJiAhcmVnLm1hdGNoKHUsIDAp
LmlzTnVsbCgpKSB7CiAJLy8gZW1wdHkgc3RyaW5nIG1hdGNoZWQgYnkgcmVnZXhwIC0+IGVtcHR5
IGFycmF5Ci0JcmVzLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKDApKTsKKwly
ZXMtPnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKDApKTsKIAlicmVhazsKICAg
ICAgIH0KICAgICAgIHBvcyA9IDA7CkBAIC01NzgsMTMgKzU3NSwxMyBAQCBWYWx1ZSBTdHJpbmdQ
cm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAJICBicmVhazsKIAlwb3MgPSBtcG9zICsgKG1z
dHIuaXNFbXB0eSgpID8gMSA6IG1zdHIuc2l6ZSgpKTsKIAlpZiAobXBvcyAhPSBwMCB8fCAhbXN0
ci5pc0VtcHR5KCkpIHsKLQkgIHJlcy5wdXQoZXhlYyxpLCBTdHJpbmcodS5zdWJzdHIocDAsIG1w
b3MtcDApKSk7CisJICByZXMtPnB1dChleGVjLGksIFN0cmluZyh1LnN1YnN0cihwMCwgbXBvcy1w
MCkpKTsKIAkgIHAwID0gbXBvcyArIG1zdHIuc2l6ZSgpOwogCSAgaSsrOwogCX0KICAgICAgIH0K
ICAgICB9IGVsc2UgewotICAgICAgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICAgIHUyID0g
YTAtPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgaWYgKHUyLmlzRW1wdHkoKSkgewogCWlmICh1Lmlz
RW1wdHkoKSkgewogCSAgLy8gZW1wdHkgc2VwYXJhdG9yIG1hdGNoZXMgZW1wdHkgc3RyaW5nIC0+
IGVtcHR5IGFycmF5CkBAIC01OTIsMTEgKzU4OSwxMSBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJ
bXA6OmNhbGwoRXhlY1N0YXRlCiAJICBicmVhazsKIAl9IGVsc2UgewogCSAgd2hpbGUgKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihpKSAhPSBsaW1pdCAmJiBpIDwgdS5zaXplKCktMSkKLQkgICAgcmVz
LnB1dChleGVjLCBpKyssIFN0cmluZyh1LnN1YnN0cihwMCsrLCAxKSkpOworCSAgICByZXMtPnB1
dChleGVjLCBpKyssIFN0cmluZyh1LnN1YnN0cihwMCsrLCAxKSkpOwogCX0KICAgICAgIH0gZWxz
ZSB7CiAJd2hpbGUgKHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSAhPSBsaW1pdCAmJiAocG9zID0g
dS5maW5kKHUyLCBwMCkpID49IDApIHsKLQkgIHJlcy5wdXQoZXhlYywgaSwgU3RyaW5nKHUuc3Vi
c3RyKHAwLCBwb3MtcDApKSk7CisJICByZXMtPnB1dChleGVjLCBpLCBTdHJpbmcodS5zdWJzdHIo
cDAsIHBvcy1wMCkpKTsKIAkgIHAwID0gcG9zICsgdTIuc2l6ZSgpOwogCSAgaSsrOwogCX0KQEAg
LTYwNCwxMyArNjAxLDEzIEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3Rh
dGUKICAgICB9CiAgICAgLy8gYWRkIHJlbWFpbmluZyBzdHJpbmcsIGlmIGFueQogICAgIGlmIChz
dGF0aWNfY2FzdDx1aW50MzJfdD4oaSkgIT0gbGltaXQpCi0gICAgICByZXMucHV0KGV4ZWMsIGkr
KywgU3RyaW5nKHUuc3Vic3RyKHAwKSkpOwotICAgIHJlcy5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0
eU5hbWUsIE51bWJlcihpKSk7CisgICAgICByZXMtPnB1dChleGVjLCBpKyssIFN0cmluZyh1LnN1
YnN0cihwMCkpKTsKKyAgICByZXMtPnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVy
KGkpKTsKICAgICB9CiAgICAgYnJlYWs7CiAgIGNhc2UgU3Vic3RyOiB7Ci0gICAgZG91YmxlIGQg
PSBhMC50b0ludGVnZXIoZXhlYyk7Ci0gICAgZG91YmxlIGQyID0gYTEudG9JbnRlZ2VyKGV4ZWMp
OworICAgIGRvdWJsZSBkID0gYTAtPnRvSW50ZWdlcihleGVjKTsKKyAgICBkb3VibGUgZDIgPSBh
MS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICghKGQgPj0gMCkpIHsgLy8gdHJ1ZSBmb3IgTmFO
CiAgICAgICBkICs9IGxlbjsKICAgICAgIGlmICghKGQgPj0gMCkpIC8vIHRydWUgZm9yIE5hTgpA
QCAtNjI4LDggKzYyNSw4IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3Rh
dGUKICAgICBicmVhazsKICAgfQogICBjYXNlIFN1YnN0cmluZzogewotICAgIGRvdWJsZSBzdGFy
dCA9IGEwLnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBlbmQgPSBhMS50b051bWJlcihleGVj
KTsKKyAgICBkb3VibGUgc3RhcnQgPSBhMC0+dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGVu
ZCA9IGExLT50b051bWJlcihleGVjKTsKICAgICBpZiAoS0pTOjppc05hTihzdGFydCkpCiAgICAg
ICBzdGFydCA9IDA7CiAgICAgaWYgKEtKUzo6aXNOYU4oZW5kKSkKQEAgLTY0Miw3ICs2MzksNyBA
QCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgICBzdGFydCA9
IGxlbjsKICAgICBpZiAoZW5kID4gbGVuKQogICAgICAgZW5kID0gbGVuOwotICAgIGlmIChhMS50
eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkKKyAgICBpZiAoYTEtPmlzVW5kZWZpbmVkKCkpCiAgICAg
ICBlbmQgPSBsZW47CiAgICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICBkb3VibGUgdGVtcCA9
IGVuZDsKQEAgLTY5NSwxNiArNjkyLDE2IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2Fs
bChFeGVjU3RhdGUKICAgICByZXN1bHQgPSBTdHJpbmcoIjxzdXA+IiArIHMgKyAiPC9zdXA+Iik7
CiAgICAgYnJlYWs7CiAgIGNhc2UgRm9udGNvbG9yOgotICAgIHJlc3VsdCA9IFN0cmluZygiPGZv
bnQgY29sb3I9XCIiICsgYTAudG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIp
OworICAgIHJlc3VsdCA9IFN0cmluZygiPGZvbnQgY29sb3I9XCIiICsgYTAtPnRvU3RyaW5nKGV4
ZWMpICsgIlwiPiIgKyBzICsgIjwvZm9udD4iKTsKICAgICBicmVhazsKICAgY2FzZSBGb250c2l6
ZToKLSAgICByZXN1bHQgPSBTdHJpbmcoIjxmb250IHNpemU9XCIiICsgYTAudG9TdHJpbmcoZXhl
YykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIpOworICAgIHJlc3VsdCA9IFN0cmluZygiPGZvbnQg
c2l6ZT1cIiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIpOwog
ICAgIGJyZWFrOwogICBjYXNlIEFuY2hvcjoKLSAgICByZXN1bHQgPSBTdHJpbmcoIjxhIG5hbWU9
XCIiICsgYTAudG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOworICAgIHJlc3Vs
dCA9IFN0cmluZygiPGEgbmFtZT1cIiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMg
KyAiPC9hPiIpOwogICAgIGJyZWFrOwogICBjYXNlIExpbms6Ci0gICAgcmVzdWx0ID0gU3RyaW5n
KCI8YSBocmVmPVwiIiArIGEwLnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvYT4iKTsK
KyAgICByZXN1bHQgPSBTdHJpbmcoIjxhIGhyZWY9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsg
IlwiPiIgKyBzICsgIjwvYT4iKTsKICAgICBicmVhazsKICNlbmRpZgogICB9CkBAIC03MTksNyAr
NzE2LDYgQEAgU3RyaW5nT2JqZWN0SW1wOjpTdHJpbmdPYmplY3RJbXAoRXhlY1N0YQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUHJvdG90eXBlSW1wICpzdHJpbmdQcm90
bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVj
dCh0aGlzKTsKICAgLy8gRUNNQSAxNS41LjMuMSBTdHJpbmcucHJvdG90eXBlCiAgIHB1dERpcmVj
dChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIHN0cmluZ1Byb3RvLCBEb250RW51bXxEb250RGVsZXRl
fFJlYWRPbmx5KTsKIApAQCAtNzI3LDcgKzcyMyw3IEBAIFN0cmluZ09iamVjdEltcDo6U3RyaW5n
T2JqZWN0SW1wKEV4ZWNTdGEKICAgcHV0RGlyZWN0KGZyb21DaGFyQ29kZSwgbmV3IFN0cmluZ09i
amVjdEZ1bmNJbXAoZXhlYyxmdW5jUHJvdG8pLCBEb250RW51bSk7CiAKICAgLy8gbm8uIG9mIGFy
Z3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVySW1wOjpvbmUoKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERp
cmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGpzT25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9u
dEVudW0pOwogfQogCiAKQEAgLTczNywxMiArNzMzLDEyIEBAIGJvb2wgU3RyaW5nT2JqZWN0SW1w
OjppbXBsZW1lbnRzQ29uc3RydWMKIH0KIAogLy8gRUNNQSAxNS41LjIKLU9iamVjdCBTdHJpbmdP
YmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitP
YmplY3RJbXAgKlN0cmluZ09iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgTGlzdCAmYXJncykKIHsKLSAgT2JqZWN0SW1wICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRl
cnByZXRlcigpLT5idWlsdGluU3RyaW5nUHJvdG90eXBlKCkuaW1wKCk7CisgIE9iamVjdEltcCAq
cHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblN0cmluZ1Byb3RvdHlw
ZSgpOwogICBpZiAoYXJncy5zaXplKCkgPT0gMCkKLSAgICByZXR1cm4gT2JqZWN0KG5ldyBTdHJp
bmdJbnN0YW5jZUltcChwcm90bykpOwotICByZXR1cm4gT2JqZWN0KG5ldyBTdHJpbmdJbnN0YW5j
ZUltcChwcm90bywgYXJncy5iZWdpbigpLT5kaXNwYXRjaFRvU3RyaW5nKGV4ZWMpKSk7CisgICAg
cmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZUltcChwcm90byk7CisgIHJldHVybiBuZXcgU3RyaW5n
SW5zdGFuY2VJbXAocHJvdG8sIGFyZ3MuYmVnaW4oKS0+dG9TdHJpbmcoZXhlYykpOwogfQogCiBi
b29sIFN0cmluZ09iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdApAQCAtNzUxLDEzICs3
NDcsMTMgQEAgYm9vbCBTdHJpbmdPYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkgYwogfQogCiAv
LyBFQ01BIDE1LjUuMQotVmFsdWUgU3RyaW5nT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHJp
bmdPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICov
KnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQog
ICAgIHJldHVybiBTdHJpbmcoIiIpOwogICBlbHNlIHsKLSAgICBWYWx1ZSB2ID0gYXJnc1swXTsK
LSAgICByZXR1cm4gU3RyaW5nKHYudG9TdHJpbmcoZXhlYykpOworICAgIFZhbHVlSW1wICp2ID0g
YXJnc1swXTsKKyAgICByZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgfQogfQog
CkBAIC03NjcsOCArNzYzLDcgQEAgVmFsdWUgU3RyaW5nT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0
ZSAqZQogU3RyaW5nT2JqZWN0RnVuY0ltcDo6U3RyaW5nT2JqZWN0RnVuY0ltcChFeGVjU3RhdGUg
KmV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8pCiAgIDogSW50ZXJuYWxGdW5j
dGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7Ci0gIHB1dERpcmVj
dChsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlckltcDo6b25lKCksIERvbnREZWxldGV8UmVhZE9u
bHl8RG9udEVudW0pOworICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBE
b250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIAogYm9vbCBTdHJpbmdPYmplY3RGdW5j
SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CkBAIC03NzYsNyArNzcxLDcgQEAgYm9vbCBTdHJp
bmdPYmplY3RGdW5jSW1wOjppbXBsZW1lbnRzQ2FsbAogICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFs
dWUgU3RyaW5nT2JqZWN0RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0
aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU3RyaW5nT2JqZWN0RnVuY0lt
cDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiov
LCBjb25zdCBMaXN0ICZhcmdzKQogewogICBVU3RyaW5nIHM7CiAgIGlmIChhcmdzLnNpemUoKSkg
ewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC11IC1wIC1yMS4xMiBKYXZhU2NyaXB0
Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29i
amVjdC5oCTI1IEp1bCAyMDA1IDIyOjE3OjEyIC0wMDAwCTEuMTIKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9zdHJpbmdfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNDo0NDowOSAtMDAwMApAQCAtMzIsOCAr
MzIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBTdHJpbmdJbnN0YW5jZUltcChPYmplY3RJbXAg
KnByb3RvKTsKICAgICBTdHJpbmdJbnN0YW5jZUltcChPYmplY3RJbXAgKnByb3RvLCBjb25zdCBV
U3RyaW5nICZzdHJpbmcpOwogCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9u
ZSk7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJiByZXN1bHQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAKQEAgLTUx
LDcgKzUxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBTdHJpbmdQcm90b3R5
cGVJbXAoRXhlY1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90
b3R5cGVJbXAgKm9ialByb3RvKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1
bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIH07CkBA
IC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFN0cmluZ1Byb3RvRnVuY0ltcChF
eGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBs
ZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1
ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgZW51bSB7IFRvU3RyaW5nLCBWYWx1ZU9mLCBDaGFy
QXQsIENoYXJDb2RlQXQsIENvbmNhdCwgSW5kZXhPZiwgTGFzdEluZGV4T2YsCiAJICAgTWF0Y2gs
IFJlcGxhY2UsIFNlYXJjaCwgU2xpY2UsIFNwbGl0LApAQCAtOTQsOSArOTQsOSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUHJvdG90eXBlSW1wICpzdHJpbmdQ
cm90byk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3Qg
JmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBMaXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKTsKICAgfTsKIAogICAvKioKQEAgLTEwOSw3ICsxMDksNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgcHVibGljOgogICAgIFN0cmluZ09iamVjdEZ1bmNJbXAoRXhlY1N0YXRlICpleGVjLCBGdW5j
dGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAg
KmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy90ZXN0a2pzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva2pzL3Rlc3RranMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzCmRpZmYg
LXAgLXUgLXUgLXAgLXIxLjEzIEphdmFTY3JpcHRDb3JlL2tqcy90ZXN0a2pzLmNwcAotLS0gSmF2
YVNjcmlwdENvcmUva2pzL3Rlc3RranMuY3BwCTE0IEp1bCAyMDA1IDIyOjMyOjE2IC0wMDAwCTEu
MTMKKysrIEphdmFTY3JpcHRDb3JlL2tqcy90ZXN0a2pzLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjA5
IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFRlc3RGdW5jdGlvbkltcCA6IHB1YmxpYyBP
YmplY3RJbXAKIHB1YmxpYzoKICAgVGVzdEZ1bmN0aW9uSW1wKGludCBpLCBpbnQgbGVuZ3RoKTsK
ICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOworICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAg
ZW51bSB7IFByaW50LCBEZWJ1ZywgUXVpdCwgR0MgfTsKIApAQCAtNTAsMTIgKzUwLDEyIEBAIFRl
c3RGdW5jdGlvbkltcDo6VGVzdEZ1bmN0aW9uSW1wKGludCBpLCAKICAgcHV0RGlyZWN0KGxlbmd0
aFByb3BlcnR5TmFtZSxsZW5ndGgsRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9CiAK
LVZhbHVlIFRlc3RGdW5jdGlvbkltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0
aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqVGVzdEZ1bmN0aW9uSW1wOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBQcmludDoKICAgY2Fz
ZSBEZWJ1ZzoKLSAgICBmcHJpbnRmKHN0ZGVyciwiLS0+ICVzXG4iLGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykuYXNjaWkoKSk7CisgICAgZnByaW50ZihzdGRlcnIsIi0tPiAlc1xuIixhcmdzWzBdLT50
b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIGNhc2Ug
UXVpdDoKICAgICBleGl0KDApOwpAQCAtNzYsMTAgKzc2LDEwIEBAIGNsYXNzIFZlcnNpb25GdW5j
dGlvbkltcCA6IHB1YmxpYyBPYmplY3QKIHB1YmxpYzoKICAgVmVyc2lvbkZ1bmN0aW9uSW1wKCkg
OiBPYmplY3RJbXAoKSB7fQogICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgIHZpcnR1YWwgVmFsdWVJbXAgKmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKTsKIH07CiAKLVZhbHVlIFZlcnNpb25GdW5jdGlvbkltcDo6Y2FsbChFeGVjU3Rh
dGUgKi8qZXhlYyovLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykK
K1ZhbHVlSW1wICpWZXJzaW9uRnVuY3Rpb25JbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
LypleGVjKi8sIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJi8qYXJncyovKQog
ewogICAvLyBXZSBuZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUg
TW96aWxsYSBKUyB0ZXN0cyBidXQgZm9yIG5vdwogICAvLyB3ZSBkb24ndCBhY3R1YWxseSBkbyBh
bnkgdmVyc2lvbi1zcGVjaWZpYyBoYW5kbGluZwpAQCAtMTAzLDIwICsxMDMsMjAgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICB7CiAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsK
IAotICAgIE9iamVjdCBnbG9iYWwobmV3IEdsb2JhbEltcCgpKTsKKyAgICBPYmplY3RJbXAgKmds
b2JhbChuZXcgR2xvYmFsSW1wKCkpOwogCiAgICAgLy8gY3JlYXRlIGludGVycHJldGVyCiAgICAg
SW50ZXJwcmV0ZXIgaW50ZXJwKGdsb2JhbCk7CiAgICAgLy8gYWRkIGRlYnVnKCkgZnVuY3Rpb24K
LSAgICBnbG9iYWwucHV0KGludGVycC5nbG9iYWxFeGVjKCksICJkZWJ1ZyIsIE9iamVjdChuZXcg
VGVzdEZ1bmN0aW9uSW1wKFRlc3RGdW5jdGlvbkltcDo6RGVidWcsMSkpKTsKKyAgICBnbG9iYWwt
PnB1dChpbnRlcnAuZ2xvYmFsRXhlYygpLCAiZGVidWciLCBuZXcgVGVzdEZ1bmN0aW9uSW1wKFRl
c3RGdW5jdGlvbkltcDo6RGVidWcsIDEpKTsKICAgICAvLyBhZGQgInByaW50IiBmb3IgY29tcGF0
aWJpbGl0eSB3aXRoIHRoZSBtb3ppbGxhIGpzIHNoZWxsCi0gICAgZ2xvYmFsLnB1dChpbnRlcnAu
Z2xvYmFsRXhlYygpLCAicHJpbnQiLCBPYmplY3QobmV3IFRlc3RGdW5jdGlvbkltcChUZXN0RnVu
Y3Rpb25JbXA6OlByaW50LDEpKSk7CisgICAgZ2xvYmFsLT5wdXQoaW50ZXJwLmdsb2JhbEV4ZWMo
KSwgInByaW50IiwgbmV3IFRlc3RGdW5jdGlvbkltcChUZXN0RnVuY3Rpb25JbXA6OlByaW50LCAx
KSk7CiAgICAgLy8gYWRkICJxdWl0IiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBtb3ppbGxh
IGpzIHNoZWxsCi0gICAgZ2xvYmFsLnB1dChpbnRlcnAuZ2xvYmFsRXhlYygpLCAicXVpdCIsIE9i
amVjdChuZXcgVGVzdEZ1bmN0aW9uSW1wKFRlc3RGdW5jdGlvbkltcDo6UXVpdCwwKSkpOworICAg
IGdsb2JhbC0+cHV0KGludGVycC5nbG9iYWxFeGVjKCksICJxdWl0IiwgbmV3IFRlc3RGdW5jdGlv
bkltcChUZXN0RnVuY3Rpb25JbXA6OlF1aXQsIDApKTsKICAgICAvLyBhZGQgImdjIiBmb3IgY29t
cGF0aWJpbGl0eSB3aXRoIHRoZSBtb3ppbGxhIGpzIHNoZWxsCi0gICAgZ2xvYmFsLnB1dChpbnRl
cnAuZ2xvYmFsRXhlYygpLCAiZ2MiLCBPYmplY3QobmV3IFRlc3RGdW5jdGlvbkltcChUZXN0RnVu
Y3Rpb25JbXA6OkdDLDApKSk7CisgICAgZ2xvYmFsLT5wdXQoaW50ZXJwLmdsb2JhbEV4ZWMoKSwg
ImdjIiwgbmV3IFRlc3RGdW5jdGlvbkltcChUZXN0RnVuY3Rpb25JbXA6OkdDLCAwKSk7CiAgICAg
Ly8gYWRkICJ2ZXJzaW9uIiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBtb3ppbGxhIGpzIHNo
ZWxsIAotICAgIGdsb2JhbC5wdXQoaW50ZXJwLmdsb2JhbEV4ZWMoKSwgInZlcnNpb24iLCBPYmpl
Y3QobmV3IFZlcnNpb25GdW5jdGlvbkltcCgpKSk7CisgICAgZ2xvYmFsLT5wdXQoaW50ZXJwLmds
b2JhbEV4ZWMoKSwgInZlcnNpb24iLCBuZXcgVmVyc2lvbkZ1bmN0aW9uSW1wKCkpOwogCiAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKICAgICAgIGludCBjb2RlX2xlbiA9IDA7
CkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAK
ICAgICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRocm93KSB7CiAgICAgICAgIEV4ZWNTdGF0
ZSAqZXhlYyA9IGludGVycC5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIFZhbHVlIGV4VmFsID0gY29t
cC52YWx1ZSgpOwotICAgICAgICBjaGFyICptc2cgPSBleFZhbC50b1N0cmluZyhleGVjKS5hc2Np
aSgpOworICAgICAgICBWYWx1ZUltcCAqZXhWYWwgPSBjb21wLnZhbHVlKCk7CisgICAgICAgIGNo
YXIgKm1zZyA9IGV4VmFsLT50b1N0cmluZyhleGVjKS5hc2NpaSgpOwogICAgICAgICBpbnQgbGlu
ZW5vID0gLTE7Ci0gICAgICAgIGlmIChleFZhbC50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewotICAg
ICAgICAgIFZhbHVlIGxpbmVWYWwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFsKS5nZXQoZXhl
YywibGluZSIpOwotICAgICAgICAgIGlmIChsaW5lVmFsLnR5cGUoKSA9PSBOdW1iZXJUeXBlKQot
ICAgICAgICAgICAgbGluZW5vID0gaW50KGxpbmVWYWwudG9OdW1iZXIoZXhlYykpOworICAgICAg
ICBpZiAoZXhWYWwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICBWYWx1ZUltcCAqbGluZVZhbCA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihleFZhbCktPmdldChleGVjLCJsaW5lIik7CisgICAg
ICAgICAgaWYgKGxpbmVWYWwtPmlzTnVtYmVyKCkpCisgICAgICAgICAgICBsaW5lbm8gPSBpbnQo
bGluZVZhbC0+dG9OdW1iZXIoZXhlYykpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsaW5lbm8g
IT0gLTEpCiAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkV4Y2VwdGlvbiwgbGluZSAlZDogJXNc
biIsbGluZW5vLG1zZyk7CkBAIC0xNjUsNyArMTY1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQogICAgICAgICByZXQgPSBmYWxzZTsKICAgICAgIH0KICAgICAgIGVsc2UgaWYg
KGNvbXAuY29tcGxUeXBlKCkgPT0gUmV0dXJuVmFsdWUpIHsKLSAgICAgICAgY2hhciAqbXNnID0g
Y29tcC52YWx1ZSgpLnRvU3RyaW5nKGludGVycC5nbG9iYWxFeGVjKCkpLmFzY2lpKCk7CisgICAg
ICAgIGNoYXIgKm1zZyA9IGNvbXAudmFsdWUoKS0+dG9TdHJpbmcoaW50ZXJwLmdsb2JhbEV4ZWMo
KSkuYXNjaWkoKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsIlJldHVybiB2YWx1ZTogJXNcbiIs
bXNnKTsKICAgICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC1wIC11IC11IC1wIC1yMS4yNiBKYXZhU2Ny
aXB0Q29yZS9ranMvdmFsdWUuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCTE0
IEp1bCAyMDA1IDE4OjI3OjAzIC0wMDAwCTEuMjYKKysrIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1
ZS5jcHAJNyBBdWcgMjAwNSAwNDo0NDowOSAtMDAwMApAQCAtMSw0ICsxLDMgQEAKLS8vIC0qLSBj
LWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQpAQCAtMjMsMTEgKzIyLDExIEBACiAgKi8KIAogI2luY2x1ZGUgInZhbHVl
LmgiCisKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUg
ImludGVycHJldGVyLmgiCiAKLSNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxtYXRoLmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTM3LDEyMCArMzYs
OTggQEAKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiZXJyb3Jfb2JqZWN0Lmgi
CiAjaW5jbHVkZSAibm9kZXMuaCIKLSNpbmNsdWRlICJzaW1wbGVfbnVtYmVyLmgiCiAKIG5hbWVz
cGFjZSBLSlMgewogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYWx1ZUltcCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgVmFsdWVJbXA6Om1h
cmsoKQotewotICBfbWFya2VkID0gdHJ1ZTsKLX0KK0FsbG9jYXRlZFZhbHVlSW1wICpDb25zdGFu
dFZhbHVlczo6dW5kZWZpbmVkID0gTlVMTDsKK0FsbG9jYXRlZFZhbHVlSW1wICpDb25zdGFudFZh
bHVlczo6bnVsbCA9IE5VTEw7CitBbGxvY2F0ZWRWYWx1ZUltcCAqQ29uc3RhbnRWYWx1ZXM6Ompz
VHJ1ZSA9IE5VTEw7CitBbGxvY2F0ZWRWYWx1ZUltcCAqQ29uc3RhbnRWYWx1ZXM6OmpzRmFsc2Ug
PSBOVUxMOworQWxsb2NhdGVkVmFsdWVJbXAgKkNvbnN0YW50VmFsdWVzOjpOYU4gPSBOVUxMOwog
Ci12b2lkKiBWYWx1ZUltcDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzKQotewotICByZXR1cm4gQ29s
bGVjdG9yOjphbGxvY2F0ZShzKTsKLX0KK3N0YXRpYyBjb25zdCBkb3VibGUgRDE2ID0gNjU1MzY7
CitzdGF0aWMgY29uc3QgZG91YmxlIEQzMiA9IDQyOTQ5NjcyOTYuMDsKIAotdm9pZCBWYWx1ZUlt
cDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqKQordm9pZCAqQWxsb2NhdGVkVmFsdWVJbXA6Om9wZXJh
dG9yIG5ldyhzaXplX3Qgc2l6ZSkKIHsKLSAgLy8gRG8gbm90aGluZy4gU28gZmFyLgorICAgIHJl
dHVybiBDb2xsZWN0b3I6OmFsbG9jYXRlKHNpemUpOwogfQogCi1ib29sIFZhbHVlSW1wOjp0b1VJ
bnQzMih1bnNpZ25lZCYpIGNvbnN0Citib29sIEFsbG9jYXRlZFZhbHVlSW1wOjpnZXRVSW50MzIo
dW5zaWduZWQmKSBjb25zdAogewotICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiAvLyBFQ01BIDkuNAogZG91YmxlIFZhbHVlSW1wOjp0b0ludGVnZXIoRXhlY1N0YXRlICpl
eGVjKSBjb25zdAogewotICB1aW50MzJfdCBpOwotICBpZiAoZGlzcGF0Y2hUb1VJbnQzMihpKSkK
LSAgICByZXR1cm4gaTsKLSAgcmV0dXJuIHJvdW5kVmFsdWUoZXhlYywgVmFsdWUoY29uc3RfY2Fz
dDxWYWx1ZUltcCo+KHRoaXMpKSk7CisgICAgdWludDMyX3QgaTsKKyAgICBpZiAoZ2V0VUludDMy
KGkpKQorICAgICAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gcm91bmRWYWx1ZShleGVjLCBjb25z
dF9jYXN0PFZhbHVlSW1wKj4odGhpcykpOwogfQogCiBpbnQzMl90IFZhbHVlSW1wOjp0b0ludDMy
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKLSAgdWludDMyX3QgaTsKLSAgaWYgKGRpc3BhdGNo
VG9VSW50MzIoaSkpCi0gICAgcmV0dXJuIGk7Ci0KLSAgZG91YmxlIGQgPSByb3VuZFZhbHVlKGV4
ZWMsIFZhbHVlKGNvbnN0X2Nhc3Q8VmFsdWVJbXAqPih0aGlzKSkpOwotICBpZiAoaXNOYU4oZCkg
fHwgaXNJbmYoZCkpCi0gICAgcmV0dXJuIDA7Ci0gIGRvdWJsZSBkMzIgPSBmbW9kKGQsIEQzMik7
Ci0KLSAgaWYgKGQzMiA+PSBEMzIgLyAyLjApCi0gICAgZDMyIC09IEQzMjsKLSAgZWxzZSBpZiAo
ZDMyIDwgLUQzMiAvIDIuMCkKLSAgICBkMzIgKz0gRDMyOworICAgIHVpbnQzMl90IGk7CisgICAg
aWYgKGdldFVJbnQzMihpKSkKKyAgICAgICAgcmV0dXJuIGk7CisKKyAgICBkb3VibGUgZCA9IHJv
dW5kVmFsdWUoZXhlYywgY29uc3RfY2FzdDxWYWx1ZUltcCo+KHRoaXMpKTsKKyAgICBpZiAoaXNO
YU4oZCkgfHwgaXNJbmYoZCkpCisgICAgICAgIHJldHVybiAwOworICAgIGRvdWJsZSBkMzIgPSBm
bW9kKGQsIEQzMik7CisKKyAgICBpZiAoZDMyID49IEQzMiAvIDIpCisgICAgICAgIGQzMiAtPSBE
MzI7CisgICAgZWxzZSBpZiAoZDMyIDwgLUQzMiAvIDIpCisgICAgICAgIGQzMiArPSBEMzI7CiAK
LSAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KGQzMik7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludDMyX3Q+KGQzMik7CiB9CiAKIHVpbnQzMl90IFZhbHVlSW1wOjp0b1VJbnQzMihFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIHVpbnQzMl90IGk7Ci0gIGlmIChkaXNwYXRjaFRvVUlu
dDMyKGkpKQotICAgIHJldHVybiBpOwotCi0gIGRvdWJsZSBkID0gcm91bmRWYWx1ZShleGVjLCBW
YWx1ZShjb25zdF9jYXN0PFZhbHVlSW1wKj4odGhpcykpKTsKLSAgaWYgKGlzTmFOKGQpIHx8IGlz
SW5mKGQpKQotICAgIHJldHVybiAwOwotICBkb3VibGUgZDMyID0gZm1vZChkLCBEMzIpOworICAg
IHVpbnQzMl90IGk7CisgICAgaWYgKGdldFVJbnQzMihpKSkKKyAgICAgICAgcmV0dXJuIGk7CisK
KyAgICBkb3VibGUgZCA9IHJvdW5kVmFsdWUoZXhlYywgY29uc3RfY2FzdDxWYWx1ZUltcCo+KHRo
aXMpKTsKKyAgICBpZiAoaXNOYU4oZCkgfHwgaXNJbmYoZCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGRvdWJsZSBkMzIgPSBmbW9kKGQsIEQzMik7CiAKLSAgaWYgKGQzMiA8IDApCi0gICAgZDMy
ICs9IEQzMjsKKyAgICBpZiAoZDMyIDwgMCkKKyAgICAgICAgZDMyICs9IEQzMjsKIAotICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQzMik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQzMl90PihkMzIpOwogfQogCiB1aW50MTZfdCBWYWx1ZUltcDo6dG9VSW50MTYoRXhlY1N0YXRl
ICpleGVjKSBjb25zdAogewotICB1aW50MzJfdCBpOwotICBpZiAoZGlzcGF0Y2hUb1VJbnQzMihp
KSkKLSAgICByZXR1cm4gaTsKLQotICBkb3VibGUgZCA9IHJvdW5kVmFsdWUoZXhlYywgVmFsdWUo
Y29uc3RfY2FzdDxWYWx1ZUltcCo+KHRoaXMpKSk7Ci0gIGlmIChpc05hTihkKSB8fCBpc0luZihk
KSkKLSAgICByZXR1cm4gMDsKLSAgZG91YmxlIGQxNiA9IGZtb2QoZCwgRDE2KTsKLQotICBpZiAo
ZDE2IDwgMCkKLSAgICBkMTYgKz0gRDE2OwotCi0gIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oZDE2KTsKLX0KLQotT2JqZWN0IFZhbHVlSW1wOjpkaXNwYXRjaFRvT2JqZWN0KEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3QKLXsKLSAgaWYgKFNpbXBsZU51bWJlcjo6aXModGhpcykpCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IE51bWJlckltcCAqPih0aGlzKS0+TnVtYmVySW1wOjp0b09i
amVjdChleGVjKTsKLSAgcmV0dXJuIHRvT2JqZWN0KGV4ZWMpOwotfQotCi1ib29sIFZhbHVlSW1w
Ojppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChkaXNwYXRjaFR5cGUo
KSkgewotICAgICAgICBjYXNlIEJvb2xlYW5UeXBlOgotICAgICAgICBjYXNlIE51bWJlclR5cGU6
Ci0gICAgICAgIGNhc2UgT2JqZWN0VHlwZToKLSAgICAgICAgY2FzZSBTdHJpbmdUeXBlOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTnVsbFR5cGU6Ci0gICAgICAgIGNhc2UgVW5k
ZWZpbmVkVHlwZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFVuc3Bl
Y2lmaWVkVHlwZToKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHVpbnQzMl90IGk7CisgICAgaWYgKGdl
dFVJbnQzMihpKSkKKyAgICAgICAgcmV0dXJuIGk7CisKKyAgICBkb3VibGUgZCA9IHJvdW5kVmFs
dWUoZXhlYywgY29uc3RfY2FzdDxWYWx1ZUltcCo+KHRoaXMpKTsKKyAgICBpZiAoaXNOYU4oZCkg
fHwgaXNJbmYoZCkpCisgICAgICAgIHJldHVybiAwOworICAgIGRvdWJsZSBkMTYgPSBmbW9kKGQs
IEQxNik7CisKKyAgICBpZiAoZDE2IDwgMCkKKyAgICAgICAgZDE2ICs9IEQxNjsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZDE2KTsKIH0KIAotYm9vbCBWYWx1ZUltcDo6aXNC
b29sZWFuKGJvb2wgJmJvb2xlYW5WYWx1ZSkgY29uc3QKK09iamVjdEltcCAqVmFsdWVJbXA6OnRv
T2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgICBpZiAoU2ltcGxlTnVtYmVyOjpp
cyh0aGlzKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE51bWJlckltcCAqPih0
aGlzKS0+TnVtYmVySW1wOjp0b09iamVjdChleGVjKTsKKyAgICByZXR1cm4gZG93bmNhc3QoKS0+
dG9PYmplY3QoZXhlYyk7Cit9CisKK2Jvb2wgQWxsb2NhdGVkVmFsdWVJbXA6OmdldEJvb2xlYW4o
Ym9vbCAmYm9vbGVhblZhbHVlKSBjb25zdAogewogICAgIGlmICghaXNCb29sZWFuKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTE1OCw3ICsxMzUsNyBAQCBib29sIFZhbHVlSW1wOjppc0Jv
b2xlYW4oYm9vbCAmYm9vbGVhblZhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsdWVJ
bXA6OmlzTnVtYmVyKGRvdWJsZSAmbnVtZXJpY1ZhbHVlKSBjb25zdAorYm9vbCBBbGxvY2F0ZWRW
YWx1ZUltcDo6Z2V0TnVtYmVyKGRvdWJsZSAmbnVtZXJpY1ZhbHVlKSBjb25zdAogewogICAgIGlm
ICghaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDI2MSArMTQzLDEx
MyBAQCBib29sIFZhbHVlSW1wOjppc051bWJlcihkb3VibGUgJm51bWVyaWNWCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgVmFsdWVJbXA6OmlzU3RyaW5nKFVTdHJpbmcgJnN0cmluZ1ZhbHVl
KSBjb25zdAorZG91YmxlIEFsbG9jYXRlZFZhbHVlSW1wOjpnZXROdW1iZXIoKSBjb25zdAogewot
ICAgIGlmICghaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0cmluZ1Zh
bHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wICo+KHRoaXMpLT52YWx1ZSgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1VU3RyaW5nIFZhbHVlSW1wOjphc1N0cmluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzU3RyaW5nKCkgPyBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXAgKj4o
dGhpcyktPnZhbHVlKCkgOiBVU3RyaW5nKCk7CisgICAgcmV0dXJuIGlzTnVtYmVyKCkgPyBzdGF0
aWNfY2FzdDxjb25zdCBOdW1iZXJJbXAgKj4odGhpcyktPnZhbHVlKCkgOiBOYU47CiB9CiAKLWJv
b2wgVmFsdWVJbXA6OmlzT2JqZWN0KE9iamVjdEltcCAqJm9iamVjdCkKK2Jvb2wgQWxsb2NhdGVk
VmFsdWVJbXA6OmdldFN0cmluZyhVU3RyaW5nICZzdHJpbmdWYWx1ZSkgY29uc3QKIHsKLSAgICBp
ZiAoIWlzT2JqZWN0KCkpCisgICAgaWYgKCFpc1N0cmluZygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMpOworICAgIHN0
cmluZ1ZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wICo+KHRoaXMpLT52YWx1ZSgp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gVmFsdWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1WYWx1
ZTo6VmFsdWUoYm9vbCBiKSA6IHJlcChiID8gQm9vbGVhbkltcDo6c3RhdGljVHJ1ZSA6IEJvb2xl
YW5JbXA6OnN0YXRpY0ZhbHNlKSB7IH0KLQotVmFsdWU6OlZhbHVlKGludCBpKQotICAgIDogcmVw
KFNpbXBsZU51bWJlcjo6Zml0cyhpKSA/IFNpbXBsZU51bWJlcjo6bWFrZShpKSA6IG5ldyBOdW1i
ZXJJbXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSkpIHsgfQotCi1WYWx1ZTo6VmFsdWUodW5zaWdu
ZWQgdSkKLSAgICA6IHJlcChTaW1wbGVOdW1iZXI6OmZpdHModSkgPyBTaW1wbGVOdW1iZXI6Om1h
a2UodSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4odSkpKSB7IH0KLQotVmFs
dWU6OlZhbHVlKGRvdWJsZSBkKQotICAgIDogcmVwKFNpbXBsZU51bWJlcjo6Zml0cyhkKQotICAg
ICAgICA/IFNpbXBsZU51bWJlcjo6bWFrZShzdGF0aWNfY2FzdDxsb25nPihkKSkKLSAgICAgICAg
OiAoS0pTOjppc05hTihkKSA/IE51bWJlckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChk
KSkpCi17IH0KLQotVmFsdWU6OlZhbHVlKGRvdWJsZSBkLCBib29sIGtub3duVG9CZUludGVnZXIp
Ci0gICAgOiByZXAoKGtub3duVG9CZUludGVnZXIgPyBTaW1wbGVOdW1iZXI6OmludGVnZXJGaXRz
KGQpIDogU2ltcGxlTnVtYmVyOjpmaXRzKGQpKQotICAgICAgICA/IFNpbXBsZU51bWJlcjo6bWFr
ZShzdGF0aWNfY2FzdDxsb25nPihkKSkKLSAgICAgICAgOiAoKCFrbm93blRvQmVJbnRlZ2VyICYm
IEtKUzo6aXNOYU4oZCkpID8gTnVtYmVySW1wOjpzdGF0aWNOYU4gOiBuZXcgTnVtYmVySW1wKGQp
KSkKLXsgfQotCi1WYWx1ZTo6VmFsdWUobG9uZyBsKQotICAgIDogcmVwKFNpbXBsZU51bWJlcjo6
Zml0cyhsKSA/IFNpbXBsZU51bWJlcjo6bWFrZShsKSA6IG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nh
c3Q8ZG91YmxlPihsKSkpIHsgfQotCi1WYWx1ZTo6VmFsdWUodW5zaWduZWQgbG9uZyBsKQotICAg
IDogcmVwKFNpbXBsZU51bWJlcjo6Zml0cyhsKSA/IFNpbXBsZU51bWJlcjo6bWFrZShsKSA6IG5l
dyBOdW1iZXJJbXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihsKSkpIHsgfQotCi1WYWx1ZTo6VmFsdWUo
Y29uc3QgY2hhciAqcykgOiByZXAobmV3IFN0cmluZ0ltcChzKSkgeyB9Ci0KLVZhbHVlOjpWYWx1
ZShjb25zdCBVU3RyaW5nICZzKSA6IHJlcChuZXcgU3RyaW5nSW1wKHMpKSB7IH0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVuZGVmaW5lZCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotVW5kZWZpbmVkOjpVbmRlZmluZWQoKSA6IFZhbHVlKFVuZGVm
aW5lZEltcDo6c3RhdGljVW5kZWZpbmVkKQotewotfQotCi1VbmRlZmluZWQgVW5kZWZpbmVkOjpk
eW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdikKLXsKLSAgaWYgKHYuaXNOdWxsKCkgfHwgdi50eXBl
KCkgIT0gVW5kZWZpbmVkVHlwZSkKLSAgICByZXR1cm4gVW5kZWZpbmVkKDApOwotCi0gIHJldHVy
biBVbmRlZmluZWQoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51
bGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTnVsbDo6TnVs
bCgpIDogVmFsdWUoTnVsbEltcDo6c3RhdGljTnVsbCkKLXsKLX0KLQotTnVsbCBOdWxsOjpkeW5h
bWljQ2FzdChjb25zdCBWYWx1ZSAmdikKLXsKLSAgaWYgKHYuaXNOdWxsKCkgfHwgdi50eXBlKCkg
IT0gTnVsbFR5cGUpCi0gICAgcmV0dXJuIE51bGwoMCk7Ci0KLSAgcmV0dXJuIE51bGwoKTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW4gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQm9vbGVhbjo6Qm9vbGVhbihib29sIGIpCi0g
IDogVmFsdWUoYiA/IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29sZWFuSW1wOjpzdGF0aWNG
YWxzZSkKK1VTdHJpbmcgQWxsb2NhdGVkVmFsdWVJbXA6OmdldFN0cmluZygpIGNvbnN0CiB7Cisg
ICAgcmV0dXJuIGlzU3RyaW5nKCkgPyBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmdJbXAgKj4odGhp
cyktPnZhbHVlKCkgOiBVU3RyaW5nKCk7CiB9CiAKLWJvb2wgQm9vbGVhbjo6dmFsdWUoKSBjb25z
dAotewotICBhc3NlcnQocmVwKTsKLSAgcmV0dXJuICgoQm9vbGVhbkltcCopcmVwKS0+dmFsdWUo
KTsKLX0KLQotQm9vbGVhbiBCb29sZWFuOjpkeW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdikKLXsK
LSAgaWYgKHYuaXNOdWxsKCkgfHwgdi50eXBlKCkgIT0gQm9vbGVhblR5cGUpCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEJvb2xlYW5JbXAqPigwKTsKLQotICByZXR1cm4gc3RhdGljX2Nhc3Q8Qm9v
bGVhbkltcCo+KHYuaW1wKCkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gU3RyaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJp
bmc6OlN0cmluZyhjb25zdCBVU3RyaW5nICZzKSA6IFZhbHVlKG5ldyBTdHJpbmdJbXAocykpCi17
Ci19Ci0KLVVTdHJpbmcgU3RyaW5nOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gIGFzc2VydChyZXApOwot
ICByZXR1cm4gKChTdHJpbmdJbXAqKXJlcCktPnZhbHVlKCk7Ci19Ci0KLVN0cmluZyBTdHJpbmc6
OmR5bmFtaWNDYXN0KGNvbnN0IFZhbHVlICZ2KQotewotICBpZiAodi5pc051bGwoKSB8fCB2LnR5
cGUoKSAhPSBTdHJpbmdUeXBlKQotICAgIHJldHVybiBTdHJpbmcoMCk7Ci0KLSAgcmV0dXJuIFN0
cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPih2LmltcCgpKSk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdW1iZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLU51bWJlcjo6TnVtYmVyKGludCBpKQotICA6IFZhbHVlKFNpbXBsZU51
bWJlcjo6Zml0cyhpKSA/IFNpbXBsZU51bWJlcjo6bWFrZShpKSA6IG5ldyBOdW1iZXJJbXAoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihpKSkpIHsgfQotCi1OdW1iZXI6Ok51bWJlcih1bnNpZ25lZCBpbnQg
dSkKLSAgOiBWYWx1ZShTaW1wbGVOdW1iZXI6OmZpdHModSkgPyBTaW1wbGVOdW1iZXI6Om1ha2Uo
dSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4odSkpKSB7IH0KLQotTnVtYmVy
OjpOdW1iZXIoZG91YmxlIGQpCi0gIDogVmFsdWUoU2ltcGxlTnVtYmVyOjpmaXRzKGQpCi0gICAg
ICAgID8gU2ltcGxlTnVtYmVyOjptYWtlKHN0YXRpY19jYXN0PGxvbmc+KGQpKQotICAgICAgICA6
IChLSlM6OmlzTmFOKGQpID8gTnVtYmVySW1wOjpzdGF0aWNOYU4gOiBuZXcgTnVtYmVySW1wKGQp
KSkKLXsgfQotCi1OdW1iZXI6Ok51bWJlcihkb3VibGUgZCwgYm9vbCBrbm93blRvQmVJbnRlZ2Vy
KQotICA6IFZhbHVlKChrbm93blRvQmVJbnRlZ2VyID8gU2ltcGxlTnVtYmVyOjppbnRlZ2VyRml0
cyhkKSA6IFNpbXBsZU51bWJlcjo6Zml0cyhkKSkKLSAgICAgICAgPyBTaW1wbGVOdW1iZXI6Om1h
a2Uoc3RhdGljX2Nhc3Q8bG9uZz4oZCkpCi0gICAgICAgIDogKCgha25vd25Ub0JlSW50ZWdlciAm
JiBLSlM6OmlzTmFOKGQpKSA/IE51bWJlckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChk
KSkpCi17IH0KLQotTnVtYmVyOjpOdW1iZXIobG9uZyBpbnQgbCkKLSAgOiBWYWx1ZShTaW1wbGVO
dW1iZXI6OmZpdHMobCkgPyBTaW1wbGVOdW1iZXI6Om1ha2UobCkgOiBuZXcgTnVtYmVySW1wKHN0
YXRpY19jYXN0PGRvdWJsZT4obCkpKSB7IH0KLQotTnVtYmVyOjpOdW1iZXIobG9uZyB1bnNpZ25l
ZCBpbnQgbCkKLSAgOiBWYWx1ZShTaW1wbGVOdW1iZXI6OmZpdHMobCkgPyBTaW1wbGVOdW1iZXI6
Om1ha2UobCkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4obCkpKSB7IH0KLQot
TnVtYmVyIE51bWJlcjo6ZHluYW1pY0Nhc3QoY29uc3QgVmFsdWUgJnYpCi17Ci0gIGlmICh2Lmlz
TnVsbCgpIHx8IHYudHlwZSgpICE9IE51bWJlclR5cGUpCi0gICAgcmV0dXJuIE51bWJlcigoTnVt
YmVySW1wKikwKTsKLQotICByZXR1cm4gTnVtYmVyKHN0YXRpY19jYXN0PE51bWJlckltcCo+KHYu
aW1wKCkpKTsKLX0KLQotZG91YmxlIE51bWJlcjo6dmFsdWUoKSBjb25zdAotewotICBpZiAoU2lt
cGxlTnVtYmVyOjppcyhyZXApKQotICAgIHJldHVybiAoZG91YmxlKVNpbXBsZU51bWJlcjo6dmFs
dWUocmVwKTsKLSAgYXNzZXJ0KHJlcCk7Ci0gIHJldHVybiAoKE51bWJlckltcCopcmVwKS0+dmFs
dWUoKTsKLX0KLQotaW50IE51bWJlcjo6aW50VmFsdWUoKSBjb25zdAotewotICBpZiAoU2ltcGxl
TnVtYmVyOjppcyhyZXApKQotICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OnZhbHVlKHJlcCk7Ci0g
IHJldHVybiAoaW50KSgoTnVtYmVySW1wKilyZXApLT52YWx1ZSgpOwotfQotCi1ib29sIE51bWJl
cjo6aXNOYU4oKSBjb25zdAotewotICByZXR1cm4gcmVwID09IE51bWJlckltcDo6c3RhdGljTmFO
OwotfQotCi1ib29sIE51bWJlcjo6aXNJbmYoKSBjb25zdAotewotICBpZiAoU2ltcGxlTnVtYmVy
OjppcyhyZXApKQotICAgIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIEtKUzo6aXNJbmYoKChOdW1i
ZXJJbXAqKXJlcCktPnZhbHVlKCkpOwotfQotCi1WYWx1ZUltcCAqdW5kZWZpbmVkKCkKLXsKLSAg
ICByZXR1cm4gVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQ7Ci19Ci0KLVZhbHVlSW1wICpu
dWxsKCkKK09iamVjdEltcCAqQWxsb2NhdGVkVmFsdWVJbXA6OmdldE9iamVjdCgpCiB7Ci0gICAg
cmV0dXJuIE51bGxJbXA6OnN0YXRpY051bGw7CisgICAgcmV0dXJuIGlzT2JqZWN0KCkgPyBzdGF0
aWNfY2FzdDxPYmplY3RJbXAgKj4odGhpcykgOiAwOwogfQogCi1WYWx1ZUltcCAqYm9vbGVhbihi
b29sIGIpCitjb25zdCBPYmplY3RJbXAgKkFsbG9jYXRlZFZhbHVlSW1wOjpnZXRPYmplY3QoKSBj
b25zdAogewotICAgIHJldHVybiBiID8gQm9vbGVhbkltcDo6c3RhdGljVHJ1ZSA6IEJvb2xlYW5J
bXA6OnN0YXRpY0ZhbHNlOworICAgIHJldHVybiBpc09iamVjdCgpID8gc3RhdGljX2Nhc3Q8Y29u
c3QgT2JqZWN0SW1wICo+KHRoaXMpIDogMDsKIH0KIAotVmFsdWVJbXAgKnN0cmluZyhjb25zdCBj
aGFyICpzKQorQWxsb2NhdGVkVmFsdWVJbXAgKmpzU3RyaW5nKGNvbnN0IGNoYXIgKnMpCiB7CiAg
ICAgcmV0dXJuIG5ldyBTdHJpbmdJbXAocyA/IHMgOiAiIik7CiB9CiAKLVZhbHVlSW1wICpzdHJp
bmcoY29uc3QgVVN0cmluZyAmcykKK0FsbG9jYXRlZFZhbHVlSW1wICpqc1N0cmluZyhjb25zdCBV
U3RyaW5nICZzKQogewogICAgIHJldHVybiBzLmlzTnVsbCgpID8gbmV3IFN0cmluZ0ltcCgiIikg
OiBuZXcgU3RyaW5nSW1wKHMpOwogfQogCi1WYWx1ZUltcCAqemVybygpCi17Ci0gICAgcmV0dXJu
IFNpbXBsZU51bWJlcjo6bWFrZSgwKTsKLX0KLQotVmFsdWVJbXAgKm9uZSgpCi17Ci0gICAgcmV0
dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgxKTsKLX0KLQotVmFsdWVJbXAgKnR3bygpCi17Ci0gICAg
cmV0dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgyKTsKLX0KLQotVmFsdWVJbXAgKm51bWJlcihpbnQg
aSkKK1ZhbHVlSW1wICpqc051bWJlcihpbnQgaSkKIHsKICAgICByZXR1cm4gU2ltcGxlTnVtYmVy
OjpmaXRzKGkpID8gU2ltcGxlTnVtYmVyOjptYWtlKGkpIDogbmV3IE51bWJlckltcChzdGF0aWNf
Y2FzdDxkb3VibGU+KGkpKTsKIH0KIAotVmFsdWVJbXAgKm51bWJlcih1bnNpZ25lZCBpKQorVmFs
dWVJbXAgKmpzTnVtYmVyKHVuc2lnbmVkIGkpCiB7CiAgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6
Zml0cyhpKSA/IFNpbXBsZU51bWJlcjo6bWFrZShpKSA6IG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nh
c3Q8ZG91YmxlPihpKSk7CiB9CiAKLVZhbHVlSW1wICpudW1iZXIobG9uZyBpKQorVmFsdWVJbXAg
KmpzTnVtYmVyKGxvbmcgaSkKIHsKICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjpmaXRzKGkpID8g
U2ltcGxlTnVtYmVyOjptYWtlKGkpIDogbmV3IE51bWJlckltcChzdGF0aWNfY2FzdDxkb3VibGU+
KGkpKTsKIH0KIAotVmFsdWVJbXAgKm51bWJlcih1bnNpZ25lZCBsb25nIGkpCitWYWx1ZUltcCAq
anNOdW1iZXIodW5zaWduZWQgbG9uZyBpKQogewogICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OmZp
dHMoaSkgPyBTaW1wbGVOdW1iZXI6Om1ha2UoaSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0
PGRvdWJsZT4oaSkpOwogfQogCi1WYWx1ZUltcCAqbnVtYmVyKGRvdWJsZSBkKQorVmFsdWVJbXAg
KmpzTnVtYmVyKGRvdWJsZSBkKQogewogICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OmZpdHMoZCkK
ICAgICAgICAgPyBTaW1wbGVOdW1iZXI6Om1ha2Uoc3RhdGljX2Nhc3Q8bG9uZz4oZCkpCi0gICAg
ICAgIDogKGlzTmFOKGQpID8gTnVtYmVySW1wOjpzdGF0aWNOYU4gOiBuZXcgTnVtYmVySW1wKGQp
KTsKKyAgICAgICAgOiAoaXNOYU4oZCkgPyBqc05hTigpIDogbmV3IE51bWJlckltcChkKSk7CiB9
CiAKLVZhbHVlSW1wICpudW1iZXIoZG91YmxlIGQsIGJvb2wga25vd25Ub0JlSW50ZWdlcikKK1Zh
bHVlSW1wICpqc051bWJlcihkb3VibGUgZCwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKQogewogICAg
IHJldHVybiAoa25vd25Ub0JlSW50ZWdlciA/IFNpbXBsZU51bWJlcjo6aW50ZWdlckZpdHMoZCkg
OiBTaW1wbGVOdW1iZXI6OmZpdHMoZCkpCiAgICAgICAgID8gU2ltcGxlTnVtYmVyOjptYWtlKHN0
YXRpY19jYXN0PGxvbmc+KGQpKQotICAgICAgICA6ICgoIWtub3duVG9CZUludGVnZXIgJiYgaXNO
YU4oZCkpID8gTnVtYmVySW1wOjpzdGF0aWNOYU4gOiBuZXcgTnVtYmVySW1wKGQpKTsKKyAgICAg
ICAgOiAoKCFrbm93blRvQmVJbnRlZ2VyICYmIGlzTmFOKGQpKSA/IGpzTmFOKCkgOiBuZXcgTnVt
YmVySW1wKGQpKTsKK30KKwordm9pZCBDb25zdGFudFZhbHVlczo6aW5pdCgpCit7CisgICAgdW5k
ZWZpbmVkID0gbmV3IFVuZGVmaW5lZEltcCgpOworICAgIG51bGwgPSBuZXcgTnVsbEltcCgpOwor
ICAgIGpzVHJ1ZSA9IG5ldyBCb29sZWFuSW1wKHRydWUpOworICAgIGpzRmFsc2UgPSBuZXcgQm9v
bGVhbkltcChmYWxzZSk7CisgICAgTmFOID0gbmV3IE51bWJlckltcCg6OktKUzo6TmFOKTsKK30K
Kwordm9pZCBDb25zdGFudFZhbHVlczo6Y2xlYXIoKQoreworICAgIHVuZGVmaW5lZCA9IE5VTEw7
CisgICAgbnVsbCA9IE5VTEw7CisgICAganNUcnVlID0gTlVMTDsKKyAgICBqc0ZhbHNlID0gTlVM
TDsKKyAgICBOYU4gPSBOVUxMOworfQorCit2b2lkIENvbnN0YW50VmFsdWVzOjptYXJrKCkKK3sK
KyAgICBpZiAoQWxsb2NhdGVkVmFsdWVJbXAgKnYgPSB1bmRlZmluZWQpCisgICAgICAgIGlmICgh
di0+bWFya2VkKCkpCisgICAgICAgICAgICB2LT5tYXJrKCk7CisgICAgaWYgKEFsbG9jYXRlZFZh
bHVlSW1wICp2ID0gbnVsbCkKKyAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkKKyAgICAgICAgICAg
IHYtPm1hcmsoKTsKKyAgICBpZiAoQWxsb2NhdGVkVmFsdWVJbXAgKnYgPSBqc1RydWUpCisgICAg
ICAgIGlmICghdi0+bWFya2VkKCkpCisgICAgICAgICAgICB2LT5tYXJrKCk7CisgICAgaWYgKEFs
bG9jYXRlZFZhbHVlSW1wICp2ID0ganNGYWxzZSkKKyAgICAgICAgaWYgKCF2LT5tYXJrZWQoKSkK
KyAgICAgICAgICAgIHYtPm1hcmsoKTsKKyAgICBpZiAoQWxsb2NhdGVkVmFsdWVJbXAgKnYgPSBO
YU4pCisgICAgICAgIGlmICghdi0+bWFya2VkKCkpCisgICAgICAgICAgICB2LT5tYXJrKCk7CiB9
CiAKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zMgpkaWZmIC1wIC11IC11IC1wIC1yMS4zMiBKYXZhU2NyaXB0Q29yZS9ranMvdmFs
dWUuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJMTQgSnVsIDIwMDUgMTg6Mjc6MDQg
LTAwMDAJMS4zMgorKysgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJNyBBdWcgMjAwNSAwNDo0
NDowOSAtMDAwMApAQCAtMSw5ICsxLDggQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0K
IC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsOCAr
MjEsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIF9LSlNfVkFMVUVfSF8KLSNkZWZpbmUgX0tKU19W
QUxVRV9IXworI2lmbmRlZiBLSlNfVkFMVUVfSAorI2RlZmluZSBLSlNfVkFMVUVfSAogCiAjaWZu
ZGVmIE5ERUJVRyAvLyBwcm90ZWN0aW9uIGFnYWluc3QgcHJvYmxlbXMgaWYgY29tbWl0dGluZyB3
aXRoIEtKU19WRVJCT1NFIG9uCiAKQEAgLTM0LDQzICszMywyMSBAQAogCiAjZW5kaWYKIAotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPiAvLyBOZWVkZWQgZm9yIHNpemVfdAotCi0jaW5jbHVkZSAidXN0cmlu
Zy5oIgotCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+IC8vIGZvciBz
aXplX3QKICNpbmNsdWRlICJzaW1wbGVfbnVtYmVyLmgiCi0KLS8vIFByaW1pdGl2ZSBkYXRhIHR5
cGVzCisjaW5jbHVkZSAidXN0cmluZy5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBW
YWx1ZTsKLSAgY2xhc3MgVmFsdWVJbXA7Ci0gIGNsYXNzIFZhbHVlSW1wUHJpdmF0ZTsKLSAgY2xh
c3MgVW5kZWZpbmVkOwotICBjbGFzcyBVbmRlZmluZWRJbXA7Ci0gIGNsYXNzIE51bGw7Ci0gIGNs
YXNzIE51bGxJbXA7Ci0gIGNsYXNzIEJvb2xlYW47Ci0gIGNsYXNzIEJvb2xlYW5JbXA7Ci0gIGNs
YXNzIFN0cmluZzsKLSAgY2xhc3MgU3RyaW5nSW1wOwotICBjbGFzcyBOdW1iZXI7Ci0gIGNsYXNz
IE51bWJlckltcDsKLSAgY2xhc3MgT2JqZWN0OwotICBjbGFzcyBPYmplY3RJbXA7Ci0gIGNsYXNz
IFJlZmVyZW5jZTsKLSAgY2xhc3MgUmVmZXJlbmNlSW1wOwotICBjbGFzcyBMaXN0OwotICBjbGFz
cyBMaXN0SW1wOwotICBjbGFzcyBDb21wbGV0aW9uOwotICBjbGFzcyBFeGVjU3RhdGU7Ci0gIGNs
YXNzIENsYXNzSW5mbzsKLQotICAvKioKLSAgICogUHJpbWl0aXZlIHR5cGVzCi0gICAqLwotICBl
bnVtIFR5cGUgeworY2xhc3MgQ2xhc3NJbmZvOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgT2Jq
ZWN0SW1wOworCisvKioKKyAqIFByaW1pdGl2ZSB0eXBlcworICovCitlbnVtIFR5cGUgewogICAg
IFVuc3BlY2lmaWVkVHlwZSAgID0gMCwKICAgICBVbmRlZmluZWRUeXBlICAgICA9IDEsCiAgICAg
TnVsbFR5cGUgICAgICAgICAgPSAyLApAQCAtNzgsNDMxICs1NSw0MDQgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgU3RyaW5nVHlwZSAgICAgICAgPSA0LAogICAgIE51bWJlclR5cGUgICAgICAgID0g
NSwKICAgICBPYmplY3RUeXBlICAgICAgICA9IDYKLSAgfTsKK307CiAKLSAgLyoqCi0gICAqIFZh
bHVlSW1wIGlzIHRoZSBiYXNlIHR5cGUgZm9yIGFsbCBwcmltaXRpdmVzIChVbmRlZmluZWQsIE51
bGwsIEJvb2xlYW4sCi0gICAqIFN0cmluZywgTnVtYmVyKSBhbmQgb2JqZWN0cyBpbiBFQ01BU2Ny
aXB0LgotICAgKgotICAgKiBOb3RlOiB5b3Ugc2hvdWxkIG5ldmVyIGluaGVyaXQgZnJvbSBWYWx1
ZUltcCBhcyBpdCBpcyBmb3IgcHJpbWl0aXZlIHR5cGVzCi0gICAqIG9ubHkgKGFsbCBvZiB3aGlj
aCBhcmUgcHJvdmlkZWQgaW50ZXJuYWxseSBieSBLSlMpLiBJbnN0ZWFkLCBpbmhlcml0IGZyb20K
LSAgICogT2JqZWN0SW1wLgotICAgKi8KLSAgY2xhc3MgVmFsdWVJbXAgewotICAgIGZyaWVuZCBj
bGFzcyBDb2xsZWN0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFZhbHVlOwotICAgIGZyaWVuZCBjbGFz
cyBDb250ZXh0SW1wOwotICAgIGZyaWVuZCBjbGFzcyBGdW5jdGlvbkNhbGxOb2RlOwotICBwdWJs
aWM6Ci0gICAgVmFsdWVJbXAoKSA6IF9tYXJrZWQoZmFsc2UpIHsgfQotICAgIHZpcnR1YWwgflZh
bHVlSW1wKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwotICAgIGJvb2wgbWFya2Vk
KCkgY29uc3Q7Ci0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7Ci0gICAgdm9pZCBvcGVy
YXRvciBkZWxldGUodm9pZCopOworLyoqCisgKiBWYWx1ZUltcCBpcyB0aGUgYmFzZSB0eXBlIGZv
ciBhbGwgcHJpbWl0aXZlcyAoVW5kZWZpbmVkLCBOdWxsLCBCb29sZWFuLAorICogU3RyaW5nLCBO
dW1iZXIpIGFuZCBvYmplY3RzIGluIEVDTUFTY3JpcHQuCisgKgorICogTm90ZTogeW91IHNob3Vs
ZCBuZXZlciBpbmhlcml0IGZyb20gVmFsdWVJbXAgYXMgaXQgaXMgZm9yIHByaW1pdGl2ZSB0eXBl
cworICogb25seSAoYWxsIG9mIHdoaWNoIGFyZSBwcm92aWRlZCBpbnRlcm5hbGx5IGJ5IEtKUyku
IEluc3RlYWQsIGluaGVyaXQgZnJvbQorICogT2JqZWN0SW1wLgorICovCitjbGFzcyBWYWx1ZUlt
cCB7CisgICAgZnJpZW5kIGNsYXNzIEFsbG9jYXRlZFZhbHVlSW1wOyAvLyBzbyBpdCBjYW4gZGVy
aXZlIGZyb20gdGhpcyBjbGFzcworICAgIGZyaWVuZCBjbGFzcyBQcm90ZWN0ZWRWYWx1ZXM7IC8v
IHNvIGl0IGNhbiBjYWxsIGRvd25jYXN0KCkKKworcHJpdmF0ZToKKyAgICBWYWx1ZUltcCgpOwor
ICAgIH5WYWx1ZUltcCgpOworCitwdWJsaWM6CisgICAgLy8gUXVlcnlpbmcgdGhlIHR5cGUuCisg
ICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0OworICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7CisgICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0
OworICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0
OworICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKyAgICBib29sIGlzT2JqZWN0KCkgY29uc3Q7
CisgICAgYm9vbCBpc09iamVjdChjb25zdCBDbGFzc0luZm8gKikgY29uc3Q7CisKKyAgICAvLyBF
eHRyYWN0aW5nIHRoZSB2YWx1ZS4KKyAgICBib29sIGdldEJvb2xlYW4oYm9vbCYpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0TnVtYmVyKGRvdWJsZSYpIGNvbnN0OworICAgIGRvdWJsZSBnZXROdW1iZXIo
KSBjb25zdDsgLy8gTmFOIGlmIG5vdCBhIG51bWJlcgorICAgIGJvb2wgZ2V0U3RyaW5nKFVTdHJp
bmcmKSBjb25zdDsKKyAgICBVU3RyaW5nIGdldFN0cmluZygpIGNvbnN0OyAvLyBudWxsIHN0cmlu
ZyBpZiBub3QgYSBzdHJpbmcKKyAgICBPYmplY3RJbXAgKmdldE9iamVjdCgpOyAvLyBOVUxMIGlm
IG5vdCBhbiBvYmplY3QKKyAgICBjb25zdCBPYmplY3RJbXAgKmdldE9iamVjdCgpIGNvbnN0OyAv
LyBOVUxMIGlmIG5vdCBhbiBvYmplY3QKKworICAgIC8vIEV4dHJhY3RpbmcgaW50ZWdlciB2YWx1
ZXMuCisgICAgYm9vbCBnZXRVSW50MzIodWludDMyX3QmKSBjb25zdDsKKworICAgIC8vIEJhc2lj
IGNvbnZlcnNpb25zLgorICAgIFZhbHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMs
IFR5cGUgcHJlZmVycmVkVHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CisgICAgYm9vbCB0
b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVj
LCBib29sJiBrbm93blRvQmVJbnRlZ2VyKSBjb25zdDsKKyAgICBVU3RyaW5nIHRvU3RyaW5nKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CisgICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0OwogCisgICAgLy8gSW50ZWdlciBjb252ZXJzaW9ucy4KICAgICBkb3VibGUg
dG9JbnRlZ2VyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgaW50MzJfdCB0b0ludDMyKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKICAgICB1aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwogCi0gICAgLy8gRGlzcGF0Y2ggd3JhcHBlcnMgdGhhdCBoYW5kbGUgdGhlIHNwZWNpYWwgc21h
bGwgbnVtYmVyIGNhc2UKLQotICAgIFR5cGUgZGlzcGF0Y2hUeXBlKCkgY29uc3Q7Ci0gICAgVmFs
dWUgZGlzcGF0Y2hUb1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlw
ZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7Ci0gICAgYm9vbCBkaXNwYXRjaFRvQm9vbGVhbihF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotICAgIGRvdWJsZSBkaXNwYXRjaFRvTnVtYmVyKEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgZG91YmxlIGRpc3BhdGNoVG9OdW1iZXIoRXhlY1N0YXRl
ICpleGVjLCBib29sICZrbm93blRvQmVJbnRlZ2VyKSBjb25zdDsKLSAgICBVU3RyaW5nIGRpc3Bh
dGNoVG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBib29sIGRpc3BhdGNoVG9V
SW50MzIodWludDMyX3QmKSBjb25zdDsKLSAgICBPYmplY3QgZGlzcGF0Y2hUb09iamVjdChFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0
dXJuIGRpc3BhdGNoVHlwZSgpID09IFVuZGVmaW5lZFR5cGU7IH0KLSAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuIGRpc3BhdGNoVHlwZSgpID09IE51bGxUeXBlOyB9Ci0gICAgYm9vbCBp
c1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0OwotCi0gICAgYm9vbCBpc0Jvb2xlYW4oKSBjb25zdCB7
IHJldHVybiBkaXNwYXRjaFR5cGUoKSA9PSBCb29sZWFuVHlwZTsgfQotICAgIGJvb2wgaXNCb29s
ZWFuKGJvb2wgJmJvb2xlYW5WYWx1ZSkgY29uc3Q7CisgICAgLy8gR2FyYmFnZSBjb2xsZWN0aW9u
LgorICAgIHZvaWQgbWFyaygpOworICAgIGJvb2wgbWFya2VkKCkgY29uc3Q7CiAKLSAgICBib29s
IGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gZGlzcGF0Y2hUeXBlKCkgPT0gTnVtYmVyVHlwZTsg
fQotICAgIGJvb2wgaXNOdW1iZXIoZG91YmxlICZudW1lcmljVmFsdWUpIGNvbnN0OworcHJpdmF0
ZToKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorICAgIEFsbG9jYXRlZFZhbHVlSW1w
ICpkb3duY2FzdCgpOworICAgIGNvbnN0IEFsbG9jYXRlZFZhbHVlSW1wICpkb3duY2FzdCgpIGNv
bnN0OwogCi0gICAgYm9vbCBpc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIGRpc3BhdGNoVHlwZSgp
ID09IFN0cmluZ1R5cGU7IH0KLSAgICBib29sIGlzU3RyaW5nKFVTdHJpbmcgJnN0cmluZ1ZhbHVl
KSBjb25zdDsKLSAgICBVU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlm
IG5vdCBhIHN0cmluZwotCi0gICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGRpc3Bh
dGNoVHlwZSgpID09IE9iamVjdFR5cGU7IH0KLSAgICBib29sIGlzT2JqZWN0KE9iamVjdEltcCAq
Jm9iamVjdCk7Ci0gICAgT2JqZWN0SW1wICphc09iamVjdCgpOyAvLyAwIGlmIG5vdCBhbiBvYmpl
Y3QKLSAgICBib29sIGlzT2JqZWN0KGNvbnN0IENsYXNzSW5mbyAqKSBjb25zdDsgLy8gY29tYmlu
ZSBhbiBpc09iamVjdCBjaGVjayB3aXRoIGFuIGluaGVyaXRzIGNoZWNrCisgICAgLy8gR2l2ZSBh
IGNvbXBpbGUgdGltZSBlcnJvciBpZiB3ZSB0cnkgdG8gY29weSBvbmUgb2YgdGhlc2UuCisgICAg
VmFsdWVJbXAoY29uc3QgVmFsdWVJbXAmKTsKKyAgICBWYWx1ZUltcCYgb3BlcmF0b3I9KGNvbnN0
IFZhbHVlSW1wJik7Cit9OwogCi0gIHByaXZhdGU6CitjbGFzcyBBbGxvY2F0ZWRWYWx1ZUltcCA6
IHB1YmxpYyBWYWx1ZUltcCB7CisgICAgZnJpZW5kIGNsYXNzIENvbGxlY3RvcjsKKyAgICBmcmll
bmQgY2xhc3MgVW5kZWZpbmVkSW1wOworICAgIGZyaWVuZCBjbGFzcyBOdWxsSW1wOworICAgIGZy
aWVuZCBjbGFzcyBCb29sZWFuSW1wOworICAgIGZyaWVuZCBjbGFzcyBOdW1iZXJJbXA7CisgICAg
ZnJpZW5kIGNsYXNzIFN0cmluZ0ltcDsKKyAgICBmcmllbmQgY2xhc3MgT2JqZWN0SW1wOworcHJp
dmF0ZToKKyAgICBBbGxvY2F0ZWRWYWx1ZUltcCgpOworICAgIHZpcnR1YWwgfkFsbG9jYXRlZFZh
bHVlSW1wKCk7CitwdWJsaWM6CisgICAgLy8gUXVlcnlpbmcgdGhlIHR5cGUuCiAgICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAgYm9vbCBpc0Jvb2xlYW4oKSBjb25zdDsKKyAg
ICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0cmluZygpIGNvbnN0OworICAg
IGJvb2wgaXNPYmplY3QoKSBjb25zdDsKKyAgICBib29sIGlzT2JqZWN0KGNvbnN0IENsYXNzSW5m
byAqKSBjb25zdDsKKworICAgIC8vIEV4dHJhY3RpbmcgdGhlIHZhbHVlLgorICAgIGJvb2wgZ2V0
Qm9vbGVhbihib29sJikgY29uc3Q7CisgICAgYm9vbCBnZXROdW1iZXIoZG91YmxlJikgY29uc3Q7
CisgICAgZG91YmxlIGdldE51bWJlcigpIGNvbnN0OyAvLyBOYU4gaWYgbm90IGEgbnVtYmVyCisg
ICAgYm9vbCBnZXRTdHJpbmcoVVN0cmluZyYpIGNvbnN0OworICAgIFVTdHJpbmcgZ2V0U3RyaW5n
KCkgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlmIG5vdCBhIHN0cmluZworICAgIE9iamVjdEltcCAq
Z2V0T2JqZWN0KCk7IC8vIE5VTEwgaWYgbm90IGFuIG9iamVjdAorICAgIGNvbnN0IE9iamVjdElt
cCAqZ2V0T2JqZWN0KCkgY29uc3Q7IC8vIE5VTEwgaWYgbm90IGFuIG9iamVjdAogCi0gICAgLy8g
VGhlIGNvbnZlcnNpb24gb3BlcmF0aW9ucworICAgIC8vIEV4dHJhY3RpbmcgaW50ZWdlciB2YWx1
ZXMuCisgICAgdmlydHVhbCBib29sIGdldFVJbnQzMih1aW50MzJfdCYpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVk
VHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3QgPSAwOworICAgIC8vIEJhc2ljIGNvbnZlcnNp
b25zLgorICAgIHZpcnR1YWwgVmFsdWVJbXAgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywg
VHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0ID0gMDsKKyAgICBkb3Vi
bGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjLCBib29sJiBrbm93blRvQmVJbnRlZ2VyKSBjb25z
dDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBPYmplY3QgdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHRvVUludDMyKHVuc2lnbmVkJikgY29uc3Q7CisgICAgdmly
dHVhbCBPYmplY3RJbXAgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgPSAwOwogCi0g
ICAgYm9vbCBfbWFya2VkOworICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICB2b2lkICpv
cGVyYXRvciBuZXcoc2l6ZV90KTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAgIGJvb2wg
bWFya2VkKCkgY29uc3Q7CiAKLSAgICAvLyBHaXZlIGEgY29tcGlsZSB0aW1lIGVycm9yIGlmIHdl
IHRyeSB0byBjb3B5IG9uZSBvZiB0aGVzZS4KLSAgICBWYWx1ZUltcChjb25zdCBWYWx1ZUltcCYp
OwotICAgIFZhbHVlSW1wJiBvcGVyYXRvcj0oY29uc3QgVmFsdWVJbXAmKTsKLSAgfTsKLSAgCi0g
IFZhbHVlSW1wICp1bmRlZmluZWQoKTsKLSAgVmFsdWVJbXAgKm51bGwoKTsKLQotICBWYWx1ZUlt
cCAqYm9vbGVhbihib29sID0gZmFsc2UpOwotCi0gIFZhbHVlSW1wICpzdHJpbmcoY29uc3QgY2hh
ciAqID0gIiIpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgMAotICBWYWx1ZUlt
cCAqc3RyaW5nKGNvbnN0IFVTdHJpbmcgJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBh
c3NlZCBudWxsIHN0cmluZwotCi0gIFZhbHVlSW1wICp6ZXJvKCk7Ci0gIFZhbHVlSW1wICpvbmUo
KTsKLSAgVmFsdWVJbXAgKnR3bygpOwotICBWYWx1ZUltcCAqbnVtYmVyKGludCk7Ci0gIFZhbHVl
SW1wICpudW1iZXIodW5zaWduZWQpOwotICBWYWx1ZUltcCAqbnVtYmVyKGxvbmcpOwotICBWYWx1
ZUltcCAqbnVtYmVyKHVuc2lnbmVkIGxvbmcpOwotICBWYWx1ZUltcCAqbnVtYmVyKGRvdWJsZSk7
Ci0gIFZhbHVlSW1wICpudW1iZXIoZG91YmxlLCBib29sIGtub3duVG9CZUludGVnZXIpOwotCi0g
IC8qKgotICAgKiBGSVhNRTogTm93IHRoYXQgd2UgaGF2ZSBjb25zZXJ2YXRpdmUgR0MsIHdlIHdp
bGwgYmUgZGVwcmVjYXRpbmcgdGhlCi0gICAqIFZhbHVlIHdyYXBwZXJzIGFuZCBwcm9ncmFtbWlu
ZyBpbiB0ZXJtcyBvZiB0aGUgVmFsdWVJbXAgb2JqZWN0cy4KLSAgICogRXZlbnR1YWxseSB3ZSB3
aWxsIHJlbW92ZSBWYWx1ZSBhbmQgcmVuYW1lIFZhbHVlSW1wIHRvIFZhbHVlLgotICAgKiBXZSds
bCBuZWVkIHRvIG1vdmUgdGhlIGNvbW1lbnRzIGZyb20gVmFsdWUgdG8gVmFsdWVJbXAgdG9vLgot
ICAgKi8KLSAgLyoqCi0gICAqIFZhbHVlIG9iamVjdHMgYXJlIGFjdCBhcyB3cmFwcGVycyAoInNt
YXJ0IHBvaW50ZXJzIikgYXJvdW5kIFZhbHVlSW1wCi0gICAqIG9iamVjdHMgYW5kIHRoZWlyIGRl
c2NlbmRlbnRzLiBJbnN0ZWFkIG9mIHVzaW5nIFZhbHVlSW1wcwotICAgKiAoYW5kIGRlcml2YXRp
dmVzKSBkdXJpbmcgbm9ybWFsIHByb2dyYW0gZXhlY3V0aW9uLCB5b3Ugc2hvdWxkIHVzZSBhCi0g
ICAqIFZhbHVlLWRlcml2ZWQgY2xhc3MuCi0gICAqCi0gICAqIFZhbHVlIG1haW50YWlucyBhIHBv
aW50ZXIgdG8gYSBWYWx1ZUltcCBvYmplY3QgYW5kIHVzZXMgYSByZWZlcmVuY2UKLSAgICogY291
bnRpbmcgc2NoZW1lIHRvIGVuc3VyZSB0aGF0IHRoZSBWYWx1ZUltcCBvYmplY3QgaXMgbm90IGRl
bGV0ZWQgb3IKLSAgICogZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAqCi0gICAqIE5vdGU6IFRoZSBj
b252ZXJzaW9uIG9wZXJhdGlvbnMgYWxsIHJldHVybiB2YWx1ZXMgb2YgdmFyaW91cyB0eXBlcyAt
Ci0gICAqIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgY29udmVyc2lvbiwgYW4gZXJyb3Igb2Jq
ZWN0IHdpbGwgaW5zdGVhZAotICAgKiBiZSByZXR1cm5lZCAod2hlcmUgcG9zc2libGUpLCBhbmQg
dGhlIGV4ZWN1dGlvbiBzdGF0ZSdzIGV4Y2VwdGlvbgotICAgKiB3aWxsIGJlIHNldCBhcHByb3By
aWF0ZWx5LgotICAgKi8KLSAgY2xhc3MgVmFsdWUgewotICBwdWJsaWM6Ci0gICAgVmFsdWUoKSA6
IHJlcCgwKSB7IH0KLSAgICBWYWx1ZShWYWx1ZUltcCAqdikgOiByZXAodikgeyB9Ci0gICAgb3Bl
cmF0b3IgVmFsdWVJbXAgKigpIGNvbnN0IHsgcmV0dXJuIHJlcDsgfQotCi0gICAgZXhwbGljaXQg
VmFsdWUoYm9vbCk7Ci0KLSAgICBleHBsaWNpdCBWYWx1ZShpbnQpOwotICAgIGV4cGxpY2l0IFZh
bHVlKHVuc2lnbmVkKTsKLSAgICBleHBsaWNpdCBWYWx1ZShkb3VibGUpOwotICAgIGV4cGxpY2l0
IFZhbHVlKGxvbmcpOwotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGxvbmcpOwotICAgIFZh
bHVlKGRvdWJsZSwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKTsKLQotICAgIGV4cGxpY2l0IFZhbHVl
KGNvbnN0IGNoYXIgKik7Ci0gICAgVmFsdWUoY29uc3QgVVN0cmluZyAmKTsKLSAgICAKLSAgICAv
KioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSB2YWxpZCB2YWx1ZS4g
QW4gaW52YWxpZCB2YWx1ZQotICAgICAqIGhhcyBhIDAgaW1wbGVtZW50YXRpb24gcG9pbnRlciBh
bmQgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgotICAgICAqIGFueSBvdGhlciBvcGVyYXRpb24gdGhh
biB0aGlzIGNoZWNrLiBDdXJyZW50IHVzZTogYXMgYQotICAgICAqIGRpc3RpbmN0IHJldHVybiB2
YWx1ZSBzaWduYWxsaW5nIGZhaWxpbmcgZHluYW1pY0Nhc3QoKSBjYWxscy4KLSAgICAgKi8KLSAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiByZXAgIT0gMDsgfQotICAgIC8qKgotICAg
ICAqIEBkZXByZWNhdGVkCi0gICAgICogVXNlICFpc1ZhbGlkKCkgaW5zdGVhZC4KLSAgICAgKi8K
LSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHJlcCA9PSAwOyB9Ci0gICAgVmFsdWVJ
bXAgKmltcCgpIGNvbnN0IHsgcmV0dXJuIHJlcDsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJu
cyB0aGUgdHlwZSBvZiB2YWx1ZS4gVGhpcyBpcyBvbmUgb2YgVW5kZWZpbmVkVHlwZSwgTnVsbFR5
cGUsCi0gICAgICogQm9vbGVhblR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIG9yIE9iamVj
dFR5cGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSB0eXBlIG9mIHZhbHVlCi0gICAgICov
Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gcmVwLT5kaXNwYXRjaFR5cGUoKTsgfQot
Ci0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBvZiBh
IHBhcnRpY3VsYXIgdHB5ZQotICAgICAqCi0gICAgICogQHBhcmFtIHQgVGhlIHR5cGUgdG8gY29t
cGFyZSB3aXRoCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBvZiB0aGUgc3Bl
Y2lmaWVkIHR5cGUsIG90aGVyd2lzZSBmYWxzZQotICAgICAqLwotICAgIGJvb2wgaXNBKFR5cGUg
dCkgY29uc3QgeyByZXR1cm4gcmVwLT5kaXNwYXRjaFR5cGUoKSA9PSB0OyB9Ci0KLSAgICAvKioK
LSAgICAgKiBQZXJmb3JtcyB0aGUgVG9QcmltaXRpdmUgdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlv
biBvbiB0aGlzIHZhbHVlCi0gICAgICogKEVDTUEgOS4xKQotICAgICAqLwotICAgIFZhbHVlIHRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICBUeXBlIHBy
ZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0Ci0gICAgICB7IHJldHVybiByZXAt
PmRpc3BhdGNoVG9QcmltaXRpdmUoZXhlYywgcHJlZmVycmVkVHlwZSk7IH0KLQotICAgIC8qKgot
ICAgICAqIFBlcmZvcm1zIHRoZSBUb0Jvb2xlYW4gdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBv
biB0aGlzIHZhbHVlIChFQ01BIDkuMikKLSAgICAgKi8KLSAgICBib29sIHRvQm9vbGVhbihFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hUb0Jvb2xlYW4oZXhlYyk7
IH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHRoZSBUb051bWJlciB0eXBlIGNvbnZlcnNp
b24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUgKEVDTUEgOS4zKQotICAgICAqLwotICAgIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hU
b051bWJlcihleGVjKTsgfQotICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMsIGJv
b2wgJmtub3duVG9CZUludGVnZXIpIGNvbnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hUb051bWJl
cihleGVjLCBrbm93blRvQmVJbnRlZ2VyKTsgfQotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMg
dGhlIFRvSW50ZWdlciB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUgKEVD
TUEgOS40KQotICAgICAqLwotICAgIGRvdWJsZSB0b0ludGVnZXIoRXhlY1N0YXRlICpleGVjKSBj
b25zdCB7IHJldHVybiByZXAtPnRvSW50ZWdlcihleGVjKTsgfQotCi0gICAgLyoqCi0gICAgICog
UGVyZm9ybXMgdGhlIFRvSW50MzIgdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlzIHZh
bHVlIChFQ01BIDkuNSkKLSAgICAgKi8KLSAgICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRlICpl
eGVjKSBjb25zdCB7IHJldHVybiByZXAtPnRvSW50MzIoZXhlYyk7IH0KLQotICAgIC8qKgotICAg
ICAqIFBlcmZvcm1zIHRoZSBUb1VpbnQzMiB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRo
aXMgdmFsdWUgKEVDTUEgOS42KQotICAgICAqLwotICAgIHVpbnQzMl90IHRvVUludDMyKEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3QgeyByZXR1cm4gcmVwLT50b1VJbnQzMihleGVjKTsgfQotCi0gICAg
LyoqCi0gICAgICogUGVyZm9ybXMgdGhlIFRvVWludDE2IHR5cGUgY29udmVyc2lvbiBvcGVyYXRp
b24gb24gdGhpcyB2YWx1ZSAoRUNNQSA5LjcpCi0gICAgICovCi0gICAgdWludDE2X3QgdG9VSW50
MTYoRXhlY1N0YXRlICpleGVjKSBjb25zdCB7IHJldHVybiByZXAtPnRvVUludDE2KGV4ZWMpOyB9
Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyB0aGUgVG9TdHJpbmcgdHlwZSBjb252ZXJzaW9u
IG9wZXJhdGlvbiBvbiB0aGlzIHZhbHVlIChFQ01BIDkuOCkKLSAgICAgKi8KLSAgICBVU3RyaW5n
IHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyByZXR1cm4gcmVwLT5kaXNwYXRjaFRv
U3RyaW5nKGV4ZWMpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyB0aGUgVG9PYmplY3Qg
dHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlzIHZhbHVlIChFQ01BIDkuOSkKLSAgICAg
Ki8KLSAgICBPYmplY3QgdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIENoZWNrcyBpZiB3ZSBjYW4gZG8gYSBsb3NzbGVzcyBjb252ZXJzaW9uIHRvIFVJ
bnQzMi4KLSAgICAgKi8KLSAgICBib29sIHRvVUludDMyKHVpbnQzMl90JiBpKSBjb25zdCB7IHJl
dHVybiByZXAtPmRpc3BhdGNoVG9VSW50MzIoaSk7IH0KLQotICBwcm90ZWN0ZWQ6Ci0gICAgVmFs
dWVJbXAgKnJlcDsKLSAgfTsKLQotICAvLyBQcmltaXRpdmUgdHlwZXMKLQotICAvKioKLSAgICog
UmVwcmVzZW50cyBhbiBwcmltaXRpdmUgVW5kZWZpbmVkIHZhbHVlLiBBbGwgaW5zdGFuY2VzIG9m
IHRoaXMgY2xhc3MKLSAgICogc2hhcmUgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gb2JqZWN0LCBz
byA9PSB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZQotICAgKiBmb3IgYW55IGNvbXBhcmlzb24gYmV0
d2VlbiB0d28gVW5kZWZpbmVkIG9iamVjdHMuCi0gICAqLwotICBjbGFzcyBVbmRlZmluZWQgOiBw
dWJsaWMgVmFsdWUgewotICBwdWJsaWM6Ci0gICAgVW5kZWZpbmVkKCk7Ci0KLSAgICAvKioKLSAg
ICAgKiBDb252ZXJ0cyBhIFZhbHVlIGludG8gYW4gVW5kZWZpbmVkLiBJZiB0aGUgdmFsdWUncyB0
eXBlIGlzIG5vdAotICAgICAqIFVuZGVmaW5lZFR5cGUsIGEgbnVsbCBvYmplY3Qgd2lsbCBiZSBy
ZXR1cm5lZCAoaS5lLiBvbmUgd2l0aCBpdCdzCi0gICAgICogaW50ZXJuYWwgcG9pbnRlciBzZXQg
dG8gMCkuIElmIHlvdSBkbyBub3Qga25vdyBmb3Igc3VyZSB3aGV0aGVyIHRoZQotICAgICAqIHZh
bHVlIGlzIG9mIHR5cGUgVW5kZWZpbmVkVHlwZSwgeW91IHNob3VsZCBjaGVjayB0aGUgaXNWYWxp
ZCgpCi0gICAgICogbWV0aG9kcyBhZnRlcndhcmRzIGJlZm9yZSBjYWxsaW5nIGFueSBtZXRob2Rz
IG9uIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBVbmRlZmluZWQKLSAgICAgKi8KLSAgICBzdGF0aWMgVW5kZWZpbmVk
IGR5bmFtaWNDYXN0KGNvbnN0IFZhbHVlICZ2KTsKLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgVW5kZWZpbmVkSW1wOwotICAgIGV4cGxpY2l0IFVuZGVmaW5lZChVbmRlZmluZWRJbXAgKnYp
OworcHJpdmF0ZToKKyAgICBib29sIG1fbWFya2VkOworfTsKKworQWxsb2NhdGVkVmFsdWVJbXAg
KmpzVW5kZWZpbmVkKCk7CitBbGxvY2F0ZWRWYWx1ZUltcCAqanNOdWxsKCk7CisKK0FsbG9jYXRl
ZFZhbHVlSW1wICpqc0Jvb2xlYW4oYm9vbCA9IGZhbHNlKTsKKworVmFsdWVJbXAgKmpzTnVtYmVy
KGRvdWJsZSk7CitWYWx1ZUltcCAqanNOdW1iZXIoZG91YmxlLCBib29sIGtub3duVG9CZUludGVn
ZXIpOworQWxsb2NhdGVkVmFsdWVJbXAgKmpzTmFOKCk7CitWYWx1ZUltcCAqanNaZXJvKCk7CitW
YWx1ZUltcCAqanNPbmUoKTsKK1ZhbHVlSW1wICpqc1R3bygpOworVmFsdWVJbXAgKmpzTnVtYmVy
KGludCk7CitWYWx1ZUltcCAqanNOdW1iZXIodW5zaWduZWQpOworVmFsdWVJbXAgKmpzTnVtYmVy
KGxvbmcpOworVmFsdWVJbXAgKmpzTnVtYmVyKHVuc2lnbmVkIGxvbmcpOworCitBbGxvY2F0ZWRW
YWx1ZUltcCAqanNTdHJpbmcoY29uc3QgVVN0cmluZyAmKTsgLy8gcmV0dXJucyBlbXB0eSBzdHJp
bmcgaWYgcGFzc2VkIG51bGwgc3RyaW5nCitBbGxvY2F0ZWRWYWx1ZUltcCAqanNTdHJpbmcoY29u
c3QgY2hhciAqID0gIiIpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgMAorCitl
eHRlcm4gY29uc3QgZG91YmxlIE5hTjsKK2V4dGVybiBjb25zdCBkb3VibGUgSW5mOworCitjbGFz
cyBDb25zdGFudFZhbHVlcyB7CitwdWJsaWM6CisgICAgc3RhdGljIEFsbG9jYXRlZFZhbHVlSW1w
ICp1bmRlZmluZWQ7CisgICAgc3RhdGljIEFsbG9jYXRlZFZhbHVlSW1wICpudWxsOworICAgIHN0
YXRpYyBBbGxvY2F0ZWRWYWx1ZUltcCAqanNGYWxzZTsKKyAgICBzdGF0aWMgQWxsb2NhdGVkVmFs
dWVJbXAgKmpzVHJ1ZTsKKyAgICBzdGF0aWMgQWxsb2NhdGVkVmFsdWVJbXAgKk5hTjsKKworICAg
IHN0YXRpYyB2b2lkIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhcigpOworICAgIHN0YXRp
YyB2b2lkIG1hcmsoKTsKK307CiAKLSAgfTsKK2lubGluZSBBbGxvY2F0ZWRWYWx1ZUltcCAqanNV
bmRlZmluZWQoKQoreworICAgIHJldHVybiBDb25zdGFudFZhbHVlczo6dW5kZWZpbmVkOworfQog
Ci0gIC8qKgotICAgKiBSZXByZXNlbnRzIGFuIHByaW1pdGl2ZSBOdWxsIHZhbHVlLiBBbGwgaW5z
dGFuY2VzIG9mIHRoaXMgY2xhc3MKLSAgICogc2hhcmUgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24g
b2JqZWN0LCBzbyA9PSB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZQotICAgKiBmb3IgYW55IGNvbXBh
cmlzb24gYmV0d2VlbiB0d28gTnVsbCBvYmplY3RzLgotICAgKi8KLSAgY2xhc3MgTnVsbCA6IHB1
YmxpYyBWYWx1ZSB7Ci0gIHB1YmxpYzoKLSAgICBOdWxsKCk7Ci0KLSAgICAvKioKLSAgICAgKiBD
b252ZXJ0cyBhIFZhbHVlIGludG8gYW4gTnVsbC4gSWYgdGhlIHZhbHVlJ3MgdHlwZSBpcyBub3Qg
TnVsbFR5cGUsCi0gICAgICogYSBudWxsIG9iamVjdCB3aWxsIGJlIHJldHVybmVkIChpLmUuIG9u
ZSB3aXRoIGl0J3MgaW50ZXJuYWwgcG9pbnRlciBzZXQKLSAgICAgKiB0byAwKS4gSWYgeW91IGRv
IG5vdCBrbm93IGZvciBzdXJlIHdoZXRoZXIgdGhlIHZhbHVlIGlzIG9mIHR5cGUKLSAgICAgKiBO
dWxsVHlwZSwgeW91IHNob3VsZCBjaGVjayB0aGUgaXNWYWxpZCgpIG1ldGhvZHMgYWZ0ZXJ3YXJk
cyBiZWZvcmUKLSAgICAgKiBjYWxsaW5nIGFueSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCB2YWx1
ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIE51bGwK
LSAgICAgKi8KLSAgICBzdGF0aWMgTnVsbCBkeW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdik7Ci0g
IHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE51bGxJbXA7Ci0gICAgZXhwbGljaXQgTnVsbChO
dWxsSW1wICp2KTsKLSAgfTsKK2lubGluZSBBbGxvY2F0ZWRWYWx1ZUltcCAqanNOdWxsKCkKK3sK
KyAgICByZXR1cm4gQ29uc3RhbnRWYWx1ZXM6Om51bGw7Cit9CiAKLSAgLyoqCi0gICAqIFJlcHJl
c2VudHMgYW4gcHJpbWl0aXZlIEJvb2xlYW4gdmFsdWUKLSAgICovCi0gIGNsYXNzIEJvb2xlYW4g
OiBwdWJsaWMgVmFsdWUgewotICBwdWJsaWM6Ci0gICAgQm9vbGVhbihib29sIGIgPSBmYWxzZSk7
Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIFZhbHVlIGludG8gYW4gQm9vbGVhbi4gSWYg
dGhlIHZhbHVlJ3MgdHlwZSBpcyBub3QgQm9vbGVhblR5cGUsCi0gICAgICogYSBudWxsIG9iamVj
dCB3aWxsIGJlIHJldHVybmVkIChpLmUuIG9uZSB3aXRoIGl0J3MgaW50ZXJuYWwgcG9pbnRlciBz
ZXQKLSAgICAgKiB0byAwKS4gSWYgeW91IGRvIG5vdCBrbm93IGZvciBzdXJlIHdoZXRoZXIgdGhl
IHZhbHVlIGlzIG9mIHR5cGUKLSAgICAgKiBCb29sZWFuVHlwZSwgeW91IHNob3VsZCBjaGVjayB0
aGUgaXNWYWxpZCgpIG1ldGhvZHMgYWZ0ZXJ3YXJkcyBiZWZvcmUKLSAgICAgKiBjYWxsaW5nIGFu
eSBtZXRob2RzIG9uIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4g
VGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIEJvb2xlYW4KLSAgICAgKi8KLSAgICBzdGF0aWMgQm9v
bGVhbiBkeW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdik7CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJ
bXAgKmpzQm9vbGVhbihib29sIGIpCit7CisgICAgcmV0dXJuIGIgPyBDb25zdGFudFZhbHVlczo6
anNUcnVlIDogQ29uc3RhbnRWYWx1ZXM6OmpzRmFsc2U7Cit9CiAKLSAgICBib29sIHZhbHVlKCkg
Y29uc3Q7Ci0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEJvb2xlYW5JbXA7Ci0gICAgZXhw
bGljaXQgQm9vbGVhbihCb29sZWFuSW1wICp2KTsKLSAgfTsKK2lubGluZSBBbGxvY2F0ZWRWYWx1
ZUltcCAqanNOYU4oKQoreworICAgIHJldHVybiBDb25zdGFudFZhbHVlczo6TmFOOworfQogCi0g
IC8qKgotICAgKiBSZXByZXNlbnRzIGFuIHByaW1pdGl2ZSBTdHJpbmcgdmFsdWUKLSAgICovCi0g
IGNsYXNzIFN0cmluZyA6IHB1YmxpYyBWYWx1ZSB7Ci0gIHB1YmxpYzoKLSAgICBTdHJpbmcoY29u
c3QgVVN0cmluZyAmcyA9ICIiKTsKLQotICAgIC8qKgotICAgICAqIENvbnZlcnRzIGEgVmFsdWUg
aW50byBhbiBTdHJpbmcuIElmIHRoZSB2YWx1ZSdzIHR5cGUgaXMgbm90IFN0cmluZ1R5cGUsCi0g
ICAgICogYSBudWxsIG9iamVjdCB3aWxsIGJlIHJldHVybmVkIChpLmUuIG9uZSB3aXRoIGl0J3Mg
aW50ZXJuYWwgcG9pbnRlciBzZXQKLSAgICAgKiB0byAwKS4gSWYgeW91IGRvIG5vdCBrbm93IGZv
ciBzdXJlIHdoZXRoZXIgdGhlIHZhbHVlIGlzIG9mIHR5cGUKLSAgICAgKiBTdHJpbmdUeXBlLCB5
b3Ugc2hvdWxkIGNoZWNrIHRoZSBpc1ZhbGlkKCkgbWV0aG9kcyBhZnRlcndhcmRzIGJlZm9yZQot
ICAgICAqIGNhbGxpbmcgYW55IG1ldGhvZHMgb24gdGhlIHJldHVybmVkIHZhbHVlLgotICAgICAq
Ci0gICAgICogQHJldHVybiBUaGUgdmFsdWUgY29udmVydGVkIHRvIGEgU3RyaW5nCi0gICAgICov
Ci0gICAgc3RhdGljIFN0cmluZyBkeW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdik7CitpbmxpbmUg
VmFsdWVJbXA6OlZhbHVlSW1wKCkKK3sKK30KIAotICAgIFVTdHJpbmcgdmFsdWUoKSBjb25zdDsK
LSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU3RyaW5nSW1wOwotICAgIGV4cGxpY2l0IFN0
cmluZyhTdHJpbmdJbXAgKnYpOwotICB9OworaW5saW5lIFZhbHVlSW1wOjp+VmFsdWVJbXAoKQor
eworfQogCi0gIGV4dGVybiBjb25zdCBkb3VibGUgTmFOOwotICBleHRlcm4gY29uc3QgZG91Ymxl
IEluZjsKK2lubGluZSBBbGxvY2F0ZWRWYWx1ZUltcDo6QWxsb2NhdGVkVmFsdWVJbXAoKQorICAg
IDogbV9tYXJrZWQoZmFsc2UpCit7Cit9CiAKLSAgLyoqCi0gICAqIFJlcHJlc2VudHMgYW4gcHJp
bWl0aXZlIE51bWJlciB2YWx1ZQotICAgKi8KLSAgY2xhc3MgTnVtYmVyIDogcHVibGljIFZhbHVl
IHsKLSAgICBmcmllbmQgY2xhc3MgVmFsdWVJbXA7Ci0gIHB1YmxpYzoKLSAgICBOdW1iZXIoaW50
IGkpOwotICAgIE51bWJlcih1bnNpZ25lZCBpbnQgdSk7Ci0gICAgTnVtYmVyKGRvdWJsZSBkID0g
MC4wKTsKLSAgICBOdW1iZXIobG9uZyBpbnQgbCk7Ci0gICAgTnVtYmVyKGxvbmcgdW5zaWduZWQg
aW50IGwpOwotICAgIE51bWJlcihkb3VibGUgZCwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKTsKLQot
ICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0OwotICAgIGludCBpbnRWYWx1ZSgpIGNvbnN0OwotCi0g
ICAgYm9vbCBpc05hTigpIGNvbnN0OwotICAgIGJvb2wgaXNJbmYoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIENvbnZlcnRzIGEgVmFsdWUgaW50byBhbiBOdW1iZXIuIElmIHRoZSB2YWx1ZSdz
IHR5cGUgaXMgbm90IE51bWJlclR5cGUsCi0gICAgICogYSBudWxsIG9iamVjdCB3aWxsIGJlIHJl
dHVybmVkIChpLmUuIG9uZSB3aXRoIGl0J3MgaW50ZXJuYWwgcG9pbnRlciBzZXQKLSAgICAgKiB0
byAwKS4gSWYgeW91IGRvIG5vdCBrbm93IGZvciBzdXJlIHdoZXRoZXIgdGhlIHZhbHVlIGlzIG9m
IHR5cGUKLSAgICAgKiBOdW1iZXJUeXBlLCB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBpc051bGwoKSBt
ZXRob2RzIGFmdGVyd2FyZHMgYmVmb3JlCi0gICAgICogY2FsbGluZyBhbnkgbWV0aG9kcyBvbiB0
aGUgcmV0dXJuZWQgdmFsdWUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYSBOdW1iZXIKLSAgICAgKi8KLSAgICBzdGF0aWMgTnVtYmVyIGR5bmFtaWNDYXN0
KGNvbnN0IFZhbHVlICZ2KTsKLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTnVtYmVySW1w
OwotICAgIGV4cGxpY2l0IE51bWJlcihOdW1iZXJJbXAgKnYpOwotICB9OworaW5saW5lIEFsbG9j
YXRlZFZhbHVlSW1wOjp+QWxsb2NhdGVkVmFsdWVJbXAoKQoreworfQogCi1pbmxpbmUgYm9vbCBW
YWx1ZUltcDo6bWFya2VkKCkgY29uc3QKK2lubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjpp
c0Jvb2xlYW4oKSBjb25zdAogewotICAvLyBTaW1wbGUgbnVtYmVycyBhcmUgYWx3YXlzIGNvbnNp
ZGVyZWQgbWFya2VkLgotICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSB8fCBfbWFya2Vk
OworICAgIHJldHVybiB0eXBlKCkgPT0gQm9vbGVhblR5cGU7CiB9CiAKLS8vIERpc3BhdGNoZXJz
IGZvciB2aXJ0dWFsIGZ1bmN0aW9ucywgdG8gc3BlY2lhbC1jYXNlIHNpbXBsZSBudW1iZXJzIHdo
aWNoCi0vLyB3b24ndCBiZSByZWFsIHBvaW50ZXJzLgoraW5saW5lIGJvb2wgQWxsb2NhdGVkVmFs
dWVJbXA6OmlzTnVtYmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHlwZSgpID09IE51bWJlclR5
cGU7Cit9CiAKLWlubGluZSBUeXBlIFZhbHVlSW1wOjpkaXNwYXRjaFR5cGUoKSBjb25zdAoraW5s
aW5lIGJvb2wgQWxsb2NhdGVkVmFsdWVJbXA6OmlzU3RyaW5nKCkgY29uc3QKIHsKLSAgaWYgKFNp
bXBsZU51bWJlcjo6aXModGhpcykpCi0gICAgcmV0dXJuIE51bWJlclR5cGU7Ci0gIHJldHVybiB0
eXBlKCk7CisgICAgcmV0dXJuIHR5cGUoKSA9PSBTdHJpbmdUeXBlOwogfQogCi1pbmxpbmUgVmFs
dWUgVmFsdWVJbXA6OmRpc3BhdGNoVG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHBy
ZWZlcnJlZFR5cGUpIGNvbnN0CitpbmxpbmUgYm9vbCBBbGxvY2F0ZWRWYWx1ZUltcDo6aXNPYmpl
Y3QoKSBjb25zdAogewotICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQotICAgICAgICBy
ZXR1cm4gVmFsdWUoY29uc3RfY2FzdDxWYWx1ZUltcCAqPih0aGlzKSk7Ci0gICAgcmV0dXJuIHRv
UHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZFR5cGUpOworICAgIHJldHVybiB0eXBlKCkgPT0gT2Jq
ZWN0VHlwZTsKIH0KIAotaW5saW5lIGJvb2wgVmFsdWVJbXA6OmRpc3BhdGNoVG9Cb29sZWFuKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3QKK2lubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjptYXJr
ZWQoKSBjb25zdAogewotICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQotICAgICAgICBy
ZXR1cm4gU2ltcGxlTnVtYmVyOjp2YWx1ZSh0aGlzKTsKLSAgICByZXR1cm4gdG9Cb29sZWFuKGV4
ZWMpOworICAgIHJldHVybiBtX21hcmtlZDsKIH0KIAotaW5saW5lIGRvdWJsZSBWYWx1ZUltcDo6
ZGlzcGF0Y2hUb051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitpbmxpbmUgdm9pZCBBbGxv
Y2F0ZWRWYWx1ZUltcDo6bWFyaygpCiB7Ci0gICAgaWYgKFNpbXBsZU51bWJlcjo6aXModGhpcykp
Ci0gICAgICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpOwotICAgIHJldHVybiB0
b051bWJlcihleGVjKTsKKyAgICBtX21hcmtlZCA9IHRydWU7Cit9CisKK2lubGluZSBBbGxvY2F0
ZWRWYWx1ZUltcCAqVmFsdWVJbXA6OmRvd25jYXN0KCkKK3sKKyAgICBhc3NlcnQoIVNpbXBsZU51
bWJlcjo6aXModGhpcykpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBbGxvY2F0ZWRWYWx1ZUlt
cCAqPih0aGlzKTsKK30KKworaW5saW5lIGNvbnN0IEFsbG9jYXRlZFZhbHVlSW1wICpWYWx1ZUlt
cDo6ZG93bmNhc3QoKSBjb25zdAoreworICAgIGFzc2VydCghU2ltcGxlTnVtYmVyOjppcyh0aGlz
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEFsbG9jYXRlZFZhbHVlSW1wICo+KHRo
aXMpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNVbmRlZmluZWQoKSBjb25zdAorewor
ICAgIHJldHVybiB0aGlzID09IGpzVW5kZWZpbmVkKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVl
SW1wOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiB0aGlzID09IGpzTnVsbCgpOwogfQog
Ci1pbmxpbmUgZG91YmxlIFZhbHVlSW1wOjpkaXNwYXRjaFRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhl
YywgYm9vbCAma25vd25Ub0JlSW50ZWdlcikgY29uc3QKK2lubGluZSBib29sIFZhbHVlSW1wOjpp
c1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRoaXMgPT0ganNVbmRlZmlu
ZWQoKSB8fCB0aGlzID09IGpzTnVsbCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNC
b29sZWFuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYg
ZG93bmNhc3QoKS0+aXNCb29sZWFuKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlSW1wOjppc051
bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXModGhpcykgfHwgZG93
bmNhc3QoKS0+aXNOdW1iZXIoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJbXA6OmlzU3RyaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNh
c3QoKS0+aXNTdHJpbmcoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJbXA6OmlzT2JqZWN0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNhc3Qo
KS0+aXNPYmplY3QoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJbXA6OmlzT2JqZWN0KGNvbnN0
IENsYXNzSW5mbyAqYykgY29uc3QKK3sKKyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhp
cykgJiYgZG93bmNhc3QoKS0+aXNPYmplY3QoYyk7Cit9CisKK2lubGluZSBib29sIFZhbHVlSW1w
OjpnZXRCb29sZWFuKGJvb2wmIHYpIGNvbnN0Cit7CisgICAgcmV0dXJuICFTaW1wbGVOdW1iZXI6
OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmdldEJvb2xlYW4odik7Cit9CisKK2lubGluZSBib29s
IFZhbHVlSW1wOjpnZXROdW1iZXIoZG91YmxlJiB2KSBjb25zdAogewogICAgIGlmIChTaW1wbGVO
dW1iZXI6OmlzKHRoaXMpKSB7Ci0gICAgICAgIGtub3duVG9CZUludGVnZXIgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjp2YWx1ZSh0aGlzKTsKKyAgICAgICAgdiA9IFNpbXBs
ZU51bWJlcjo6dmFsdWUodGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBr
bm93blRvQmVJbnRlZ2VyID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRvTnVtYmVyKGV4ZWMpOworICAg
IHJldHVybiBkb3duY2FzdCgpLT5nZXROdW1iZXIodik7Cit9CisKK2lubGluZSBkb3VibGUgVmFs
dWVJbXA6OmdldE51bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXMo
dGhpcykgPyBTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpIDogZG93bmNhc3QoKS0+Z2V0TnVtYmVy
KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlSW1wOjpnZXRTdHJpbmcoVVN0cmluZyYgcykgY29u
c3QKK3sKKyAgICByZXR1cm4gIVNpbXBsZU51bWJlcjo6aXModGhpcykgJiYgZG93bmNhc3QoKS0+
Z2V0U3RyaW5nKHMpOworfQorCitpbmxpbmUgVVN0cmluZyBWYWx1ZUltcDo6Z2V0U3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IFVTdHJpbmcoKSA6
IGRvd25jYXN0KCktPmdldFN0cmluZygpOworfQorCitpbmxpbmUgT2JqZWN0SW1wICpWYWx1ZUlt
cDo6Z2V0T2JqZWN0KCkKK3sKKyAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IDAg
OiBkb3duY2FzdCgpLT5nZXRPYmplY3QoKTsKIH0KIAotaW5saW5lIFVTdHJpbmcgVmFsdWVJbXA6
OmRpc3BhdGNoVG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdAoraW5saW5lIGNvbnN0IE9i
amVjdEltcCAqVmFsdWVJbXA6OmdldE9iamVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKFNpbXBsZU51
bWJlcjo6aXModGhpcykpCi0gICAgICAgIHJldHVybiBVU3RyaW5nOjpmcm9tKFNpbXBsZU51bWJl
cjo6dmFsdWUodGhpcykpOwotICAgIHJldHVybiB0b1N0cmluZyhleGVjKTsKKyAgICByZXR1cm4g
U2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IDAgOiBkb3duY2FzdCgpLT5nZXRPYmplY3QoKTsKIH0K
IAotaW5saW5lIGJvb2wgVmFsdWVJbXA6OmRpc3BhdGNoVG9VSW50MzIodWludDMyX3QmIHJlc3Vs
dCkgY29uc3QKK2lubGluZSBib29sIFZhbHVlSW1wOjpnZXRVSW50MzIodWludDMyX3QmIHYpIGNv
bnN0CiB7CiAgICAgaWYgKFNpbXBsZU51bWJlcjo6aXModGhpcykpIHsKICAgICAgICAgbG9uZyBp
ID0gU2ltcGxlTnVtYmVyOjp2YWx1ZSh0aGlzKTsKICAgICAgICAgaWYgKGkgPCAwKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQgPSBpOworICAgICAgICB2ID0gaTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiB0b1VJbnQzMihyZXN1bHQp
OworICAgIHJldHVybiBkb3duY2FzdCgpLT5nZXRVSW50MzIodik7Cit9CisKK2lubGluZSB2b2lk
IFZhbHVlSW1wOjptYXJrKCkKK3sKKyAgICBpZiAoIVNpbXBsZU51bWJlcjo6aXModGhpcykpCisg
ICAgICAgIGRvd25jYXN0KCktPm1hcmsoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJbXA6Om1h
cmtlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXModGhpcykgfHwgZG93
bmNhc3QoKS0+bWFya2VkKCk7Cit9CisKK2lubGluZSBUeXBlIFZhbHVlSW1wOjp0eXBlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IE51bWJlclR5cGUgOiBk
b3duY2FzdCgpLT50eXBlKCk7Cit9CisKK2lubGluZSBWYWx1ZUltcCAqVmFsdWVJbXA6OnRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAoreworICAg
IHJldHVybiBTaW1wbGVOdW1iZXI6OmlzKHRoaXMpID8gY29uc3RfY2FzdDxWYWx1ZUltcCAqPih0
aGlzKSA6IGRvd25jYXN0KCktPnRvUHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZFR5cGUpOworfQor
CitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QK
K3sKKyAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IFNpbXBsZU51bWJlcjo6dmFs
dWUodGhpcykgOiBkb3duY2FzdCgpLT50b0Jvb2xlYW4oZXhlYyk7Cit9CisKK2lubGluZSBkb3Vi
bGUgVmFsdWVJbXA6OnRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgICByZXR1
cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IFNpbXBsZU51bWJlcjo6dmFsdWUodGhpcykgOiBk
b3duY2FzdCgpLT50b051bWJlcihleGVjKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1ZUltcDo6
dG9OdW1iZXIoRXhlY1N0YXRlICpleGVjLCBib29sJiBrbm93blRvQmVJbnRlZ2VyKSBjb25zdAor
eworICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKSB7CisgICAgICAgIGtub3duVG9CZUlu
dGVnZXIgPSB0cnVlOworICAgICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjp2YWx1ZSh0aGlzKTsK
KyAgICB9CisgICAga25vd25Ub0JlSW50ZWdlciA9IGZhbHNlOworICAgIHJldHVybiBkb3duY2Fz
dCgpLT50b051bWJlcihleGVjKTsKK30KKworaW5saW5lIFVTdHJpbmcgVmFsdWVJbXA6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgIHJldHVybiBTaW1wbGVOdW1iZXI6Omlz
KHRoaXMpID8gVVN0cmluZzo6ZnJvbShTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpKSA6IGRvd25j
YXN0KCktPnRvU3RyaW5nKGV4ZWMpOworfQorCitpbmxpbmUgVmFsdWVJbXAgKmpzWmVybygpCit7
CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgwKTsKIH0KIAoraW5saW5lIFZhbHVlSW1w
ICpqc09uZSgpCit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgxKTsKK30KKworaW5s
aW5lIFZhbHVlSW1wICpqc1R3bygpCit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6bWFrZSgy
KTsKK30KKworLy8gY29tcGF0aWJpbGl0eSBuYW1lcyBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoYW5n
ZSBzbyBtdWNoIGNvZGUKKworaW5saW5lIEFsbG9jYXRlZFZhbHVlSW1wICpVbmRlZmluZWQoKSB7
IHJldHVybiBqc1VuZGVmaW5lZCgpOyB9CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKk51bGwo
KSB7IHJldHVybiBqc051bGwoKTsgfQoraW5saW5lIEFsbG9jYXRlZFZhbHVlSW1wICpCb29sZWFu
KGJvb2wgYikgeyByZXR1cm4ganNCb29sZWFuKGIpOyB9CitpbmxpbmUgVmFsdWVJbXAgKk51bWJl
cihkb3VibGUgbikgeyByZXR1cm4ganNOdW1iZXIobik7IH0KK2lubGluZSBWYWx1ZUltcCAqTnVt
YmVyKGludCBuKSB7IHJldHVybiBqc051bWJlcihuKTsgfQoraW5saW5lIFZhbHVlSW1wICpOdW1i
ZXIodW5zaWduZWQgbikgeyByZXR1cm4ganNOdW1iZXIobik7IH0KK2lubGluZSBWYWx1ZUltcCAq
TnVtYmVyKGxvbmcgbikgeyByZXR1cm4ganNOdW1iZXIobik7IH0KK2lubGluZSBWYWx1ZUltcCAq
TnVtYmVyKHVuc2lnbmVkIGxvbmcgbikgeyByZXR1cm4ganNOdW1iZXIobik7IH0KK2lubGluZSBB
bGxvY2F0ZWRWYWx1ZUltcCAqU3RyaW5nKGNvbnN0IFVTdHJpbmcmIHMpIHsgcmV0dXJuIGpzU3Ry
aW5nKHMpOyB9CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKlN0cmluZyhjb25zdCBjaGFyICpz
KSB7IHJldHVybiBqc1N0cmluZyhzKTsgfQorCiB9IC8vIG5hbWVzcGFjZQogCi0jZW5kaWYgLy8g
X0tKU19WQUxVRV9IXworI2VuZGlmIC8vIEtKU19WQUxVRV9ICkluZGV4OiBXZWJDb3JlL2todG1s
L2VjbWEvZG9tcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lY21hL2RvbXBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZm
IC1wIC11IC11IC1wIC1yMS4yIFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIuY3BwCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmNwcAkxOSBKdWwgMjAwNSAxOTo1Mjo0OCAtMDAw
MAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIuY3BwCTcgQXVnIDIwMDUgMDQ6
NDQ6MTMgLTAwMDAKQEAgLTQ4LDkgKzQ4LDkgQEAgYm9vbCBET01QYXJzZXJDb25zdHJ1Y3Rvcklt
cDo6aW1wbGVtZW50cwogICByZXR1cm4gdHJ1ZTsKIH0KIAotT2JqZWN0IERPTVBhcnNlckNvbnN0
cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICYpCitPYmpl
Y3RJbXAgKkRPTVBhcnNlckNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBMaXN0ICYpCiB7Ci0gIHJldHVybiBPYmplY3QobmV3IERPTVBhcnNlcihleGVjLCBk
b2MuZ2V0KCkpKTsKKyAgcmV0dXJuIG5ldyBET01QYXJzZXIoZXhlYywgZG9jLmdldCgpKTsKIH0K
IAogY29uc3QgQ2xhc3NJbmZvIERPTVBhcnNlcjo6aW5mbyA9IHsgIkRPTVBhcnNlciIsIDAsICZE
T01QYXJzZXJUYWJsZSwgMCB9OwpAQCAtNjcsMTUgKzY3LDE1IEBAIERPTVBhcnNlcjo6RE9NUGFy
c2VyKEV4ZWNTdGF0ZSAqZXhlYywgRE8KIH0KIAogCi1WYWx1ZSBET01QYXJzZXJQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqRE9NUGFyc2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0
aGlzT2JqLmluaGVyaXRzKCZET01QYXJzZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZE
T01QYXJzZXI6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4g
ZXJyOwogICB9CiAgIAotICBET01QYXJzZXIgKnBhcnNlciA9IHN0YXRpY19jYXN0PERPTVBhcnNl
ciAqPih0aGlzT2JqLmltcCgpKTsKKyAgRE9NUGFyc2VyICpwYXJzZXIgPSBzdGF0aWNfY2FzdDxE
T01QYXJzZXIgKj4odGhpc09iaik7CiAKICAgc3dpdGNoIChpZCkgewogICBjYXNlIERPTVBhcnNl
cjo6UGFyc2VGcm9tU3RyaW5nOgpAQCAtODQsOCArODQsOCBAQCBWYWx1ZSBET01QYXJzZXJQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgfQog
Ci0gICAgICBRU3RyaW5nIHN0ciA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpOwot
ICAgICAgUVN0cmluZyBjb250ZW50VHlwZSA9IGFyZ3NbMV0udG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgUVN0cmluZyBzdHIgPSBhcmdzWzBdLT50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICBRU3RyaW5nIGNvbnRlbnRUeXBlID0gYXJnc1sx
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgICBp
ZiAoY29udGVudFR5cGUgPT0gInRleHQveG1sIiB8fCBjb250ZW50VHlwZSA9PSAiYXBwbGljYXRp
b24veG1sIiB8fCBjb250ZW50VHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIikgewogICAg
ICAgICBEb2N1bWVudEltcGwgKmRvY0ltcGwgPSBwYXJzZXItPmRvYy0+aW1wbGVtZW50YXRpb24o
KS0+Y3JlYXRlRG9jdW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2RvbXBh
cnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtdSAtcCAtcjEuMSBX
ZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9kb21w
YXJzZXIuaAk4IEp1biAyMDA1IDA5OjE2OjQyIC0wMDAwCTEuMQorKysgV2ViQ29yZS9raHRtbC9l
Y21hL2RvbXBhcnNlci5oCTcgQXVnIDIwMDUgMDQ6NDQ6MTMgLTAwMDAKQEAgLTMxLDcgKzMxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01QYXJzZXJDb25zdHJ1Y3Rvcklt
cChFeGVjU3RhdGUgKiwgRE9NOjpEb2N1bWVudEltcGwgKmQpOwogICAgIHZpcnR1YWwgYm9vbCBp
bXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBPYmplY3RJ
bXAgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogcHJpdmF0
ZToKICAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7CiAgIH07Cklu
ZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjM1IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfYmluZGluZy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfYmluZGluZy5j
cHAJNCBBdWcgMjAwNSAyMDoyNzo1NyAtMDAwMAkxLjM1CisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2JpbmRpbmcuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MTMgLTAwMDAKQEAgLTY4LDcgKzY4LDcg
QEAgc3RhdGljIE5vZGVQZXJEb2NNYXAgKmRvbU5vZGVzUGVyRG9jdW1lbgogfQogCiAKLVNjcmlw
dEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRlciggY29uc3QgT2JqZWN0ICZnbG9iYWwsIEtI
VE1MUGFydCogcGFydCApCitTY3JpcHRJbnRlcnByZXRlcjo6U2NyaXB0SW50ZXJwcmV0ZXIoIE9i
amVjdEltcCAqZ2xvYmFsLCBLSFRNTFBhcnQqIHBhcnQgKQogICA6IEludGVycHJldGVyKCBnbG9i
YWwgKSwgbV9wYXJ0KCBwYXJ0ICksCiAgICAgbV9ldnQoIDBMICksIG1faW5saW5lQ29kZShmYWxz
ZSksIG1fdGltZXJDYWxsYmFjayhmYWxzZSkKIHsKQEAgLTIwNSwxNCArMjA1LDEwIEBAIGJvb2wg
U2NyaXB0SW50ZXJwcmV0ZXI6Ondhc1J1bkJ5VXNlckdlc3QKIH0KIAogI2lmIEFQUExFX0NIQU5H
RVMKLWJvb2wgU2NyaXB0SW50ZXJwcmV0ZXI6OmlzR2xvYmFsT2JqZWN0KGNvbnN0IFZhbHVlICZ2
KQorCitib29sIFNjcmlwdEludGVycHJldGVyOjppc0dsb2JhbE9iamVjdChWYWx1ZUltcCAqdikK
IHsKLSAgICBpZiAodi50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewotCU9iamVjdCBvID0gdi50b09i
amVjdCAoZ2xvYmFsRXhlYygpKTsKLQlpZiAoby5jbGFzc0luZm8oKSA9PSAmV2luZG93OjppbmZv
KQotCSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB2LT5pc09iamVjdCgmV2luZG93OjppbmZvKTsKIH0KIAogYm9vbCBTY3JpcHRJbnRlcnByZXRl
cjo6aXNTYWZlU2NyaXB0IChjb25zdCBJbnRlcnByZXRlciAqX3RhcmdldCkKQEAgLTIyOCw3ICsy
MjQsNyBAQCBJbnRlcnByZXRlciAqU2NyaXB0SW50ZXJwcmV0ZXI6OmludGVycHJlCiAgICAgcmV0
dXJuIHdpbi0+aW50ZXJwcmV0ZXIoKTsKIH0KIAotdm9pZCAqU2NyaXB0SW50ZXJwcmV0ZXI6OmNy
ZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBCaW5kaW5nczo6
SW5zdGFuY2U6OkJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgY29uc3QgT2JqZWN0ICZ2YWx1ZSwg
Y29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RP
YmplY3QgKmN1cnJlbnQpCit2b2lkICpTY3JpcHRJbnRlcnByZXRlcjo6Y3JlYXRlTGFuZ3VhZ2VJ
bnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIEJpbmRpbmdzOjpJbnN0YW5jZTo6Qmlu
ZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBCaW5kaW5nczo6
Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVudCkK
IHsKICAgICB2b2lkICpyZXN1bHQgPSAwOwogICAgIApAQCAtMzA0LDcgKzMwMCw3IEBAIFFTdHJp
bmcgSWRlbnRpZmllcjo6cXN0cmluZygpIGNvbnN0CiAgIHJldHVybiBRU3RyaW5nKChRQ2hhciop
IGRhdGEoKSwgc2l6ZSgpKTsKIH0KIAotVmFsdWUgZ2V0U3RyaW5nT3JOdWxsKERPTVN0cmluZyBz
KQorVmFsdWVJbXAgKmdldFN0cmluZ09yTnVsbChET01TdHJpbmcgcykKIHsKICAgaWYgKHMuaXNO
dWxsKCkpCiAgICAgcmV0dXJuIE51bGwoKTsKQEAgLTMxMiwxNyArMzA4LDE3IEBAIFZhbHVlIGdl
dFN0cmluZ09yTnVsbChET01TdHJpbmcgcykKICAgICByZXR1cm4gU3RyaW5nKHMpOwogfQogCi1R
VmFyaWFudCBWYWx1ZVRvVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZhbHVlICZ2YWwp
IHsKK1FWYXJpYW50IFZhbHVlVG9WYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgVmFsdWVJbXAgKnZh
bCkgewogICBRVmFyaWFudCByZXM7Ci0gIHN3aXRjaCAodmFsLnR5cGUoKSkgeworICBzd2l0Y2gg
KHZhbC0+dHlwZSgpKSB7CiAgIGNhc2UgQm9vbGVhblR5cGU6Ci0gICAgcmVzID0gUVZhcmlhbnQo
dmFsLnRvQm9vbGVhbihleGVjKSwgMCk7CisgICAgcmVzID0gUVZhcmlhbnQodmFsLT50b0Jvb2xl
YW4oZXhlYyksIDApOwogICAgIGJyZWFrOwogICBjYXNlIE51bWJlclR5cGU6Ci0gICAgcmVzID0g
UVZhcmlhbnQodmFsLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXMgPSBRVmFyaWFudCh2YWwtPnRv
TnVtYmVyKGV4ZWMpKTsKICAgICBicmVhazsKICAgY2FzZSBTdHJpbmdUeXBlOgotICAgIHJlcyA9
IFFWYXJpYW50KHZhbC50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAgIHJlcyA9IFFWYXJp
YW50KHZhbC0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICBicmVhazsKICAgZGVmYXVs
dDoKICAgICAvLyBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZSAnaW52YWxpZCcKQEAgLTM1MCw4ICsz
NDYsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGluCiAgIGNoYXIg
YnVmZmVyWzEwMF07IC8vIG5lZWRzIHRvIGZpdCAyMCBjaGFyYWN0ZXJzLCBwbHVzIGFuIGludGVn
ZXIgaW4gQVNDSUksIHBsdXMgYSBudWxsIGNoYXJhY3RlcgogICBzcHJpbnRmKGJ1ZmZlciwgIiVz
IGV4Y2VwdGlvbiAlZCIsIHR5cGUsIGNvZGUpOwogCi0gIE9iamVjdCBlcnJvck9iamVjdCA9IEVy
cm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBidWZmZXIpOwotICBlcnJvck9iamVjdC5w
dXQoZXhlYywgImNvZGUiLCBOdW1iZXIoY29kZSkpOworICBPYmplY3RJbXAgKmVycm9yT2JqZWN0
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGJ1ZmZlcik7CisgIGVycm9yT2Jq
ZWN0LT5wdXQoZXhlYywgImNvZGUiLCBOdW1iZXIoY29kZSkpOwogICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyb3JPYmplY3QpOwogfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tq
c19iaW5kaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtcCAtdSAtdSAtcCAt
cjEuMzAgV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmgKLS0tIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfYmluZGluZy5oCTE5IEp1bCAyMDA1IDE5OjUyOjQ4IC0wMDAwCTEuMzAKKysrIFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfYmluZGluZy5oCTcgQXVnIDIwMDUgMDQ6NDQ6MTMgLTAwMDAK
QEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlKSBjb25zdCB7
IHJldHVybiBTdHJpbmcodG9TdHJpbmcoZXhlYykpOyB9CisgICAgdmlydHVhbCBWYWx1ZUltcCAq
dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlKSBjb25zdCB7IHJldHVybiBTdHJpbmco
dG9TdHJpbmcoZXhlYykpOyB9CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0
ZSAqKSBjb25zdCB7IHJldHVybiBVU3RyaW5nKCJbZnVuY3Rpb25dIik7IH0KICAgfTsKIApAQCAt
NzQsNyArNzQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgU2NyaXB0SW50ZXJwcmV0ZXIg
OiBwdWJsaWMgSW50ZXJwcmV0ZXIKICAgewogICBwdWJsaWM6Ci0gICAgU2NyaXB0SW50ZXJwcmV0
ZXIoY29uc3QgT2JqZWN0ICZnbG9iYWwsIEtIVE1MUGFydCogcGFydCk7CisgICAgU2NyaXB0SW50
ZXJwcmV0ZXIoT2JqZWN0SW1wICpnbG9iYWwsIEtIVE1MUGFydCogcGFydCk7CiAgICAgdmlydHVh
bCB+U2NyaXB0SW50ZXJwcmV0ZXIoKTsKIAogICAgIHN0YXRpYyBET01PYmplY3QqIGdldERPTU9i
amVjdCh2b2lkKiBvYmplY3RIYW5kbGUpOwpAQCAtMTA4LDExICsxMDgsMTEgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgRE9NOjpFdmVudEltcGwgKmdldEN1cnJlbnRFdmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXZ0OyB9CiAKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgdmlydHVhbCBib29sIGlzR2xv
YmFsT2JqZWN0KGNvbnN0IFZhbHVlICZ2KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNHbG9iYWxPYmpl
Y3QoVmFsdWVJbXAgKnYpOwogICAgIHZpcnR1YWwgSW50ZXJwcmV0ZXIgKmludGVycHJldGVyRm9y
R2xvYmFsT2JqZWN0IChjb25zdCBWYWx1ZUltcCAqaW1wKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNT
YWZlU2NyaXB0IChjb25zdCBJbnRlcnByZXRlciAqdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQg
KmNyZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBCaW5kaW5n
czo6SW5zdGFuY2U6OkJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgY29uc3QgT2JqZWN0ICZ2YWx1
ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJv
b3RPYmplY3QgKmN1cnJlbnQpOwotICAgIHZvaWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVl
IChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE9iamVjdCAmdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpS
b290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KTsK
KyAgICB2aXJ0dWFsIHZvaWQgKmNyZWF0ZUxhbmd1YWdlSW5zdGFuY2VGb3JWYWx1ZSAoRXhlY1N0
YXRlICpleGVjLCBCaW5kaW5nczo6SW5zdGFuY2U6OkJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwg
T2JqZWN0SW1wICp2YWx1ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29u
c3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJlbnQpOworICAgIHZvaWQgKmNyZWF0ZU9iamNJ
bnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0
IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0
ICpjdXJyZW50KTsKICNlbmRpZgogCiAgIHByaXZhdGU6CkBAIC0xMzAsNyArMTMwLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIGlubGluZSBWYWx1ZUltcCAqY2FjaGVET01PYmplY3QoRXhlY1N0YXRl
ICpleGVjLCBET01PYmogKmRvbU9iaikKICAgewogICAgIGlmICghZG9tT2JqKQotICAgICAgcmV0
dXJuIG51bGwoKTsKKyAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBTY3JpcHRJbnRlcnByZXRl
ciAqaW50ZXJwID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1p
Y0ludGVycHJldGVyKCkpOwogICAgIGlmIChET01PYmplY3QgKnJldCA9IGludGVycC0+Z2V0RE9N
T2JqZWN0KGRvbU9iaikpCiAgICAgICByZXR1cm4gcmV0OwpAQCAtMTU2LDEyICsxNTYsMTIgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIC8qKgogICAgKiAgR2V0IGEgU3RyaW5nIG9iamVjdCwgb3IgTnVs
bCgpIGlmIHMgaXMgbnVsbAogICAgKi8KLSAgVmFsdWUgZ2V0U3RyaW5nT3JOdWxsKERPTTo6RE9N
U3RyaW5nIHMpOworICBWYWx1ZUltcCAqZ2V0U3RyaW5nT3JOdWxsKERPTTo6RE9NU3RyaW5nIHMp
OwogCiAgIC8qKgogICAgKiBDb252ZXJ0IGEgS0pTIHZhbHVlIGludG8gYSBRVmFyaWFudAogICAg
Ki8KLSAgUVZhcmlhbnQgVmFsdWVUb1ZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWYWx1
ZSYgdmFsKTsKKyAgUVZhcmlhbnQgVmFsdWVUb1ZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBWYWx1
ZUltcCAqdmFsKTsKIAogfSAvLyBuYW1lc3BhY2UKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21h
L2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlmZiAtcCAtdSAt
dSAtcCAtcjEuMzIgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCi0tLSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2Nzcy5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MTMgLTAwMDAJMS4zMgorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MTMgLTAwMDAK
QEAgLTE0Myw3ICsxNDMsNyBAQCBib29sIERPTUNTU1N0eWxlRGVjbGFyYXRpb246Omhhc093blBy
b3BlCiAgIHJldHVybiBPYmplY3RJbXA6Omhhc093blByb3BlcnR5KGV4ZWMsIHApOwogfQogCi1i
b29sIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAor
Ym9vbCBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNv
bnN0CiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcwKSA8PCAiRE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwpA
QCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJv
cGUKICAgICAgIHJlc3VsdCA9IGdldFN0cmluZ09yTnVsbChzdHlsZURlY2wuY3NzVGV4dCgpKTsK
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgTGVuZ3RoOgotICAgICAgcmVzdWx0ID0gVmFs
dWUoc3R5bGVEZWNsLmxlbmd0aCgpKTsKKyAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHN0eWxlRGVj
bC5sZW5ndGgoKSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBhcmVudFJ1bGU6CiAg
ICAgICByZXN1bHQgPSBnZXRET01DU1NSdWxlKGV4ZWMsc3R5bGVEZWNsLnBhcmVudFJ1bGUoKSk7
CkBAIC0xNjksOSArMTY5LDEyIEBAIGJvb2wgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3du
UHJvcGUKICAgLy8gTG9vayBpbiB0aGUgcHJvdG90eXBlIChmb3IgZnVuY3Rpb25zKSBiZWZvcmUg
YXNzdW1pbmcgaXQncyBhIG5hbWUKICAgLy8gRklYTUU6IGlzIHRoaXMgcmVhbGx5IG5lZWRlZD8g
ZG8gYW55IHByb3BlcnR5IG5hbWVzIGNvbmZsaWN0IHdpdGggbmFtZXMKICAgLy8gb2YgZnVuY3Rp
b25zIGZyb20gdGhlIHByb3RvdHlwZT8KLSAgT2JqZWN0IHByb3RvID0gT2JqZWN0OjpkeW5hbWlj
Q2FzdChwcm90b3R5cGUoKSk7Ci0gIGlmICghcHJvdG8uaXNOdWxsKCkgJiYgcHJvdG8uaGFzUHJv
cGVydHkoZXhlYyxwcm9wZXJ0eU5hbWUpKQotICAgIHJldHVybiBmYWxzZTsKKyAgVmFsdWVJbXAg
KnB2ID0gcHJvdG90eXBlKCk7CisgIGlmIChwdi0+aXNPYmplY3QoKSkgeworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocHYpOworICAgIGlmIChwcm90by0+
aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
fQogCiAgIGJvb2wgb2s7CiAgIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOwpAQCAtMjA3LDcgKzIxMCw3IEBAIGJvb2wgRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0T3duUHJvcGUKIH0KIAogCi12b2lkIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OnB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFs
dWUmIHZhbHVlLCBpbnQgYXR0ciApCit2b2lkIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OnB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAg
KnZhbHVlLCBpbnQgYXR0ciApCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcw
KSA8PCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJp
bmcoKSA8PCBlbmRsOwpAQCAtMjE1LDEyICsyMTgsMTIgQEAgdm9pZCBET01DU1NTdHlsZURlY2xh
cmF0aW9uOjpwdXQoRXhlY1N0YQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihl
eGVjKTsKICAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgJnN0eWxlRGVjbCA9ICptX2ltcGw7CiAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gImNzc1RleHQiKSB7Ci0gICAgc3R5bGVEZWNsLnNldENzc1Rl
eHQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgc3R5bGVE
ZWNsLnNldENzc1RleHQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24p
OwogICB9IGVsc2UgewogICAgIGlmIChpc0NTU1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7
CiAgICAgICBib29sIHBpeGVsT3JQb3M7CiAgICAgICBET01TdHJpbmcgcHJvcCA9IGNzc1Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUsICZwaXhlbE9yUG9zKTsKLSAgICAgIFFTdHJpbmcgcHJvcHZh
bHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYykucXN0cmluZygpOworICAgICAgUVN0cmluZyBwcm9w
dmFsdWUgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwogICAgICAgaWYgKHBpeGVs
T3JQb3MpCiAJcHJvcHZhbHVlICs9ICJweCI7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKQEAgLTI0NCwx
NyArMjQ3LDE3IEBAIHZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0KEV4ZWNTdGEKICAg
fQogfQogCi1WYWx1ZSBET01DU1NTdHlsZURlY2xhcmF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
KkRPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAo
IXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpIHsK
LSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICgh
dGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aW5mbykpIHsK
KyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9NRXhj
ZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIENTU1N0eWxlRGVjbGFyYXRpb25J
bXBsICZzdHlsZURlY2wgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqPih0
aGlzT2JqLmltcCgpKS0+aW1wbCgpOwotICBTdHJpbmcgc3RyID0gYXJnc1swXS50b1N0cmluZyhl
eGVjKTsKLSAgRE9NOjpET01TdHJpbmcgcyA9IHN0ci52YWx1ZSgpLnN0cmluZygpOworICBDU1NT
dHlsZURlY2xhcmF0aW9uSW1wbCAmc3R5bGVEZWNsID0gKnN0YXRpY19jYXN0PERPTUNTU1N0eWxl
RGVjbGFyYXRpb24gKj4odGhpc09iaiktPmltcGwoKTsKKyAgVVN0cmluZyBzdHIgPSBhcmdzWzBd
LT50b1N0cmluZyhleGVjKTsKKyAgRE9NOjpET01TdHJpbmcgcyA9IHN0ci5zdHJpbmcoKTsKIAog
ICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpHZXRQcm9w
ZXJ0eVZhbHVlOgpAQCAtMjY2LDEwICsyNjksMTAgQEAgVmFsdWUgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvblByb3RvRnVuYzo6YwogICAgIGNhc2UgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6R2V0UHJv
cGVydHlQcmlvcml0eToKICAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoc3R5bGVEZWNsLmdl
dFByb3BlcnR5UHJpb3JpdHkocykpOwogICAgIGNhc2UgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
U2V0UHJvcGVydHk6Ci0gICAgICBzdHlsZURlY2wuc2V0UHJvcGVydHkocywgYXJnc1sxXS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1syXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhj
ZXB0aW9uKTsKKyAgICAgIHN0eWxlRGVjbC5zZXRQcm9wZXJ0eShzLCBhcmdzWzFdLT50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwgYXJnc1syXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2Vw
dGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01DU1NTdHlsZURl
Y2xhcmF0aW9uOjpJdGVtOgotICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdHlsZURlY2wu
aXRlbShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBnZXRTdHJpbmdPck51
bGwoc3R5bGVEZWNsLml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwogICAgIGRlZmF1bHQ6
CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIH0KQEAgLTMwMCwxMiArMzAzLDEyIEBAIERP
TVN0eWxlU2hlZXQ6On5ET01TdHlsZVNoZWV0KCkKICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdl
dERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1ib29sIERPTVN0eWxlU2hlZXQ6OmdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01TdHlsZVNoZWV0OjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01TdHls
ZVNoZWV0LCBET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTVN0eWxlU2hlZXRUYWJs
ZSwgdGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01TdHls
ZVNoZWV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICBTdHlsZVNoZWV0SW1wbCAmc3R5bGVTaGVldCA9ICptX2ltcGw7CiAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTMyNCwxMyArMzI3LDEzIEBAIFZhbHVlIERPTVN0eWxlU2hlZXQ6OmdldFZh
bHVlUHJvcGVydHkoRXgKICAgY2FzZSBNZWRpYToKICAgICByZXR1cm4gZ2V0RE9NTWVkaWFMaXN0
KGV4ZWMsIHN0eWxlU2hlZXQubWVkaWEoKSk7CiAgIH0KLSAgcmV0dXJuIFZhbHVlKCk7CisgIHJl
dHVybiBOVUxMOwogfQogCi12b2lkIERPTVN0eWxlU2hlZXQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQg
YXR0cikKK3ZvaWQgRE9NU3R5bGVTaGVldDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBp
ZiAocHJvcGVydHlOYW1lID09ICJkaXNhYmxlZCIpIHsKLSAgICBtX2ltcGwtPnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgbV9pbXBsLT5zZXREaXNhYmxlZCh2YWx1ZS0+
dG9Cb29sZWFuKGV4ZWMpKTsKICAgfQogICBlbHNlCiAgICAgRE9NT2JqZWN0OjpwdXQoZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CkBAIC0zNzEsNyArMzc0LDcgQEAgRE9NU3R5bGVT
aGVldExpc3Q6On5ET01TdHlsZVNoZWV0TGlzdCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3Jn
ZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotYm9vbCBET01TdHlsZVNoZWV0TGlzdDo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01TdHlsZVNoZWV0TGlzdDo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkg
Y29uc3QKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQogICBrZERlYnVnKDYwNzApIDw8ICJET01TdHls
ZVNoZWV0TGlzdDo6Z2V0ICIgPDwgcC5xc3RyaW5nKCkgPDwgZW5kbDsKQEAgLTQ0NCwxNiArNDQ3
LDE2IEBAIFZhbHVlSW1wICpnZXRET01TdHlsZVNoZWV0TGlzdChFeGVjU3RhdGUKICAgfQogfQog
Ci1WYWx1ZSBET01TdHlsZVNoZWV0TGlzdEZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NU3R5bGVTaGVldExp
c3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRP
TVN0eWxlU2hlZXRMaXN0OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01TdHls
ZVNoZWV0TGlzdDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVy
biBlcnI7CiAgIH0KLSAgU3R5bGVTaGVldExpc3RJbXBsICZzdHlsZVNoZWV0TGlzdCA9ICpzdGF0
aWNfY2FzdDxET01TdHlsZVNoZWV0TGlzdCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOworICBT
dHlsZVNoZWV0TGlzdEltcGwgJnN0eWxlU2hlZXRMaXN0ID0gKnN0YXRpY19jYXN0PERPTVN0eWxl
U2hlZXRMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIGlmIChpZCA9PSBET01TdHlsZVNoZWV0
TGlzdDo6SXRlbSkKLSAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZVNoZWV0
TGlzdC5pdGVtKGFyZ3NbMF0udG9JbnQzMihleGVjKSkpOworICAgIHJldHVybiBnZXRET01TdHls
ZVNoZWV0KGV4ZWMsIHN0eWxlU2hlZXRMaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkp
OwogICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTQ4Nyw3ICs0OTAsNyBAQCBET01NZWRp
YUxpc3Q6On5ET01NZWRpYUxpc3QoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2Jq
ZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLWJvb2wgRE9NTWVkaWFMaXN0OjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNv
bnN0Citib29sIERPTU1lZGlhTGlzdDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgTWVkaWFM
aXN0SW1wbCAmbWVkaWFMaXN0ID0gKm1faW1wbDsKICAgaWYgKHAgPT0gIm1lZGlhVGV4dCIpIHsK
QEAgLTUwOCwxMSArNTExLDExIEBAIGJvb2wgRE9NTWVkaWFMaXN0OjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3QKICAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVzdWx0
KTsKIH0KIAotdm9pZCBET01NZWRpYUxpc3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKK3Zv
aWQgRE9NTWVkaWFMaXN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgIE1lZGlhTGlzdElt
cGwgJm1lZGlhTGlzdCA9ICptX2ltcGw7CiAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gIm1lZGlhVGV4
dCIpCi0gICAgbWVkaWFMaXN0LnNldE1lZGlhVGV4dCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSk7CisgICAgbWVkaWFMaXN0LnNldE1lZGlhVGV4dCh2YWx1ZS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCkpOwogICBlbHNlCiAgICAgRE9NT2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cik7CiB9CkBAIC01MjIsMjIgKzUyNSwyMiBAQCBWYWx1ZUltcCAqZ2V0RE9N
TWVkaWFMaXN0KEV4ZWNTdGF0ZSAqZXhlCiAgIHJldHVybiBjYWNoZURPTU9iamVjdDxNZWRpYUxp
c3RJbXBsLCBET01NZWRpYUxpc3Q+KGV4ZWMsIG1sKTsKIH0KIAotVmFsdWUgS0pTOjpET01NZWRp
YUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqS0pTOjpET01NZWRpYUxpc3RQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NTWVkaWFMaXN0
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01NZWRpYUxpc3Q6OmluZm8pKSB7
CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIE1lZGlh
TGlzdEltcGwgJm1lZGlhTGlzdCA9ICpzdGF0aWNfY2FzdDxET01NZWRpYUxpc3QgKj4odGhpc09i
ai5pbXAoKSktPmltcGwoKTsKKyAgTWVkaWFMaXN0SW1wbCAmbWVkaWFMaXN0ID0gKnN0YXRpY19j
YXN0PERPTU1lZGlhTGlzdCAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
ICAgY2FzZSBET01NZWRpYUxpc3Q6Okl0ZW06Ci0gICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxs
KG1lZGlhTGlzdC5pdGVtKGFyZ3NbMF0udG9JbnQzMihleGVjKSkpOworICAgICAgcmV0dXJuIGdl
dFN0cmluZ09yTnVsbChtZWRpYUxpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CiAg
ICAgY2FzZSBET01NZWRpYUxpc3Q6OkRlbGV0ZU1lZGl1bToKLSAgICAgIG1lZGlhTGlzdC5kZWxl
dGVNZWRpdW0oYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgICBtZWRpYUxp
c3QuZGVsZXRlTWVkaXVtKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTU1lZGlhTGlzdDo6QXBwZW5kTWVkaXVt
OgotICAgICAgbWVkaWFMaXN0LmFwcGVuZE1lZGl1bShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKTsKKyAgICAgIG1lZGlhTGlzdC5hcHBlbmRNZWRpdW0oYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpOwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIGRlZmF1bHQ6
CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01NzYsNyArNTc5LDcgQEAgRE9NQ1NTU3R5
bGVTaGVldDo6fkRPTUNTU1N0eWxlU2hlZXQoKQogewogfQogCi1ib29sIERPTUNTU1N0eWxlU2hl
ZXQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwg
VmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NQ1NTU3R5bGVTaGVldDo6Z2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3Vs
dCkgY29uc3QKIHsKICAgQ1NTU3R5bGVTaGVldEltcGwgJmNzc1N0eWxlU2hlZXQgPSAqc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4oaW1wbCgpKTsKICAgaWYgKHAgPT0gIm93bmVyUnVs
ZSIpIHsKQEAgLTU4OSwyNiArNTkyLDI0IEBAIGJvb2wgRE9NQ1NTU3R5bGVTaGVldDo6Z2V0T3du
UHJvcGVydHkoRXgKICAgcmV0dXJuIERPTVN0eWxlU2hlZXQ6OmdldE93blByb3BlcnR5KGV4ZWMs
IHAsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIERPTUNTU1N0eWxlU2hlZXRQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1
ZUltcCAqRE9NQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICgh
dGhpc09iai5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZVNoZWV0OjppbmZvKSkgewotICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZVNoZWV0OjppbmZvKSkgeworICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICBET01FeGNlcHRpb25UcmFuc2xh
dG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgQ1NTU3R5bGVTaGVldEltcGwgJnN0eWxlU2hlZXQgPSAq
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVT
aGVldCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKLSAgVmFsdWUgcmVzdWx0OworICBDU1NT
dHlsZVNoZWV0SW1wbCAmc3R5bGVTaGVldCA9ICpzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1w
bCAqPihzdGF0aWNfY2FzdDxET01DU1NTdHlsZVNoZWV0ICo+KHRoaXNPYmopLT5pbXBsKCkpOwog
ICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01DU1NTdHlsZVNoZWV0OjpJbnNlcnRSdWxlOgot
ICAgICAgcmV0dXJuIE51bWJlcihzdHlsZVNoZWV0Lmluc2VydFJ1bGUoYXJnc1swXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAg
ICAgIGJyZWFrOworICAgICAgcmV0dXJuIE51bWJlcihzdHlsZVNoZWV0Lmluc2VydFJ1bGUoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwogICAgIGNhc2UgRE9NQ1NTU3R5bGVTaGVldDo6RGVsZXRlUnVsZToKLSAgICAg
IHN0eWxlU2hlZXQuZGVsZXRlUnVsZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7
CisgICAgICBzdHlsZVNoZWV0LmRlbGV0ZVJ1bGUoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhj
ZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUNTU1N0eWxl
U2hlZXQ6OkFkZFJ1bGU6IHsKLSAgICAgIGxvbmcgaW5kZXggPSBhcmdzLnNpemUoKSA+PSAzID8g
YXJnc1syXS50b0ludDMyKGV4ZWMpIDogLTE7Ci0gICAgICBzdHlsZVNoZWV0LmFkZFJ1bGUoYXJn
c1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgaW5kZXgsIGV4Y2VwdGlvbik7CisgICAgICBsb25nIGluZGV4ID0gYXJncy5zaXplKCkg
Pj0gMyA/IGFyZ3NbMl0tPnRvSW50MzIoZXhlYykgOiAtMTsKKyAgICAgIHN0eWxlU2hlZXQuYWRk
UnVsZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIGluZGV4LCBleGNlcHRpb24pOwogICAgICAgLy8gQXMgcGVyIE1pY3Jv
c29mdCBkb2N1bWVudGF0aW9uLCBhbHdheXMgcmV0dXJuIC0xLgogICAgICAgcmV0dXJuIE51bWJl
cigtMSk7CiAgICAgfQpAQCAtNjMyLDcgKzYzMyw3IEBAIERPTUNTU1J1bGVMaXN0Ojp+RE9NQ1NT
UnVsZUxpc3QoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5n
ZXQoKSk7CiB9CiAKLWJvb2wgRE9NQ1NTUnVsZUxpc3Q6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wg
RE9NQ1NTUnVsZUxpc3Q6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIENTU1J1bGVMaXN0SW1w
bCAmY3NzUnVsZUxpc3QgPSAqbV9pbXBsOwogICBpZiAocCA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUp
IHsKQEAgLTY1MywxNyArNjU0LDE3IEBAIGJvb2wgRE9NQ1NTUnVsZUxpc3Q6OmdldE93blByb3Bl
cnR5KEV4ZWMKICAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVz
dWx0KTsKIH0KIAotVmFsdWUgRE9NQ1NTUnVsZUxpc3RGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNTU1J1
bGVMaXN0RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pT
OjpET01DU1NSdWxlTGlzdDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NT
UnVsZUxpc3Q6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4g
ZXJyOwogICB9Ci0gIENTU1J1bGVMaXN0SW1wbCAmY3NzUnVsZUxpc3QgPSAqc3RhdGljX2Nhc3Q8
RE9NQ1NTUnVsZUxpc3QgKj4odGhpc09iai5pbXAoKSktPmltcGwoKTsKKyAgQ1NTUnVsZUxpc3RJ
bXBsICZjc3NSdWxlTGlzdCA9ICpzdGF0aWNfY2FzdDxET01DU1NSdWxlTGlzdCAqPih0aGlzT2Jq
KS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01DU1NSdWxlTGlzdDo6SXRl
bToKLSAgICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsY3NzUnVsZUxpc3QuaXRlbShhcmdz
WzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsY3Nz
UnVsZUxpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CiAgICAgZGVmYXVsdDoKICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgfQpAQCAtNzQ1LDcgKzc0Niw3IEBAIGNvbnN0IENs
YXNzSW5mbyogRE9NQ1NTUnVsZTo6Y2xhc3NJbmZvKCkKICAgZW5jb2RpbmcJCURPTUNTU1J1bGU6
OkNoYXJzZXRfRW5jb2RpbmcJRG9udERlbGV0ZQogQGVuZAogKi8KLWJvb2wgRE9NQ1NTUnVsZTo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTUNTU1J1bGU6OmdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgLy8gZmlyc3QgdHJ5IHRoZSBwcm9wZXJ0aWVzIHNw
ZWNpZmljIHRvIHRoaXMgcnVsZSB0eXBlCiAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29r
dXA6OmZpbmRFbnRyeShjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZSwgcHJvcGVydHlOYW1lKTsK
QEAgLTc1OCw3ICs3NTksNyBAQCBib29sIERPTUNTU1J1bGU6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0CiAgIHJldHVybiBsb29rdXBHZXRPd25Qcm9wZXJ0eTxET01DU1NSdWxlRnVuYywgRE9NQ1NT
UnVsZSwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZET01DU1NSdWxlVGFibGUsIHRo
aXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIERPTUNTU1J1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ1NTUnVsZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgQ1NT
UnVsZUltcGwgJmNzc1J1bGUgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC04MTEs
NyArODEyLDcgQEAgVmFsdWUgRE9NQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgRE9NQ1NTUnVsZTo6cHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGludCBhdHRyKQordm9pZCBET01DU1NSdWxlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAg
IGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8g
Z2V0IHRoZSByaWdodCBoYXNodGFibGUKICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1
cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwpAQCAtODMwLDIyICs4MzEsMjIgQEAg
dm9pZCBET01DU1NSdWxlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjbwogICBsb29rdXBQdXQ8RE9N
Q1NTUnVsZSwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9N
Q1NTUnVsZVRhYmxlLCB0aGlzKTsKIH0KIAotdm9pZCBET01DU1NSdWxlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkK
K3ZvaWQgRE9NQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgLy8g
Zm9yIERPTTo6Q1NTUnVsZTo6U1RZTEVfUlVMRToKICAgY2FzZSBTdHlsZV9TZWxlY3RvclRleHQ6
Ci0gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zZXRT
ZWxlY3RvclRleHQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JUZXh0KHZh
bHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIC8vIGZvciBE
T006OkNTU1J1bGU6OlBBR0VfUlVMRToKICAgY2FzZSBQYWdlX1NlbGVjdG9yVGV4dDoKLSAgICBz
dGF0aWNfY2FzdDxDU1NQYWdlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JU
ZXh0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBzdGF0aWNfY2FzdDxDU1NQ
YWdlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JUZXh0KHZhbHVlLT50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIC8vIGZvciBET006OkNTU1J1
bGU6OkNIQVJTRVRfUlVMRToKICAgY2FzZSBDaGFyc2V0X0VuY29kaW5nOgotICAgIHN0YXRpY19j
YXN0PENTU0NoYXJzZXRSdWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zZXRFbmNvZGluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPnNldEVuY29kaW5nKHZhbHVlLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIGRlZmF1bHQ6CkBAIC04NTMsMjEgKzg1NCwy
MSBAQCB2b2lkIERPTUNTU1J1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0CiAgIH0KIH0KIAot
VmFsdWUgRE9NQ1NTUnVsZUZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NQ1NTUnVsZUZ1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZTo6aW5mbykp
IHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZTo6aW5mbykpIHsKKyAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgQ1NTUnVsZUltcGwgJmNz
c1J1bGUgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZSAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgp
OworICBDU1NSdWxlSW1wbCAmY3NzUnVsZSA9ICpzdGF0aWNfY2FzdDxET01DU1NSdWxlICo+KHRo
aXNPYmopLT5pbXBsKCk7CiAKICAgaWYgKGNzc1J1bGUudHlwZSgpID09IERPTTo6Q1NTUnVsZTo6
TUVESUFfUlVMRSkgewogICAgIENTU01lZGlhUnVsZUltcGwgJnJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NNZWRpYVJ1bGVJbXBsICY+KGNzc1J1bGUpOwogICAgIGlmIChpZCA9PSBET01DU1NSdWxlOjpN
ZWRpYV9JbnNlcnRSdWxlKQotICAgICAgcmV0dXJuIE51bWJlcihydWxlLmluc2VydFJ1bGUoYXJn
c1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxhcmdzWzFdLnRvSW50MzIoZXhlYykpKTsKKyAg
ICAgIHJldHVybiBOdW1iZXIocnVsZS5pbnNlcnRSdWxlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKICAgICBlbHNlIGlmIChpZCA9PSBE
T01DU1NSdWxlOjpNZWRpYV9EZWxldGVSdWxlKQotICAgICAgcnVsZS5kZWxldGVSdWxlKGFyZ3Nb
MF0udG9JbnQzMihleGVjKSk7CisgICAgICBydWxlLmRlbGV0ZVJ1bGUoYXJnc1swXS0+dG9JbnQz
MihleGVjKSk7CiAgIH0KIAogICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC04OTMsMTIgKzg5NCwx
MiBAQCBjb25zdCBDbGFzc0luZm8gQ1NTUnVsZUNvbnN0cnVjdG9yOjppbmZvCiBAZW5kCiAqLwog
Ci1ib29sIENTU1J1bGVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBDU1NSdWxl
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRP
d25WYWx1ZTxDU1NSdWxlQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkNTU1J1bGVD
b25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBDU1NSdWxlQ29uc3Ry
dWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpDU1NSdWxlQ29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFVOS05PV05f
UlVMRToKQEAgLTkxNiwxMCArOTE3LDEwIEBAIFZhbHVlIENTU1J1bGVDb25zdHJ1Y3Rvcjo6Z2V0
VmFsdWVQcm9wZXIKICAgY2FzZSBQQUdFX1JVTEU6CiAgICAgcmV0dXJuIE51bWJlcihET006OkNT
U1J1bGU6OlBBR0VfUlVMRSk7CiAgIH0KLSAgcmV0dXJuIFZhbHVlKCk7CisgIHJldHVybiBOVUxM
OwogfQogCi1WYWx1ZSBnZXRDU1NSdWxlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKQorVmFs
dWVJbXAgKmdldENTU1J1bGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJldHVy
biBjYWNoZUdsb2JhbE9iamVjdDxDU1NSdWxlQ29uc3RydWN0b3I+KCBleGVjLCAiW1tjc3NSdWxl
LmNvbnN0cnVjdG9yXV0iICk7CiB9CkBAIC05MzksNyArOTQwLDcgQEAgRE9NQ1NTVmFsdWU6On5E
T01DU1NWYWx1ZSgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBs
LmdldCgpKTsKIH0KIAotYm9vbCBET01DU1NWYWx1ZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBE
T01DU1NWYWx1ZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgQ1NTVmFsdWVJbXBsICZjc3NW
YWx1ZSA9ICptX2ltcGw7CiAgIGlmIChwID09ICJjc3NUZXh0IikgewpAQCAtOTUzLDExICs5NTQs
MTEgQEAgYm9vbCBET01DU1NWYWx1ZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YQogICByZXR1cm4g
RE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCi12b2lkIERP
TUNTU1ZhbHVlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2b2lkIERPTUNTU1ZhbHVlOjpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgIENTU1ZhbHVlSW1wbCAmY3NzVmFsdWUgPSAqbV9p
bXBsOwogICBpZiAocHJvcGVydHlOYW1lID09ICJjc3NUZXh0IikKLSAgICBjc3NWYWx1ZS5zZXRD
c3NUZXh0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBjc3NWYWx1ZS5zZXRD
c3NUZXh0KHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgIGVsc2UKICAgICBET01P
YmplY3Q6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKIH0KQEAgLTk2OSw3
ICs5NzAsNyBAQCBWYWx1ZUltcCAqZ2V0RE9NQ1NTVmFsdWUoRXhlY1N0YXRlICpleGVjCiAgICAg
cmV0dXJuIE51bGwoKTsKICAgU2NyaXB0SW50ZXJwcmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0
PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpKTsKICAgaWYg
KChyZXQgPSBpbnRlcnAtPmdldERPTU9iamVjdCh2KSkpCi0gICAgcmV0dXJuIFZhbHVlKHJldCk7
CisgICAgcmV0dXJuIHJldDsKICAgZWxzZSB7CiAgICAgaWYgKHYtPmlzVmFsdWVMaXN0KCkpCiAg
ICAgICByZXQgPSBuZXcgRE9NQ1NTVmFsdWVMaXN0KGV4ZWMsIHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdEltcGwgKj4odikpOwpAQCAtOTkzLDEyICs5OTQsMTIgQEAgY29uc3QgQ2xhc3NJbmZvIENT
U1ZhbHVlQ29uc3RydWN0b3I6OmluZgogICBDU1NfQ1VTVE9NCQlDU1NWYWx1ZUNvbnN0cnVjdG9y
OjpDU1NfQ1VTVE9NCQkJRG9udERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLWJvb2wgQ1NTVmFs
dWVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBDU1NWYWx1ZUNvbnN0cnVjdG9y
OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZh
bHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8Q1NT
VmFsdWVDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCBwLCAmQ1NTVmFsdWVDb25zdHJ1Y3Rv
clRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBDU1NWYWx1ZUNvbnN0cnVjdG9yOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
Q1NTVmFsdWVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgQ1NTX0lOSEVSSVQ6CkBA
IC0xMDEwLDEwICsxMDExLDEwIEBAIFZhbHVlIENTU1ZhbHVlQ29uc3RydWN0b3I6OmdldFZhbHVl
UHJvcGUKICAgY2FzZSBDU1NfQ1VTVE9NOgogICAgIHJldHVybiBOdW1iZXIoRE9NOjpDU1NWYWx1
ZTo6Q1NTX0NVU1RPTSk7CiAgIH0KLSAgcmV0dXJuIFZhbHVlKCk7CisgIHJldHVybiBOVUxMOwog
fQogCi1WYWx1ZSBnZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVl
SW1wICpnZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgcmV0dXJu
IGNhY2hlR2xvYmFsT2JqZWN0PENTU1ZhbHVlQ29uc3RydWN0b3I+KCBleGVjLCAiW1tjc3NWYWx1
ZS5jb25zdHJ1Y3Rvcl1dIiApOwogfQpAQCAtMTA0NSw3ICsxMDQ2LDcgQEAgRE9NQ1NTUHJpbWl0
aXZlVmFsdWU6OkRPTUNTU1ByaW1pdGl2ZVZhbAogICBzZXRQcm90b3R5cGUoRE9NQ1NTUHJpbWl0
aXZlVmFsdWVQcm90bzo6c2VsZihleGVjKSk7CiB9CiAKLWJvb2wgRE9NQ1NTUHJpbWl0aXZlVmFs
dWU6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwg
VmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NQ1NTUHJpbWl0aXZlVmFsdWU6OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZy
ZXN1bHQpIGNvbnN0CiB7CiAgIGlmIChwID09ICJwcmltaXRpdmVUeXBlIikgewogICAgIHJlc3Vs
dCA9IE51bWJlcihzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZUltcGwgKj4oaW1wbCgpKS0+
cHJpbWl0aXZlVHlwZSgpKTsKQEAgLTEwNTUsMjMgKzEwNTYsMjMgQEAgYm9vbCBET01DU1NQcmlt
aXRpdmVWYWx1ZTo6Z2V0T3duUHJvcGVydAogICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCi1WYWx1ZSBET01DU1NQcmltaXRpdmVWYWx1ZVBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpET01DU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01DU1NQcmltaXRpdmVW
YWx1ZTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUHJpbWl0aXZlVmFs
dWU6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwog
ICB9CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBDU1NQcmlt
aXRpdmVWYWx1ZUltcGwgJnZhbCA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZUltcGwg
Kj4oc3RhdGljX2Nhc3Q8RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKj4odGhpc09iai5pbXAoKSktPmlt
cGwoKSk7CisgIENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAmdmFsID0gKnN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlSW1wbCAqPihzdGF0aWNfY2FzdDxET01DU1NQcmltaXRpdmVWYWx1ZSAqPih0
aGlzT2JqKS0+aW1wbCgpKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NQ1NTUHJpbWl0
aXZlVmFsdWU6OlNldEZsb2F0VmFsdWU6Ci0gICAgICB2YWwuc2V0RmxvYXRWYWx1ZShhcmdzWzBd
LnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAg
ICB2YWwuc2V0RmxvYXRWYWx1ZShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b051
bWJlcihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBj
YXNlIERPTUNTU1ByaW1pdGl2ZVZhbHVlOjpHZXRGbG9hdFZhbHVlOgotICAgICAgcmV0dXJuIE51
bWJlcih2YWwuZ2V0RmxvYXRWYWx1ZShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJl
dHVybiBOdW1iZXIodmFsLmdldEZsb2F0VmFsdWUoYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwog
ICAgIGNhc2UgRE9NQ1NTUHJpbWl0aXZlVmFsdWU6OlNldFN0cmluZ1ZhbHVlOgotICAgICAgdmFs
LnNldFN0cmluZ1ZhbHVlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgIHZhbC5zZXRTdHJpbmdWYWx1ZShhcmdz
WzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhj
ZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUNTU1ByaW1p
dGl2ZVZhbHVlOjpHZXRTdHJpbmdWYWx1ZToKICAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwo
dmFsLmdldFN0cmluZ1ZhbHVlKCkpOwpAQCAtMTEyMSwxOCArMTEyMiwxOCBAQCBjb25zdCBDbGFz
c0luZm8gQ1NTUHJpbWl0aXZlVmFsdWVDb25zdHJ1CiBAZW5kCiAqLwogCi1ib29sIENTU1ByaW1p
dGl2ZVZhbHVlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgQ1NTUHJpbWl0aXZl
VmFsdWVDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgcmV0dXJuIGxvb2t1
cEdldE93blZhbHVlPENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3IsIENTU1ZhbHVlQ29uc3Ry
dWN0b3I+KGV4ZWMsIHAsICZDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMs
IHJlc3VsdCk7CiB9CiAKLVZhbHVlIENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3I6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NQ
cmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8vIFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRv
IHJldHVybiBkaXJlY3RseQogICByZXR1cm4gTnVtYmVyKHRva2VuKTsKIH0KIAotVmFsdWUgZ2V0
Q1NTUHJpbWl0aXZlVmFsdWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAq
Z2V0Q1NTUHJpbWl0aXZlVmFsdWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJl
dHVybiBjYWNoZUdsb2JhbE9iamVjdDxDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yPiggZXhl
YywgIltbY3NzUHJpbWl0aXZlVmFsdWUuY29uc3RydWN0b3JdXSIgKTsKIH0KQEAgLTExNTQsNyAr
MTE1NSw3IEBAIERPTUNTU1ZhbHVlTGlzdDo6RE9NQ1NTVmFsdWVMaXN0KEV4ZWNTdGEKIHsgCiB9
CiAKLWJvb2wgRE9NQ1NTVmFsdWVMaXN0OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTUNTU1Zh
bHVlTGlzdDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgQ1NTVmFsdWVMaXN0SW1wbCAmdmFs
dWVMaXN0ID0gKnN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdEltcGwgKj4oaW1wbCgpKTsKIApAQCAt
MTE3NiwxNyArMTE3NywxNyBAQCBib29sIERPTUNTU1ZhbHVlTGlzdDo6Z2V0T3duUHJvcGVydHko
RXhlCiAgIHJldHVybiBET01DU1NWYWx1ZTo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVzdWx0
KTsKIH0KIAotVmFsdWUgRE9NQ1NTVmFsdWVMaXN0RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01DU1NWYWx1
ZUxpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6
OkRPTUNTU1ZhbHVlOjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01DU1NWYWx1
ZTo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAg
IH0KLSAgQ1NTVmFsdWVMaXN0SW1wbCAmdmFsdWVMaXN0ID0gKnN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NQ1NTVmFsdWVMaXN0ICo+KHRoaXNPYmouaW1wKCkp
LT5pbXBsKCkpOworICBDU1NWYWx1ZUxpc3RJbXBsICZ2YWx1ZUxpc3QgPSAqc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0SW1wbCAqPihzdGF0aWNfY2FzdDxET01DU1NWYWx1ZUxpc3QgKj4odGhpc09i
aiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUNTU1ZhbHVlTGlzdDo6
SXRlbToKLSAgICAgIHJldHVybiBnZXRET01DU1NWYWx1ZShleGVjLHZhbHVlTGlzdC5pdGVtKGFy
Z3NbMF0udG9JbnQzMihleGVjKSkpOworICAgICAgcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMs
dmFsdWVMaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIH0KQEAgLTEyMDgsMTIgKzEyMDksMTIgQEAgRE9N
UkdCQ29sb3I6On5ET01SR0JDb2xvcigpCiAgIC8vcmdiQ29sb3JzLnJlbW92ZShyZ2JDb2xvci5o
YW5kbGUoKSk7CiB9CiAKLWJvb2wgRE9NUkdCQ29sb3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wg
RE9NUkdCQ29sb3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRP
d25WYWx1ZTxET01SR0JDb2xvciwgRE9NT2JqZWN0PihleGVjLCBwLCAmRE9NUkdCQ29sb3JUYWJs
ZSwgdGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NUkdCQ29sb3I6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NUkdCQ29s
b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAgIGludCBjb2xvciA9IG1fY29sb3I7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTEyMjYsNyAr
MTIyNyw3IEBAIFZhbHVlIERPTVJHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKICAgY2Fz
ZSBCbHVlOgogICAgIHJldHVybiBuZXcgRE9NQ1NTUHJpbWl0aXZlVmFsdWUoZXhlYywgbmV3IENT
U1ByaW1pdGl2ZVZhbHVlSW1wbChjb2xvciAmIDB4RkYsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSk7CiAgIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5V
TEw7CiAgIH0KIH0KIApAQCAtMTI1MiwxMiArMTI1MywxMiBAQCBET01SZWN0Ojp+RE9NUmVjdCgp
CiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9yZWN0LmdldCgpKTsKIH0K
IAotYm9vbCBET01SZWN0OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTVJlY3Q6OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZy
ZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01SZWN0LCBET01P
YmplY3Q+KGV4ZWMsIHAsICZET01SZWN0VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVl
IERPTVJlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqRE9NUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKICAgUmVjdEltcGwgJnJlY3QgPSAqbV9yZWN0OwogICBzd2l0
Y2ggKHRva2VuKSB7CkBAIC0xMjcwLDcgKzEyNzEsNyBAQCBWYWx1ZSBET01SZWN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0CiAgIGNhc2UgTGVmdDoKICAgICByZXR1cm4gZ2V0RE9NQ1NTVmFs
dWUoZXhlYywgcmVjdC5sZWZ0KCkpOwogICBkZWZhdWx0OgotICAgIHJldHVybiBWYWx1ZSgpOwor
ICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAKQEAgLTEyOTUsMTIgKzEyOTYsMTIgQEAgRE9NQ291
bnRlcjo6fkRPTUNvdW50ZXIoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0
KG1fY291bnRlci5nZXQoKSk7CiB9CiAKLWJvb2wgRE9NQ291bnRlcjo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dAorYm9vbCBET01Db3VudGVyOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9v
a3VwR2V0T3duVmFsdWU8RE9NQ291bnRlciwgRE9NT2JqZWN0PihleGVjLCBwLCAmRE9NQ291bnRl
clRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBET01Db3VudGVyOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ291bnRl
cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICBD
b3VudGVySW1wbCAmY291bnRlciA9ICptX2NvdW50ZXI7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAg
LTEzMTEsNyArMTMxMiw3IEBAIFZhbHVlIERPTUNvdW50ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1MKICAgY2FzZSBzZXBhcmF0b3I6CiAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChjb3VudGVy
LnNlcGFyYXRvcigpKTsKICAgZGVmYXVsdDoKLSAgICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1
cm4gTlVMTDsKICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjE3IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfY3NzLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgJ
MjUgSnVsIDIwMDUgMjI6MTc6MTggLTAwMDAJMS4xNworKysgV2ViQ29yZS9raHRtbC9lY21hL2tq
c19jc3MuaAk3IEF1ZyAyMDA1IDA0OjQ0OjEzIC0wMDAwCkBAIC00OSw4ICs0OSw4IEBAIG5hbWVz
cGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnMpOwogICAgIHZpcnR1YWwg
fkRPTUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
JiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0
dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAg
ICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CkBAIC02OCw5ICs2OCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgRE9NU3R5bGVTaGVldChFeGVjU3RhdGUgKiwgRE9NOjpTdHlsZVNoZWV0SW1wbCAq
c3MpIDogbV9pbXBsKHNzKSB7IH0KICAgICB2aXJ0dWFsIH5ET01TdHlsZVNoZWV0KCk7Ci0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGJvb2wg
dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBET01TdHlsZVNoZWV0TGlzdChFeGVjU3RhdGUgKiwgRE9NOjpTdHlsZVNo
ZWV0TGlzdEltcGwgKnNzbCwgRE9NOjpEb2N1bWVudEltcGwgKmRvYykKICAgICAgIDogbV9pbXBs
KHNzbCksIG1fZG9jKGRvYykgeyB9CiAgICAgdmlydHVhbCB+RE9NU3R5bGVTaGVldExpc3QoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0g
YWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0
YXRlKiApIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwOSw4ICsxMDksOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTU1lZGlhTGlzdChFeGVjU3RhdGUgKiwgRE9NOjpN
ZWRpYUxpc3RJbXBsICptbCk7CiAgICAgdmlydHVhbCB+RE9NTWVkaWFMaXN0KCk7Ci0gICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihF
eGVjU3RhdGUqICkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gaW5mbzsKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGlj
OgogICAgIERPTUNTU1N0eWxlU2hlZXQoRXhlY1N0YXRlICpleGVjLCBET006OkNTU1N0eWxlU2hl
ZXRJbXBsICpzcyk7CiAgICAgdmlydHVhbCB+RE9NQ1NTU3R5bGVTaGVldCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMTM5LDcg
KzEzOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTUnVsZUxpc3Qo
RXhlY1N0YXRlICosIERPTTo6Q1NTUnVsZUxpc3RJbXBsICpybCkgOiBtX2ltcGwocmwpIHsgfQog
ICAgIHZpcnR1YWwgfkRPTUNTU1J1bGVMaXN0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZy
ZXN1bHQpIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTUNTU1J1bGUoRXhlY1N0YXRlICosIERPTTo6
Q1NTUnVsZUltcGwgKnIpIDogbV9pbXBsKHIpIHsgfQogICAgIHZpcnR1YWwgfkRPTUNTU1J1bGUo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBpbnQgYXR0cik7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAq
JnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwg
aW50IGF0dHIgPSBOb25lKTsKKyAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdDsKICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzdHlsZV9pbmZvLCBtZWRp
YV9pbmZvLCBmb250ZmFjZV9pbmZvLCBwYWdlX2luZm8sIGltcG9ydF9pbmZvLCBjaGFyc2V0X2lu
Zm87CkBAIC0xNzgsMjIgKzE3OCwyMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgQ1NTUnVs
ZUNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBDU1NSdWxl
Q29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
IComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25s
eQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsg
VU5LTk9XTl9SVUxFLCBTVFlMRV9SVUxFLCBDSEFSU0VUX1JVTEUsIElNUE9SVF9SVUxFLCBNRURJ
QV9SVUxFLCBGT05UX0ZBQ0VfUlVMRSwgUEFHRV9SVUxFIH07CiAgIH07CiAKLSAgVmFsdWUgZ2V0
Q1NTUnVsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpnZXRDU1NS
dWxlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKIAogICBjbGFzcyBET01DU1NWYWx1ZSA6
IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTVmFsdWUoRXhlY1N0YXRl
ICosIERPTTo6Q1NTVmFsdWVJbXBsICp2KSA6IG1faW1wbCh2KSB7IH0KICAgICB2aXJ0dWFsIH5E
T01DU1NWYWx1ZSgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Cisg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgQ3NzVGV4dCwgQ3NzVmFsdWVU
eXBlIH07CkBAIC0yMTEsMjAgKzIxMSwyMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgQ1NT
VmFsdWVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAgQ1NT
VmFsdWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKikgeyB9Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVh
ZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIGVu
dW0geyBDU1NfVkFMVUVfTElTVCwgQ1NTX1BSSU1JVElWRV9WQUxVRSwgQ1NTX0NVU1RPTSwgQ1NT
X0lOSEVSSVQgfTsKICAgfTsKIAotICBWYWx1ZSBnZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpnZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAKICAgY2xhc3MgRE9NQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgRE9NQ1NT
VmFsdWUgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTUHJpbWl0aXZlVmFsdWUoRXhlY1N0YXRlICpl
eGVjLCBET006OkNTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqdik7Ci0gICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0yMzYsMTkgKzIzNiwxOSBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWVDb25zdHJ1Y3RvciA6
IHB1YmxpYyBDU1NWYWx1ZUNvbnN0cnVjdG9yIHsKICAgcHVibGljOgogICAgIENTU1ByaW1pdGl2
ZVZhbHVlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKSA6IENTU1ZhbHVlQ29uc3RydWN0b3Io
ZXhlYykgeyB9Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
Yyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Owot
ICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0Owor
ICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCi0gIFZhbHVlIGdldENTU1ByaW1pdGl2
ZVZhbHVlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKKyAgVmFsdWVJbXAgKmdldENTU1By
aW1pdGl2ZVZhbHVlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKIAogICBjbGFzcyBET01D
U1NWYWx1ZUxpc3QgOiBwdWJsaWMgRE9NQ1NTVmFsdWUgewogICBwdWJsaWM6CiAgICAgRE9NQ1NT
VmFsdWVMaXN0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NWYWx1ZUxpc3RJbXBsICpsKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxs
IHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAg
LTI1OSw4ICsyNTksOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTVJHQkNv
bG9yKHVuc2lnbmVkIGNvbG9yKSA6IG1fY29sb3IoY29sb3IpIHsgfQogICAgIH5ET01SR0JDb2xv
cigpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTI3NSw4ICsyNzUsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgcHVibGljOgogICAgIERPTVJlY3QoRXhlY1N0YXRlICosIERPTTo6UmVjdEltcGwgKnIpIDog
bV9yZWN0KHIpIHsgfQogICAgIH5ET01SZWN0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMjkxLDgg
KzI5MSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NQ291bnRlcihFeGVj
U3RhdGUgKiwgRE9NOjpDb3VudGVySW1wbCAqYykgOiBtX2NvdW50ZXIoYykgeyB9CiAgICAgfkRP
TUNvdW50ZXIoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7
CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pz
X2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfZG9tLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44MwpkaWZmIC1wIC11IC11IC1w
IC1yMS44MyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfZG9tLmNwcAkzMCBKdWwgMjAwNSAwMjozMzoxMyAtMDAwMAkxLjgzCisrKyBXZWJD
b3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJNyBBdWcgMjAwNSAwNDo0NDoxNCAtMDAwMApAQCAt
ODcsNyArODcsNyBAQCBjbGFzcyBET01Ob2RlTGlzdEZ1bmMgOiBwdWJsaWMgRE9NRnVuY3RpCiAg
ICAgZnJpZW5kIGNsYXNzIERPTU5vZGVMaXN0OwogcHVibGljOgogICAgIERPTU5vZGVMaXN0RnVu
YyhFeGVjU3RhdGUgKmV4ZWMsIGludCBpZCwgaW50IGxlbik7Ci0gICAgdmlydHVhbCBWYWx1ZSBj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpOworICAg
IHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYpOwogICAgIGVudW0geyBJdGVtIH07CiBwcml2YXRl
OgogICAgIGludCBpZDsKQEAgLTI3MSwxMiArMjcxLDEyIEBAIGJvb2wgRE9NTm9kZTo6dG9Cb29s
ZWFuKEV4ZWNTdGF0ZSAqKSBjb24KICAgc2Nyb2xsSGVpZ2h0ICBET01Ob2RlOjpTY3JvbGxIZWln
aHQgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKIEBlbmQKICovCi1ib29sIERPTU5vZGU6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01Ob2RlOjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Ob2Rl
LCBET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTU5vZGVUYWJsZSwgdGhpcywgcmVz
dWx0KTsKIH0KIAotVmFsdWUgRE9NTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01Ob2RlOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBOb2RlSW1wbCAmbm9kZSA9
ICptX2ltcGw7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTQwOCwyNSArNDA4LDI1IEBAIFZhbHVl
IERPTU5vZGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAogICAgIHN3aXRjaCAodG9rZW4p
IHsKICAgICBjYXNlIE9mZnNldExlZnQ6Ci0gICAgICByZXR1cm4gcmVuZCA/IHN0YXRpY19jYXN0
PFZhbHVlPihOdW1iZXIocmVuZC0+b2Zmc2V0TGVmdCgpKSkgOiBWYWx1ZShVbmRlZmluZWQoKSk7
CisgICAgICByZXR1cm4gcmVuZCA/IGpzTnVtYmVyKHJlbmQtPm9mZnNldExlZnQoKSkgOiBzdGF0
aWNfY2FzdDxWYWx1ZUltcCAqPihqc1VuZGVmaW5lZCgpKTsKICAgICBjYXNlIE9mZnNldFRvcDoK
LSAgICAgIHJldHVybiByZW5kID8gc3RhdGljX2Nhc3Q8VmFsdWU+KE51bWJlcihyZW5kLT5vZmZz
ZXRUb3AoKSkpIDogVmFsdWUoVW5kZWZpbmVkKCkpOworICAgICAgcmV0dXJuIHJlbmQgPyBqc051
bWJlcihyZW5kLT5vZmZzZXRUb3AoKSkgOiBzdGF0aWNfY2FzdDxWYWx1ZUltcCAqPihqc1VuZGVm
aW5lZCgpKTsKICAgICBjYXNlIE9mZnNldFdpZHRoOgotICAgICAgcmV0dXJuIHJlbmQgPyBzdGF0
aWNfY2FzdDxWYWx1ZT4oTnVtYmVyKHJlbmQtPm9mZnNldFdpZHRoKCkpICkgOiBWYWx1ZShVbmRl
ZmluZWQoKSk7CisgICAgICByZXR1cm4gcmVuZCA/IGpzTnVtYmVyKHJlbmQtPm9mZnNldFdpZHRo
KCkpIDogc3RhdGljX2Nhc3Q8VmFsdWVJbXAgKj4oanNVbmRlZmluZWQoKSk7CiAgICAgY2FzZSBP
ZmZzZXRIZWlnaHQ6Ci0gICAgICByZXR1cm4gcmVuZCA/IHN0YXRpY19jYXN0PFZhbHVlPihOdW1i
ZXIocmVuZC0+b2Zmc2V0SGVpZ2h0KCkgKSApIDogVmFsdWUoVW5kZWZpbmVkKCkpOworICAgICAg
cmV0dXJuIHJlbmQgPyBqc051bWJlcihyZW5kLT5vZmZzZXRIZWlnaHQoKSkgOiBzdGF0aWNfY2Fz
dDxWYWx1ZUltcCAqPihqc1VuZGVmaW5lZCgpKTsKICAgICBjYXNlIE9mZnNldFBhcmVudDogewog
ICAgICAga2h0bWw6OlJlbmRlck9iamVjdCogcGFyID0gcmVuZCA/IHJlbmQtPm9mZnNldFBhcmVu
dCgpIDogMDsKICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHBhciA/IHBhci0+ZWxlbWVu
dCgpIDogMCk7CiAgICAgfQogICAgIGNhc2UgQ2xpZW50V2lkdGg6Ci0gICAgICByZXR1cm4gcmVu
ZCA/IHN0YXRpY19jYXN0PFZhbHVlPihOdW1iZXIocmVuZC0+Y2xpZW50V2lkdGgoKSkgKSA6IFZh
bHVlKFVuZGVmaW5lZCgpKTsKKyAgICAgIHJldHVybiByZW5kID8ganNOdW1iZXIocmVuZC0+Y2xp
ZW50V2lkdGgoKSkgOiBzdGF0aWNfY2FzdDxWYWx1ZUltcCAqPihqc1VuZGVmaW5lZCgpKTsKICAg
ICBjYXNlIENsaWVudEhlaWdodDoKLSAgICAgIHJldHVybiByZW5kID8gc3RhdGljX2Nhc3Q8VmFs
dWU+KE51bWJlcihyZW5kLT5jbGllbnRIZWlnaHQoKSkgKSA6IFZhbHVlKFVuZGVmaW5lZCgpKTsK
KyAgICAgIHJldHVybiByZW5kID8ganNOdW1iZXIocmVuZC0+Y2xpZW50SGVpZ2h0KCkpIDogc3Rh
dGljX2Nhc3Q8VmFsdWVJbXAgKj4oanNVbmRlZmluZWQoKSk7CiAgICAgY2FzZSBTY3JvbGxXaWR0
aDoKLSAgICAgICAgcmV0dXJuIHJlbmQgPyBzdGF0aWNfY2FzdDxWYWx1ZT4oTnVtYmVyKHJlbmQt
PnNjcm9sbFdpZHRoKCkpICkgOiBWYWx1ZShVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBy
ZW5kID8ganNOdW1iZXIocmVuZC0+c2Nyb2xsV2lkdGgoKSkgOiBzdGF0aWNfY2FzdDxWYWx1ZUlt
cCAqPihqc1VuZGVmaW5lZCgpKTsKICAgICBjYXNlIFNjcm9sbEhlaWdodDoKLSAgICAgICAgcmV0
dXJuIHJlbmQgPyBzdGF0aWNfY2FzdDxWYWx1ZT4oTnVtYmVyKHJlbmQtPnNjcm9sbEhlaWdodCgp
KSApIDogVmFsdWUoVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gcmVuZCA/IGpzTnVtYmVy
KHJlbmQtPnNjcm9sbEhlaWdodCgpKSA6IHN0YXRpY19jYXN0PFZhbHVlSW1wICo+KGpzVW5kZWZp
bmVkKCkpOwogICAgIGNhc2UgU2Nyb2xsTGVmdDoKICAgICAgIHJldHVybiBOdW1iZXIocmVuZCAm
JiByZW5kLT5sYXllcigpID8gcmVuZC0+bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpIDogMCk7CiAg
ICAgY2FzZSBTY3JvbGxUb3A6CkBAIC00MzcsMTAgKzQzNywxMCBAQCBWYWx1ZSBET01Ob2RlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgfQogICB9CiAKLSAgcmV0dXJuIFZhbHVlKCk7
CisgIHJldHVybiBOVUxMOwogfQogCi12b2lkIERPTU5vZGU6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQg
YXR0cikKK3ZvaWQgRE9NTm9kZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogI2lmZGVmIEtK
U19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIkRPTU5vZGU6OnB1dCAiIDw8IHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKQEAgLTQ0OSwxNiArNDQ5LDE2IEBAIHZvaWQgRE9NTm9k
ZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmRE9NTm9kZVRhYmxlLCB0aGlzICk7CiB9CiAKLXZvaWQgRE9NTm9kZTo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIERPTU5vZGU6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKQog
ewogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgTm9kZUltcGwg
Jm5vZGUgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgTm9kZVZhbHVlOgot
ICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNl
cHRpb24pOworICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5z
ZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSwg
ZXhjZXB0aW9uKTsKKyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBP
bkFib3J0OgogICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkFCT1JUX0VWRU5U
LHZhbHVlKTsKQEAgLTU4OSwxMyArNTg5LDEzIEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUKICAgY2FzZSBTY3JvbGxUb3A6IHsKICAgICBraHRtbDo6UmVuZGVyT2Jq
ZWN0ICpyZW5kID0gbm9kZS5yZW5kZXJlcigpOwogICAgIGlmIChyZW5kICYmIHJlbmQtPmhhc092
ZXJmbG93Q2xpcCgpKQotICAgICAgICByZW5kLT5sYXllcigpLT5zY3JvbGxUb1lPZmZzZXQodmFs
dWUudG9JbnQzMihleGVjKSk7CisgICAgICAgIHJlbmQtPmxheWVyKCktPnNjcm9sbFRvWU9mZnNl
dCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7CiAgICAgYnJlYWs7CiAgIH0KICAgY2FzZSBTY3JvbGxM
ZWZ0OiB7CiAgICAga2h0bWw6OlJlbmRlck9iamVjdCAqcmVuZCA9IG5vZGUucmVuZGVyZXIoKTsK
ICAgICBpZiAocmVuZCAmJiByZW5kLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgIHJlbmQtPmxh
eWVyKCktPnNjcm9sbFRvWE9mZnNldCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgIHJlbmQt
PmxheWVyKCktPnNjcm9sbFRvWE9mZnNldCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7CiAgICAgYnJl
YWs7CiAgIH0KICAgZGVmYXVsdDoKQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIERPTU5vZGU6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAgIH0KIH0KIAotVmFsdWUgRE9NTm9kZTo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIC8qcHJlZmVycmVkKi8pIGNvbnN0CitWYWx1ZUlt
cCAqRE9NTm9kZTo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIC8qcHJlZmVycmVk
Ki8pIGNvbnN0CiB7CiAgIGlmIChtX2ltcGwuaXNOdWxsKCkpCiAgICAgcmV0dXJuIE51bGwoKTsK
QEAgLTYyMyw3ICs2MjMsNyBAQCB2b2lkIERPTU5vZGU6OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSAq
ZXhlCiAgIG1faW1wbC0+c2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRJZCwgV2luZG93OjpyZXRy
aWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNFdmVudExpc3RlbmVyKGZ1bmMsIHRydWUpKTsKIH0KIAot
VmFsdWUgRE9NTm9kZTo6Z2V0TGlzdGVuZXIoaW50IGV2ZW50SWQpIGNvbnN0CitWYWx1ZUltcCAq
RE9NTm9kZTo6Z2V0TGlzdGVuZXIoaW50IGV2ZW50SWQpIGNvbnN0CiB7CiAgICAgRE9NOjpFdmVu
dExpc3RlbmVyICpsaXN0ZW5lciA9IG1faW1wbC0+Z2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRJ
ZCk7CiAgICAgSlNFdmVudExpc3RlbmVyICpqc0xpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNFdmVu
dExpc3RlbmVyKj4obGlzdGVuZXIpOwpAQCAtNjM3LDM4ICs2MzcsMzggQEAgdm9pZCBET01Ob2Rl
OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlYwogewogfQogCi1WYWx1ZSBET01Ob2RlUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkRPTU5vZGVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAo
IXRoaXNPYmouaW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZE
T01Ob2RlOjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVy
cjsKICAgfQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgTm9k
ZUltcGwgJm5vZGUgPSAqc3RhdGljX2Nhc3Q8RE9NTm9kZSAqPih0aGlzT2JqLmltcCgpKS0+aW1w
bCgpOworICBOb2RlSW1wbCAmbm9kZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmop
LT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU5vZGU6Okhhc0F0dHJpYnV0
ZXM6CiAgICAgICByZXR1cm4gQm9vbGVhbihub2RlLmhhc0F0dHJpYnV0ZXMoKSk7CiAgICAgY2Fz
ZSBET01Ob2RlOjpIYXNDaGlsZE5vZGVzOgogICAgICAgcmV0dXJuIEJvb2xlYW4obm9kZS5oYXND
aGlsZE5vZGVzKCkpOwogICAgIGNhc2UgRE9NTm9kZTo6Q2xvbmVOb2RlOgotICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyxub2RlLmNsb25lTm9kZShhcmdzWzBdLnRvQm9vbGVhbihleGVjKSkp
OworICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxub2RlLmNsb25lTm9kZShhcmdzWzBdLT50
b0Jvb2xlYW4oZXhlYykpKTsKICAgICBjYXNlIERPTU5vZGU6Ok5vcm1hbGl6ZToKICAgICAgIG5v
ZGUubm9ybWFsaXplKCk7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01O
b2RlOjpJc1N1cHBvcnRlZDoKLSAgICAgICAgcmV0dXJuIEJvb2xlYW4obm9kZS5pc1N1cHBvcnRl
ZChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLAotICAgICAgICAgICAgKGFyZ3NbMV0u
dHlwZSgpICE9IFVuZGVmaW5lZFR5cGUgJiYgYXJnc1sxXS50eXBlKCkgIT0gTnVsbFR5cGUpID8g
YXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSA6IERPTVN0cmluZygpKSk7CisgICAgICAg
IHJldHVybiBCb29sZWFuKG5vZGUuaXNTdXBwb3J0ZWQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksCisgICAgICAgICAgICBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVsbCgpID8gRE9N
U3RyaW5nKCkgOiBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgIGNhc2Ug
RE9NTm9kZTo6QWRkRXZlbnRMaXN0ZW5lcjogewogICAgICAgICBKU0V2ZW50TGlzdGVuZXIgKmxp
c3RlbmVyID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNFdmVudExpc3RlbmVy
KGFyZ3NbMV0pOwogICAgICAgICBpZiAobGlzdGVuZXIpCi0gICAgICAgICAgICBub2RlLmFkZEV2
ZW50TGlzdGVuZXIoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxsaXN0ZW5lcixhcmdz
WzJdLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29s
ZWFuKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KICAgICBjYXNl
IERPTU5vZGU6OlJlbW92ZUV2ZW50TGlzdGVuZXI6IHsKICAgICAgICAgSlNFdmVudExpc3RlbmVy
ICpsaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTRXZlbnRMaXN0
ZW5lcihhcmdzWzFdKTsKICAgICAgICAgaWYgKGxpc3RlbmVyKQotICAgICAgICAgICAgbm9kZS5y
ZW1vdmVFdmVudExpc3RlbmVyKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksbGlzdGVu
ZXIsYXJnc1syXS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVu
dExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGxpc3RlbmVyLGFyZ3Nb
Ml0tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgY2FzZSBET01Ob2RlOjpEaXNwYXRjaEV2ZW50OgpAQCAtNjg5LDcgKzY4OSw3IEBAIFZh
bHVlIERPTU5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICoKICAgICAgIC8vIHdoZW4gdGhl
IHBhcmFtZXRlciBpcyBub3QgYSBub2RlPyBXaGVuIHRoZSBvYmplY3QgaXMgbm90IGFuIGVsZW1l
bnQ/CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01Ob2RlOjpJdGVtOgot
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbm9kZS5jaGlsZE5vZGVzKCktPml0ZW0oYXJn
c1swXS50b0ludDMyKGV4ZWMpKSk7CisgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBub2Rl
LmNoaWxkTm9kZXMoKS0+aXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CiAgIH0KIAogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03MTEsNyArNzExLDcgQEAgRE9NTm9kZUxpc3Q6On5ET01O
b2RlTGlzdCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdl
dCgpKTsKIH0KIAotVmFsdWUgRE9NTm9kZUxpc3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhl
YywgVHlwZSAvKnByZWZlcnJlZCovKSBjb25zdAorVmFsdWVJbXAgKkRPTU5vZGVMaXN0Ojp0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgLypwcmVmZXJyZWQqLykgY29uc3QKIHsKICAg
aWYgKG1faW1wbC5pc051bGwoKSkKICAgICByZXR1cm4gTnVsbCgpOwpAQCAtNzMwLDcgKzczMCw3
IEBAIGJvb2wgRE9NTm9kZUxpc3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGEKICAgcmV0dXJuIE9i
amVjdEltcDo6aGFzT3duUHJvcGVydHkoZXhlYywgcCk7CiB9CiAKLWJvb2wgRE9NTm9kZUxpc3Q6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NTm9kZUxpc3Q6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0
CiB7CiAgIE5vZGVMaXN0SW1wbCAmbGlzdCA9ICptX2ltcGw7CiAgIGlmIChwID09IGxlbmd0aFBy
b3BlcnR5TmFtZSkgewpAQCAtNzYyLDEwICs3NjIsMTAgQEAgYm9vbCBET01Ob2RlTGlzdDo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YQogfQogCiAvLyBOZWVkIHRvIHN1cHBvcnQgYm90aCBnZXQgYW5k
IGNhbGwsIHNvIHRoYXQgbGlzdFswXSBhbmQgbGlzdCgwKSB3b3JrLgotVmFsdWUgRE9NTm9kZUxp
c3Q6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpET01Ob2RlTGlzdDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKiwgY29uc3QgTGlzdCAmYXJncykKIHsKICAgLy8gRG8gbm90IHVzZSB0aGlzT2JqIGhl
cmUuIFNlZSBIVE1MQ29sbGVjdGlvbi4KLSAgVVN0cmluZyBzID0gYXJnc1swXS50b1N0cmluZyhl
eGVjKTsKKyAgVVN0cmluZyBzID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgIGJvb2wgb2s7
CiAgIHVuc2lnbmVkIGludCB1ID0gcy50b1VMb25nKCZvayk7CiAgIGlmIChvaykKQEAgLTc3OCwy
NCArNzc4LDIzIEBAIFZhbHVlIERPTU5vZGVMaXN0OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywKIERP
TU5vZGVMaXN0RnVuYzo6RE9NTm9kZUxpc3RGdW5jKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGksIGlu
dCBsZW4pCiAgIDogRE9NRnVuY3Rpb24oKSwgaWQoaSkKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlz
KTsKICAgcHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLE51bWJlcihsZW4pLERvbnREZWxldGV8
UmVhZE9ubHl8RG9udEVudW0pOwogfQogCiAvLyBOb3QgYSBwcm90b3R5cGUgY2xhc3MgY3VycmVu
dGx5LCBidXQgc2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCB0byBvbmUKLVZhbHVlIERPTU5v
ZGVMaXN0RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01Ob2RlTGlzdEZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NTm9kZUxpc3Q6OmluZm8pKSB7Ci0gICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGVMaXN0OjppbmZvKSkgeworICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQotICBET006Ok5vZGVMaXN0SW1wbCAmbGlz
dCA9ICpzdGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOwot
ICBWYWx1ZSByZXN1bHQ7CisgIERPTTo6Tm9kZUxpc3RJbXBsICZsaXN0ID0gKnN0YXRpY19jYXN0
PERPTU5vZGVMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAKICAgaWYgKGlkID09IEl0ZW0pCi0g
ICAgcmVzdWx0ID0gZ2V0RE9NTm9kZShleGVjLCBsaXN0Lml0ZW0oYXJnc1swXS50b0ludDMyKGV4
ZWMpKSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbGlz
dC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKKworICByZXR1cm4gTlVMTDsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODE2LDEyICs4MTUsMTIgQEAgRE9NQXR0cjo6RE9NQXR0
cihFeGVjU3RhdGUgKmV4ZWMsIEF0dHJJbQogewogfQogCi1ib29sIERPTUF0dHI6OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01BdHRyOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01BdHRyLCBET01Ob2Rl
PihleGVjLCBwcm9wZXJ0eU5hbWUsICZET01BdHRyVGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAK
LVZhbHVlIERPTUF0dHI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgQXR0ckltcGwgKmF0dHIgPSBzdGF0aWNfY2Fz
dDxBdHRySW1wbCAqPihpbXBsKCkpOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC04MzQsMTAgKzgz
MywxMCBAQCBWYWx1ZSBET01BdHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAgIGNhc2Ug
T3duZXJFbGVtZW50OiAvLyBET00yCiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgYXR0ci0+
b3duZXJFbGVtZW50KCkpOwogICB9Ci0gIHJldHVybiBWYWx1ZSgpOyAvLyBub3QgcmVhY2hlZAor
ICByZXR1cm4gTlVMTDsgLy8gbm90IHJlYWNoZWQKIH0KIAotdm9pZCBET01BdHRyOjpwdXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgaW50IGF0dHIpCit2b2lkIERPTUF0dHI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikK
IHsKICNpZmRlZiBLSlNfVkVSQk9TRQogICBrZERlYnVnKDYwNzApIDw8ICJET01BdHRyOjpwdXQg
IiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7CkBAIC04NDYsMTIgKzg0NSwxMiBA
QCB2b2lkIERPTUF0dHI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZET01BdHRyVGFibGUsIHRoaXMgKTsKIH0KIAotdm9p
ZCBET01BdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgRE9NQXR0cjo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQg
LyphdHRyKi8pCiB7CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwog
ICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVmFsdWVQcm9wZXJ0eToKLSAgICBzdGF0aWNfY2Fz
dDxBdHRySW1wbCAqPihpbXBsKCkpLT5zZXRWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgZXhjZXB0aW9uKTsKKyAgICBzdGF0aWNfY2FzdDxBdHRySW1wbCAqPihpbXBsKCkpLT5z
ZXRWYWx1ZSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAg
cmV0dXJuOwogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJET01BdHRyOjpwdXRWYWx1
ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7CkBAIC05MzIsMTIg
KzkzMSwxMiBAQCBET01Eb2N1bWVudDo6fkRPTURvY3VtZW50KCkKICAgU2NyaXB0SW50ZXJwcmV0
ZXI6OmZvcmdldERPTU9iamVjdChzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwgKj4obV9pbXBsLmdl
dCgpKSk7CiB9CiAKLWJvb2wgRE9NRG9jdW1lbnQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dAorYm9vbCBET01Eb2N1bWVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewog
ICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NRG9jdW1lbnQsIERPTU5vZGU+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgJkRPTURvY3VtZW50VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVl
IERPTURvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKkRPTURvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBEb2N1bWVudEltcGwgJmRvYyA9ICpzdGF0
aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsKIApAQCAtOTY4LDExICs5NjcsMTEgQEAg
VmFsdWUgRE9NRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBnZXRE
T01BYnN0cmFjdFZpZXcoZXhlYyxkb2MuZGVmYXVsdFZpZXcoKSk7CiAgIGRlZmF1bHQ6CiAgICAg
a2RXYXJuaW5nKCkgPDwgIkRPTURvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0
b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJu
IE5VTEw7CiAgIH0KIH0KIAotdm9pZCBET01Eb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBh
dHRyKQordm9pZCBET01Eb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogI2lmZGVm
IEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIkRPTURvY3VtZW50OjpwdXQgIiA8PCBw
cm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7CkBAIC05ODAsMjkgKzk3OSwyOSBAQCB2b2lk
IERPTURvY3VtZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjCiAgIGxvb2t1cFB1dDxET01Eb2N1
bWVudCxET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9NRG9jdW1l
bnRUYWJsZSwgdGhpcyApOwogfQogCi12b2lkIERPTURvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0
dHIqLykKK3ZvaWQgRE9NRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogICBEb2N1bWVu
dEltcGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsKICAgc3dp
dGNoICh0b2tlbikgewogICAgIGNhc2UgU2VsZWN0ZWRTdHlsZXNoZWV0U2V0OiB7Ci0gICAgICBk
b2Muc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
KTsKKyAgICAgIGRvYy5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXQodmFsdWUtPnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogfQogCi1WYWx1ZSBET01E
b2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01Eb2N1bWVudFByb3RvRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkg
ewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkgeworICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICBET01FeGNlcHRpb25UcmFuc2xh
dG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgTm9kZUltcGwgJm5vZGUgPSAqc3RhdGljX2Nhc3Q8RE9N
Tm9kZSAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOworICBOb2RlSW1wbCAmbm9kZSA9ICpzdGF0
aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIERvY3VtZW50SW1wbCAmZG9j
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICY+KG5vZGUpOwotICBTdHJpbmcgc3RyID0gYXJn
c1swXS50b1N0cmluZyhleGVjKTsKLSAgRE9NOjpET01TdHJpbmcgcyA9IHN0ci52YWx1ZSgpLnN0
cmluZygpOworICBVU3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICBET006
OkRPTVN0cmluZyBzID0gc3RyLnN0cmluZygpOwogCiAgIHN3aXRjaChpZCkgewogICBjYXNlIERP
TURvY3VtZW50OjpDcmVhdGVFbGVtZW50OgpAQCAtMTAxNiw3MiArMTAxNSw3MiBAQCBWYWx1ZSBE
T01Eb2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhCiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkNy
ZWF0ZUNEQVRBU2VjdGlvbjoKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVD
REFUQVNlY3Rpb24ocykpOyAgLyogVE9ETzogb2theSA/ICovCiAgIGNhc2UgRE9NRG9jdW1lbnQ6
OkNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LGRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oYXJnc1swXS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihh
cmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlQXR0cmlidXRl
OgogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZUF0dHJpYnV0ZShzLCBleGNl
cHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlRW50aXR5UmVmZXJlbmNlOgogICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZUVudGl0eVJlZmVyZW5jZShzKSk7CiAg
IGNhc2UgRE9NRG9jdW1lbnQ6OkVsZW1lbnRGcm9tUG9pbnQ6Ci0gICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyxkb2MuZWxlbWVudEZyb21Qb2ludCgoaW50KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyks
IChpbnQpYXJnc1sxXS50b051bWJlcihleGVjKSkpOworICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsZG9jLmVsZW1lbnRGcm9tUG9pbnQoKGludClhcmdzWzBdLT50b051bWJlcihleGVjKSwgKGlu
dClhcmdzWzFdLT50b051bWJlcihleGVjKSkpOwogICBjYXNlIERPTURvY3VtZW50OjpHZXRFbGVt
ZW50c0J5VGFnTmFtZToKICAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhlYyxkb2MuZ2V0RWxl
bWVudHNCeVRhZ05hbWUocykuZ2V0KCkpOwogICBjYXNlIERPTURvY3VtZW50OjpJbXBvcnROb2Rl
OiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuaW1wb3J0Tm9kZSh0b05v
ZGUoYXJnc1swXSksIGFyZ3NbMV0udG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5pbXBvcnROb2RlKHRvTm9kZShhcmdzWzBdKSwgYXJn
c1sxXS0+dG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6
Q3JlYXRlRWxlbWVudE5TOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2Mu
Y3JlYXRlRWxlbWVudE5TKHMsIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2Vw
dGlvbikpOworICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZUVsZW1lbnROUyhz
LCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKSk7CiAgIGNhc2Ug
RE9NRG9jdW1lbnQ6OkNyZWF0ZUF0dHJpYnV0ZU5TOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxkb2MuY3JlYXRlQXR0cmlidXRlTlMocywgYXJnc1sxXS50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2Mu
Y3JlYXRlQXR0cmlidXRlTlMocywgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4
Y2VwdGlvbikpOwogICBjYXNlIERPTURvY3VtZW50OjpHZXRFbGVtZW50c0J5VGFnTmFtZU5TOiAv
LyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4ZWMsZG9jLmdldEVsZW1lbnRzQnlU
YWdOYW1lTlMocywgYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuZ2V0KCkpOworICAg
IHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKHMs
IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKS5nZXQoKSk7CiAgIGNhc2UgRE9NRG9j
dW1lbnQ6OkdldEVsZW1lbnRCeUlkOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmdl
dEVsZW1lbnRCeUlkKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5nZXRFbGVtZW50QnlJZChhcmdzWzBdLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSkpOwogICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVSYW5nZToKICAgICBy
ZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYyxkb2MuY3JlYXRlUmFuZ2UoKSk7CiAgIGNhc2UgRE9NRG9j
dW1lbnQ6OkNyZWF0ZU5vZGVJdGVyYXRvcjogewogICAgIE5vZGVGaWx0ZXJJbXBsICpmaWx0ZXIg
PSAwOwotICAgIFZhbHVlSW1wICphcmcyID0gYXJncy5pbXBBdCgyKTsKKyAgICBWYWx1ZUltcCAq
YXJnMiA9IGFyZ3NbMl07CiAgICAgaWYgKGFyZzItPmlzT2JqZWN0KCkpIHsKLSAgICAgIE9iamVj
dCBvKHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihhcmcyKSk7CisgICAgICBPYmplY3RJbXAgKm8o
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGFyZzIpKTsKICAgICAgIGZpbHRlciA9IG5ldyBOb2Rl
RmlsdGVySW1wbChuZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKG8pKTsKICAgICB9Ci0gICAgcmV0
dXJuIGdldERPTU5vZGVJdGVyYXRvcihleGVjLGRvYy5jcmVhdGVOb2RlSXRlcmF0b3IodG9Ob2Rl
KGFyZ3NbMF0pLCBhcmdzWzFdLnRvVUludDMyKGV4ZWMpLAotICAgICAgICBmaWx0ZXIsIGFyZ3Nb
M10udG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICByZXR1cm4gZ2V0RE9NTm9kZUl0
ZXJhdG9yKGV4ZWMsZG9jLmNyZWF0ZU5vZGVJdGVyYXRvcih0b05vZGUoYXJnc1swXSksIGFyZ3Nb
MV0tPnRvVUludDMyKGV4ZWMpLAorICAgICAgICBmaWx0ZXIsIGFyZ3NbM10tPnRvQm9vbGVhbihl
eGVjKSwgZXhjZXB0aW9uKSk7CiAgIH0KICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlVHJlZVdh
bGtlcjogewogICAgIE5vZGVGaWx0ZXJJbXBsICpmaWx0ZXIgPSAwOwotICAgIFZhbHVlSW1wICph
cmcyID0gYXJncy5pbXBBdCgyKTsKKyAgICBWYWx1ZUltcCAqYXJnMiA9IGFyZ3NbMl07CiAgICAg
aWYgKGFyZzItPmlzT2JqZWN0KCkpIHsKLSAgICAgIE9iamVjdCBvKHN0YXRpY19jYXN0PE9iamVj
dEltcCAqPihhcmcyKSk7CisgICAgICBPYmplY3RJbXAgKm8oc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
ICo+KGFyZzIpKTsKICAgICAgIGZpbHRlciA9IG5ldyBOb2RlRmlsdGVySW1wbChuZXcgSlNOb2Rl
RmlsdGVyQ29uZGl0aW9uKG8pKTsKICAgICB9Ci0gICAgcmV0dXJuIGdldERPTVRyZWVXYWxrZXIo
ZXhlYyxkb2MuY3JlYXRlVHJlZVdhbGtlcih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0udG9VSW50
MzIoZXhlYyksCi0gICAgICAgIGZpbHRlciwgYXJnc1szXS50b0Jvb2xlYW4oZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgIHJldHVybiBnZXRET01UcmVlV2Fsa2VyKGV4ZWMsZG9jLmNyZWF0ZVRyZWVX
YWxrZXIodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b1VJbnQzMihleGVjKSwKKyAgICAgICAg
ZmlsdGVyLCBhcmdzWzNdLT50b0Jvb2xlYW4oZXhlYyksIGV4Y2VwdGlvbikpOwogICB9CiAgIGNh
c2UgRE9NRG9jdW1lbnQ6OkNyZWF0ZUV2ZW50OgogICAgIHJldHVybiBnZXRET01FdmVudChleGVj
LGRvYy5jcmVhdGVFdmVudChzLCBleGNlcHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6R2V0
T3ZlcnJpZGVTdHlsZToKICAgICBpZiAoRWxlbWVudEltcGwgKmVsZW1lbnQwID0gdG9FbGVtZW50
KGFyZ3NbMF0pKQotICAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihleGVj
LGRvYy5nZXRPdmVycmlkZVN0eWxlKGVsZW1lbnQwLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKSk7CisgICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMs
ZG9jLmdldE92ZXJyaWRlU3R5bGUoZWxlbWVudDAsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKSk7CiAgICAgLy8gRklYTUU6IElzIHVuZGVmaW5lZCByaWdodCBoZXJlLCBvciBzaG91
bGQgd2UgcmFpc2UgYW4gZXhjZXB0aW9uPwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgY2Fz
ZSBET01Eb2N1bWVudDo6RXhlY0NvbW1hbmQ6IHsKLSAgICByZXR1cm4gQm9vbGVhbihkb2MuZXhl
Y0NvbW1hbmQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b0Jvb2xl
YW4oZXhlYyksIGFyZ3NbMl0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICByZXR1cm4g
Qm9vbGVhbihkb2MuZXhlY0NvbW1hbmQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCks
IGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwgYXJnc1syXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpKTsKICAgfQogICBjYXNlIERPTURvY3VtZW50OjpRdWVyeUNvbW1hbmRFbmFibGVkOiB7Ci0g
ICAgcmV0dXJuIEJvb2xlYW4oZG9jLnF1ZXJ5Q29tbWFuZEVuYWJsZWQoYXJnc1swXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSkpOworICAgIHJldHVybiBCb29sZWFuKGRvYy5xdWVyeUNvbW1hbmRF
bmFibGVkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgIH0KICAgY2FzZSBE
T01Eb2N1bWVudDo6UXVlcnlDb21tYW5kSW5kZXRlcm06IHsKLSAgICByZXR1cm4gQm9vbGVhbihk
b2MucXVlcnlDb21tYW5kSW5kZXRlcm0oYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkp
OworICAgIHJldHVybiBCb29sZWFuKGRvYy5xdWVyeUNvbW1hbmRJbmRldGVybShhcmdzWzBdLT50
b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICB9CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OlF1ZXJ5
Q29tbWFuZFN0YXRlOiB7Ci0gICAgcmV0dXJuIEJvb2xlYW4oZG9jLnF1ZXJ5Q29tbWFuZFN0YXRl
KGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICByZXR1cm4gQm9vbGVhbihk
b2MucXVlcnlDb21tYW5kU3RhdGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsK
ICAgfQogICBjYXNlIERPTURvY3VtZW50OjpRdWVyeUNvbW1hbmRTdXBwb3J0ZWQ6IHsKLSAgICBy
ZXR1cm4gQm9vbGVhbihkb2MucXVlcnlDb21tYW5kU3VwcG9ydGVkKGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpKTsKKyAgICByZXR1cm4gQm9vbGVhbihkb2MucXVlcnlDb21tYW5kU3Vw
cG9ydGVkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgIH0KICAgY2FzZSBE
T01Eb2N1bWVudDo6UXVlcnlDb21tYW5kVmFsdWU6IHsKLSAgICBET006OkRPTVN0cmluZyBjb21t
YW5kVmFsdWUoZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpKTsKKyAgICBET006OkRPTVN0cmluZyBjb21tYW5kVmFsdWUoZG9jLnF1ZXJ5Q29tbWFu
ZFZhbHVlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAgLy8gTWV0aG9k
IHJldHVybnMgbnVsbCBET01TdHJpbmcgdG8gc2lnbmFsIGNvbW1hbmQgaXMgdW5zdXBwb3J0ZWQu
CiAgICAgLy8gTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gZm9yIHRoaXMgbWV0aG9kIHNheXM6CiAg
ICAgLy8gIklmIG5vdCBzdXBwb3J0ZWQgW2ZvciBhIGNvbW1hbmQgaWRlbnRpZmllcl0sIHRoaXMg
bWV0aG9kIHJldHVybnMgYSBCb29sZWFuIHNldCB0byBmYWxzZS4iCkBAIC0xMTQ2LDcgKzExNDUs
NyBAQCBET01FbGVtZW50OjpET01FbGVtZW50KEVsZW1lbnRJbXBsICplKQogeyAKIH0KIAotYm9v
bCBET01FbGVtZW50OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NRWxlbWVu
dDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICBFbGVtZW50SW1wbCAmZWxl
bWVudCA9ICpzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwogCkBAIC0xMTY4LDEw
ICsxMTY3LDEwIEBAIGJvb2wgRE9NRWxlbWVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXQKICAg
Ly8gV2UgaGF2ZSB0byBjaGVjayBpbiBET01Ob2RlIGJlZm9yZSBnaXZpbmcgYWNjZXNzIHRvIGF0
dHJpYnV0ZXMsIG90aGVyd2lzZQogICAvLyBvbmxvYWQ9Ii4uLiIgd291bGQgbWFrZSBvbmxvYWQg
cmV0dXJuIHRoZSBzdHJpbmcgKGF0dHJpYnV0ZSB2YWx1ZSkgaW5zdGVhZCBvZgogICAvLyB0aGUg
bGlzdGVuZXIgb2JqZWN0IChmdW5jdGlvbikuCi0gIFZhbHVlSW1wICpwcm90byA9IHByb3RvdHlw
ZSgpLmltcCgpOworICBWYWx1ZUltcCAqcHJvdG8gPSBwcm90b3R5cGUoKTsKICAgaWYgKERPTU5v
ZGU6Omhhc093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgcmV0dXJuIERPTU5v
ZGU6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKLSAgaWYgKHBy
b3RvLT5kaXNwYXRjaFR5cGUoKSA9PSBPYmplY3RUeXBlICYmIHN0YXRpY19jYXN0PE9iamVjdElt
cCAqPihwcm90byktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCisgIGlmIChwcm90
by0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocHJvdG8pLT5oYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgIHJldHVybiBmYWxzZTsKIAogICBET006OkRP
TVN0cmluZyBhdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUocHJvcGVydHlOYW1lLnN0cmluZygp
KTsKQEAgLTExODQsNTcgKzExODMsNTcgQEAgYm9vbCBET01FbGVtZW50OjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdAogICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVsZW1lbnRQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqRE9NRWxlbWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlm
ICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkgeyAvLyBub2RlIHNob3Vs
ZCBiZSBlbm91Z2ggaGVyZSwgZ2l2ZW4gdGhlIGNhc3QKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6
RE9NTm9kZTo6aW5mbykpIHsgLy8gbm9kZSBzaG91bGQgYmUgZW5vdWdoIGhlcmUsIGdpdmVuIHRo
ZSBjYXN0CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9CiAg
IERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBOb2RlSW1wbCAmbm9k
ZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCk7CisgIE5v
ZGVJbXBsICZub2RlID0gKnN0YXRpY19jYXN0PERPTU5vZGUgKj4odGhpc09iaiktPmltcGwoKTsK
ICAgRWxlbWVudEltcGwgJmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAmPihub2Rl
KTsKIAogICBzd2l0Y2goaWQpIHsKICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEF0dHJpYnV0ZToK
ICAgICAgIC8vIGdldFN0cmluZ09yTnVsbCBzaG91bGQgYmUgdXNlZCBoZXJlLCBzaW5jZSBpZiB0
aGUgYXR0cmlidXRlIGlzbid0IHByZXNlbnQgYXQgYWxsLCB5b3Ugc2hvdWxkCiAgICAgICAvLyBy
ZXR1cm4gbnVsbCBhbmQgbm90ICIiLgotICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVt
ZW50LmdldEF0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAg
ICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAgY2FzZSBET01FbGVtZW50OjpTZXRBdHRyaWJ1
dGU6Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOworICAg
ICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCks
IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6UmVtb3ZlQXR0cmlidXRlOgot
ICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6R2V0QXR0cmlidXRlTm9kZToKLSAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGFyZ3NbMF0udG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxl
bWVudC5nZXRBdHRyaWJ1dGVOb2RlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7
CiAgICAgY2FzZSBET01FbGVtZW50OjpTZXRBdHRyaWJ1dGVOb2RlOgogICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyxlbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUodG9BdHRyKGFyZ3NbMF0pLCBl
eGNlcHRpb24pLmdldCgpKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OlJlbW92ZUF0dHJpYnV0ZU5v
ZGU6CiAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQucmVtb3ZlQXR0cmlidXRl
Tm9kZSh0b0F0dHIoYXJnc1swXSksIGV4Y2VwdGlvbikuZ2V0KCkpOwogICAgIGNhc2UgRE9NRWxl
bWVudDo6R2V0RWxlbWVudHNCeVRhZ05hbWU6Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3Qo
ZXhlYywgZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpKS5nZXQoKSk7CisgICAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhlYywgZWxl
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmco
KSkuZ2V0KCkpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6SGFzQXR0cmlidXRlOiAvLyBET00yCi0g
ICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50Lmhhc0F0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpKSk7CisgICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50Lmhhc0F0dHJp
YnV0ZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgIGNhc2UgRE9NRWxl
bWVudDo6R2V0QXR0cmlidXRlTlM6IC8vIERPTTIKLSAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVu
dC5nZXRBdHRyaWJ1dGVOUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGFyZ3NbMV0u
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLnN0cmluZygpKTsKKyAgICAgIHJldHVybiBTdHJpbmco
ZWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxh
cmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuc3RyaW5nKCkpOwogICAgIGNhc2UgRE9N
RWxlbWVudDo6U2V0QXR0cmlidXRlTlM6IC8vIERPTTIKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmli
dXRlTlMoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSwgYXJnc1syXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9u
KTsKKyAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdzWzJdLT50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OlJlbW92ZUF0dHJpYnV0ZU5TOiAvLyBET00yCi0gICAg
ICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgICBl
bGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5TKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
LCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU5vZGVO
UzogLy8gRE9NMgotICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50LmdldEF0dHJp
YnV0ZU5vZGVOUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGFyZ3NbMV0udG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVu
dC5nZXRBdHRyaWJ1dGVOb2RlTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksYXJn
c1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OlNl
dEF0dHJpYnV0ZU5vZGVOUzogLy8gRE9NMgogICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywg
ZWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlTlModG9BdHRyKGFyZ3NbMF0pLCBleGNlcHRpb24pLmdl
dCgpKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEVsZW1lbnRzQnlUYWdOYW1lTlM6IC8vIERP
TTIKLSAgICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBlbGVtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lTlMoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSAsYXJnc1sxXS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSkuZ2V0KCkpOworICAgICAgcmV0dXJuIGdldERPTU5vZGVMaXN0
KGV4ZWMsIGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhhcmdzWzBdLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSAsYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLmdldCgpKTsK
ICAgICBjYXNlIERPTUVsZW1lbnQ6Okhhc0F0dHJpYnV0ZU5TOiAvLyBET00yCi0gICAgICByZXR1
cm4gQm9vbGVhbihlbGVtZW50Lmhhc0F0dHJpYnV0ZU5TKGFyZ3NbMF0udG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgICAgcmV0dXJu
IEJvb2xlYW4oZWxlbWVudC5oYXNBdHRyaWJ1dGVOUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSxhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgIGNhc2UgRE9N
RWxlbWVudDo6U2Nyb2xsSW50b1ZpZXc6IAotICAgIChhcmdzWzBdLnR5cGUoKSAhPSBVbmRlZmlu
ZWRUeXBlICYmIGFyZ3NbMF0udHlwZSgpICE9IE51bGxUeXBlKSA/IGVsZW1lbnQuc2Nyb2xsSW50
b1ZpZXcoYXJnc1swXS50b0Jvb2xlYW4oZXhlYykpIDogZWxlbWVudC5zY3JvbGxJbnRvVmlldyh0
cnVlKTsKLSAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50
b1ZpZXcoYXJnc1swXS0+aXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmdzWzBdLT50b0Jvb2xlYW4o
ZXhlYykpOworICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01FbGVtZW50
OjpTY3JvbGxCeUxpbmVzOgogICAgIGNhc2UgRE9NRWxlbWVudDo6U2Nyb2xsQnlQYWdlczoKICAg
ICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKSkgewpAQCAt
MTI0Miw3ICsxMjQxLDcgQEAgVmFsdWUgRE9NRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dAogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0ICpyZW5kID0gZWxlbWVudC5yZW5kZXJlcigpKQog
ICAgICAgICAgIGlmIChyZW5kLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICAgICAgS1dR
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEtXUVNjcm9sbERvd247Ci0gICAgICAgICAgICBp
bnQgbXVsdGlwbGllciA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAgICAgICAgICAgIGludCBt
dWx0aXBsaWVyID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKICAgICAgICAgICAgIGlmIChtdWx0
aXBsaWVyIDwgMCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEtXUVNjcm9sbFVwOwog
ICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKQEAgLTEyOTMsMzAgKzEy
OTIsMzAgQEAgRE9NRE9NSW1wbGVtZW50YXRpb246On5ET01ET01JbXBsZW1lbnRhdAogICBTY3Jp
cHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVl
IERPTURPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTURPTUltcGxlbWVu
dGF0aW9uUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRz
KCZLSlM6OkRPTURPTUltcGxlbWVudGF0aW9uOjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
S0pTOjpET01ET01JbXBsZW1lbnRhdGlvbjo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7Ci0gIERPTUltcGxlbWVudGF0aW9uSW1wbCAmaW1wbGVtZW50YXRpb24gPSAq
c3RhdGljX2Nhc3Q8RE9NRE9NSW1wbGVtZW50YXRpb24gKj4odGhpc09iai5pbXAoKSktPmltcGwo
KTsKKyAgRE9NSW1wbGVtZW50YXRpb25JbXBsICZpbXBsZW1lbnRhdGlvbiA9ICpzdGF0aWNfY2Fz
dDxET01ET01JbXBsZW1lbnRhdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRjaChp
ZCkgewogICBjYXNlIERPTURPTUltcGxlbWVudGF0aW9uOjpIYXNGZWF0dXJlOgotICAgIHJldHVy
biBCb29sZWFuKGltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoYXJnc1swXS50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwKLSAgICAgICAgKGFyZ3NbMV0udHlwZSgpICE9IFVuZGVmaW5lZFR5cGUgJiYg
YXJnc1sxXS50eXBlKCkgIT0gTnVsbFR5cGUpID8gYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSA6IERPTVN0cmluZygpKSk7CisgICAgcmV0dXJuIEJvb2xlYW4oaW1wbGVtZW50YXRpb24u
aGFzRmVhdHVyZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgYXJn
c1sxXS0+aXNVbmRlZmluZWRPck51bGwoKSA/IERPTVN0cmluZygpIDogYXJnc1sxXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpKTsKICAgY2FzZSBET01ET01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRl
RG9jdW1lbnRUeXBlOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaW1wbGVt
ZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBlKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksCi0gICAgICAgIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMl0udG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50VHlwZShhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIGFyZ3NbMl0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pKTsKICAgY2Fz
ZSBET01ET01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRlRG9jdW1lbnQ6IC8vIERPTTIKLSAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCBpbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudChhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLAotICAgICAgICBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCB0b0RvY3VtZW50VHlwZShhcmdzWzJdKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYywgaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksCisgICAgICAgIGFyZ3NbMV0tPnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpLCB0b0RvY3VtZW50VHlwZShhcmdzWzJdKSwgZXhjZXB0aW9uKSk7CiAgIGNh
c2UgRE9NRE9NSW1wbGVtZW50YXRpb246OkNyZWF0ZUNTU1N0eWxlU2hlZXQ6IC8vIERPTTIKLSAg
ICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBpbXBsZW1lbnRhdGlvbi5jcmVhdGVDU1NT
dHlsZVNoZWV0KGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0udG9TdHJp
bmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiBnZXRET01TdHlsZVNo
ZWV0KGV4ZWMsIGltcGxlbWVudGF0aW9uLmNyZWF0ZUNTU1N0eWxlU2hlZXQoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBl
eGNlcHRpb24pKTsKICAgY2FzZSBET01ET01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRlSFRNTERvY3Vt
ZW50OiAvLyBET00yLUhUTUwKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpbXBsZW1lbnRh
dGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkp
OworICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxE
b2N1bWVudChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICBkZWZhdWx0Ogog
ICAgIGJyZWFrOwogICB9CkBAIC0xMzQxLDEyICsxMzQwLDEyIEBAIGNvbnN0IENsYXNzSW5mbyBE
T01Eb2N1bWVudFR5cGU6OmluZm8gPSAKIERPTURvY3VtZW50VHlwZTo6RE9NRG9jdW1lbnRUeXBl
KEV4ZWNTdGF0ZSAqZXhlYywgRG9jdW1lbnRUeXBlSW1wbCAqZHQpCiAgIDogRE9NTm9kZSggLyoj
IyMgbm8gcHJvdG8geWV0Ki9leGVjLCBkdCApIHsgfQogCi1ib29sIERPTURvY3VtZW50VHlwZTo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTURvY3VtZW50VHlwZTo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8
RE9NRG9jdW1lbnRUeXBlLCBET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsICZET01Eb2N1bWVu
dFR5cGVUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NRG9jdW1lbnRUeXBlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkRPTURvY3VtZW50VHlwZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKICAgRG9jdW1lbnRUeXBlSW1wbCAmdHlwZSA9ICpzdGF0aWNfY2Fz
dDxEb2N1bWVudFR5cGVJbXBsICo+KGltcGwoKSk7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTEz
NjQsNyArMTM2Myw3IEBAIFZhbHVlIERPTURvY3VtZW50VHlwZTo6Z2V0VmFsdWVQcm9wZXJ0eSgK
ICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKHR5cGUuaW50ZXJuYWxTdWJzZXQoKSk7CiAgIGRl
ZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIkRPTURvY3VtZW50VHlwZTo6Z2V0VmFsdWVQcm9w
ZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1
ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAKQEAgLTE0MTUsNyArMTQxNCw3IEBAIGJv
b2wgRE9NTmFtZWROb2RlTWFwOjpoYXNPd25Qcm9wZXJ0eShFeGUKICAgcmV0dXJuIERPTU9iamVj
dDo6aGFzT3duUHJvcGVydHkoZXhlYywgcCk7CiB9CiAKLWJvb2wgRE9NTmFtZWROb2RlTWFwOjpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
JiByZXN1bHQpIGNvbnN0Citib29sIERPTU5hbWVkTm9kZU1hcDo6Z2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29u
c3QKIHsKICAgTmFtZWROb2RlTWFwSW1wbCAmbWFwID0gKm1faW1wbDsKICAgaWYgKHAgPT0gbGVu
Z3RoUHJvcGVydHlOYW1lKSB7CkBAIC0xNDM1LDMxICsxNDM0LDMxIEBAIGJvb2wgRE9NTmFtZWRO
b2RlTWFwOjpnZXRPd25Qcm9wZXJ0eShFeGUKICAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJv
cGVydHkoZXhlYywgcCwgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NTmFtZWROb2RlTWFwUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkRPTU5hbWVkTm9kZU1hcFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7
Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01OYW1lZE5vZGVNYXA6OmluZm8pKSB7
Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5hbWVkTm9kZU1hcDo6aW5mbykpIHsKKyAgICBP
YmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9NRXhjZXB0aW9u
VHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIE5hbWVkTm9kZU1hcEltcGwgJm1hcCA9ICpz
dGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4odGhpc09iai5pbXAoKSktPmltcGwoKTsKKyAg
TmFtZWROb2RlTWFwSW1wbCAmbWFwID0gKnN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCAqPih0
aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRjaChpZCkgewogICAgIGNhc2UgRE9NTmFtZWROb2Rl
TWFwOjpHZXROYW1lZEl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuZ2V0
TmFtZWRJdGVtKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIG1hcC5nZXROYW1lZEl0ZW0oYXJnc1swXS0+dG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCkpKTsKICAgICBjYXNlIERPTU5hbWVkTm9kZU1hcDo6U2V0TmFtZWRJdGVtOgog
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFwLnNldE5hbWVkSXRlbSh0b05vZGUoYXJn
c1swXSksIGV4Y2VwdGlvbikuZ2V0KCkpOwogICAgIGNhc2UgRE9NTmFtZWROb2RlTWFwOjpSZW1v
dmVOYW1lZEl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAucmVtb3ZlTmFt
ZWRJdGVtKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbikuZ2V0KCkp
OworICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFwLnJlbW92ZU5hbWVkSXRlbShhcmdz
WzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKS5nZXQoKSk7CiAgICAgY2Fz
ZSBET01OYW1lZE5vZGVNYXA6Okl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBt
YXAuaXRlbShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIG1hcC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKICAgICBjYXNlIERPTU5h
bWVkTm9kZU1hcDo6R2V0TmFtZWRJdGVtTlM6IC8vIERPTTIKLSAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsIG1hcC5nZXROYW1lZEl0ZW1OUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBtYXAuZ2V0TmFtZWRJdGVtTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAgY2FzZSBE
T01OYW1lZE5vZGVNYXA6OlNldE5hbWVkSXRlbU5TOiAvLyBET00yCiAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBtYXAuc2V0TmFtZWRJdGVtTlModG9Ob2RlKGFyZ3NbMF0pLCBleGNlcHRp
b24pLmdldCgpKTsKICAgICBjYXNlIERPTU5hbWVkTm9kZU1hcDo6UmVtb3ZlTmFtZWRJdGVtTlM6
IC8vIERPTTIKLSAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG1hcC5yZW1vdmVOYW1lZEl0
ZW1OUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdzWzFdLnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpLCBleGNlcHRpb24pLmdldCgpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIG1hcC5yZW1vdmVOYW1lZEl0ZW1OUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbikuZ2V0KCkp
OwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQpAQCAtMTQ4NCwxMiArMTQ4MywxMiBA
QCBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OkRPTVByb2Nlc3NpbmdJCiB7CiB9CiAKLWJvb2wg
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jv
b2wgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNv
bnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24sIERPTU5vZGU+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
blRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25J
bXBsICpwaSA9IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKj4oaW1wbCgp
KTsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTUwMSwxNyArMTUwMCwxNyBAQCBWYWx1ZSBET01Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldFZhbHVlCiAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hl
ZXQoZXhlYyxwaS0+c2hlZXQoKSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIkRP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4g
IiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxM
OwogICB9CiB9CiAKLXZvaWQgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKQogewogICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICpwaSA9IHN0YXRpY19j
YXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKj4oaW1wbCgpKTsKICAgRE9NRXhjZXB0aW9u
VHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIC8vIE5vdCB3b3J0aCB1c2luZyB0aGUgaGFz
aHRhYmxlIGZvciB0aGlzIG9uZSA7KQogICBpZiAocHJvcGVydHlOYW1lID09ICJkYXRhIikKLSAg
ICBwaS0+c2V0RGF0YSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBwaS0+c2V0RGF0YSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlv
bik7CiAgIGVsc2UKICAgICBET01Ob2RlOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cik7CiB9CkBAIC0xNTMyLDEyICsxNTMxLDEyIEBAIERPTU5vdGF0aW9uOjpET01Ob3RhdGlv
bihFeGVjU3RhdGUgKmV4ZWMKIHsKIH0KIAotYm9vbCBET01Ob3RhdGlvbjo6Z2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
JiByZXN1bHQpIGNvbnN0Citib29sIERPTU5vdGF0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Ob3RhdGlvbiwgRE9N
Tm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NTm90YXRpb25UYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAotVmFsdWUgRE9NTm90YXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01Ob3RhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAg
IGNhc2UgUHVibGljSWQ6CkBAIC0xNTQ2LDcgKzE1NDUsNyBAQCBWYWx1ZSBET01Ob3RhdGlvbjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdGF0aWNf
Y2FzdDxOb3RhdGlvbkltcGwgKj4oaW1wbCgpKS0+c3lzdGVtSWQoKSk7CiAgIGRlZmF1bHQ6CiAg
ICAga2RXYXJuaW5nKCkgPDwgIkRPTU5vdGF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxl
ZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0
dXJuIE5VTEw7CiAgIH0KIH0KIApAQCAtMTU2NywxMiArMTU2NiwxMiBAQCBET01FbnRpdHk6OkRP
TUVudGl0eShFeGVjU3RhdGUgKmV4ZWMsIEVuCiB7CiB9CiAKLWJvb2wgRE9NRW50aXR5OjpnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NRW50aXR5OjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAg
KiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01FbnRpdHks
IERPTU5vZGU+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTUVudGl0eVRhYmxlLCB0aGlzLCByZXN1
bHQpOwogfQogCi1WYWx1ZSBET01FbnRpdHk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01FbnRpdHk6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBj
YXNlIFB1YmxpY0lkOgpAQCAtMTU4Myw3ICsxNTgyLDcgQEAgVmFsdWUgRE9NRW50aXR5OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoc3RhdGljX2Nh
c3Q8RW50aXR5SW1wbCAqPihpbXBsKCkpLT5ub3RhdGlvbk5hbWUoKSk7CiAgIGRlZmF1bHQ6CiAg
ICAga2RXYXJuaW5nKCkgPDwgIkRPTUVudGl0eTo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQg
dG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVy
biBOVUxMOwogICB9CiB9CiAKQEAgLTE3NDEsMTIgKzE3NDAsMTIgQEAgY29uc3QgQ2xhc3NJbmZv
IE5vZGVDb25zdHJ1Y3Rvcjo6aW5mbyA9IAogICBOT1RBVElPTl9OT0RFCQlET006Ok5vZGU6Ok5P
VEFUSU9OX05PREUJCURvbnREZWxldGV8UmVhZE9ubHkKIEBlbmQKICovCi1ib29sIE5vZGVDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIE5vZGVDb25zdHJ1Y3Rv
cjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0
T3duVmFsdWU8Tm9kZUNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
Jk5vZGVDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBOb2RlQ29u
c3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpOb2RlQ29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKICAgLy8gV2UgdXNlIHRoZSB0b2tlbiBhcyB0aGUgdmFsdWUg
dG8gcmV0dXJuIGRpcmVjdGx5CiAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVkIGludCl0b2tlbik7
CkBAIC0xNzc4LDcgKzE3NzcsNyBAQCBWYWx1ZSBOb2RlQ29uc3RydWN0b3I6OmdldFZhbHVlUHJv
cGVydHkoCiAgICAgcmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KURPTTo6Tm9kZTo6Tk9UQVRJ
T05fTk9ERSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIk5vZGVDb25zdHJ1Y3Rv
cjo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOwot
ICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiAjZW5kaWYKIH0KQEAg
LTE4MTIsMTIgKzE4MTEsMTIgQEAgY29uc3QgQ2xhc3NJbmZvIERPTUV4Y2VwdGlvbkNvbnN0cnVj
dG9yOgogQGVuZAogKi8KIAotYm9vbCBET01FeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
VmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxE
T01FeGNlcHRpb25Db25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZE
T01FeGNlcHRpb25Db25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBE
T01FeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8vIFdlIHVzZSB0
aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRvIHJldHVybiBkaXJlY3RseQogICByZXR1cm4gTnVtYmVy
KCh1bnNpZ25lZCBpbnQpdG9rZW4pOwpAQCAtMTg1NSw3ICsxODU0LDcgQEAgVmFsdWUgRE9NRXhj
ZXB0aW9uQ29uc3RydWN0b3I6OmdldFZhbHVlUAogICAgIHJldHVybiBOdW1iZXIoKHVuc2lnbmVk
IGludClET006OkRPTUV4Y2VwdGlvbjo6SU5WQUxJRF9BQ0NFU1NfRVJSKTsKICAgZGVmYXVsdDoK
ICAgICBrZFdhcm5pbmcoKSA8PCAiRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OmdldFZhbHVlUHJv
cGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgICByZXR1cm4gVmFs
dWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogI2VuZGlmCiB9CkBAIC0xODc1LDcgKzE4NzQs
NyBAQCBET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6RE9NTmFtZWROb2Rlc0NvCiB7CiB9CiAKLWJv
b2wgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAor
Ym9vbCBET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBj
b25zdAogewogICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkgewogICAg
IHJlc3VsdCA9IE51bWJlcihtX25vZGVzLmNvdW50KCkpOwpAQCAtMTkzOCwxMiArMTkzNywxMiBA
QCBET01DaGFyYWN0ZXJEYXRhOjpET01DaGFyYWN0ZXJEYXRhKENoYXJhCiB7CiB9CiAKLWJvb2wg
RE9NQ2hhcmFjdGVyRGF0YTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01DaGFyYWN0ZXJEYXRh
OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZh
bHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9N
Q2hhcmFjdGVyRGF0YSwgRE9NTm9kZT4oZXhlYywgcCwgJkRPTUNoYXJhY3RlckRhdGFUYWJsZSwg
dGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NQ2hhcmFjdGVyRGF0YTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUNoYXJhY3Rl
ckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsK
ICAgQ2hhcmFjdGVyRGF0YUltcGwgJmRhdGEgPSAqc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUlt
cGwgKj4oaW1wbCgpKTsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTk1Myw1NiArMTk1Miw1NiBA
QCBWYWx1ZSBET01DaGFyYWN0ZXJEYXRhOjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgcmV0dXJuIE51
bWJlcihkYXRhLmxlbmd0aCgpKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiVW5o
YW5kbGVkIHRva2VuIGluIERPTUNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8
IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAg
IH0KIH0KIAotdm9pZCBET01DaGFyYWN0ZXJEYXRhOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIp
Cit2b2lkIERPTUNoYXJhY3RlckRhdGE6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gImRhdGEiKQotICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KGltcGwoKSkt
PnNldERhdGEodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAg
c3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwgKj4oaW1wbCgpKS0+c2V0RGF0YSh2YWx1ZS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgIGVsc2UKICAgICBET01Ob2Rl
OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLHZhbHVlLGF0dHIpOwogfQogCi1WYWx1ZSBET01DaGFy
YWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNoYXJhY3RlckRhdGFQcm90b0Z1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ2hhcmFj
dGVyRGF0YTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ2hhcmFjdGVyRGF0
YTo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAg
IH0KICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIENoYXJhY3Rl
ckRhdGFJbXBsICZkYXRhID0gKnN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KHN0YXRp
Y19jYXN0PERPTUNoYXJhY3RlckRhdGEgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisgIENo
YXJhY3RlckRhdGFJbXBsICZkYXRhID0gKnN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+
KHN0YXRpY19jYXN0PERPTUNoYXJhY3RlckRhdGEgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3
aXRjaChpZCkgewogICAgIGNhc2UgRE9NQ2hhcmFjdGVyRGF0YTo6U3Vic3RyaW5nRGF0YTogewot
ICAgICAgY29uc3QgaW50IGNvdW50ID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworICAgICAgY29u
c3QgaW50IGNvdW50ID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKICAgICAgIGlmIChjb3VudCA8
IDApCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBET01FeGNlcHRpb246OklOREVYX1NJ
WkVfRVJSKTsKICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChkYXRh
LnN1YnN0cmluZ0RhdGEoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBjb3VudCwgZXhjZXB0aW9uKSk7
CisgICAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoZGF0YS5zdWJzdHJpbmdEYXRhKGFyZ3Nb
MF0tPnRvSW50MzIoZXhlYyksIGNvdW50LCBleGNlcHRpb24pKTsKICAgICB9CiAgICAgY2FzZSBE
T01DaGFyYWN0ZXJEYXRhOjpBcHBlbmREYXRhOgotICAgICAgZGF0YS5hcHBlbmREYXRhKGFyZ3Nb
MF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgICBkYXRhLmFwcGVu
ZERhdGEoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01DaGFyYWN0ZXJEYXRhOjpJbnNlcnRE
YXRhOgotICAgICAgZGF0YS5pbnNlcnREYXRhKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sx
XS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgIGRhdGEuaW5zZXJ0
RGF0YShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERP
TUNoYXJhY3RlckRhdGE6OkRlbGV0ZURhdGE6IHsKLSAgICAgIGNvbnN0IGludCBjb3VudCA9IGFy
Z3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIGNvbnN0IGludCBjb3VudCA9IGFyZ3NbMV0tPnRv
SW50MzIoZXhlYyk7CiAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUik7CiAgICAgICBlbHNlCi0gICAg
ICAgIGRhdGEuZGVsZXRlRGF0YShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGNvdW50LCBleGNlcHRp
b24pOworICAgICAgICBkYXRhLmRlbGV0ZURhdGEoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgY291
bnQsIGV4Y2VwdGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGNh
c2UgRE9NQ2hhcmFjdGVyRGF0YTo6UmVwbGFjZURhdGE6IHsKLSAgICAgIGNvbnN0IGludCBjb3Vu
dCA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIGNvbnN0IGludCBjb3VudCA9IGFyZ3Nb
MV0tPnRvSW50MzIoZXhlYyk7CiAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUik7CiAgICAgICBlbHNl
Ci0gICAgICAgIGRhdGEucmVwbGFjZURhdGEoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBjb3VudCwg
YXJnc1syXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZGF0
YS5yZXBsYWNlRGF0YShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBjb3VudCwgYXJnc1syXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0yMDI5LDE4ICsyMDI4LDE4IEBAIERPTVRleHQ6
OkRPTVRleHQoRXhlY1N0YXRlICpleGVjLCBUZXh0SW0KICAgc2V0UHJvdG90eXBlKERPTVRleHRQ
cm90bzo6c2VsZihleGVjKSk7CiB9CiAKLVZhbHVlIERPTVRleHRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqRE9NVGV4dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhl
cml0cygmS0pTOjpET01UZXh0OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01U
ZXh0OjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsK
ICAgfQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgVGV4dElt
cGwgJnRleHQgPSAqc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NVGV4dCAq
Pih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKKyAgVGV4dEltcGwgJnRleHQgPSAqc3RhdGljX2Nh
c3Q8VGV4dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NVGV4dCAqPih0aGlzT2JqKS0+aW1wbCgpKTsK
ICAgc3dpdGNoKGlkKSB7CiAgICAgY2FzZSBET01UZXh0OjpTcGxpdFRleHQ6Ci0gICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCB0ZXh0LnNwbGl0VGV4dChhcmdzWzBdLnRvSW50MzIoZXhlYyks
IGV4Y2VwdGlvbikpOworICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGV4dC5zcGxpdFRl
eHQoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CiAgIH0KICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40NQpkaWZmIC1wIC11IC11IC1wIC1yMS40NSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2RvbS5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCTI1IEp1
bCAyMDA1IDIyOjE3OjE5IC0wMDAwCTEuNDUKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9t
LmgJNyBBdWcgMjAwNSAwNDo0NDoxNCAtMDAwMApAQCAtNDksMTkgKzQ5LDE5IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIERPTU5vZGUoRXhlY1N0YXRlICpleGVjLCBET006Ok5vZGVJbXBsICpuKTsK
ICAgICB2aXJ0dWFsIH5ET01Ob2RlKCk7CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVj
U3RhdGUgKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBj
b25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCBhdHRyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7
CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKICAgICBET006Ok5vZGVJbXBsICppbXBsKCkgY29u
c3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogCi0gICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUg
KmV4ZWMsIFR5cGUgcHJlZmVycmVkID0gVW5kZWZpbmVkVHlwZSkgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZUltcCAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9
IFVuZGVmaW5lZFR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIHZvaWQgc2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgZXZlbnRJZCwgVmFsdWVJbXAgKmZ1bmMpIGNvbnN0OwotICAgIFZhbHVlIGdldExpc3Rl
bmVyKGludCBldmVudElkKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0TGlzdGVuZXIoaW50IGV2
ZW50SWQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhl
Y1N0YXRlICpleGVjLCBTY29wZUNoYWluICZzY29wZSkgY29uc3Q7CiAKICAgICBlbnVtIHsgTm9k
ZU5hbWUsIE5vZGVWYWx1ZSwgTm9kZVR5cGUsIFBhcmVudE5vZGUsIFBhcmVudEVsZW1lbnQsCkBA
IC05Miw4ICs5Miw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIERPTU5vZGVMaXN0KEV4ZWNTdGF0
ZSAqLCBET006Ok5vZGVMaXN0SW1wbCAqbCkgOiBtX2ltcGwobCkgeyB9CiAgICAgfkRPTU5vZGVM
aXN0KCk7CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncyk7CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2Fs
bEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTEw
MSw3ICsxMDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87CiAgICAgRE9NOjpOb2RlTGlzdEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwuZ2V0KCk7IH0KIAotICAgIHZpcnR1YWwgVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlICpl
eGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuZGVmaW5lZFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwg
VmFsdWVJbXAgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQgPSBV
bmRlZmluZWRUeXBlKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIGtodG1sOjpTaGFyZWRQdHI8
RE9NOjpOb2RlTGlzdEltcGw+IG1faW1wbDsKQEAgLTExMSwxMCArMTExLDEwIEBAIG5hbWVzcGFj
ZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NRG9jdW1lbnQoRXhlY1N0YXRlICpleGVjLCBET006
OkRvY3VtZW50SW1wbCAqZCk7CiAgICAgfkRPTURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRy
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAg
ICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwor
ICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwogICAgIGVudW0geyBEb2NUeXBlLCBJbXBsZW1lbnRhdGlvbiwgRG9jdW1lbnRF
bGVtZW50LApAQCAtMTM3LDEwICsxMzcsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERP
TUF0dHIgOiBwdWJsaWMgRE9NTm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01BdHRyKEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpBdHRySW1wbCAqYSk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgVmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVl
LCBpbnQgYXR0cik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
ICAgIGVudW0geyBOYW1lLCBTcGVjaWZpZWQsIFZhbHVlUHJvcGVydHksIE93bmVyRWxlbWVudCB9
OwpAQCAtMTUxLDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01FbGVtZW50
IDogcHVibGljIERPTU5vZGUgewogICBwdWJsaWM6CiAgICAgRE9NRWxlbWVudChFeGVjU3RhdGUg
KmV4ZWMsIERPTTo6RWxlbWVudEltcGwgKmUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJl
c3VsdCkgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTE4Niw4ICsxODYsOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgY2xhc3MgRE9NRG9jdW1lbnRUeXBlIDogcHVibGljIERPTU5vZGUgewogICBw
dWJsaWM6CiAgICAgRE9NRG9jdW1lbnRUeXBlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVu
dFR5cGVJbXBsICpkdCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBj
b25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTIwMSw3ICsyMDEsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBET01OYW1lZE5vZGVNYXAoRXhlY1N0YXRlICosIERPTTo6TmFtZWRO
b2RlTWFwSW1wbCAqbSk7CiAgICAgfkRPTU5hbWVkTm9kZU1hcCgpOwogICAgIHZpcnR1YWwgYm9v
bCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8g
cHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4o
RXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTIxNiw5ICsyMTYsOSBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uIDogcHVibGlj
IERPTU5vZGUgewogICBwdWJsaWM6CiAgICAgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgRE9NOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICpwaSk7Ci0gICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IFRhcmdldCwgRGF0YSwgU2hlZXQgfTsK
QEAgLTIyNyw4ICsyMjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRE9NTm90YXRpb24g
OiBwdWJsaWMgRE9NTm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01Ob3RhdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIERPTTo6Tm90YXRpb25JbXBsICpuKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMjM4LDgg
KzIzOCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01FbnRpdHkgOiBwdWJsaWMgRE9N
Tm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01FbnRpdHkoRXhlY1N0YXRlICpleGVjLCBET006OkVu
dGl0eUltcGwgKmUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29u
c3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29u
c3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0yNTAsOCArMjUwLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIGNsYXNzIE5vZGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3Qgewog
ICBwdWJsaWM6CiAgICAgTm9kZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqKSB7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBu
byBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBpbmZvOwpAQCAtMjYxLDggKzI2MSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01F
eGNlcHRpb25Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAg
RE9NRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAt
IGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CkBAIC0yODMsNyArMjgzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERPTU5hbWVkTm9k
ZXNDb2xsZWN0aW9uIDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBET01OYW1l
ZE5vZGVzQ29sbGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFFWYWx1ZUxpc3Q8IGtodG1s
OjpTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gPiYgbm9kZXMgKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiZyZXN1bHQpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFFWYWx1ZUxpc3Q8IGtodG1s
OjpTaGFyZWRQdHI8RE9NOjpOb2RlSW1wbD4gPiBtX25vZGVzOwogICB9OwpAQCAtMjkxLDkgKzI5
MSw5IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01DaGFyYWN0ZXJEYXRhIDogcHVibGlj
IERPTU5vZGUgewogICBwdWJsaWM6CiAgICAgRE9NQ2hhcmFjdGVyRGF0YShFeGVjU3RhdGUgKmV4
ZWMsIERPTTo6Q2hhcmFjdGVyRGF0YUltcGwgKmQpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
aW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVz
dWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRy
ID0gTm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAg
IERPTTo6Q2hhcmFjdGVyRGF0YUltcGwgKnRvRGF0YSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NTIKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNTIgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMjUgSnVsIDIwMDUgMjI6
MTc6MTkgLTAwMDAJMS41MgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCTcg
QXVnIDIwMDUgMDQ6NDQ6MTQgLTAwMDAKQEAgLTczLDU2ICs3Myw1NiBAQCB2b2lkIEpTQWJzdHJh
Y3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAgIEV2ZW50SW1wbCAqZXZ0ID0gZWxlLmhhbmRs
ZSgpOwogI2VuZGlmCiAKLSAgT2JqZWN0IGxpc3RlbmVyID0gbGlzdGVuZXJPYmooKTsKLSAgT2Jq
ZWN0IHdpbiA9IHdpbmRvd09iaigpOworICBPYmplY3RJbXAgKmxpc3RlbmVyID0gbGlzdGVuZXJP
YmooKTsKKyAgT2JqZWN0SW1wICp3aW4gPSB3aW5kb3dPYmooKTsKIAotICBLSFRNTFBhcnQgKnBh
cnQgPSBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4uaW1wKCkpLT5wYXJ0KCk7CisgIEtIVE1MUGFy
dCAqcGFydCA9IHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbiktPnBhcnQoKTsKICAgS0pTUHJveHkg
KnByb3h5ID0gMDsKICAgaWYgKHBhcnQpCiAgICAgICBwcm94eSA9IEtKU1Byb3h5Ojpwcm94eSgg
cGFydCApOwogCi0gIGlmIChwcm94eSAmJiBsaXN0ZW5lci5pbXBsZW1lbnRzQ2FsbCgpKSB7Cisg
IGlmIChwcm94eSAmJiBsaXN0ZW5lci0+aW1wbGVtZW50c0NhbGwoKSkgewogICAgIHJlZigpOwog
Ci0gICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxL
SlM6OlNjcmlwdEludGVycHJldGVyICo+KHByb3h5LT5pbnRlcnByZXRlcigpKTsKKyAgICBTY3Jp
cHRJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRl
ciAqPihwcm94eS0+aW50ZXJwcmV0ZXIoKSk7CiAgICAgRXhlY1N0YXRlICpleGVjID0gaW50ZXJw
cmV0ZXItPmdsb2JhbEV4ZWMoKTsKIAogICAgIExpc3QgYXJnczsKICAgICBhcmdzLmFwcGVuZChn
ZXRET01FdmVudChleGVjLGV2dCkpOwogCi0gICAgV2luZG93ICp3aW5kb3cgPSBzdGF0aWNfY2Fz
dDxXaW5kb3cqPih3aW4uaW1wKCkpOworICAgIFdpbmRvdyAqd2luZG93ID0gc3RhdGljX2Nhc3Q8
V2luZG93Kj4od2luKTsKICAgICAvLyBTZXQgdGhlIGV2ZW50IHdlJ3JlIGhhbmRsaW5nIGluIHRo
ZSBXaW5kb3cgb2JqZWN0CiAgICAgd2luZG93LT5zZXRDdXJyZW50RXZlbnQoZXZ0KTsKICAgICAv
LyAuLi4gYW5kIGluIHRoZSBpbnRlcnByZXRlcgogICAgIGludGVycHJldGVyLT5zZXRDdXJyZW50
RXZlbnQoZXZ0KTsKIAotICAgIE9iamVjdCB0aGlzT2JqOworICAgIE9iamVjdEltcCAqdGhpc09i
ajsKICAgICBpZiAoaXNXaW5kb3dFdmVudCkgewogICAgICAgICB0aGlzT2JqID0gd2luOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgdGhp
c09iaiA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoZ2V0RE9NTm9kZShleGVjLCBldnQtPmN1cnJlbnRU
YXJnZXQoKSkpOwotICAgICAgICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsKKyAgICAgICAg
SW50ZXJwcmV0ZXI6OmxvY2soKTsKKyAgICAgICAgdGhpc09iaiA9IHN0YXRpY19jYXN0PE9iamVj
dEltcCAqPihnZXRET01Ob2RlKGV4ZWMsIGV2dC0+Y3VycmVudFRhcmdldCgpKSk7CisgICAgICAg
IEludGVycHJldGVyOjp1bmxvY2soKTsKICAgICB9CiAKLSAgICBLSlM6OkludGVycHJldGVyOjps
b2NrKCk7Ci0gICAgVmFsdWUgcmV0dmFsID0gbGlzdGVuZXIuY2FsbChleGVjLCB0aGlzT2JqLCBh
cmdzKTsKLSAgICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsKKyAgICBJbnRlcnByZXRlcjo6
bG9jaygpOworICAgIFZhbHVlSW1wICpyZXR2YWwgPSBsaXN0ZW5lci0+Y2FsbChleGVjLCB0aGlz
T2JqLCBhcmdzKTsKKyAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKICAgICB3aW5kb3ctPnNl
dEN1cnJlbnRFdmVudCggMCApOwogICAgIGludGVycHJldGVyLT5zZXRDdXJyZW50RXZlbnQoIDAg
KTsKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKCBleGVjLT5oYWRFeGNlcHRpb24oKSApIHsK
LSAgICAgICAgS0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwotICAgICAgICBjaGFyICptZXNzYWdl
ID0gZXhlYy0+ZXhjZXB0aW9uKCkudG9PYmplY3QoZXhlYykuZ2V0KGV4ZWMsIG1lc3NhZ2VQcm9w
ZXJ0eU5hbWUpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCk7Ci0gICAgICAgIGludCBsaW5lTnVtYmVy
ID0gIGV4ZWMtPmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVjLCAibGluZSIpLnRv
SW50MzIoZXhlYyk7CisgICAgICAgIEludGVycHJldGVyOjpsb2NrKCk7CisgICAgICAgIGNoYXIg
Km1lc3NhZ2UgPSBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBt
ZXNzYWdlUHJvcGVydHlOYW1lKS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKKyAgICAgICAgaW50
IGxpbmVOdW1iZXIgPSAgZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhl
YywgImxpbmUiKS0+dG9JbnQzMihleGVjKTsKICAgICAgICAgUVN0cmluZyBzb3VyY2VVUkw7CiAg
ICAgICAgIHsKICAgICAgICAgICAvLyBwdXQgdGhpcyBpbiBhIGJsb2NrIHRvIG1ha2Ugc3VyZSBV
U3RyaW5nIGlzIGRlYWxsb2NhdGVkIGluc2lkZSB0aGUgbG9jawotICAgICAgICAgIFVTdHJpbmcg
dVNvdXJjZVVSTCA9IGV4ZWMtPmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVjLCAi
c291cmNlVVJMIikudG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgVVN0cmluZyB1U291cmNlVVJM
ID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgInNvdXJjZVVS
TCIpLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgICBzb3VyY2VVUkwgPSB1U291cmNlVVJMLnFz
dHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsK
KyAgICAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogICAgICAgICBpZiAoSW50ZXJwcmV0ZXI6
OnNob3VsZFByaW50RXhjZXB0aW9ucygpKSB7CiAJICAgIHByaW50ZigiKGV2ZW50IGhhbmRsZXIp
OiVzXG4iLCBtZXNzYWdlKTsKIAl9CkBAIC0xNTUsNzUgKzE1NSw3MyBAQCBET006OkRPTVN0cmlu
ZyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKE9iamVj
dCBfbGlzdGVuZXIsIGNvbnN0IE9iamVjdCAmX3dpbiwgYm9vbCBfaHRtbCkKK0pTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihPYmplY3RJbXAgKl9s
aXN0ZW5lciwgT2JqZWN0SW1wICpfd2luLCBib29sIF9odG1sKQogICA6IEpTQWJzdHJhY3RFdmVu
dExpc3RlbmVyKF9odG1sKQogICAsIGxpc3RlbmVyKF9saXN0ZW5lcikKICAgLCB3aW4oX3dpbikK
IHsKLSAgICBpZiAoX2xpc3RlbmVyLmltcCgpKSB7Ci0gICAgICBzdGF0aWNfY2FzdDxXaW5kb3cq
Pih3aW4uaW1wKCkpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMuaW5zZXJ0KF9saXN0ZW5l
ci5pbXAoKSwgdGhpcyk7CisgICAgaWYgKF9saXN0ZW5lcikgeworICAgICAgc3RhdGljX2Nhc3Q8
V2luZG93Kj4od2luKS0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzLmluc2VydChfbGlzdGVu
ZXIsIHRoaXMpOwogICAgIH0KIH0KIAogSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6On5KU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcigpCiB7Ci0gICAgaWYgKGxpc3RlbmVyLmltcCgpKSB7Ci0g
ICAgICBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4uaW1wKCkpLT5qc1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyLmltcCgpKTsKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAg
ICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbiktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
cy5yZW1vdmUobGlzdGVuZXIpOwogICAgIH0KIH0KIAotT2JqZWN0IEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyOjpsaXN0ZW5lck9iaigpIGNvbnN0CitPYmplY3RJbXAgKkpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaigpIGNvbnN0CiB7IAogICAgIHJldHVybiBsaXN0ZW5l
cjsgCiB9CiAKLU9iamVjdCBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6d2luZG93T2JqKCkg
Y29uc3QKK09iamVjdEltcCAqSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6OndpbmRvd09iaigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHdpbjsKIH0KIAogdm9pZCBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcjo6bWFyaygpCiB7Ci0gIE9iamVjdEltcCAqbGlzdGVuZXJJbXAgPSBsaXN0ZW5lci5p
bXAoKTsKKyAgT2JqZWN0SW1wICpsaXN0ZW5lckltcCA9IGxpc3RlbmVyOwogICBpZiAobGlzdGVu
ZXJJbXAgJiYgIWxpc3RlbmVySW1wLT5tYXJrZWQoKSkKICAgICBsaXN0ZW5lckltcC0+bWFyaygp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExp
c3RlbmVyKE9iamVjdCBfbGlzdGVuZXIsIGNvbnN0IE9iamVjdCAmX3dpbiwgYm9vbCBfaHRtbCkK
K0pTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKE9iamVjdEltcCAqX2xpc3RlbmVyLCBP
YmplY3RJbXAgKl93aW4sIGJvb2wgX2h0bWwpCiAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIo
X2h0bWwpCiAgICwgbGlzdGVuZXIoX2xpc3RlbmVyKQogICAsIHdpbihfd2luKQogewotICAgIC8v
ZnByaW50ZihzdGRlcnIsIkpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyIHRoaXM9JXAg
bGlzdGVuZXI9JXBcbiIsdGhpcyxsaXN0ZW5lci5pbXAoKSk7Ci0gICAgaWYgKF9saXN0ZW5lci5p
bXAoKSkgewotICAgICAgc3RhdGljX2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+anNFdmVudExp
c3RlbmVycy5pbnNlcnQoX2xpc3RlbmVyLmltcCgpLCB0aGlzKTsKLSAgICB9CisgICAgaWYgKF9s
aXN0ZW5lcikKKyAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KF93aW4pLT5qc0V2ZW50TGlzdGVu
ZXJzLmluc2VydChfbGlzdGVuZXIsIHRoaXMpOwogfQogCiBKU0V2ZW50TGlzdGVuZXI6On5KU0V2
ZW50TGlzdGVuZXIoKQogewotICAgIGlmIChsaXN0ZW5lci5pbXAoKSkgewotICAgICAgc3RhdGlj
X2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+anNFdmVudExpc3RlbmVycy5yZW1vdmUobGlzdGVu
ZXIuaW1wKCkpOworICAgIGlmIChPYmplY3RJbXAgKmwgPSBsaXN0ZW5lcikgeworICAgICAgICBP
YmplY3RJbXAgKncgPSB3aW47CisgICAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyAqPih3KS0+anNF
dmVudExpc3RlbmVycy5yZW1vdmUobCk7CiAgICAgfQotICAgIC8vZnByaW50ZihzdGRlcnIsIkpT
RXZlbnRMaXN0ZW5lcjo6fkpTRXZlbnRMaXN0ZW5lciB0aGlzPSVwIGxpc3RlbmVyPSVwXG4iLHRo
aXMsbGlzdGVuZXIuaW1wKCkpOwogfQogCi1PYmplY3QgSlNFdmVudExpc3RlbmVyOjpsaXN0ZW5l
ck9iaigpIGNvbnN0CitPYmplY3RJbXAgKkpTRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBj
b25zdAogeyAKICAgICByZXR1cm4gbGlzdGVuZXI7IAogfQogCi1PYmplY3QgSlNFdmVudExpc3Rl
bmVyOjp3aW5kb3dPYmooKSBjb25zdAorT2JqZWN0SW1wICpKU0V2ZW50TGlzdGVuZXI6OndpbmRv
d09iaigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHdpbjsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1KU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKFFTdHJpbmcgX2Nv
ZGUsIGNvbnN0IE9iamVjdCAmX3dpbiwgTm9kZUltcGwgKl9vcmlnaW5hbE5vZGUsIGludCBsaW5l
bm8pCi0gIDogSlNFdmVudExpc3RlbmVyKE9iamVjdCgpLCBfd2luLCB0cnVlKSwKK0pTTGF6eUV2
ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoUVN0cmluZyBfY29kZSwgT2JqZWN0SW1w
ICpfd2luLCBOb2RlSW1wbCAqX29yaWdpbmFsTm9kZSwgaW50IGxpbmVubykKKyAgOiBKU0V2ZW50
TGlzdGVuZXIoTlVMTCwgX3dpbiwgdHJ1ZSksCiAgICAgY29kZShfY29kZSksCiAgICAgcGFyc2Vk
KGZhbHNlKQogewpAQCAtMjQwLDE0ICsyMzgsMTQgQEAgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNM
YXp5RXZlbnRMaXN0ZW5lcgogCiB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KEV2ZW50TGlzdGVuZXJFdmVudCBldnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKIHsKLSAgcGFyc2VD
b2RlKCk7Ci0gIGlmICghbGlzdGVuZXIuaXNOdWxsKCkpIHsgCi0gICAgSlNFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChldnQsIGlzV2luZG93RXZlbnQpOwotICB9CisgICAgcGFyc2VDb2RlKCk7
CisgICAgT2JqZWN0SW1wICpsaXN0ZW5lck9iaiA9IGxpc3RlbmVyOworICAgIGlmIChsaXN0ZW5l
ck9iaikKKyAgICAgICAgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChldnQsIGlzV2luZG93
RXZlbnQpOwogfQogCiAKLU9iamVjdCBKU0xhenlFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaigp
IGNvbnN0CitPYmplY3RJbXAgKkpTTGF6eUV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyT2JqKCkgY29u
c3QKIHsKICAgcGFyc2VDb2RlKCk7CiAgIHJldHVybiBsaXN0ZW5lcjsKQEAgLTI1Niw0OCArMjU0
LDQ5IEBAIE9iamVjdCBKU0xhenlFdmVudExpc3RlbmVyOjpsaXN0ZW5lck9iaigKIHZvaWQgSlNM
YXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY29uc3QKIHsKICAgaWYgKCFwYXJzZWQpIHsK
LSAgICBLSFRNTFBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4uaW1wKCkpLT5w
YXJ0KCk7CisgICAgT2JqZWN0SW1wICp3ID0gd2luOworICAgIEtIVE1MUGFydCAqcGFydCA9IHN0
YXRpY19jYXN0PFdpbmRvdyAqPih3KS0+cGFydCgpOwogICAgIEtKU1Byb3h5ICpwcm94eSA9IDBM
OwogICAgIGlmIChwYXJ0KQogICAgICAgcHJveHkgPSBLSlNQcm94eTo6cHJveHkoIHBhcnQgKTsK
IAogICAgIGlmIChwcm94eSkgewotICAgICAgS0pTOjpTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJw
cmV0ZXIgPSBzdGF0aWNfY2FzdDxLSlM6OlNjcmlwdEludGVycHJldGVyICo+KHByb3h5LT5pbnRl
cnByZXRlcigpKTsKKyAgICAgIFNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IHN0YXRp
Y19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KHByb3h5LT5pbnRlcnByZXRlcigpKTsKICAgICAg
IEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7CiAKLSAgICAgIEtK
Uzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgIC8vS0pTOjpDb25zdHJ1Y3RvciBjb25zdHIo
S0pTOjpHbG9iYWw6OmN1cnJlbnQoKS5nZXQoIkZ1bmN0aW9uIikuaW1wKCkpOwotICAgICAgS0pT
OjpPYmplY3QgY29uc3RyID0gaW50ZXJwcmV0ZXItPmJ1aWx0aW5GdW5jdGlvbigpOwotICAgICAg
S0pTOjpMaXN0IGFyZ3M7CisgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOworICAgICAgLy9Db25z
dHJ1Y3RvciBjb25zdHIoR2xvYmFsOjpjdXJyZW50KCkuZ2V0KCJGdW5jdGlvbiIpKTsKKyAgICAg
IE9iamVjdEltcCAqY29uc3RyID0gaW50ZXJwcmV0ZXItPmJ1aWx0aW5GdW5jdGlvbigpOworICAg
ICAgTGlzdCBhcmdzOwogCi0gICAgICBzdGF0aWMgUHJvdGVjdGVkVmFsdWUgZXZlbnRTdHJpbmcg
PSBLSlM6OlN0cmluZygiZXZlbnQiKTsKKyAgICAgIHN0YXRpYyBQcm90ZWN0ZWRWYWx1ZSBldmVu
dFN0cmluZyA9IFN0cmluZygiZXZlbnQiKTsKICAgICAgIFVTdHJpbmcgc291cmNlVVJMKHBhcnQt
Pm1fdXJsLnVybCgpKTsKICAgICAgIGFyZ3MuYXBwZW5kKGV2ZW50U3RyaW5nKTsKLSAgICAgIGFy
Z3MuYXBwZW5kKEtKUzo6U3RyaW5nKGNvZGUpKTsKLSAgICAgIGxpc3RlbmVyID0gY29uc3RyLmNv
bnN0cnVjdChleGVjLCBhcmdzLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpOyAvLyAjIyMgaXMgZ2xv
YmFsRXhlYyBvayA/CisgICAgICBhcmdzLmFwcGVuZChTdHJpbmcoY29kZSkpOworICAgICAgbGlz
dGVuZXIgPSBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdzLCBzb3VyY2VVUkwsIGxpbmVOdW1i
ZXIpOyAvLyAjIyMgaXMgZ2xvYmFsRXhlYyBvayA/CiAKLSAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6
OnVubG9jaygpOworICAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKIAlleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAJLy8gZmFp
bGVkIHRvIHBhcnNlLCBzbyBsZXQncyBqdXN0IG1ha2UgdGhpcyBsaXN0ZW5lciBhIG5vLW9wCi0J
bGlzdGVuZXIgPSBPYmplY3QoKTsKKwlsaXN0ZW5lciA9IE5VTEw7CiAgICAgICB9IGVsc2UgaWYg
KG9yaWdpbmFsTm9kZSkgewogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50
IHRvIHRoZSBzY29wZQotICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3Jt
IC0gc2VlIEtKUzo6SFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBTY29w
ZUNoYWluIHNjb3BlID0gbGlzdGVuZXIuc2NvcGUoKTsKKyAgICAgICAgLy8gKGFuZCB0aGUgZG9j
dW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBIVE1MRWxlbWVudDo6ZXZlbnRIYW5kbGVyU2NvcGUp
CisgICAgICAgIFNjb3BlQ2hhaW4gc2NvcGUgPSBsaXN0ZW5lci0+c2NvcGUoKTsKICAgICAgICAg
Ci0gICAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgT2JqZWN0IHRoaXNP
YmogPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGdldERPTU5vZGUoZXhlYywgb3JpZ2luYWxOb2RlKSk7
Ci0gICAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOworICAgICAgICBJbnRlcnByZXRl
cjo6bG9jaygpOworICAgICAgICBPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxPYmpl
Y3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBvcmlnaW5hbE5vZGUpKTsKKyAgICAgICAgSW50ZXJw
cmV0ZXI6OnVubG9jaygpOwogICAgICAgICAKLSAgICAgICAgaWYgKCF0aGlzT2JqLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgS0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwotICAgICAgICAgIHN0YXRp
Y19jYXN0PERPTU5vZGUqPih0aGlzT2JqLmltcCgpKS0+cHVzaEV2ZW50SGFuZGxlclNjb3BlKGV4
ZWMsIHNjb3BlKTsKLSAgICAgICAgICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsKKyAgICAg
ICAgaWYgKHRoaXNPYmopIHsKKyAgICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOworICAgICAg
ICAgIHN0YXRpY19jYXN0PERPTU5vZGUqPih0aGlzT2JqKS0+cHVzaEV2ZW50SGFuZGxlclNjb3Bl
KGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAgICAgICAg
ICAgCi0gICAgICAgICAgbGlzdGVuZXIuc2V0U2NvcGUoc2NvcGUpOworICAgICAgICAgIGxpc3Rl
bmVyLT5zZXRTY29wZShzY29wZSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0zMDUs
OSArMzA0LDkgQEAgdm9pZCBKU0xhenlFdmVudExpc3RlbmVyOjpwYXJzZUNvZGUoKSBjbwogICAg
IC8vIG5vIG1vcmUgbmVlZCB0byBrZWVwIHRoZSB1bnBhcnNlZCBjb2RlIGFyb3VuZAogICAgIGNv
ZGUgPSBRU3RyaW5nKCk7CiAgICAgCi0gICAgaWYgKCFsaXN0ZW5lci5pc051bGwoKSkgewotICAg
ICAgc3RhdGljX2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+anNFdmVudExpc3RlbmVycy5pbnNl
cnQobGlzdGVuZXIuaW1wKCksIAotCQkJCQkJCSAgICAgICAoS0pTOjpKU0V2ZW50TGlzdGVuZXIg
KikodGhpcykpOworICAgIGlmIChPYmplY3RJbXAgKmwgPSBsaXN0ZW5lcikgeworICAgICAgICBP
YmplY3RJbXAgKncgPSB3aW47CisgICAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyAqPih3KS0+anNF
dmVudExpc3RlbmVycy5pbnNlcnQobCwgY29uc3RfY2FzdDxKU0xhenlFdmVudExpc3RlbmVyICo+
KHRoaXMpKTsKICAgICB9CiAgICAgCiAgICAgcGFyc2VkID0gdHJ1ZTsKQEAgLTMyMCw3ICszMTks
NyBAQCBWYWx1ZUltcCAqZ2V0Tm9kZUV2ZW50TGlzdGVuZXIoTm9kZUltcGwgCiAgIGlmIChsaXN0
ZW5lcikKICAgICBpZiAoVmFsdWVJbXAgKm9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iakltcCgp
KQogICAgICAgcmV0dXJuIG9iajsKLSAgcmV0dXJuIG51bGwoKTsKKyAgcmV0dXJuIGpzTnVsbCgp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTEsMTggKzM1MCwxOCBAQCBjb25zdCBD
bGFzc0luZm8gRXZlbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9CiBAZW5kCiAqLwogCi1ib29sIEV2ZW50
Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUlt
cCAqJnJlc3VsdCkgY29uc3QKIHsKICAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPEV2ZW50Q29u
c3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkV2ZW50Q29uc3RydWN0b3JUYWJsZSwgdGhp
cywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50Q29uc3RydWN0
b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAg
Ly8gV2UgdXNlIHRoZSB0b2tlbiBhcyB0aGUgdmFsdWUgdG8gcmV0dXJuIGRpcmVjdGx5CiAgIHJl
dHVybiBOdW1iZXIodG9rZW4pOwogfQogCi1WYWx1ZSBnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKICAgcmV0dXJuIGNhY2hlR2xvYmFsT2JqZWN0PEV2ZW50Q29uc3RydWN0b3I+KGV4ZWMs
ICJbW2V2ZW50LmNvbnN0cnVjdG9yXV0iKTsKIH0KQEAgLTQxNCwxMiArNDEzLDEyIEBAIHZvaWQg
RE9NTW91c2VFdmVudDo6bWFyaygpCiAgICAgICAgIGNsaXBib2FyZC0+bWFyaygpOwogfQogCi1i
b29sIERPTUV2ZW50OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTUV2ZW50OjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVz
dWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NRXZlbnQsIERPTU9i
amVjdD4oZXhlYywgcCwgJkRPTUV2ZW50VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVl
IERPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkRPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogICBFdmVudEltcGwgJmV2ZW50ID0gKm1faW1wbDsKICAg
c3dpdGNoICh0b2tlbikgewpAQCAtNDQ5LDcgKzQ0OCw3IEBAIFZhbHVlIERPTUV2ZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgICAgIGlmICghY2xpcGJvYXJkKSB7CiAgICAgICAgIGNs
aXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoZXhlYywgaW1wbC0+Y2xpcGJvYXJkKCkpOwogICAgICAg
fQotICAgICAgcmV0dXJuIE9iamVjdChjbGlwYm9hcmQpOworICAgICAgcmV0dXJuIGNsaXBib2Fy
ZDsKICAgICB9IGVsc2UgewogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KQEAgLTQ2
MSw0NyArNDYwLDQ3IEBAIFZhbHVlIERPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEK
ICAgICAgIGlmICghY2xpcGJvYXJkKSB7CiAgICAgICAgIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9h
cmQoZXhlYywgaW1wbC0+Y2xpcGJvYXJkKCkpOwogICAgICAgfQotICAgICAgcmV0dXJuIE9iamVj
dChjbGlwYm9hcmQpOworICAgICAgcmV0dXJuIGNsaXBib2FyZDsKICAgICB9IGVsc2UgewogICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KICAgfQogICBkZWZhdWx0OgogICAgIGtkV2Fy
bmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkg
OiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5V
TEw7CiAgIH0KIH0KIAogdm9pZCBET01FdmVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cikKIHsKICAgbG9va3VwUHV0PERPTUV2ZW50LCBET01PYmplY3Q+KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmRE9NRXZlbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgRE9NRXZlbnQ6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgaW50KQordm9pZCBET01FdmVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAgIEV2ZW50SW1wbCAm
ZXZlbnQgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmV0dXJuVmFsdWU6
Ci0gICAgZXZlbnQuc2V0RGVmYXVsdFByZXZlbnRlZCghdmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICBldmVudC5zZXREZWZhdWx0UHJldmVudGVkKCF2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsK
ICAgICBicmVhazsKICAgY2FzZSBDYW5jZWxCdWJibGU6Ci0gICAgZXZlbnQuc2V0Q2FuY2VsQnVi
YmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgZXZlbnQuc2V0Q2FuY2VsQnViYmxlKHZh
bHVlLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIGJyZWFr
OwogICB9CiB9CiAKLVZhbHVlIERPTUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICYgdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01FdmVu
dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKiB0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktK
Uzo6RE9NRXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01FdmVudDo6aW5mbykp
IHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwog
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgRXZl
bnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2FzdDxET01FdmVudCAqPiggdGhpc09iai5pbXAoKSAp
LT5pbXBsKCk7CisgIEV2ZW50SW1wbCAmZXZlbnQgPSAqc3RhdGljX2Nhc3Q8RE9NRXZlbnQgKj4o
IHRoaXNPYmogKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01FdmVudDo6
U3RvcFByb3BhZ2F0aW9uOgogICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CkBAIC01MDks
NyArNTA4LDcgQEAgVmFsdWUgRE9NRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAg
ICBjYXNlIERPTUV2ZW50OjpJbml0RXZlbnQ6Ci0gICAgICBldmVudC5pbml0RXZlbnQoYXJnc1sw
XS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxhcmdzWzFdLnRvQm9vbGVhbihleGVjKSxhcmdzWzJd
LnRvQm9vbGVhbihleGVjKSk7CisgICAgICBldmVudC5pbml0RXZlbnQoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCksYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLGFyZ3NbMl0tPnRvQm9v
bGVhbihleGVjKSk7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIH07CiAgIHJldHVybiBV
bmRlZmluZWQoKTsKQEAgLTUyMSw3ICs1MjAsNyBAQCBWYWx1ZUltcCAqZ2V0RE9NRXZlbnQoRXhl
Y1N0YXRlICpleGVjLCBFCiAgICAgcmV0dXJuIE51bGwoKTsKICAgU2NyaXB0SW50ZXJwcmV0ZXIq
IGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpKTsKIAotICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7CisgIEludGVycHJl
dGVyOjpsb2NrKCk7CiAKICAgRE9NT2JqZWN0ICpyZXQgPSBpbnRlcnAtPmdldERPTU9iamVjdChl
KTsKICAgaWYgKCFyZXQpIHsKQEAgLTU0MSw3ICs1NDAsNyBAQCBWYWx1ZUltcCAqZ2V0RE9NRXZl
bnQoRXhlY1N0YXRlICpleGVjLCBFCiAgICAgaW50ZXJwLT5wdXRET01PYmplY3QoZSwgcmV0KTsK
ICAgfQogCi0gIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOworICBJbnRlcnByZXRlcjo6dW5s
b2NrKCk7CiAKICAgcmV0dXJuIHJldDsKIH0KQEAgLTU2MiwxOCArNTYxLDE4IEBAIGNvbnN0IENs
YXNzSW5mbyBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG8KICAgVU5TUEVDSUZJRURfRVZFTlRfVFlQ
RV9FUlIgICAgRE9NOjpFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIg
RG9udERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLWJvb2wgRXZlbnRFeGNlcHRpb25Db25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yOjpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RXZlbnRF
eGNlcHRpb25Db25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCBwLCAmRXZlbnRFeGNlcHRpb25D
b25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBFdmVudEV4Y2VwdGlv
bkNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICAvLyBXZSB1c2UgdGhlIHRva2Vu
IGFzIHRoZSB2YWx1ZSB0byByZXR1cm4gZGlyZWN0bHkKICAgcmV0dXJuIE51bWJlcih0b2tlbik7
CiB9CiAKLVZhbHVlIGdldEV2ZW50RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVj
KQorVmFsdWVJbXAgKmdldEV2ZW50RXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVj
KQogewogICByZXR1cm4gY2FjaGVHbG9iYWxPYmplY3Q8RXZlbnRFeGNlcHRpb25Db25zdHJ1Y3Rv
cj4oZXhlYywgIltbZXZlbnRFeGNlcHRpb24uY29uc3RydWN0b3JdXSIpOwogfQpAQCAtNjExLDEy
ICs2MTAsMTIgQEAgRE9NVUlFdmVudDo6fkRPTVVJRXZlbnQoKQogewogfQogCi1ib29sIERPTVVJ
RXZlbnQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NVUlFdmVudDo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkg
Y29uc3QKIHsKICAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPERPTVVJRXZlbnQsRE9NRXZlbnQ+
KGV4ZWMsIHAsICZET01VSUV2ZW50VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIERP
TVVJRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqRE9NVUlFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgVUlFdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19j
YXN0PFVJRXZlbnRJbXBsICo+KGltcGwoKSk7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTY0NCwy
MSArNjQzLDIxIEBAIFZhbHVlIERPTVVJRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1MKICAg
fQogfQogCi1WYWx1ZSBET01VSUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTVVJRXZlbnRQ
cm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6
RE9NVUlFdmVudDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTVVJRXZlbnQ6OmluZm8p
KSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIFVJ
RXZlbnRJbXBsICZ1aUV2ZW50ID0gKnN0YXRpY19jYXN0PFVJRXZlbnRJbXBsICo+KHN0YXRpY19j
YXN0PERPTVVJRXZlbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisgIFVJRXZlbnRJbXBs
ICZ1aUV2ZW50ID0gKnN0YXRpY19jYXN0PFVJRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTVVJ
RXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERP
TVVJRXZlbnQ6OkluaXRVSUV2ZW50OgotICAgICAgdWlFdmVudC5pbml0VUlFdmVudChhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzFdLnRvQm9vbGVhbihleGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXS50
b0Jvb2xlYW4oZXhlYyksCisgICAgICB1aUV2ZW50LmluaXRVSUV2ZW50KGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzFdLT50
b0Jvb2xlYW4oZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0tPnRvQm9v
bGVhbihleGVjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9BYnN0cmFjdFZpZXcoYXJn
c1szXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNF0udG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNF0tPnRvSW50MzIoZXhlYykpOwogICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICB9CiAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTcw
NSw3ICs3MDQsNyBAQCBET01Nb3VzZUV2ZW50Ojp+RE9NTW91c2VFdmVudCgpCiB7CiB9CiAKLWJv
b2wgRE9NTW91c2VFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01Nb3VzZUV2ZW50Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NTW91
c2VFdmVudCwgRE9NVUlFdmVudD4oZXhlYywgcCwgJkRPTU1vdXNlRXZlbnRUYWJsZSwgdGhpcywg
cmVzdWx0KTsKIH0KQEAgLTczMyw3ICs3MzIsNyBAQCBzdGF0aWMgUVBvaW50IG9mZnNldEZyb21U
YXJnZXQoY29uc3QgTW91CiAgICAgcmV0dXJuIFFQb2ludCh4LCB5KTsKIH0KIAotVmFsdWUgRE9N
TW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpET01Nb3VzZUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBNb3VzZUV2ZW50SW1wbCAmZXZlbnQgPSAq
c3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwgKj4oaW1wbCgpKTsKICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtNzgyLDM0ICs3ODEsMzQgQEAgVmFsdWUgRE9NTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeAogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGV2ZW50LnJlbGF0ZWRUYXJnZXQo
KSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxlZCB0b2tlbiBpbiBE
T01Nb3VzZUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5IDogIiA8PCB0b2tlbiA8PCBlbmRsOwotICAg
IHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAKLVZhbHVlIERPTU1v
dXNlRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NTW91c2VFdmVudFByb3RvRnVuYzo6Y2Fs
bEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01Nb3VzZUV2ZW50
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NTW91c2VFdmVudDo6aW5mbykpIHsKKyAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgTW91c2VFdmVu
dEltcGwgJm1vdXNlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8RE9NTW91c2VFdmVudCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKKyAgTW91c2VF
dmVudEltcGwgJm1vdXNlRXZlbnQgPSAqc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwgKj4oc3Rh
dGljX2Nhc3Q8RE9NTW91c2VFdmVudCAqPih0aGlzT2JqKS0+aW1wbCgpKTsKICAgc3dpdGNoIChp
ZCkgewogICAgIGNhc2UgRE9NTW91c2VFdmVudDo6SW5pdE1vdXNlRXZlbnQ6Ci0gICAgICBtb3Vz
ZUV2ZW50LmluaXRNb3VzZUV2ZW50KGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8v
IHR5cGVBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b0Jvb2xl
YW4oZXhlYyksIC8vIGNhbkJ1YmJsZUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzJdLnRvQm9vbGVhbihleGVjKSwgLy8gY2FuY2VsYWJsZUFyZworICAgICAgbW91c2VF
dmVudC5pbml0TW91c2VFdmVudChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8g
dHlwZUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzFdLT50b0Jvb2xl
YW4oZXhlYyksIC8vIGNhbkJ1YmJsZUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyksIC8vIGNhbmNlbGFibGVBcmcKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9BYnN0cmFjdFZpZXcoYXJnc1szXSksIC8vIHZpZXdBcmcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s0XS50b0ludDMyKGV4ZWMpLCAv
LyBkZXRhaWxBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s1XS50b0lu
dDMyKGV4ZWMpLCAvLyBzY3JlZW5YQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbNl0udG9JbnQzMihleGVjKSwgLy8gc2NyZWVuWUFyZwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzddLnRvSW50MzIoZXhlYyksIC8vIGNsaWVudFhBcmcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s4XS50b0ludDMyKGV4ZWMpLCAvLyBjbGll
bnRZQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbOV0udG9Cb29sZWFu
KGV4ZWMpLCAvLyBjdHJsS2V5QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3NbMTBdLnRvQm9vbGVhbihleGVjKSwgLy8gYWx0S2V5QXJnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3NbMTFdLnRvQm9vbGVhbihleGVjKSwgLy8gc2hpZnRLZXlBcmcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxMl0udG9Cb29sZWFuKGV4ZWMpLCAv
LyBtZXRhS2V5QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMTNdLnRv
SW50MzIoZXhlYyksIC8vIGJ1dHRvbkFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzRdLT50b0ludDMyKGV4ZWMpLCAvLyBkZXRhaWxBcmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1s1XS0+dG9JbnQzMihleGVjKSwgLy8gc2NyZWVuWEFyZworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzZdLT50b0ludDMyKGV4ZWMpLCAvLyBz
Y3JlZW5ZQXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbN10tPnRvSW50
MzIoZXhlYyksIC8vIGNsaWVudFhBcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnc1s4XS0+dG9JbnQzMihleGVjKSwgLy8gY2xpZW50WUFyZworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzldLT50b0Jvb2xlYW4oZXhlYyksIC8vIGN0cmxLZXlBcmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxMF0tPnRvQm9vbGVhbihleGVjKSwg
Ly8gYWx0S2V5QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMTFdLT50
b0Jvb2xlYW4oZXhlYyksIC8vIHNoaWZ0S2V5QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3NbMTJdLT50b0Jvb2xlYW4oZXhlYyksIC8vIG1ldGFLZXlBcmcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxM10tPnRvSW50MzIoZXhlYyksIC8vIGJ1dHRv
bkFyZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b05vZGUoYXJnc1sxNF0pKTsg
Ly8gcmVsYXRlZFRhcmdldEFyZwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICB9CkBAIC04
NTMsMTIgKzg1MiwxMiBAQCBjb25zdCBDbGFzc0luZm8qIERPTUtleWJvYXJkRXZlbnQ6OmNsYXNz
CiAgICAgcmV0dXJuICZpbmZvOwogfQogCi1ib29sIERPTUtleWJvYXJkRXZlbnQ6OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3Vs
dCkgY29uc3QKK2Jvb2wgRE9NS2V5Ym9hcmRFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsK
ICAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPERPTUtleWJvYXJkRXZlbnQsIERPTVVJRXZlbnQ+
KGV4ZWMsIHAsICZET01LZXlib2FyZEV2ZW50VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZh
bHVlIERPTUtleWJvYXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NS2V5Ym9hcmRFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgS2V5Ym9hcmRFdmVu
dEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsICo+KGltcGwoKSk7
CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTg3OCwzMSArODc3LDMxIEBAIFZhbHVlIERPTUtleWJv
YXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkKICAgICByZXR1cm4gQm9vbGVhbihldmVudC5hbHRH
cmFwaEtleSgpKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRv
a2VuIGluIERPTUtleWJvYXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8IHRva2VuIDw8
IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAot
VmFsdWUgRE9NS2V5Ym9hcmRFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01LZXlib2FyZEV2
ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZE
T01LZXlib2FyZEV2ZW50OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NS2V5Ym9hcmRF
dmVudDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxU
eXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7
CiAgIH0KLSAgS2V5Ym9hcmRFdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTVVJRXZlbnQgKj4odGhpc09iai5pbXAoKSktPmlt
cGwoKSk7CisgIEtleWJvYXJkRXZlbnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01VSUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkp
OwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01LZXlib2FyZEV2ZW50OjpJbml0S2V5Ym9h
cmRFdmVudDoKLSAgICAgIGV2ZW50LmluaXRLZXlib2FyZEV2ZW50KGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIC8vIHR5cGVBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbMV0udG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5jZWxhYmxlQXJn
CisgICAgICBldmVudC5pbml0S2V5Ym9hcmRFdmVudChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSwgLy8gdHlwZUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sx
XS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSwgLy8gY2FuY2VsYWJsZUFyZwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9BYnN0cmFjdFZpZXcoYXJnc1szXSksIC8vIHZp
ZXdBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNF0udG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCksIC8vIGtleUlkZW50aWZpZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3NbNV0udG9JbnQzMihleGVjKSwgLy8ga2V5TG9jYXRpb25BcmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3NbNl0udG9Cb29sZWFuKGV4ZWMpLCAvLyBjdHJsS2V5QXJn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzddLnRvQm9vbGVhbihleGVjKSwg
Ly8gYWx0S2V5QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzhdLnRvQm9v
bGVhbihleGVjKSwgLy8gc2hpZnRLZXlBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbOV0udG9Cb29sZWFuKGV4ZWMpLCAvLyBtZXRhS2V5QXJnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzEwXS50b0Jvb2xlYW4oZXhlYykpOyAvLyBhbHRHcmFwaEtleUFy
ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s0XS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksIC8vIGtleUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbNV0tPnRvSW50MzIoZXhlYyksIC8vIGtleUxvY2F0aW9uQXJnCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYyksIC8vIGN0cmxLZXlBcmcK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbN10tPnRvQm9vbGVhbihleGVjKSwg
Ly8gYWx0S2V5QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzhdLT50b0Jv
b2xlYW4oZXhlYyksIC8vIHNoaWZ0S2V5QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzldLT50b0Jvb2xlYW4oZXhlYyksIC8vIG1ldGFLZXlBcmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3NbMTBdLT50b0Jvb2xlYW4oZXhlYykpOyAvLyBhbHRHcmFwaEtl
eUFyZwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICB9CiAgIHJldHVybiBVbmRlZmluZWQo
KTsKQEAgLTkxOCwxOCArOTE3LDE4IEBAIGNvbnN0IENsYXNzSW5mbyBNdXRhdGlvbkV2ZW50Q29u
c3RydWN0b3IKICAgUkVNT1ZBTAlET006Ok11dGF0aW9uRXZlbnQ6OlJFTU9WQUwJCURvbnREZWxl
dGV8UmVhZE9ubHkKIEBlbmQKICovCi1ib29sIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdAorYm9vbCBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxNdXRhdGlvbkV2ZW50Q29u
c3RydWN0b3IsRE9NT2JqZWN0PihleGVjLCBwLCAmTXV0YXRpb25FdmVudENvbnN0cnVjdG9yVGFi
bGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
Kk11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdAogewogICAvLyBXZSB1c2UgdGhlIHRva2VuIGFzIHRoZSB2YWx1ZSB0
byByZXR1cm4gZGlyZWN0bHkKICAgcmV0dXJuIE51bWJlcih0b2tlbik7CiB9CiAKLVZhbHVlIGdl
dE11dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0
TXV0YXRpb25FdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgcmV0dXJuIGNh
Y2hlR2xvYmFsT2JqZWN0PE11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rvcj4oZXhlYywgIltbbXV0YXRp
b25FdmVudC5jb25zdHJ1Y3Rvcl1dIik7CiB9CkBAIC05NjMsMTIgKzk2MiwxMiBAQCBET01NdXRh
dGlvbkV2ZW50Ojp+RE9NTXV0YXRpb25FdmVudCgpCiB7CiB9CiAKLWJvb2wgRE9NTXV0YXRpb25F
dmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01NdXRhdGlvbkV2ZW50OjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVz
dWx0KSBjb25zdAogewogICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NTXV0YXRpb25FdmVu
dCwgRE9NRXZlbnQ+KGV4ZWMsIHAsICZET01NdXRhdGlvbkV2ZW50VGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKLVZhbHVlIERPTU11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NTXV0YXRpb25FdmVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAg
TXV0YXRpb25FdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBs
ICo+KGltcGwoKSk7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTk4NCwyOCArOTgzLDI4IEBAIFZh
bHVlIERPTU11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkKICAgICByZXR1cm4gTnVtYmVy
KGV2ZW50LmF0dHJDaGFuZ2UoKSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIlVu
aGFuZGxlZCB0b2tlbiBpbiBET01NdXRhdGlvbkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5IDogIiA8
PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwog
ICB9CiB9CiAKLVZhbHVlIERPTU11dGF0aW9uRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9N
TXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5p
bmhlcml0cygmS0pTOjpET01NdXRhdGlvbkV2ZW50OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmRE9NTXV0YXRpb25FdmVudDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwog
ICAgIHJldHVybiBlcnI7CiAgIH0KLSAgTXV0YXRpb25FdmVudEltcGwgJm11dGF0aW9uRXZlbnQg
PSAqc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRXZlbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisgIE11dGF0aW9uRXZlbnRJbXBsICZtdXRhdGlv
bkV2ZW50ID0gKnN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERP
TUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBE
T01NdXRhdGlvbkV2ZW50OjpJbml0TXV0YXRpb25FdmVudDoKLSAgICAgIG11dGF0aW9uRXZlbnQu
aW5pdE11dGF0aW9uRXZlbnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gdHlw
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b0Jv
b2xlYW4oZXhlYyksIC8vIGNhbkJ1YmJsZUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzWzJdLnRvQm9vbGVhbihleGVjKSwgLy8gY2FuY2VsYWJsZUFyZworICAg
ICAgbXV0YXRpb25FdmVudC5pbml0TXV0YXRpb25FdmVudChhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwgLy8gdHlwZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpLCAv
LyBjYW5jZWxhYmxlQXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRv
Tm9kZShhcmdzWzNdKSwgLy8gcmVsYXRlZE5vZGVBcmcKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1s0XS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gcHJldlZh
bHVlQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNV0udG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIG5ld1ZhbHVlQXJnCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3NbNl0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIGF0
dHJOYW1lQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbN10u
dG9JbnQzMihleGVjKSk7IC8vIGF0dHJDaGFuZ2VBcmcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1s0XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIHByZXZW
YWx1ZUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzVdLT50
b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gbmV3VmFsdWVBcmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1s2XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8v
IGF0dHJOYW1lQXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb
N10tPnRvSW50MzIoZXhlYykpOyAvLyBhdHRyQ2hhbmdlQXJnCiAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiAgIH0KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTA0MiwxMiArMTA0MSwxMiBA
QCBET01XaGVlbEV2ZW50OjpET01XaGVlbEV2ZW50KEV4ZWNTdGF0ZSAqCiB7CiB9CiAKLWJvb2wg
RE9NV2hlZWxFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01XaGVlbEV2ZW50OjpnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAsIFZhbHVlSW1w
IComcmVzdWx0KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01XaGVl
bEV2ZW50LERPTUV2ZW50PihleGVjLCBwLCAmRE9NV2hlZWxFdmVudFRhYmxlLCB0aGlzLCByZXN1
bHQpOwogfQogCi1WYWx1ZSBET01XaGVlbEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVdoZWVsRXZlbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgRE9N
OjpXaGVlbEV2ZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PERPTTo6V2hlZWxFdmVudEltcGwgKj4o
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xMDc5LDEwICsxMDc4LDEwIEBAIFZh
bHVlIERPTVdoZWVsRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLVZhbHVlIERPTVdoZWVsRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9N
V2hlZWxFdmVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLmlu
aGVyaXRzKCZET01XaGVlbEV2ZW50OjppbmZvKSkgewotICAgICAgICBPYmplY3QgZXJyb3IgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZET01XaGVlbEV2ZW50OjppbmZvKSkgeworICAgICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJy
b3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnJvcik7CiAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CkBAIC0xMTI2LDcgKzExMjUsNyBA
QCBDbGlwYm9hcmQ6On5DbGlwYm9hcmQoKQogICAgICAgICBjbGlwYm9hcmQtPmRlcmVmKCk7CiB9
CiAKLXN0YXRpYyBWYWx1ZSBzdHJpbmdPclVuZGVmaW5lZChjb25zdCBET006OkRPTVN0cmluZyAm
c3RyKQorc3RhdGljIFZhbHVlSW1wICpzdHJpbmdPclVuZGVmaW5lZChjb25zdCBET006OkRPTVN0
cmluZyAmc3RyKQogewogICAgIGlmIChzdHIuaXNOdWxsKCkpIHsKICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtMTEzNSwxMiArMTEzNCwxMiBAQCBzdGF0aWMgVmFsdWUgc3RyaW5nT3JV
bmRlZmluZWQoY29uc3QgRE9NCiAgICAgfQogfQogCi1ib29sIENsaXBib2FyZDo6Z2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0Citib29sIENsaXBib2FyZDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVz
dWx0KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxDbGlwYm9hcmQsIERP
TU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmQ2xpcGJvYXJkVGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKLVZhbHVlIENsaXBib2FyZDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDbGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0b2tl
bikgewogICAgICAgICBjYXNlIERyb3BFZmZlY3Q6CkBAIC0xMTU5LDU3ICsxMTU4LDU3IEBAIFZh
bHVlIENsaXBib2FyZDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QKICAgICAgICAgICAgICAgICBm
b3IgKFFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9IHFUeXBlcy5iZWdpbigpOyBpdCAhPSBxVHlw
ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoU3RyaW5n
KFVTdHJpbmcoKml0KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVjdChl
eGVjLCBsaXN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGtkV2FybmluZygp
IDw8ICJDbGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9r
ZW4gPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZSgpOworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CiAgICAgfQogfQogCi12b2lkIENsaXBib2FyZDo6cHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCBhdHRyKQordm9pZCBDbGlwYm9hcmQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBs
b29rdXBQdXQ8Q2xpcGJvYXJkLERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0ciwgJkNsaXBib2FyZFRhYmxlLCB0aGlzICk7CiB9CiAKLXZvaWQgQ2xpcGJvYXJkOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCAvKmF0dHIqLykKK3ZvaWQgQ2xpcGJvYXJkOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLykKIHsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgRHJvcEVmZmVjdDoKICAgICAgICAg
ICAgIC8vIGNhbiBuZXZlciBzZXQgdGhpcyB3aGVuIG5vdCBmb3IgZHJhZ2dpbmcsIHRodXMgZ2V0
dGluZyBhbHdheXMgcmV0dXJucyBOVUxMIHN0cmluZwogICAgICAgICAgICAgaWYgKGNsaXBib2Fy
ZC0+aXNGb3JEcmFnZ2luZygpKQotICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0RHJvcEVm
ZmVjdCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY2xp
cGJvYXJkLT5zZXREcm9wRWZmZWN0KHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFZmZlY3RBbGxvd2VkOgogICAgICAgICAg
ICAgLy8gY2FuIG5ldmVyIHNldCB0aGlzIHdoZW4gbm90IGZvciBkcmFnZ2luZywgdGh1cyBnZXR0
aW5nIGFsd2F5cyByZXR1cm5zIE5VTEwgc3RyaW5nCiAgICAgICAgICAgICBpZiAoY2xpcGJvYXJk
LT5pc0ZvckRyYWdnaW5nKCkpCi0gICAgICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRFZmZlY3RB
bGxvd2VkKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBj
bGlwYm9hcmQtPnNldEVmZmVjdEFsbG93ZWQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAga2RX
YXJuaW5nKCkgPDwgIkNsaXBib2FyZDo6cHV0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4g
IiA8PCB0b2tlbiA8PCBlbmRsOwogICAgIH0KIH0KIAotVmFsdWUgQ2xpcGJvYXJkUHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKkNsaXBib2FyZFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYg
KCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkNsaXBib2FyZDo6aW5mbykpIHsKLSAgICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJkNsaXBib2FyZDo6aW5mbykpIHsKKyAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgQ2xpcGJvYXJkICpj
YiA9IHN0YXRpY19jYXN0PENsaXBib2FyZCAqPih0aGlzT2JqLmltcCgpKTsKKyAgICBDbGlwYm9h
cmQgKmNiID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkICo+KHRoaXNPYmopOwogICAgIHN3aXRjaCAo
aWQpIHsKICAgICAgICAgY2FzZSBDbGlwYm9hcmQ6OkNsZWFyRGF0YToKICAgICAgICAgICAgIGlm
IChhcmdzLnNpemUoKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY2ItPmNsaXBib2FyZC0+Y2xl
YXJBbGxEYXRhKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChhcmdzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgY2It
PmNsaXBib2FyZC0+Y2xlYXJEYXRhKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgIGNiLT5jbGlwYm9hcmQtPmNsZWFyRGF0YShhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLCJjbGVhckRhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFy
Z3VtZW50cyIpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yLCJjbGVhckRhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50
cyIpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC0xMjE3LDIzICsxMjE2LDIzIEBA
IFZhbHVlIENsaXBib2FyZFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEpIHsKICAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3M7Ci0gICAgICAgICAgICAgICAgRE9NOjpET01TdHJpbmcgcmVzdWx0ID0gY2ItPmNsaXBi
b2FyZC0+Z2V0RGF0YShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBzdWNjZXNzKTsK
KyAgICAgICAgICAgICAgICBET006OkRPTVN0cmluZyByZXN1bHQgPSBjYi0+Y2xpcGJvYXJkLT5n
ZXREYXRhKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBzdWNjZXNzKTsKICAgICAg
ICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvciwiZ2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAg
ICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IsImdldERhdGE6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbGlwYm9hcmQ6OlNldERh
dGE6CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMikgewotICAgICAgICAgICAgICAg
IHJldHVybiBCb29sZWFuKGNiLT5jbGlwYm9hcmQtPnNldERhdGEoYXJnc1swXS50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBCb29sZWFuKGNiLT5jbGlwYm9hcmQtPnNldERhdGEoYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IsInNldERhdGE6IEludmFsaWQgbnVtYmVyIG9m
IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFN5bnRheEVycm9yLCJzZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVu
dHMiKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQpAQCAtMTI0NCwxMyArMTI0MywxMyBA
QCBWYWx1ZSBDbGlwYm9hcmRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKSB7Ci0gICAgICAgICAgICAgICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsInNldERyYWdJbWFn
ZTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCJzZXREcmFnSW1hZ2U6
IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGludCB4ID0gKGludClhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgaW50IHkgPSAoaW50KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBpbnQgeCA9IChpbnQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBp
bnQgeSA9IChpbnQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CiAKICAgICAgICAgICAgIC8vIFNl
ZSBpZiB0aGV5IHBhc3NlZCB1cyBhIG5vZGUKICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0g
dG9Ob2RlKGFyZ3NbMF0pOwpAQCAtMTI1OSwyMCArMTI1OCwyMCBAQCBWYWx1ZSBDbGlwYm9hcmRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAgICAgICAgICAgICAgICAgICAgIGNiLT5jbGlwYm9h
cmQtPnNldERyYWdJbWFnZUVsZW1lbnQobm9kZSwgUVBvaW50KHgseSkpOyAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLCBTeW50YXhFcnJvciwic2V0RHJhZ0ltYWdlRnJvbUVsZW1lbnQ6IEludmFs
aWQgZmlyc3QgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCJzZXREcmFnSW1hZ2VGcm9tRWxlbWVu
dDogSW52YWxpZCBmaXJzdCBhcmd1bWVudCIpOwogICAgICAgICAgICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGV5
IHBhc3NlZCB1cyBhbiBJbWFnZSBvYmplY3QKLSAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0
YXRpY19jYXN0PE9iamVjdEltcCo+KGFyZ3NbMF0uaW1wKCkpOworICAgICAgICAgICAgT2JqZWN0
SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oYXJnc1swXSk7CiAgICAgICAgICAgICBp
ZiAoby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewogICAgICAgICAgICAgICAgIEltYWdlICpK
U0ltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2UqPihvKTsKICAgICAgICAgICAgICAgICBjYi0+Y2xp
cGJvYXJkLT5zZXREcmFnSW1hZ2UoSlNJbWFnZS0+aW1hZ2UoKS0+cGl4bWFwKCksIFFQb2ludCh4
LHkpKTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAg
ICAgICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC1wIC11IC11IC1wIC1yMS4yOCBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2V2ZW50cy5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5o
CTI1IEp1bCAyMDA1IDIyOjE3OjE5IC0wMDAwCTEuMjgKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfZXZlbnRzLmgJNyBBdWcgMjAwNSAwNDo0NDoxNCAtMDAwMApAQCAtNDgsMzEgKzQ4LDMxIEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgfkpTQWJzdHJhY3RFdmVudExpc3RlbmVyKCk7
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KERPTTo6RXZlbnRMaXN0ZW5lckV2ZW50IGV2
dCwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKICAgICB2aXJ0dWFsIERPTTo6RE9NU3RyaW5nIGV2ZW50
TGlzdGVuZXJUeXBlKCk7Ci0gICAgdmlydHVhbCBPYmplY3QgbGlzdGVuZXJPYmooKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBPYmplY3Qgd2luZG93T2JqKCkgY29uc3QgPSAwOwotICAgIE9iamVj
dEltcCAqbGlzdGVuZXJPYmpJbXAoKSBjb25zdCB7IHJldHVybiBsaXN0ZW5lck9iaigpLmltcCgp
OyB9CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmxpc3RlbmVyT2JqKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgT2JqZWN0SW1wICp3aW5kb3dPYmooKSBjb25zdCA9IDA7CisgICAgT2JqZWN0SW1w
ICpsaXN0ZW5lck9iakltcCgpIGNvbnN0IHsgcmV0dXJuIGxpc3RlbmVyT2JqKCk7IH0KICAgcHJv
dGVjdGVkOgogICAgIGJvb2wgaHRtbDsKICAgfTsKIAogICBjbGFzcyBKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7CiAgIHB1YmxpYzoK
LSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihPYmplY3QgX2xpc3RlbmVyLCBjb25zdCBP
YmplY3QgJl93aW4sIGJvb2wgX2h0bWwgPSBmYWxzZSk7CisgICAgSlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRt
bCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcigpOwot
ICAgIHZpcnR1YWwgT2JqZWN0IGxpc3RlbmVyT2JqKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBPYmpl
Y3Qgd2luZG93T2JqKCkgY29uc3Q7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmxpc3RlbmVyT2Jq
KCkgY29uc3Q7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKndpbmRvd09iaigpIGNvbnN0OwogICAg
IHZvaWQgbWFyaygpOwogICBwcm90ZWN0ZWQ6Ci0gICAgT2JqZWN0IGxpc3RlbmVyOwotICAgIE9i
amVjdCB3aW47CisgICAgT2JqZWN0SW1wICpsaXN0ZW5lcjsKKyAgICBPYmplY3RJbXAgKndpbjsK
ICAgfTsKIAogICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50
TGlzdGVuZXIgewogICBwdWJsaWM6Ci0gICAgSlNFdmVudExpc3RlbmVyKE9iamVjdCBfbGlzdGVu
ZXIsIGNvbnN0IE9iamVjdCAmX3dpbiwgYm9vbCBfaHRtbCA9IGZhbHNlKTsKKyAgICBKU0V2ZW50
TGlzdGVuZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRt
bCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIoKTsKLSAgICB2aXJ0dWFs
IE9iamVjdCBsaXN0ZW5lck9iaigpIGNvbnN0OwotICAgIHZpcnR1YWwgT2JqZWN0IHdpbmRvd09i
aigpIGNvbnN0OworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpsaXN0ZW5lck9iaigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgT2JqZWN0SW1wICp3aW5kb3dPYmooKSBjb25zdDsKICAgcHJvdGVjdGVkOgog
ICAgIG11dGFibGUgUHJvdGVjdGVkT2JqZWN0IGxpc3RlbmVyOwogICAgIFByb3RlY3RlZE9iamVj
dCB3aW47CkBAIC04MCw5ICs4MCw5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEpTTGF6
eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNFdmVudExpc3RlbmVyIHsKICAgcHVibGljOgotICAg
IEpTTGF6eUV2ZW50TGlzdGVuZXIoUVN0cmluZyBfY29kZSwgY29uc3QgT2JqZWN0ICZfd2luLCBE
T006Ok5vZGVJbXBsICpub2RlLCBpbnQgbGluZW5vID0gMCk7CisgICAgSlNMYXp5RXZlbnRMaXN0
ZW5lcihRU3RyaW5nIF9jb2RlLCBPYmplY3RJbXAgKl93aW4sIERPTTo6Tm9kZUltcGwgKm5vZGUs
IGludCBsaW5lbm8gPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRE9NOjpFdmVu
dExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQpOwotICAgIE9iamVjdCBsaXN0
ZW5lck9iaigpIGNvbnN0OworICAgIE9iamVjdEltcCAqbGlzdGVuZXJPYmooKSBjb25zdDsKICAg
ICAKICAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQ29kZSgpIGNvbnN0OwpAQCAtOTksMjQgKzk5
LDI0IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBFdmVudENvbnN0cnVjdG9yIDogcHVibGlj
IERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAq
KSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNv
bnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBW
YWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQt
b25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgfTsKIAot
ICBWYWx1ZSBnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1w
ICpnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKICAgY2xhc3MgRE9NRXZl
bnQgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgcHVibGljOgogICAgIERPTUV2ZW50KEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpFdmVudEltcGwgKmUpOwogICAgIH5ET01FdmVudCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYg
cCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3Vs
dCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLQkJCWNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KTsKKwkJCVZhbHVlSW1wICp2YWx1
ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KTsKICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IFR5cGUsIFRhcmdldCwgQ3Vy
cmVudFRhcmdldCwgRXZlbnRQaGFzZSwgQnViYmxlcywKQEAgLTEzNywyMSArMTM3LDIxIEBAIG5h
bWVzcGFjZSBLSlMgewogICBjbGFzcyBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGlj
IERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSAqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAt
IGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAgIH07CiAKLSAgVmFsdWUgZ2V0RXZlbnRFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUg
KmV4ZWMpOworICBWYWx1ZUltcCAqZ2V0RXZlbnRFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3Rh
dGUgKmV4ZWMpOwogCiAgIGNsYXNzIERPTVVJRXZlbnQgOiBwdWJsaWMgRE9NRXZlbnQgewogICBw
dWJsaWM6CiAgICAgRE9NVUlFdmVudChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6VUlFdmVudEltcGwg
KnVlKTsKICAgICB+RE9NVUlFdmVudCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29u
c3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNv
bnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAv
LyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwpAQCAtMTYyLDggKzE2Miw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6
CiAgICAgRE9NTW91c2VFdmVudChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6TW91c2VFdmVudEltcGwg
Km1lKTsKICAgICB+RE9NTW91c2VFdmVudCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkg
Y29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KQEAgLTE3OCw4ICsxNzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAg
IERPTUtleWJvYXJkRXZlbnQoRXhlY1N0YXRlICpleGVjLCBET006OktleWJvYXJkRXZlbnRJbXBs
ICprZSk7CiAgICAgfkRPTUtleWJvYXJkRXZlbnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAg
ICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0OwogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5m
bzsKQEAgLTE5MCwyMSArMTkwLDIxIEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBNdXRhdGlv
bkV2ZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgcHVibGljOgogICAgIE11
dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKikgeyB9Ci0gICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0
OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIH07CiAKLSAgVmFsdWUgZ2V0TXV0YXRpb25FdmVu
dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpnZXRNdXRhdGlvbkV2
ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKIAogICBjbGFzcyBET01NdXRhdGlvbkV2
ZW50IDogcHVibGljIERPTUV2ZW50IHsKICAgcHVibGljOgogICAgIERPTU11dGF0aW9uRXZlbnQo
RXhlY1N0YXRlICpleGVjLCBET006Ok11dGF0aW9uRXZlbnRJbXBsICptZSk7CiAgICAgfkRPTU11
dGF0aW9uRXZlbnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlm
aWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0g
YWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
QEAgLTIxNSw4ICsyMTUsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBET01XaGVlbEV2
ZW50IDogcHVibGljIERPTVVJRXZlbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgRE9NV2hlZWxF
dmVudChFeGVjU3RhdGUgKiwgRE9NOjpXaGVlbEV2ZW50SW1wbCAqKTsKLSAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyICZwLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyICZwLCBWYWx1ZUltcCAqJnJlc3Vs
dCkgY29uc3Q7CisgICAgICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAg
ICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0yMjks
MTAgKzIyOSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIENsaXBib2FyZChF
eGVjU3RhdGUgKmV4ZWMsIERPTTo6Q2xpcGJvYXJkSW1wbCAqZHMpOwogICAgIH5DbGlwYm9hcmQo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2
b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwogICAg
IHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEzMQpkaWZmIC1wIC11IC11IC1wIC1yMS4xMzEgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1s
LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkxIEF1ZyAyMDA1IDA5OjA2
OjMzIC0wMDAwCTEuMTMxCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCTcgQXVn
IDIwMDUgMDQ6NDQ6MTUgLTAwMDAKQEAgLTE0MiwyMSArMTQyLDIxIEBAIG5hbWVzcGFjZSBLSlMg
ewogY2xhc3MgSFRNTEVsZW1lbnRGdW5jdGlvbiA6IHB1YmxpYyBET01GdW5jdGlvbiB7CiBwdWJs
aWM6CiAgIEhUTUxFbGVtZW50RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGxl
bik7Ci0gIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCZhcmdzKTsKKyAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QmYXJncyk7CiBw
cml2YXRlOgogICBpbnQgaWQ7CiB9OwogCiBJTVBMRU1FTlRfUFJPVE9GVU5DKEhUTUxEb2NGdW5j
dGlvbikKIAotVmFsdWUgS0pTOjpIVE1MRG9jRnVuY3Rpb246OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqS0pTOjpIVE1M
RG9jRnVuY3Rpb246OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkhU
TUxEb2N1bWVudDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkhUTUxEb2N1bWVudDo6aW5m
bykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAg
SFRNTERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4o
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworICBI
VE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAKICAgc3dpdGNo
IChpZCkgewogICBjYXNlIEhUTUxEb2N1bWVudDo6Q2xlYXI6IC8vIGV2ZW4gSUUgZG9lc24ndCBz
dXBwb3J0IHRoYXQgb25lLi4uCkBAIC0xNjksMTQgKzE2OSwxMyBAQCBWYWx1ZSBLSlM6OkhUTUxE
b2NGdW5jdGlvbjo6Y2FsbChFeGVjU3RhCiAgICAgICBpZiAocGFydCkgewogCVdpbmRvdyAqd2lu
ZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKIAlpZiAod2luZG93KSB7Ci0JICBP
YmplY3QgZnVuY3Rpb25PYmplY3QgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KHdpbmRvdy0+Z2V0KGV4
ZWMsICJvcGVuIikpOwotCSAgaWYgKGZ1bmN0aW9uT2JqZWN0LmlzTnVsbCgpIHx8ICFmdW5jdGlv
bk9iamVjdC5pbXBsZW1lbnRzQ2FsbCgpKSB7Ci0JICAgIE9iamVjdCBleGNlcHRpb24gPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvcik7CisJICBPYmplY3RJbXAgKmZ1bmN0aW9uT2JqZWN0
ID0gd2luZG93LT5nZXQoZXhlYywgIm9wZW4iKS0+Z2V0T2JqZWN0KCk7CisJICBpZiAoIWZ1bmN0
aW9uT2JqZWN0IHx8ICFmdW5jdGlvbk9iamVjdC0+aW1wbGVtZW50c0NhbGwoKSkgeworCSAgICBP
YmplY3RJbXAgKmV4Y2VwdGlvbiA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9yKTsKIAkg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAJICAgIHJldHVybiBleGNlcHRpb247
CiAJICB9Ci0JICBPYmplY3Qgd2luZG93T2JqZWN0KHdpbmRvdyk7Ci0JICByZXR1cm4gZnVuY3Rp
b25PYmplY3QuY2FsbChleGVjLCB3aW5kb3dPYmplY3QsIGFyZ3MpOworCSAgcmV0dXJuIGZ1bmN0
aW9uT2JqZWN0LT5jYWxsKGV4ZWMsIHdpbmRvdywgYXJncyk7CiAJfQogICAgICAgfQogICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTk0LDcgKzE5Myw3IEBAIFZhbHVlIEtKUzo6SFRNTERv
Y0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGEKICAgICAvLyBvciBubyBhcmd1bWVudHMKICAgICBVU3Ry
aW5nIHN0ciA9ICIiOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykK
LSAgICAgIHN0ciArPSBhcmdzW2ldLnRvU3RyaW5nKGV4ZWMpOworICAgICAgc3RyICs9IGFyZ3Nb
aV0tPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmIChpZCA9PSBIVE1MRG9jdW1lbnQ6OldyaXRlTG4p
CiAgICAgICBzdHIgKz0gIlxuIjsKICAgICAvL2tkRGVidWcoKSA8PCAiZG9jdW1lbnQud3JpdGU6
ICIgPDwgc3RyLmFzY2lpKCkgPDwgZW5kbDsKQEAgLTIwMiw3ICsyMDEsNyBAQCBWYWx1ZSBLSlM6
OkhUTUxEb2NGdW5jdGlvbjo6Y2FsbChFeGVjU3RhCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
ICB9CiAgIGNhc2UgSFRNTERvY3VtZW50OjpHZXRFbGVtZW50c0J5TmFtZToKLSAgICByZXR1cm4g
Z2V0RE9NTm9kZUxpc3QoZXhlYywgZG9jLmdldEVsZW1lbnRzQnlOYW1lKGFyZ3NbMF0udG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpLmdldCgpKTsKKyAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhl
YywgZG9jLmdldEVsZW1lbnRzQnlOYW1lKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
KS5nZXQoKSk7CiAgIGNhc2UgSFRNTERvY3VtZW50OjpDYXB0dXJlRXZlbnRzOgogICBjYXNlIEhU
TUxEb2N1bWVudDo6UmVsZWFzZUV2ZW50czoKICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuIFRo
ZXNlIGFyZSBOUy1zcGVjaWZpYyBsZWdhY3kgY2FsbHMuCkBAIC0yODIsNyArMjgxLDcgQEAgYm9v
bCBIVE1MRG9jdW1lbnQ6Omhhc093blByb3BlcnR5KEV4ZWNTdAogICByZXR1cm4gZG9jLT5oYXNO
YW1lZEl0ZW0obmFtZSkgfHwgZG9jLT5oYXNEb2NFeHRyYU5hbWVkSXRlbShuYW1lKTsKIH0KIAot
Ym9vbCBIVE1MRG9jdW1lbnQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBIVE1M
RG9jdW1lbnQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgSFRNTERvY3Vt
ZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsK
ICAgSFRNTEVsZW1lbnRJbXBsICpib2R5ID0gZG9jLmJvZHkoKTsKQEAgLTMzMCw3ICszMjksNyBA
QCBib29sIEhUTUxEb2N1bWVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0CiAgICAgICBpZiAocGFy
dCkgewogICAgICAgICBXaW5kb3cqIHdpbiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7
CiAgICAgICAgIGlmICh3aW4pIHsKLSAgICAgICAgICByZXN1bHQgPSBWYWx1ZSh3aW4tPmxvY2F0
aW9uKCkpOworICAgICAgICAgIHJlc3VsdCA9IHdpbi0+bG9jYXRpb24oKTsKICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMzYxLDggKzM2MCw4IEBAIGJvb2wg
SFRNTERvY3VtZW50OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3QKICAgICB7CiAgICAgICAvLyBUbyBi
ZSBpbXBsZW1lbnRlZC4gTWVhbndoaWxlLCByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBsZW5ndGgg
cHJvcGVydHkgc2V0IHRvIDAKICAgICAgIGtkV2FybmluZygpIDw8ICJLSlM6OkhUTUxEb2N1bWVu
dCBkb2N1bWVudC5zY3JpcHRzIGNhbGxlZCAtIG5vdCBpbXBsZW1lbnRlZCIgPDwgZW5kbDsKLSAg
ICAgIE9iamVjdCBvYmoobmV3IE9iamVjdEltcCgpKTsKLSAgICAgIG9iai5wdXQoZXhlYywgbGVu
Z3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoMCkpOworICAgICAgT2JqZWN0SW1wICpvYmoobmV3IE9i
amVjdEltcCgpKTsKKyAgICAgIG9iai0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVt
YmVyKDApKTsKICAgICAgIHJlc3VsdCA9IG9iajsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTQzOCw3ICs0MzcsNyBAQCBib29sIEhUTUxEb2N1bWVudDo6Z2V0T3duUHJvcGVydHkoRXhl
Y1N0CiAgIHJldHVybiBET01Eb2N1bWVudDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lLCByZXN1bHQpOwogfQogCi12b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1M
RG9jdW1lbnQ6OnB1dCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKQEAgLTQ0
Niw3ICs0NDUsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRlICplCiAg
IGxvb2t1cFB1dDxIVE1MRG9jdW1lbnQsIERPTURvY3VtZW50PiggZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0ciwgJkhUTUxEb2N1bWVudFRhYmxlLCB0aGlzICk7CiB9CiAKLXZvaWQgS0pT
OjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKQordm9pZCBLSlM6OkhUTUxEb2N1
bWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pCiB7CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhj
ZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRN
TERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwpAQCAtNDU1LDIyICs0NTQsMjIgQEAgdm9pZCBLSlM6
OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eQogCiAgIHN3aXRjaCAodG9rZW4pIHsKICAg
Y2FzZSBUaXRsZToKLSAgICBkb2Muc2V0VGl0bGUodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpOworICAgIGRvYy5zZXRUaXRsZSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwog
ICAgIGJyZWFrOwogICBjYXNlIEJvZHk6CiAgICAgZG9jLnNldEJvZHkodG9IVE1MRWxlbWVudCh2
YWx1ZSksIGV4Y2VwdGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgRG9tYWluOiAvLyBub3QgcGFy
dCBvZiB0aGUgRE9NCi0gICAgZG9jLnNldERvbWFpbih2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSk7CisgICAgZG9jLnNldERvbWFpbih2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkp
OwogICAgIGJyZWFrOwogICBjYXNlIENvb2tpZToKLSAgICBkb2Muc2V0Q29va2llKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBkb2Muc2V0Q29va2llKHZhbHVlLT50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgTG9jYXRpb246IHsKICAgICBL
SFRNTFBhcnQgKnBhcnQgPSBkb2MucGFydCgpOwogICAgIGlmIChwYXJ0KQogICAgIHsKLSAgICAg
IFFTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYykucXN0cmluZygpOworICAgICAgUVN0
cmluZyBzdHIgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwogCiAgICAgICAvLyBX
aGVuIGFzc2lnbmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemlsbGEgYm90aCByZXNvbHZlIHRoZSBV
UkwKICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSB3aGVyZSB0aGUgSmF2YVNjcmlwdCBp
cyBleGVjdXRpbmcgbm90CkBAIC00ODcsMTggKzQ4NiwxOCBAQCB2b2lkIEtKUzo6SFRNTERvY3Vt
ZW50OjpwdXRWYWx1ZVByb3BlcnR5CiAgIH0KICAgY2FzZSBCZ0NvbG9yOgogICAgIGlmIChib2R5
RWxlbWVudCkKLSAgICAgIGJvZHlFbGVtZW50LT5zZXRCZ0NvbG9yKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpKTsKKyAgICAgIGJvZHlFbGVtZW50LT5zZXRCZ0NvbG9yKHZhbHVlLT50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgRmdDb2xvcjoKICAgICBp
ZiAoYm9keUVsZW1lbnQpCi0gICAgICBib2R5RWxlbWVudC0+c2V0VGV4dCh2YWx1ZS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSk7CisgICAgICBib2R5RWxlbWVudC0+c2V0VGV4dCh2YWx1ZS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgIGJyZWFrOwogICBjYXNlIEFsaW5rQ29sb3I6CiAg
ICAgaWYgKGJvZHlFbGVtZW50KSB7CiAgICAgICAvLyB0aGlzIGNoZWNrIGlzIGEgYml0IHNpbGx5
LCBidXQgc29tZSBiZW5jaG1hcmtzIGxpa2UgdG8gc2V0IHRoZQogICAgICAgLy8gZG9jdW1lbnQn
cyBsaW5rIGNvbG9ycyBvdmVyIGFuZCBvdmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFuZCB3ZQogICAg
ICAgLy8gZG9uJ3Qgd2FudCB0byBpbmN1ciBhIHN0eWxlIHVwZGF0ZSBlYWNoIHRpbWUuCi0gICAg
ICBET01TdHJpbmcgbmV3Q29sb3IgPSB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAg
ICAgIERPTVN0cmluZyBuZXdDb2xvciA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsK
ICAgICAgIGlmIChib2R5RWxlbWVudC0+YUxpbmsoKSAhPSBuZXdDb2xvcikKICAgICAgICAgYm9k
eUVsZW1lbnQtPnNldEFMaW5rKG5ld0NvbG9yKTsKICAgICB9CkBAIC01MDgsNyArNTA3LDcgQEAg
dm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eQogICAgICAgLy8gdGhpcyBj
aGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtlIHRvIHNldCB0aGUK
ICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3ZlciB0byB0aGUgc2Ft
ZSB2YWx1ZSBhbmQgd2UKICAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRh
dGUgZWFjaCB0aW1lLgotICAgICAgRE9NU3RyaW5nIG5ld0NvbG9yID0gdmFsdWUudG9TdHJpbmco
ZXhlYykuc3RyaW5nKCk7CisgICAgICBET01TdHJpbmcgbmV3Q29sb3IgPSB2YWx1ZS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCk7CiAgICAgICBpZiAoYm9keUVsZW1lbnQtPmxpbmsoKSAhPSBuZXdD
b2xvcikKIAlib2R5RWxlbWVudC0+c2V0TGluayhuZXdDb2xvcik7CiAgICAgfQpAQCAtNTE4LDE3
ICs1MTcsMTcgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eQogICAg
ICAgLy8gdGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVuY2htYXJrcyBsaWtl
IHRvIHNldCB0aGUKICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMgb3ZlciBhbmQgb3Zl
ciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UKICAgICAgIC8vIGRvbid0IHdhbnQgdG8gaW5jdXIg
YSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgotICAgICAgRE9NU3RyaW5nIG5ld0NvbG9yID0gdmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgICAgICBET01TdHJpbmcgbmV3Q29sb3IgPSB2
YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAgICAgICBpZiAoYm9keUVsZW1lbnQtPnZM
aW5rKCkgIT0gbmV3Q29sb3IpCiAJYm9keUVsZW1lbnQtPnNldFZMaW5rKG5ld0NvbG9yKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAgIGNhc2UgRGlyOgotICAgIGJvZHktPnNldERpcih2YWx1ZS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgYm9keS0+c2V0RGlyKHZhbHVlLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgRGVzaWduTW9kZToKICAgICB7Ci0g
ICAgICBET01TdHJpbmcgbW9kZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
OworICAgICAgRE9NU3RyaW5nIG1vZGVTdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCk7CiAgICAgICBEb2N1bWVudEltcGw6OkluaGVyaXRlZEJvb2wgbW9kZTsKICAgICAgIGlm
ICghc3RyY2FzZWNtcChtb2RlU3RyaW5nLCAib24iKSkKICAgICAgICAgbW9kZSA9IERvY3VtZW50
SW1wbDo6b247CkBAIC0xMzAwLDcgKzEyOTksNyBAQCBIVE1MRWxlbWVudDo6SFRNTEVsZW1lbnQo
RXhlY1N0YXRlICpleGVjCiB7CiB9CiAKLWJvb2wgS0pTOjpIVE1MRWxlbWVudDo6Z2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0Citib29sIEtKUzo6SFRNTEVsZW1lbnQ6OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUlt
cCAqJnJlc3VsdCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAKQEAgLTEzNDAsNyArMTMzOSw3
IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6Z2V0T3duUHJvcGVydHkoRXgKICAgICAgICAgICAg
ICAgICBpZiAocGFydCkgewogICAgICAgICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdp
bmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZhbHVlKHdpbmRvdyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB3aW5kb3c7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KQEAgLTEzNjcsOSArMTM2Niw5IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6Z2V0T3du
UHJvcGVydHkoRXgKIAkgICAgcmVzdWx0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0JVmFsdWUgcnVudGltZU9i
amVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JaWYgKCFydW50aW1lT2Jq
ZWN0LmlzTnVsbCgpKSB7Ci0JICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworCVZhbHVlSW1wICpydW50aW1lT2JqZWN0ID0g
Z2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKKwlpZiAocnVudGltZU9iamVjdCkgewor
CSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2Jq
ZWN0KTsKIAkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewog
CQlyZXN1bHQgPSBpbXAtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTM5NSwzNyArMTM5NCwyNyBAQCBib29sIEtKUzo6SFRNTEVsZW1l
bnQ6OmdldE93blByb3BlcnR5KEV4CiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHND
YWxsKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwKLSAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8
Ci0gICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgeworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7CiAgICAgICAgIERvY3VtZW50
SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKICAgICAgICAgS0pTUHJveHkgKnBy
b3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKICAgICAgICAgRXhlY1N0YXRlICpl
eGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgVmFsdWUg
cnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKLSAgICAgICAg
aWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwotICAgICAgICB9CisgICAgICAg
IGlmIChWYWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgZWxl
bWVudCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRp
bWVPYmplY3QpLT5pbXBsZW1lbnRzQ2FsbCgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKK1ZhbHVlSW1wICpLSlM6OkhUTUxFbGVtZW50Ojpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCZhcmdzKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KGVtYmVkVGFnKSB8fAotICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwK
LSAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7Ci0gICAgICAgIFZhbHVl
IHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0gICAgICAg
IGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewotICAgICAgICAgICAgT2JqZWN0SW1wICpp
bXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKLSAgICAgICAg
fQorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7Cisg
ICAgICAgIGlmIChWYWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhl
YywgZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+
KHJ1bnRpbWVPYmplY3QpLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwogICAgIH0KICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50Ojpo
dG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxI
dG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEh0bWxWZXJzaW9uKQpAQCAtMTQzMyw3ICsxNDIy
LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIoRXhlY1N0YXRlKgogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmhlYWRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEhlYWRF
bGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpCkBAIC0xNDQxLDcgKzE0MzAsNyBA
QCBWYWx1ZSBIVE1MRWxlbWVudDo6aGVhZEdldHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6bGlua0dldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6bGlua0dldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MTGlua0VsZW1l
bnRJbXBsICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE0NjksNyArMTQ1OCw3IEBAIFZhbHVlIEhUTUxF
bGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojp0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRp
dGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBp
ZiAodG9rZW4gPT0gVGl0bGVUZXh0KQpAQCAtMTQ3Nyw3ICsxNDY2LDcgQEAgVmFsdWUgSFRNTEVs
ZW1lbnQ6OnRpdGxlR2V0dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotVmFsdWUgSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9
ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7CkBAIC0xNDg5LDcgKzE0NzgsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdl
dHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1M
RWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpIVE1MRWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0
PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAg
LTE0OTksNyArMTQ4OCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpiYXNlR2V0dGVyKEV4ZWNTdGF0
ZSoKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojppc0lu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhU
TUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8
SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpA
QCAtMTUwOSw3ICsxNDk4LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhl
Y1N0YQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OnN0
eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhU
TUxFbGVtZW50OjpzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFN0
eWxlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE1MjEs
NyArMTUxMCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpzdHlsZUdldHRlcihFeGVjU3RhdGUKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojpib2R5R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50
Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhU
TUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTU1Miw3ICsxNTQxLDcgQEAg
VmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIoRXhlY1N0YXRlKgogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEZvcm1FbGVtZW50
SW1wbCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xNTY4LDcgKzE1NTcsNyBAQCBWYWx1ZSBIVE1MRWxl
bWVudDo6Zm9ybUdldHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjpzZWxlY3RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBz
ZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xNTg3LDcgKzE1NzYsNyBAQCBWYWx1ZSBIVE1MRWxlbWVu
dDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1W
YWx1ZSBIVE1MRWxlbWVudDo6b3B0R3JvdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBs
JiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTU5Nyw3ICsxNTg2LDcgQEAgVmFsdWUgSFRN
TEVsZW1lbnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdAogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTYxMywyMSArMTYwMiwyMSBAQCBWYWx1ZSBIVE1M
RWxlbWVudDo6b3B0aW9uR2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1zdGF0aWMgVmFsdWUgZ2V0SW5wdXRTZWxlY3Rpb25TdGFydChIVE1MSW5wdXRFbGVtZW50
SW1wbCAmaW5wdXQpCitzdGF0aWMgVmFsdWVJbXAgKmdldElucHV0U2VsZWN0aW9uU3RhcnQoSFRN
TElucHV0RWxlbWVudEltcGwgJmlucHV0KQogewogICAgIGlmIChpbnB1dC5jYW5IYXZlU2VsZWN0
aW9uKCkpCiAgICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQuc2VsZWN0aW9uU3RhcnQoKSk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgVmFsdWUgZ2V0SW5wdXRTZWxlY3Rp
b25FbmQoSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0KQorc3RhdGljIFZhbHVlSW1wICpnZXRJ
bnB1dFNlbGVjdGlvbkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCiB7CiAgICAgaWYg
KGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5z
ZWxlY3Rpb25FbmQoKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1M
RWxlbWVudDo6aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtMTY1NSw3ICsxNjQ0LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyKEV4
ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6
OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFyZWEgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTE2NzYsNyArMTY2NSw3IEBAIFZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJl
YUdldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxF
bGVtZW50OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1dHRvbiA9ICpzdGF0
aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKQEAgLTE2OTEsNyArMTY4MCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpidXR0b25HZXR0
ZXIoRXhlY1N0YXQKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVt
ZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0
PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBA
IC0xNzAyLDcgKzE2OTEsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhlY1N0
YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6Zmll
bGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNldCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09
IEZpZWxkU2V0Rm9ybSkKQEAgLTE3MTAsNyArMTY5OSw3IEBAIFZhbHVlIEhUTUxFbGVtZW50Ojpm
aWVsZFNldEdldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVl
IEhUTUxFbGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9
ICpzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRj
aCAodG9rZW4pIHsKQEAgLTE3MjEsNyArMTcxMCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpsZWdl
bmRHZXR0ZXIoRXhlY1N0YXQKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhU
TUxFbGVtZW50Ojp1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFVMaXN0RWxlbWVudEltcGwmIHVMaXN0ID0gKnN0YXRp
Y19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CkBAIC0xNzMxLDcgKzE3MjAsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIo
RXhlY1N0YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVu
dDo6b0xpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqSFRNTEVsZW1lbnQ6Om9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxI
VE1MT0xpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAt
MTc0Miw3ICsxNzMxLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om9MaXN0R2V0dGVyKEV4ZWNTdGF0
ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmRMaXN0
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxF
bGVtZW50OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
ICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCkBA
IC0xNzUwLDcgKzE3MzksNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIoRXhlY1N0
YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6ZGly
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxF
bGVtZW50OjpkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAg
ICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXIgPSAqc3RhdGljX2Nhc3Q8SFRNTERpcmVj
dG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gRGlyZWN0b3J5Q29t
cGFjdCkKQEAgLTE3NTgsNyArMTc0Nyw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpkaXJHZXR0ZXIo
RXhlY1N0YXRlKiAKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVt
ZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nhc3Q8SFRN
TE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IE1lbnVDb21wYWN0
KQpAQCAtMTc2Niw3ICsxNzU1LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om1lbnVHZXR0ZXIoRXhl
Y1N0YXRlKgogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6
OmxpR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhU
TUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
ICAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE3NzYsNyArMTc2NSw3IEBA
IFZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmRpdkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MRGl2RWxlbWVudElt
cGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IGlmICh0b2tlbiA9PSBEaXZBbGlnbikKQEAgLTE3ODQsNyArMTc3Myw3IEBAIFZhbHVlIEhUTUxF
bGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCkBAIC0xNzkyLDcgKzE3ODEs
NyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6cGFyYWdyYXBoR2V0dGVyKEV4ZWNTCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6aGVh
ZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsJiBoID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCkBAIC0xODAwLDcg
KzE3ODksNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRlcihFeGVjU3RhCiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxl
bWVudDo6YmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKICAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsJiBibG9ja1F1b3RlID0gKnN0YXRpY19j
YXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9
PSBCbG9ja1F1b3RlQ2l0ZSkKQEAgLTE4MDgsNyArMTc5Nyw3IEBAIFZhbHVlIEhUTUxFbGVtZW50
OjpibG9ja1F1b3RlR2V0dGVyKEV4ZWMKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFF1b3RlRWxlbWVudEltcGwmIHF1b3RlID0g
KnN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9r
ZW4gPT0gUXVvdGVDaXRlKQpAQCAtMTgxNiw3ICsxODA1LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6
OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFs
dWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIHdo
ZW4gd2hpdGUtc3BhY2U6IHByZS13cmFwIGlzIGltcGxlbWVudGVkLgogICAgIEhUTUxQcmVFbGVt
ZW50SW1wbCYgcHJlID0gKnN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CkBAIC0xODI1LDcgKzE4MTQsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6cHJlR2V0dGVyKEV4ZWNT
dGF0ZSogCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6
YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRN
TEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
ICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCkBAIC0xODMzLDcgKzE4MjIs
NyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmJh
c2VGb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhU
TUxCYXNlRm9udEVsZW1lbnRJbXBsJiBiYXNlRm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUZv
bnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTg0NCw3
ICsxODMzLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmJhc2VGb250R2V0dGVyKEV4ZWNTdAogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6
OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRN
TEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xODU1LDcgKzE4NDQsNyBAQCBW
YWx1ZSBIVE1MRWxlbWVudDo6Zm9udEdldHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6aHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmhyR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBo
ciA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewpAQCAtMTg2Nyw3ICsxODU2LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmhyR2V0
dGVyKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRN
TEVsZW1lbnQ6Om1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhU
TUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTg3
Nyw3ICsxODY2LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om1vZEdldHRlcihFeGVjU3RhdGUqIAog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxl
bWVudDo6YW5jaG9yR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
ICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCYgYW5jaG9yID0gKnN0YXRpY19jYXN0PEhUTUxBbmNo
b3JFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTkxNSw3
ICsxOTA0LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdAogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50
OjppbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE5MzcsNyArMTkyNiw3
IEBAIFZhbHVlIEhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVjU3RhdGUKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om9iamVj
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MT2Jq
ZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE5NjUsNyArMTk1NCw3IEBA
IFZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIoRXhlY1N0YXQKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cGFyYW1HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFBhcmFtRWxl
bWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xOTc3LDcgKzE5NjYsNyBAQCBWYWx1ZSBI
VE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjphcHBsZXRHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsJiBhcHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xOTk2LDcgKzE5ODUsNyBAQCBWYWx1ZSBIVE1M
RWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjptYXBHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRv
a2VuKSB7CkBAIC0yMDA2LDcgKzE5OTUsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVy
KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxl
bWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhU
TUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIw
MzYsNyArMjAyNSw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjphcmVhR2V0dGVyKEV4ZWNTdGF0ZSoK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVs
ZW1lbnQ6OnNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
ICAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2Ny
aXB0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIwNTEs
NyArMjA0MCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRHZXR0ZXIoRXhlY1N0YXQKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVu
dDo6dGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAg
SFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMDczLDcgKzIwNjIs
NyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50
Ojp0YWJsZUNhcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsJiB0YWJsZUNhcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9r
ZW4gPT0gVGFibGVDYXB0aW9uQWxpZ24pCkBAIC0yMDgxLDcgKzIwNzAsNyBAQCBWYWx1ZSBIVE1M
RWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxUYWJsZUNvbEVsZW1l
bnRJbXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCo+
KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjA5NSw3ICsyMDg0LDcgQEAgVmFs
dWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVyKEV4ZWNTdAogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6dGFibGVT
ZWN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtMjEwOCw3ICsyMDk3LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdl
dHRlcihFeAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6
OnRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTIxMjQsNyArMjExMyw3IEBAIFZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJv
d0dldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxF
bGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxl
Q2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIxNDcsNyArMjEzNiw3IEBAIFZhbHVlIEhUTUxFbGVt
ZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1MKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEZyYW1lU2V0RWxlbWVudElt
cGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMTU3LDcgKzIxNDYsNyBAQCBWYWx1ZSBI
VE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBs
JiBmcmFtZUVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIxNzksNyArMjE2OCw3IEBAIFZhbHVlIEhU
TUxFbGVtZW50OjpmcmFtZUdldHRlcihFeGVjU3RhdGUKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmlGcmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MSUZyYW1lRWxlbWVudElt
cGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIyMDQsMTMgKzIxOTMsMTMgQEAgVmFsdWUgSFRN
TEVsZW1lbnQ6OmlGcmFtZUdldHRlcihFeGVjU3RhdAogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEZpbmQgb3V0
IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBpbXBsZW1lbnQgdGhpcy4KICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0Lgog
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKQEAgLTIzNDgsMjAgKzIzMzcsMTkgQEAgdm9pZCBLSlM6OkhUTUxFbGVt
ZW50OjpwdXNoRXZlbnRIYW5kbGVyUwogSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKQogICA6IERPTUZ1bmN0aW9u
KCksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dChleGVjLGxlbmd0aFBy
b3BlcnR5TmFtZSxOdW1iZXIobGVuKSxEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0K
IAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKktKUzo6SFRNTEVs
ZW1lbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLmluaGVyaXRz
KCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgewotICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pT
OjpIVE1MRWxlbWVudDo6aW5mbykpIHsKKyAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1M
RWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5kbDsKICAgICBET01FeGNlcHRpb25UcmFu
c2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+
KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4odGhpc09iaiktPmltcGwoKSk7CiAKICAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoZm9y
bVRhZykpIHsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CkBAIC0yMzgxLDcgKzIzNjksNyBAQCBW
YWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGwoRXhlCiAgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGlu
dChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGlu
dChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlNlbGVjdEJsdXIpIHsKQEAgLTI0MTIsNyArMjQwMCw3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1l
bnRGdW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNl
dFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFd
LT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTI0NTYsNyArMjQ0NCw3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNl
dFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5n
ZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7CisgICAgICAg
ICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBh
cmdzWzFdLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI0NzEsNyArMjQ1OSw3IEBAIFZhbHVlIEtKUzo6SFRNTEVs
ZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNo
b3JUb1N0cmluZykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhl
eGVjKSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMp
KTsKICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUodGFibGVUYWcpKSB7
CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwpAQCAtMjQ5NCw5ICsyNDgyLDkgQEAgVmFsdWUg
S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4ZQogICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQotICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuaW5zZXJ0Um93KGFyZ3NbMF0t
PnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewotICAgICAgICAgICAgdGFibGUuZGVsZXRl
Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHRhYmxl
LmRlbGV0ZVJvdyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwogICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUwNSwxOCArMjQ5
MywxOCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGwoRXhlCiAgICAgICAg
ICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUodGZvb3RUYWcpKSB7CiAgICAgICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwogICAgICAgICBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhl
YyksIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGFi
bGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsK
ICAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVs
ZXRlUm93KSB7Ci0gICAgICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVS
b3coYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAgICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZSh0clRhZykpIHsKICAgICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRh
YmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwp
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwo
YXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChhcmdzWzBdLT50b0ludDMyKGV4ZWMp
LCBleGNlcHRpb24pKTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFy
Z3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHRhYmxlUm93LmRl
bGV0ZUNlbGwoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MzcsOCArMjUyNSw4
IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUKICNpZiBBUFBMRV9D
SEFOR0VTCiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoY2FudmFzVGFnKSkgewog
ICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewotICAgICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1sw
XS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBPYmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkpOworICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3IENvbnRleHQyRCgmZWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KQEAgLTI1NDgsMTAgKzI1MzYs
MTAgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4ZQogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cikKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQotICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVl
LmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyku
c3RyaW5nKCk7CisgICAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNOdWxsKCkgPyBET006
OkRPTVN0cmluZygpIDogdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogI2VuZGlmCiAg
ICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCkBAIC0yNTY1LDIxICsyNTUzLDE3IEBA
IHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXgKICAgICAgICAgYm9vbCBv
azsKICAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CiAgICAg
ICAgIGlmIChvaykgewotICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWND
YXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xs
ZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Ci0gICAgICAgICAgICBpZiAoIWNvbGwuaXNOdWxs
KCkpCi0gICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOwor
ICAgICAgICAgICAgT2JqZWN0SW1wICpjb2xsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdl
dFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24o
KS5nZXQoKSwgJnNlbGVjdCkpOworICAgICAgICAgICAgY29sbC0+cHV0KGV4ZWMscHJvcGVydHlO
YW1lLHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICNpZiBB
UFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoZW1iZWRUYWcp
IHx8Ci0gICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fAotICAg
ICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKGFwcGxldFRhZykpIHsKLQlWYWx1ZSBydW50
aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKLQlpZiAoIXJ1bnRp
bWVPYmplY3QuaXNOdWxsKCkpIHsKLQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKG9iamVjdFRhZykg
fHwgZWxlbWVudC5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSkgeworCWlmIChWYWx1ZUltcCAqcnVu
dGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgJmVsZW1lbnQpKSB7CisJICAgIE9i
amVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QpOwog
CSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKLQkJcmV0dXJuIGltcC0+
cHV0IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKwkJcmV0dXJuIGltcC0+cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUpOwogCX0KICAgICB9CiAjZW5kaWYKQEAgLTI2MDAsMjUgKzI1
ODQsMjUgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXQoRXhlY1N0YXRlICpleAogICAgIGxv
b2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVs
ZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6Omh0
bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFk
ID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0
b2tlbiA9PSBIZWFkUHJvZmlsZSkgCiAgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOwogfQog
Ci12b2lkIEhUTUxFbGVtZW50OjpoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhU
TUxFbGVtZW50OjpoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTEhlYWRFbGVt
ZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpIAogICAgICAgICBoZWFkLnNldFByb2Zp
bGUoc3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQordm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAg
IEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50
SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIExpbmtE
aXNhYmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0
RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNl
IExpbmtDaGFyc2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQog
ICAgICAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJl
dHVybjsgfQogICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVm
bGFuZyhzdHIpOyByZXR1cm47IH0KQEAgLTI2MzAsMTQgKzI2MTQsMTQgQEAgdm9pZCBIVE1MRWxl
bWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVu
dDo6dGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRpdGxl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsJiB0aXRs
ZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgIGlm
ICh0b2tlbiA9PSBUaXRsZVRleHQpCiAgICAgICAgIHRpdGxlLnNldFRleHQoc3RyKTsKIH0KIAot
dm9pZCBIVE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1M
RWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAg
KnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxNZXRhRWxlbWVu
dEltcGwmIG1ldGEgPSAqc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjY0OCw3ICsyNjMyLDcgQEAgdm9pZCBIVE1MRWxl
bWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVu
dDo6YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6YmFzZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAq
c3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewpAQCAtMjY1NywyNCArMjY0MSwyNCBAQCB2b2lkIEhUTUxFbGVtZW50OjpiYXNlU2V0
dGVyKEV4ZWNTdGF0ZSAqCiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojppc0luZGV4U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojppc0luZGV4U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9ICpz
dGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9r
ZW4gPT0gSXNJbmRleFByb21wdCkKICAgICAgICAgaXNpbmRleC5zZXRQcm9tcHQoc3RyKTsKIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQg
SFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFN0eWxl
RWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgU3R5bGVEaXNhYmxl
ZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlz
YWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIFN0
eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQogICAg
ICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7
CiAgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yNjkyLDE2ICsy
Njc2LDE2IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICoKICAgICAg
ICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBib2R5LmdldERvY3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlTY3JvbGxMZWZ0KQotICAg
ICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3ModmFsdWUudG9JbnQzMihleGVj
KSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENv
bnRlbnRzUG9zKHZhbHVlLT50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRz
UG9zKHN2aWV3LT5jb250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNYKCksIHZhbHVl
LT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQog
ewogICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1F
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjcxNiwxMTYg
KzI3MDAsMTE1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmZvcm1TZXR0ZXIoRXhlY1N0YXRlICoKICAg
ICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIC8vIHJl
YWQtb25seTogdHlwZQotICAgICAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAgeyBzZWxl
Y3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4
KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgU2VsZWN0VmFs
dWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICAgICAg
Y2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0
aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWlj
Q2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29s
bGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmNvbGwg
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywg
c2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC0+cHV0KGV4ZWMsbGVuZ3RoUHJv
cGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQogICAgICAgICAvLyByZWFkLW9ubHk6IG9wdGlvbnMKLSAgICAg
ICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIFNlbGVjdE11bHRpcGxl
OiAgICAgICAgeyBzZWxlY3Quc2V0TXVsdGlwbGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7IHNlbGVjdC5zZXRE
aXNhYmxlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
U2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0aXBsZSh2YWx1ZS0+dG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAg
ICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIFNlbGVjdFNp
emU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7IHNlbGVjdC5zZXRU
YWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2Vs
ZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLT50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7IHNlbGVj
dC5zZXRUYWJJbmRleCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3Zv
aWQgSFRNTEVsZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRN
TE9wdEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNh
c2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxl
ZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQogICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdy
b3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVu
dDo6b3B0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpvcHRp
b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4
Y2VwdGlvbihleGVjKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKICAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICAgIGNhc2UgT3B0aW9uRGVm
YXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7
IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBvcHRpb24uc2V0VGV4
dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQogICAgICAgICAvLyByZWFkLW9ubHk6IGluZGV4
Ci0gICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlvbi5zZXREaXNhYmxl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25E
aXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0
aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVk
OiAgICAgICAgeyBvcHRpb24uc2V0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICB7IG9wdGlvbi5zZXRT
ZWxlY3RlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2Ug
T3B0aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0K
ICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICBjYXNlIElu
cHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47
IH0KLSAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0
Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS0+dG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQogICAg
ICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7IGlucHV0LnNldEFjY2VwdChzdHIpOyBy
ZXR1cm47IH0KICAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAgeyBpbnB1dC5zZXRB
Y2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRB
bHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgICBj
YXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0LnNldENoZWNrZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAg
IHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6
ICAgICAgICAgeyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNh
YmxlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5w
dXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLT50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5w
dXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbnB1dFNlbGVjdGlv
blN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rpb25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHsgaW5wdXQuc2V0
U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS0+dG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAg
IHsgaW5wdXQuc2V0U2l6ZSh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6ICB7IGlucHV0LnNldFNlbGVjdGlvblN0YXJ0KHZh
bHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rp
b25FbmQ6ICAgIHsgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLT50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7
IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJbmRleCh2YWx1ZS0+
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAg
ICAgICB7IGlucHV0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRV
c2VNYXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQogICAgICAg
ICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVy
bjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCiB7CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CiAgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0
RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0K
ICAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nl
c3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAg
ICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFyZWEuc2V0RGlzYWJs
ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS0+dG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRl
eHRhcmVhLnNldERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAg
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRl
eHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0
aW9uU3RhcnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvbkVuZDogICAgeyB0
ZXh0YXJlYS5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRhYklu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJl
YVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1ZS0+dG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAg
IHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
blN0YXJ0KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4
dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLT50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDog
ICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KICAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCiAgICAgICAgIGNhc2UgVGV4dEFyZWFW
YWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpidXR0b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhU
TUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KICAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHsgYnV0dG9u
LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxl
ZDogICAgICAgIHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0
RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNl
IEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4
KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25UYWJJ
bmRleDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25seTogdHlwZQogICAgICAgICBjYXNlIEJ1dHRv
blZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpsYWJlbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
dm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1M
TGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI4MzUsMTEgKzI4MTgsMTEg
QEAgdm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIoRXhlY1N0YXRlIAogICAgIH0KIH0KIAot
dm9pZCBIVE1MRWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQg
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiB9CiAKLXZvaWQg
SFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxl
bWVudDo6bGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTExlZ2VuZEVsZW1l
bnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yODQ5LDEwNiArMjgzMiwxMDYgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZQogICAgIH0KIH0KIAotdm9pZCBI
VE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1l
bnQ6OnVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFVMaXN0RWxlbWVudElt
cGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAg
IHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVl
LT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBVTGlzdFR5cGU6ICAg
ICAgICAgICAgeyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTE9MaXN0RWxlbWVu
dEltcGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAg
ICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
LSAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5zZXRTdGFydCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAg
ICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQo
dmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPTGlzdFR5cGU6
ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAot
dm9pZCBIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTERMaXN0RWxl
bWVudEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0KQotICAgICAgICBkTGlzdC5zZXRD
b21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRMaXN0LnNldENvbXBhY3Qo
dmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmRpclNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6ZGlyU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCiB7CiAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXJlY3RvcnkgPSAqc3Rh
dGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9r
ZW4gPT0gRGlyZWN0b3J5Q29tcGFjdCkKLSAgICAgICAgZGlyZWN0b3J5LnNldENvbXBhY3QodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGlyZWN0b3J5LnNldENvbXBhY3QodmFsdWUt
PnRvQm9vbGVhbihleGVjKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKIHsKICAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0gKnN0YXRpY19jYXN0PEhUTUxN
ZW51RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBNZW51Q29tcGFjdCkK
LSAgICAgICAgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAg
IG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAotdm9pZCBIVE1M
RWxlbWVudDo6bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6Omxp
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTExJRWxlbWVudEltcGwmIGxpID0gKnN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CiAgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHsgbGkuc2V0VHlwZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAg
ICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAg
ICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
dm9pZCBIVE1MRWxlbWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTERp
dkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCiAgICAgICAgIGRpdi5zZXRBbGlnbihz
dHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQog
ewogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0gKnN0YXRpY19jYXN0
PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IFBh
cmFncmFwaEFsaWduKQogICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsKIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1M
RWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxIZWFkaW5n
RWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikKICAgICAgICAgaGVh
ZGluZy5zZXRBbGlnbihzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYgYmxvY2tR
dW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCiAgICAgICAgIGJsb2NrUXVvdGUuc2V0
Q2l0ZShzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpxdW90ZVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsK
ICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3Rl
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCiAgICAg
ICAgIHF1b3RlLnNldENpdGUoc3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6cHJlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKIHsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRl
LXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KICAgICBIVE1MUHJlRWxlbWVudEltcGwm
IHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlm
ICh0b2tlbiA9PSBQcmVXaWR0aCkKLSAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIo
ZXhlYykpOworICAgICAgICBwcmUuc2V0V2lkdGgodmFsdWUtPnRvSW50MzIoZXhlYykpOwogfQog
Ci12b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1M
RWxlbWVudDo6YnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MQlJFbGVtZW50SW1w
bCYgYnIgPSAqc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlm
ICh0b2tlbiA9PSBCUkNsZWFyKQogICAgICAgICBici5zZXRDbGVhcihzdHIpOwogfQogCi12b2lk
IEhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1M
RWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MQmFzZUZv
bnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI5NTgsNyArMjk0MSw3
IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGEKICAgICB9CiB9CiAK
LXZvaWQgSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MRm9udEVsZW1l
bnRJbXBsJiBmb250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI5NjgsMTggKzI5NTEsMTggQEAgdm9pZCBIVE1M
RWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxl
bWVudDo6aHJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhyU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRp
Y19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
CiAgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIuc2V0Tm9TaGFkZSh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6
ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KICAgICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBoci5zZXRTaXplKHN0cik7IHJl
dHVybjsgfQogICAgICAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0
cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6bW9kU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKIHsKICAgICBIVE1MTW9kRWxlbWVudEltcGwmIG1vZCA9ICpzdGF0aWNfY2FzdDxIVE1MTW9k
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI5ODgsNyAr
Mjk3MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUgKmUKICAgICB9
CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
dm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0zMDAxLDMyICsyOTg0
LDMyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3RhdGUKICAgICAgICAg
Y2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47
IH0KICAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihz
dHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5j
aG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4
OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFi
SW5kZXgodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBBbmNo
b3JUYXJnZXQ6ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAg
ICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUoc3RyKTsg
cmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjppbWFnZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKIHsKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAg
ICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdlLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICB7IGlt
YWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAg
ICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhlaWdodCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAg
ICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
LSAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjog
ICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQo
dmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhzcGFj
ZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01h
cCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW1hZ2VM
b25nRGVzYzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CiAgICAg
ICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3JjKHN0cik7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGltYWdlLnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBp
bWFnZS5zZXRWc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBj
YXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBp
bWFnZS5zZXRWc3BhY2UodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS0+dG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6b2JqZWN0
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpz
dGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTMwMzksMTIgKzMwMjIsMTIgQEAgdm9pZCBIVE1MRWxlbWVudDo6b2JqZWN0
U2V0dGVyKEV4ZWNTdGF0ZQogICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBv
YmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25seTog
T2JqZWN0Q29udGVudERvY3VtZW50CiAgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAg
ICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIE9iamVjdERl
Y2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0
LnNldERlY2xhcmUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBj
YXNlIE9iamVjdEhlaWdodDogICAgICAgICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0SHNw
YWNlKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAg
eyBvYmplY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPYmplY3RTdGFu
ZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5kYnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAg
IGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAg
ICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQogICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6
ICAgICAgICAgIHsgb2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KQEAgLTMwNTIsNyAr
MzAzNSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlcihFeGVjU3RhdGUKICAgICB9
CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2
b2lkIEhUTUxFbGVtZW50OjpwYXJhbVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxQ
YXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzA2Myw3ICszMDQ2LDcgQEAg
dm9pZCBIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIoRXhlY1N0YXRlIAogICAgIH0KIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxF
bGVtZW50OjphcHBsZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MQXBwbGV0RWxl
bWVudEltcGwmIGFwcGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTMwODEsNyArMzA2NCw3IEBAIHZvaWQg
SFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlcihFeGVjU3RhdGUKICAgICB9CiB9CiAKLXZvaWQgSFRN
TEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6
bWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAg
PSAqc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9r
ZW4gPT0gTWFwTmFtZSkKQEAgLTMwODksNyArMzA3Miw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Om1h
cFNldHRlcihFeGVjU3RhdGUgKmUKICAgICAgICAgbWFwLnNldE5hbWUoc3RyKTsKIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxl
bWVudDo6YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxBcmVhRWxlbWVudElt
cGwmIGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAg
ICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzA5NywxNCArMzA4MCwxNCBAQCB2b2lkIEhUTUxFbGVt
ZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqCiAgICAgICAgIGNhc2UgQXJlYUFsdDogICAgICAg
ICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBBcmVhQ29v
cmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQogICAgICAgICBj
YXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQot
ICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAg
ICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
CiAgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRU
YWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJl
YVRhYkluZGV4OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLT50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNl
dFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnNj
cmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6c2NyaXB0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQg
PSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0
Y2ggKHRva2VuKSB7CkBAIC0zMTEyLDEzICszMDk1LDEzIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNj
cmlwdFNldHRlcihFeGVjU3RhdGUKICAgICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAg
IHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgU2NyaXB0
RXZlbnQ6ICAgICAgICAgICB7IHNjcmlwdC5zZXRFdmVudChzdHIpOyByZXR1cm47IH0KICAgICAg
ICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICB7IHNjcmlwdC5z
ZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
Y3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVlLT50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHsg
c2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBTY3JpcHRUeXBlOiAg
ICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12
b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1M
RWxlbWVudDo6dGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MVGFibGVFbGVt
ZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTMxMzksMjcgKzMxMjIsMjcgQEAgdm9pZCBI
VE1MRWxlbWVudDo6dGFibGVTZXR0ZXIoRXhlY1N0YXRlIAogICAgIH0KIH0KIAotdm9pZCBIVE1M
RWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxF
bGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBUYWJsZUNh
cHRpb25BbGlnbikKICAgICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0cik7CiB9CiAKLXZv
aWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhU
TUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICBjYXNlIFRh
YmxlQ29sQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsg
fQogICAgICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRhYmxlQ29sLnNldENo
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICB7
IHRhYmxlQ29sLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIFRhYmxlQ29s
U3BhbjogICAgICAgICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7IHRhYmxl
Q29sLnNldFNwYW4odmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2Fz
ZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wu
c2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojp0
YWJsZVNlY3Rpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRh
YmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzE3MSw3ICsz
MTU0LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVyKEV4ZQogICAgIH0K
IH0KIAotdm9pZCBIVE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJs
ZVJvd0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0zMTg2
LDcgKzMxNjksNyBAQCB2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRlcihFeGVjU3RhCiAg
ICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQog
ewogICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtMzE5NywxOCArMzE4MCwxOCBAQCB2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxTZXR0
ZXIoRXhlY1N0CiAgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7IHRhYmxl
Q2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ2VsbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9mZihzdHIp
OyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHsgdGFi
bGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29sU3Bhbih2
YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ2VsbEhl
YWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyByZXR1cm47IH0KICAg
ICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdo
dChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAg
IHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
LSAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJv
d1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
Q2VsbE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLT50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAg
ICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsgdGFibGVDZWxsLnNl
dFNjb3BlKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNl
IFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKIHsKICAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKQEAgLTMyMTcsNyArMzIwMCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0
dGVyKEV4ZWNTdGEKICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQogewogICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4p
IHsKQEAgLTMyMjcsMTQgKzMyMTAsMTQgQEAgdm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXR0ZXIo
RXhlY1N0YXRlIAogICAgICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGZyYW1lRWxl
bWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgRnJhbWVN
YXJnaW5XaWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAg
ICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0Tm9SZXNpemUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBj
YXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldFNyYyhzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9u
OiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQogfQogCi12b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhU
TUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzI1MiwxNSArMzIz
NSwxNSBAQCB2b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0YXRlCiAgICAgfQog
fQogCi12b2lkIEhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2
b2lkIEhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgLy8g
RklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxlbWVudCBpdC4KIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50OjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGludCkKIHsKICAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAg
ICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJp
bmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERPTTo6RE9NU3RyaW5n
IHN0ciA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKICAKICAgICAvLyBDaGVjayBv
dXIgc2V0IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KICAgICBIVE1MRWxlbWVudEltcGwg
JmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CkBAIC0z
MzYwLDcgKzMzNDMsNyBAQCBib29sIEtKUzo6SFRNTENvbGxlY3Rpb246Omhhc093blByb3BlcnR5
CiAgIHJldHVybiBET01PYmplY3Q6Omhhc093blByb3BlcnR5KGV4ZWMsIHApOwogfQogCi1ib29s
IEtKUzo6SFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBL
SlM6OkhUTUxDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAg
IEhUTUxDb2xsZWN0aW9uSW1wbCAmY29sbGVjdGlvbiA9ICptX2ltcGw7CiAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7CkBAIC0zMzgxLDggKzMzNjQsOCBAQCBib29s
IEtKUzo6SFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5CiAgICAgfQogICB9IGVsc2Ugewog
ICAgIC8vIExvb2sgaW4gdGhlIHByb3RvdHlwZSAoZm9yIGZ1bmN0aW9ucykgYmVmb3JlIGFzc3Vt
aW5nIGl0J3MgYW4gaXRlbSdzIG5hbWUKLSAgICBPYmplY3QgcHJvdG8gPSBPYmplY3Q6OmR5bmFt
aWNDYXN0KHByb3RvdHlwZSgpKTsKLSAgICBpZiAoIXByb3RvLmlzTnVsbCgpICYmIHByb3RvLmhh
c1Byb3BlcnR5KGV4ZWMscHJvcGVydHlOYW1lKSkKKyAgICBPYmplY3RJbXAgKnByb3RvID0gcHJv
dG90eXBlKCktPmdldE9iamVjdCgpOworICAgIGlmIChwcm90byAmJiBwcm90by0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIG5h
bWUgb3IgaW5kZXggPwpAQCAtMzM5Myw4ICszMzc2LDggQEAgYm9vbCBLSlM6OkhUTUxDb2xsZWN0
aW9uOjpnZXRPd25Qcm9wZXJ0eQogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgVmFs
dWUgaXRlbXMgPSBnZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFp
dGVtcy5pbXAoKS0+aXNVbmRlZmluZWQoKSkgeworICAgIFZhbHVlSW1wICppdGVtcyA9IGdldE5h
bWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIWl0ZW1zLT5pc1VuZGVmaW5l
ZCgpKSB7CiAgICAgICByZXN1bHQgPSBpdGVtczsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTM0MDUsMTUgKzMzODgsOSBAQCBib29sIEtKUzo6SFRNTENvbGxlY3Rpb246OmdldE93blBy
b3BlcnR5CiAKIC8vIEhUTUxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1
cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwsCiAvLyBzbyB0aGF0IGRvY3VtZW50LmZvcm1zLml0ZW0o
MCkgYW5kIGRvY3VtZW50LmZvcm1zKDApIGJvdGggd29yay4KLVZhbHVlIEtKUzo6SFRNTENvbGxl
Y3Rpb246OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJiwgY29uc3QgTGlzdCAmYXJncykK
K1ZhbHVlSW1wICpLSlM6OkhUTUxDb2xsZWN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqLCBjb25zdCBMaXN0ICZhcmdzKQogewogICAvLyBEbyBub3QgdXNl
IHRoaXNPYmogaGVyZS4gSXQgY2FuIGJlIHRoZSBIVE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVu
dC5mb3JtcyhpKSBjYXNlLgotICAvKmlmKCB0aGlzT2JqLmltcCgpICE9IHRoaXMgKQotICB7Ci0g
ICAga2RXYXJuaW5nKCkgPDwgInRoaXNPYmouaW1wKCkgIT0gdGhpcyBpbiBIVE1MQ29sbGVjdGlv
bjo6Y2FsbCIgPDwgZW5kbDsKLSAgICBLSlM6OnByaW50SW5mbyhleGVjLCJLSlM6OkhUTUxDb2xs
ZWN0aW9uOjpjYWxsIHRoaXNPYmoiLHRoaXNPYmosLTEpOwotICAgIEtKUzo6cHJpbnRJbmZvKGV4
ZWMsIktKUzo6SFRNTENvbGxlY3Rpb246OmNhbGwgdGhpcyIsVmFsdWUodGhpcyksLTEpOwotICB9
Ki8KICAgSFRNTENvbGxlY3Rpb25JbXBsICZjb2xsZWN0aW9uID0gKm1faW1wbDsKIAogICAvLyBB
bHNvLCBkbyB3ZSBuZWVkIHRoZSBUeXBlRXJyb3IgdGVzdCBoZXJlID8KQEAgLTM0MjEsNyArMzM5
OCw3IEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OmNhbGwoRXhlY1N0YXQKICAgaWYgKGFy
Z3Muc2l6ZSgpID09IDEpIHsKICAgICAvLyBzdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4
PikgZXRjLgogICAgIGJvb2wgb2s7Ci0gICAgVVN0cmluZyBzID0gYXJnc1swXS50b1N0cmluZyhl
eGVjKTsKKyAgICBVU3RyaW5nIHMgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKICAgICB1bnNp
Z25lZCBpbnQgdSA9IHMudG9VTG9uZygmb2spOwogICAgIGlmIChvaykKICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIGNvbGxlY3Rpb24uaXRlbSh1KSk7CkBAIC0zNDMxLDggKzM0MDgsOCBA
QCBWYWx1ZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjpjYWxsKEV4ZWNTdGF0CiAgIGVsc2UgaWYgKGFy
Z3Muc2l6ZSgpID49IDEpIC8vIHRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBv
ZiB0aGUgaXRlbSB3ZSB3YW50CiAgIHsKICAgICBib29sIG9rOwotICAgIFVTdHJpbmcgcyA9IGFy
Z3NbMF0udG9TdHJpbmcoZXhlYyk7Ci0gICAgdW5zaWduZWQgaW50IHUgPSBhcmdzWzFdLnRvU3Ry
aW5nKGV4ZWMpLnRvVUxvbmcoJm9rKTsKKyAgICBVU3RyaW5nIHMgPSBhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKTsKKyAgICB1bnNpZ25lZCBpbnQgdSA9IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnRv
VUxvbmcoJm9rKTsKICAgICBpZiAob2spCiAgICAgewogICAgICAgRE9NOjpET01TdHJpbmcgcHN0
ciA9IHMuc3RyaW5nKCk7CkBAIC0zNDQ4LDcgKzM0MjUsNyBAQCBWYWx1ZSBLSlM6OkhUTUxDb2xs
ZWN0aW9uOjpjYWxsKEV4ZWNTdGF0CiAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUg
S0pTOjpIVE1MQ29sbGVjdGlvbjo6Z2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK1ZhbHVlSW1wICpLSlM6OkhUTUxDb2xs
ZWN0aW9uOjpnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3
MCkgPDwgIktKUzo6SFRNTENvbGxlY3Rpb246OmdldE5hbWVkSXRlbXMgIiA8PCBwcm9wZXJ0eU5h
bWUuYXNjaWkoKSA8PCBlbmRsOwpAQCAtMzQ2NywyNSArMzQ0NCwyNSBAQCBWYWx1ZSBLSlM6OkhU
TUxDb2xsZWN0aW9uOjpnZXROYW1lZEl0ZW1zCiAgIGlmIChuYW1lZEl0ZW1zLmNvdW50KCkgPT0g
MSkKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBuYW1lZEl0ZW1zWzBdLmdldCgpKTsKICAg
Ci0gIHJldHVybiBWYWx1ZShuZXcgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24oZXhlYyxuYW1lZEl0
ZW1zKSk7CisgIHJldHVybiBuZXcgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24oZXhlYywgbmFtZWRJ
dGVtcyk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb25Qcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqS0pTOjpIVE1MQ29sbGVjdGlvblByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICgh
dGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MQ29sbGVjdGlvbjo6aW5mbykpIHsKLSAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+
aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIEhUTUxDb2xsZWN0aW9uSW1wbCAmY29s
bCA9ICpzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbiAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgp
OworICBIVE1MQ29sbGVjdGlvbkltcGwgJmNvbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rp
b24gKj4odGhpc09iaiktPmltcGwoKTsKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgS0pTOjpI
VE1MQ29sbGVjdGlvbjo6SXRlbToKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGNvbGwuaXRl
bShhcmdzWzBdLnRvVUludDMyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxj
b2xsLml0ZW0oYXJnc1swXS0+dG9VSW50MzIoZXhlYykpKTsKICAgY2FzZSBLSlM6OkhUTUxDb2xs
ZWN0aW9uOjpUYWdzOgotICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBjb2xsLmJhc2Uo
KS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSku
Z2V0KCkpOworICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBjb2xsLmJhc2UoKS0+Z2V0
RWxlbWVudHNCeVRhZ05hbWUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLmdldCgp
KTsKICAgY2FzZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjpOYW1lZEl0ZW06Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uICo+KHRoaXNPYmouaW1wKCkpLT5nZXROYW1lZEl0ZW1z
KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS50b1N0cmluZyhleGVjKSkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbiAqPih0aGlzT2JqKS0+Z2V0TmFtZWRJdGVtcyhleGVj
LCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiAgIGRlZmF1bHQ6CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogICB9CkBAIC0zNDk4LDcgKzM0NzUsNyBAQCBIVE1MU2VsZWN0
Q29sbGVjdGlvbjo6SFRNTFNlbGVjdENvbGxlY3RpCiB7CiB9CiAKLWJvb2wgS0pTOjpIVE1MU2Vs
ZWN0Q29sbGVjdGlvbjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBLSlM6OkhUTUxTZWxlY3RDb2xs
ZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdAogewogICBpZiAocCA9PSAic2VsZWN0ZWRJbmRl
eCIpIHsKICAgICByZXN1bHQgPSBOdW1iZXIobV9lbGVtZW50LT5zZWxlY3RlZEluZGV4KCkpOwpA
QCAtMzUwOCwxMyArMzQ4NSwxMyBAQCBib29sIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246Omdl
dE93blByCiAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwg
cmVzdWx0KTsKIH0KIAotdm9pZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjpwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgaW50KQordm9pZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogI2lmZGVmIEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRN
TFNlbGVjdENvbGxlY3Rpb246OnB1dCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgogICBpZiAoIHByb3BlcnR5TmFtZSA9PSAic2VsZWN0ZWRJbmRleCIgKSB7Ci0g
ICAgbV9lbGVtZW50LT5zZXRTZWxlY3RlZEluZGV4KCB2YWx1ZS50b0ludDMyKCBleGVjICkgKTsK
KyAgICBtX2VsZW1lbnQtPnNldFNlbGVjdGVkSW5kZXgoIHZhbHVlLT50b0ludDMyKCBleGVjICkg
KTsKICAgICByZXR1cm47CiAgIH0KICAgLy8gcmVzaXplID8KQEAgLTM1MjIsNyArMzQ5OSw3IEBA
IHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6cHV0KEV4ZWMKICAgICBpbnQgZXhjZXB0
aW9uID0gMDsKIAogICAgIHVuc2lnbmVkIG5ld0xlbjsKLSAgICBib29sIGNvbnZlcnRlZCA9IHZh
bHVlLnRvVUludDMyKG5ld0xlbik7CisgICAgYm9vbCBjb252ZXJ0ZWQgPSB2YWx1ZS0+Z2V0VUlu
dDMyKG5ld0xlbik7CiAKICAgICBpZiAoIWNvbnZlcnRlZCkgewogICAgICAgcmV0dXJuOwpAQCAt
MzU1MSw3ICszNTI4LDcgQEAgdm9pZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjpwdXQoRXhl
YwogICBpZiAoIW9rKQogICAgIHJldHVybjsKIAotICBpZiAodmFsdWUuaXNBKE51bGxUeXBlKSB8
fCB2YWx1ZS5pc0EoVW5kZWZpbmVkVHlwZSkpIHsKKyAgaWYgKHZhbHVlLT5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CiAgICAgLy8gbnVsbCBhbmQgdW5kZWZpbmVkIGRlbGV0ZS4gb3RoZXJzLCB0b28g
PwogICAgIG1fZWxlbWVudC0+cmVtb3ZlKHUpOwogICAgIHJldHVybjsKQEAgLTM2MDMsNyArMzU4
MCw3IEBAIGJvb2wgT3B0aW9uQ29uc3RydWN0b3JJbXA6OmltcGxlbWVudHNDb24KICAgcmV0dXJu
IHRydWU7CiB9CiAKLU9iamVjdCBPcHRpb25Db25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK09iamVjdEltcCAqT3B0aW9uQ29uc3RydWN0
b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAg
IGludCBleGNlcHRpb24gPSAwOwogICBTaGFyZWRQdHI8RWxlbWVudEltcGw+IGVsKG1fZG9jLT5j
cmVhdGVFbGVtZW50KCJvcHRpb24iLCBleGNlcHRpb24pKTsKQEAgLTM2MTUsMTggKzM1OTIsMTgg
QEAgT2JqZWN0IE9wdGlvbkNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRQogICAgIHQtPnJlZigp
OwogICAgIG9wdC0+YXBwZW5kQ2hpbGQodCwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9u
ID09IDAgJiYgc3ogPiAwKQotICAgICAgdC0+c2V0RGF0YShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pOyAvLyBzZXQgdGhlIHRleHQKKyAgICAgIHQtPnNldERhdGEo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7IC8vIHNldCB0aGUg
dGV4dAogICAgIGlmIChleGNlcHRpb24gPT0gMCAmJiBzeiA+IDEpCi0gICAgICBvcHQtPnNldFZh
bHVlKGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgb3B0LT5zZXRWYWx1
ZShhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgaWYgKGV4Y2VwdGlvbiA9
PSAwICYmIHN6ID4gMikKLSAgICAgIG9wdC0+c2V0RGVmYXVsdFNlbGVjdGVkKGFyZ3NbMl0udG9C
b29sZWFuKGV4ZWMpKTsKKyAgICAgIG9wdC0+c2V0RGVmYXVsdFNlbGVjdGVkKGFyZ3NbMl0tPnRv
Qm9vbGVhbihleGVjKSk7CiAgICAgaWYgKGV4Y2VwdGlvbiA9PSAwICYmIHN6ID4gMykKLSAgICAg
IG9wdC0+c2V0U2VsZWN0ZWQoYXJnc1szXS50b0Jvb2xlYW4oZXhlYykpOworICAgICAgb3B0LT5z
ZXRTZWxlY3RlZChhcmdzWzNdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIHQtPmRlcmVmKCk7CiAg
IH0KIAogICBzZXRET01FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLSAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoZ2V0RE9NTm9kZShleGVjLG9wdCkpOworICByZXR1cm4gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUoZXhlYyxvcHQpKTsKIH0KIAogLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBJbWFnZSBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0zNjQx
LDIyICszNjE4LDIyIEBAIGJvb2wgSW1hZ2VDb25zdHJ1Y3RvckltcDo6aW1wbGVtZW50c0NvbnMK
ICAgcmV0dXJuIHRydWU7CiB9CiAKLU9iamVjdCBJbWFnZUNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1
Y3QoRXhlY1N0YXRlICogZXhlYywgY29uc3QgTGlzdCAmIGxpc3QpCitPYmplY3RJbXAgKkltYWdl
Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKiBleGVjLCBjb25zdCBMaXN0ICYg
bGlzdCkKIHsKICAgICBib29sIHdpZHRoU2V0ID0gZmFsc2UsIGhlaWdodFNldCA9IGZhbHNlOwog
ICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAgICAgaWYgKGxpc3Quc2l6ZSgpID4gMCkg
ewogICAgICAgICB3aWR0aFNldCA9IHRydWU7Ci0gICAgICAgIFZhbHVlIHcgPSBsaXN0LmF0KDAp
OwotICAgICAgICB3aWR0aCA9IHcudG9JbnQzMihleGVjKTsKKyAgICAgICAgVmFsdWVJbXAgKncg
PSBsaXN0LmF0KDApOworICAgICAgICB3aWR0aCA9IHctPnRvSW50MzIoZXhlYyk7CiAgICAgfQog
ICAgIGlmIChsaXN0LnNpemUoKSA+IDEpIHsKICAgICAgICAgaGVpZ2h0U2V0ID0gdHJ1ZTsKLSAg
ICAgICAgVmFsdWUgaCA9IGxpc3QuYXQoMSk7Ci0gICAgICAgIGhlaWdodCA9IGgudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgVmFsdWVJbXAgKmggPSBsaXN0LmF0KDEpOworICAgICAgICBoZWlnaHQg
PSBoLT50b0ludDMyKGV4ZWMpOwogICAgIH0KICAgICAgICAgCi0gICAgT2JqZWN0IHJlc3VsdChu
ZXcgSW1hZ2UobV9kb2MuZ2V0KCksIHdpZHRoU2V0LCB3aWR0aCwgaGVpZ2h0U2V0LCBoZWlnaHQp
KTsKKyAgICBPYmplY3RJbXAgKnJlc3VsdChuZXcgSW1hZ2UobV9kb2MuZ2V0KCksIHdpZHRoU2V0
LCB3aWR0aCwgaGVpZ2h0U2V0LCBoZWlnaHQpKTsKICAgCiAgICAgLyogVE9ETzogZG8gd2UgbmVl
ZCBhIHByb3RvdHlwZSA/ICovCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM2NzQsMTIgKzM2NTEs
MTIgQEAgY29uc3QgQ2xhc3NJbmZvIEtKUzo6SW1hZ2U6OmluZm8gPSB7ICJJbQogQGVuZAogKi8K
IAotYm9vbCBJbWFnZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlICZyZXN1bHQpIGNvbnN0Citib29sIEltYWdlOjpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25W
YWx1ZTxJbWFnZSxET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkltYWdlVGFibGUsIHRo
aXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIEltYWdlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSW1hZ2U6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBj
YXNlIFNyYzoKQEAgLTM3MTYsMjIgKzM2OTMsMjEgQEAgVmFsdWUgSW1hZ2U6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlIAogICB9CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIklt
YWdlOjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7
Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotdm9pZCBJ
bWFnZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQordm9pZCBJbWFnZTo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKQogewogICBsb29rdXBQdXQ8SW1hZ2UsRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBhdHRyLCAmSW1hZ2VUYWJsZSwgdGhpcyApOwogfQogCi12b2lkIEltYWdl
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgSW1hZ2U6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKQog
ewogICBzd2l0Y2godG9rZW4pIHsKICAgY2FzZSBTcmM6CiAgIHsKLSAgICBTdHJpbmcgc3RyID0g
dmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgc3JjID0gc3RyLnZhbHVlKCk7CisgICAgc3JjID0g
dmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmICggaW1nICkgaW1nLT5kZXJlZih0aGlzKTsK
ICAgICBpbWcgPSBkb2MgPyBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoIHNyYy5zdHJp
bmcoKSApIDogMDsKICAgICBpZiAoIGltZyApIGltZy0+cmVmKHRoaXMpOwpAQCAtMzc0MywxMSAr
MzcxOSwxMSBAQCB2b2lkIEltYWdlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAg
YnJlYWs7CiAgIGNhc2UgV2lkdGg6CiAgICAgd2lkdGhTZXQgPSB0cnVlOwotICAgIHdpZHRoID0g
dmFsdWUudG9JbnQzMihleGVjKTsKKyAgICB3aWR0aCA9IHZhbHVlLT50b0ludDMyKGV4ZWMpOwog
ICAgIGJyZWFrOwogICBjYXNlIEhlaWdodDoKICAgICBoZWlnaHRTZXQgPSB0cnVlOwotICAgIGhl
aWdodCA9IHZhbHVlLnRvSW50MzIoZXhlYyk7CisgICAgaGVpZ2h0ID0gdmFsdWUtPnRvSW50MzIo
ZXhlYyk7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIkhUTUxE
b2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBl
bmRsOwpAQCAtMzc4NiwzNCArMzc2MiwyOCBAQCBJbWFnZTo6fkltYWdlKCkKIAogSU1QTEVNRU5U
X1BST1RPRlVOQyhDb250ZXh0MkRGdW5jdGlvbikKIAotc3RhdGljIGJvb2wgaXNHcmFkaWVudChj
b25zdCBWYWx1ZSAmdmFsdWUpCitzdGF0aWMgYm9vbCBpc0dyYWRpZW50KFZhbHVlSW1wICp2YWx1
ZSkKIHsKLSAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZS5p
bXAoKSk7Ci0gICAgaWYgKG8tPnR5cGUoKSA9PSBPYmplY3RUeXBlICYmIG8tPmluaGVyaXRzKCZH
cmFkaWVudDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdmFsdWUtPmlzT2JqZWN0KCZHcmFkaWVudDo6aW5mbyk7CiB9CiAKLXN0YXRp
YyBib29sIGlzSW1hZ2VQYXR0ZXJuKGNvbnN0IFZhbHVlICZ2YWx1ZSkKK3N0YXRpYyBib29sIGlz
SW1hZ2VQYXR0ZXJuKFZhbHVlSW1wICp2YWx1ZSkKIHsKLSAgICBPYmplY3RJbXAgKm8gPSBzdGF0
aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZS5pbXAoKSk7Ci0gICAgaWYgKG8tPnR5cGUoKSA9PSBP
YmplY3RUeXBlICYmIG8tPmluaGVyaXRzKCZJbWFnZVBhdHRlcm46OmluZm8pKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5pc09iamVj
dCgmSW1hZ2VQYXR0ZXJuOjppbmZvKTsKIH0KIAogI2RlZmluZSBCSVRTX1BFUl9DT01QT05FTlQg
OAogI2RlZmluZSBCWVRFU19QRVJfUk9XKHdpZHRoLGJpdHNQZXJDb21wb25lbnQsbnVtQ29tcG9u
ZW50cykgKCh3aWR0aCAqIGJpdHNQZXJDb21wb25lbnQgKiBudW1Db21wb25lbnRzICsgNykvOCkK
IAotVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpLSlM6OkNvbnRleHQy
REZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkNv
bnRleHQyRDo6aW5mbykpIHsKLSAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxUeXBlRXJyb3IpOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkNvbnRleHQyRDo6aW5m
bykpIHsKKyAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVy
cm9yKTsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVybiBl
cnI7CiAgICAgfQogCi0gICAgQ29udGV4dDJEICpjb250ZXh0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
S0pTOjpDb250ZXh0MkQgKj4odGhpc09iai5pbXAoKSk7CisgICAgQ29udGV4dDJEICpjb250ZXh0
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8S0pTOjpDb250ZXh0MkQgKj4odGhpc09iaik7CiAgICAga2h0
bWw6OlJlbmRlckNhbnZhc0ltYWdlICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5k
ZXJDYW52YXNJbWFnZSo+KGNvbnRleHRPYmplY3QtPl9lbGVtZW50LT5yZW5kZXJlcigpKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zODI1LDcg
KzM3OTUsNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNTCiAgICAg
c3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2F2ZTogewogICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsK
ICAgICAgICAgICAgIH0KQEAgLTM4MzcsNyArMzgwNyw3IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJE
RnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6
UmVzdG9yZTogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAg
ICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAg
ICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KQEAgLTM4NDksNyArMzgxOSw3IEBA
IFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENvbnRleHQyRDo6QmVnaW5QYXRoOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5z
aXplKCkgIT0gMCkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAg
fQpAQCAtMzg1OCw3ICszODI4LDcgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2Fs
bChFeGVjUwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpDbG9zZVBhdGg6IHsK
ICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC0zODc1LDUwICszODQ1LDUwIEBAIFZhbHVlIEtK
Uzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgICAgIGludCBudW1Bcmdz
ID0gYXJncy5zaXplKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG51bUFyZ3MpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0udHlwZSgp
ID09IFN0cmluZ1R5cGUpIHsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0udG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS0+
aXNTdHJpbmcoKSkgeyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjKGNv
bG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9y
KGRyYXdpbmdDb250ZXh0LCBxYy5yZWQoKS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJsdWUo
KS8yNTUuLCBxYy5hbHBoYSgpLzI1NS4pOwogCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0g
KGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBnID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBnLCAx
Lik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGEgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJnc1swXS50eXBlKCkgPT0gU3RyaW5nVHlwZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0udG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdLT5p
c1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBRUmdiIGNvbG9yID0gRE9NOjpD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjKGNvbG9yKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBxYy5y
ZWQoKS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJsdWUoKS8yNTUuLCBhKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhl
Yyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ryb2tlQ29sb3Io
ZHJhd2luZ0NvbnRleHQsIGcsIGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgNDog
ewotICAgICAgICAgICAgICAgICAgICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1sxXS50b051
bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiA9IChmbG9hdClhcmdzWzJd
LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFy
Z3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxv
YXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGcg
PSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGIgPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGEgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAg
ICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSA1OiB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGMgPSAoZmxv
YXQpYXJnc1swXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbSA9
IChmbG9hdClhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9h
dCB5ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IGZsb2F0IGsgPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgYSA9IChmbG9hdClhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBjID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBtID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVy
KGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBrID0gKGZsb2F0KWFyZ3NbM10tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFyZ3Nb
NF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlL
U3Ryb2tlQ29sb3IoZHJhd2luZ0NvbnRleHQsIGMsIG0sIHksIGssIGEpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3lu
dGF4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTM5MzUsNDkgKzM5MDUsNDkgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5j
dGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsK
ICAgICAgICAgICAgIHN3aXRjaCAobnVtQXJncykgewogICAgICAgICAgICAgICAgIGNhc2UgMTog
ewotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlKCkgPT0gU3RyaW5nVHlwZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpw
YXJzZUNvbG9yKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoYXJnc1swXS0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xvciBxYyhj
b2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3Io
ZHJhd2luZ0NvbnRleHQsIHFjLnJlZCgpLzI1NS4sIHFjLmdyZWVuKCkvMjU1LiwgcWMuYmx1ZSgp
LzI1NS4sIHFjLmFscGhhKCkvMjU1Lik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0gKGZs
b2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCBnID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgZywgMS4pOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgMjogewotICAgICAgICAgICAgICAgICAgICBm
bG9hdCBhID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3NbMF0udHlwZSgpID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFFSZ2IgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdzWzBdLnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS0+aXNTdHJp
bmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFFDb2xvciBxYyhjb2xvcik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoZHJhd2luZ0NvbnRleHQsIHFjLnJlZCgpLzI1
NS4sIHFjLmdyZWVuKCkvMjU1LiwgcWMuYmx1ZSgpLzI1NS4sIGEpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgZyA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgZyA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFNldEdyYXlGaWxsQ29sb3IoZHJhd2luZ0Nv
bnRleHQsIGcsIGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgNDogewotICAgICAg
ICAgICAgICAgICAgICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiA9IChmbG9hdClhcmdzWzJdLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFyZ3NbM10udG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQp
YXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGIgPSAo
ZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGEgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAg
IENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgciwgZywgYiwgYSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGNhc2UgNTogewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBjID0gKGZsb2F0KWFyZ3NbMF0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG0gPSAoZmxvYXQpYXJn
c1sxXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9h
dClhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBrID0g
KGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0
IGEgPSAoZmxvYXQpYXJnc1s0XS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgYyA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgbSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgayA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVj
KTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IChmbG9hdClhcmdzWzRdLT50b051bWJl
cihleGVjKTsKICAgICAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS1N0cm9rZUNvbG9y
KGRyYXdpbmdDb250ZXh0LCBjLCBtLCB5LCBrLCBhKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAg
ICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
KyAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgICAgICB9CkBA
IC0zOTg2LDIyICszOTU2LDIyIEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwo
RXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGluZVdpZHRoOiB7
CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAg
ICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClh
cmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClhcmdz
WzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aCAo
ZHJhd2luZ0NvbnRleHQsIHcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OlNldExpbmVDYXA6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBDR0xpbmVDYXAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7Ci0gICAgICAgICAg
ICBRU3RyaW5nIGNhcFN0cmluZyA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxv
d2VyKCk7CisgICAgICAgICAgICBRU3RyaW5nIGNhcFN0cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAgICAgaWYgKGNhcFN0cmluZyA9PSAi
cm91bmQiKQogICAgICAgICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBSb3VuZDsKICAgICAgICAg
ICAgIGVsc2UgaWYgKGNhcFN0cmluZyA9PSAic3F1YXJlIikKQEAgLTQwMTEsMTIgKzM5ODEsMTIg
QEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRMaW5lSm9pbjogewogICAgICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIENHTGluZUpvaW4gam9pbiA9IGtDR0xpbmVKb2luTWl0ZXI7Ci0g
ICAgICAgICAgICBRU3RyaW5nIGpvaW5TdHJpbmcgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFz
dHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAgUVN0cmluZyBqb2luU3RyaW5nID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAoam9p
blN0cmluZyA9PSAicm91bmQiKQogICAgICAgICAgICAgICAgIGpvaW4gPSBrQ0dMaW5lSm9pblJv
dW5kOwogICAgICAgICAgICAgZWxzZSBpZiAoam9pblN0cmluZyA9PSAiYmV2ZWwiKQpAQCAtNDAy
NiwxNyArMzk5NiwxNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNT
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldE1pdGVyTGltaXQ6IHsKICAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAg
ICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVy
biBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KWFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KWFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAoZHJh
d2luZ0NvbnRleHQsIGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDb250ZXh0MkQ6OkZpbGw6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAw
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC00MDQ4
LDcgKzQwMTgsNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNTCiAg
ICAgICAgICAgICAgICAgLy8gb3BlcmF0ZXMgb24gY2xpcHBpbiByZWdpb25zISAgT2RkLCBidXQg
dHJ1ZS4KICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGRyYXdpbmdDb250ZXh0KTsKIAot
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGNv
bnRleHRPYmplY3QtPl9maWxsU3R5bGUuaW1wKCkpOworICAgICAgICAgICAgICAgIE9iamVjdElt
cCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGNvbnRleHRPYmplY3QtPl9maWxsU3R5bGUp
OwogICAgICAgICAgICAgICAgIEdyYWRpZW50ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEdyYWRp
ZW50Kj4obyk7CiAgICAgICAgICAgICAgICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBncmFkaWVu
dC0+Z2V0U2hhZGluZygpOwogICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGRy
YXdpbmdDb250ZXh0LCBzaGFkaW5nKTsKQEAgLTQwNjYsNyArNDAzNiw3IEBAIFZhbHVlIEtKUzo6
Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENv
bnRleHQyRDo6U3Ryb2tlOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkgewot
ICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQpAQCAtNDA4MCw3ICs0
MDUwLDcgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAg
ICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGRyYXdpbmdDb250
ZXh0KTsKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGRyYXdpbmdDb250ZXh0KTsKIAot
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGNv
bnRleHRPYmplY3QtPl9zdHJva2VTdHlsZS5pbXAoKSk7CisgICAgICAgICAgICAgICAgT2JqZWN0
SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oY29udGV4dE9iamVjdC0+X3N0cm9rZVN0
eWxlKTsKICAgICAgICAgICAgICAgICBHcmFkaWVudCAqZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxH
cmFkaWVudCo+KG8pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENHU2hhZGlu
Z1JlZiBzaGFkaW5nID0gZ3JhZGllbnQtPmdldFNoYWRpbmcoKTsKQEAgLTQwOTgsMTM3ICs0MDY4
LDEzNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNTCiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNjYWxlOiB7CiAgICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZmxvYXQgc3ggPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgIGZsb2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgICBmbG9hdCBzeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsK
KyAgICAgICAgICAgIGZsb2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0gKGRyYXdpbmdDb250ZXh0LCBzeCwgc3kpOwog
ICAgICAgICAgICAgY29udGV4dE9iamVjdC0+X25lZWRzRmx1c2hSYXN0ZXJDYWNoZSA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6
Um90YXRlOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAg
ICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAg
ICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVy
cm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgYW5n
bGUgPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGFu
Z2xlID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Um90YXRlQ1RNIChkcmF3aW5nQ29udGV4dCwgYW5nbGUpOwogICAgICAgICAgICAgY29udGV4
dE9iamVjdC0+X25lZWRzRmx1c2hSYXN0ZXJDYWNoZSA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6VHJhbnNsYXRlOiB7CiAgICAg
ICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdCBl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgdHggPSAoZmxvYXQpYXJnc1sw
XS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3NbMV0u
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB0eCA9IChmbG9hdClhcmdzWzBdLT50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNIChkcmF3aW5n
Q29udGV4dCwgdHgsIHR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ29udGV4dDJEOjpNb3ZlVG86IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSAyKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
ICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENH
Q29udGV4dE1vdmVUb1BvaW50IChkcmF3aW5nQ29udGV4dCwgeCwgeSk7CiAgICAgICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkxpbmVUbzogewogICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVj
KTsKKyAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQgKGRyYXdpbmdDb250ZXh0LCB4LCB5
KTsKICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UXVhZHJhdGlj
Q3VydmVUbzogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAg
ICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAg
ICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0IGNw
eCA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgY3B5
ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4ID0g
KGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZs
b2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcHggPSAoZmxv
YXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcHkgPSAoZmxv
YXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0
KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClh
cmdzWzNdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFF1YWRDdXJ2
ZVRvUG9pbnQgKGRyYXdpbmdDb250ZXh0LCBjcHgsIGNweSwgeCwgeSk7CiAgICAgICAgICAgICBy
ZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkJlemllckN1cnZlVG86IHsKICAgICAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0
SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3NbMF0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDF5ID0gKGZsb2F0KWFyZ3NbMV0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDJ4ID0gKGZsb2F0KWFyZ3NbMl0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDJ5ID0gKGZsb2F0KWFyZ3NbM10u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbNF0udG9O
dW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbNV0udG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgY3AxeSA9IChmbG9hdClhcmdzWzFdLT50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGNwMnggPSAoZmxvYXQpYXJnc1syXS0+dG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcDJ5ID0gKGZsb2F0KWFyZ3NbM10tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzRdLT50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1s1XS0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRDdXJ2ZVRvUG9pbnQgKGRyYXdpbmdD
b250ZXh0LCBjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTsKICAgICAgICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbnRleHQyRDo6QXJjVG86IHsKICAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSAhPSA1KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmbG9hdCB4MSA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
OwotICAgICAgICAgICAgZmxvYXQgeTEgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICBmbG9hdCB5MiA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgZmxvYXQgciA9IChmbG9hdClhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBmbG9hdCB5MSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgZmxvYXQgeTIgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAg
Q0dDb250ZXh0QWRkQXJjVG9Qb2ludCAoZHJhd2luZ0NvbnRleHQsIHgxLCB5MSwgeDIsIHkyLCBy
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJE
OjpBcmM6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAgICAgICAg
ICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAg
ICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJy
b3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCB4ID0g
KGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZs
b2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCByID0gKGZsb2F0
KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBzYSA9IChmbG9hdClh
cmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZWEgPSAoZmxvYXQpYXJn
c1s0XS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGJvb2wgY2xvY2t3aXNlID0gYXJnc1s1
XS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJnc1syXS0+dG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBzYSA9IChmbG9hdClhcmdzWzNdLT50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGVhID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVt
YmVyKGV4ZWMpOworICAgICAgICAgICAgYm9vbCBjbG9ja3dpc2UgPSBhcmdzWzVdLT50b0Jvb2xl
YW4oZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRBcmMgKGRyYXdpbmdDb250ZXh0LCB4
LCB5LCByLCBzYSwgZWEsIGNsb2Nrd2lzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UmVjdDogewogICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0
RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQpYXJnc1syXS50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgIGZsb2F0IGggPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ZmxvYXQgdyA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZs
b2F0IGggPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBDR0Nv
bnRleHRBZGRSZWN0IChkcmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6Q2xpcDog
ewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICBP
YmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAg
ICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAg
ICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KQEAgLTQyMzgsMjggKzQyMDgsMjggQEAgVmFsdWUg
S0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogCiAgICAgICAgIGNhc2UgQ29udGV4
dDJEOjpDbGVhclJlY3Q6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KSB7Ci0g
ICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJv
cik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
bG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB3
ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBoID0g
KGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0gKGZs
b2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9h
dClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQp
YXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBoID0gKGZsb2F0KWFy
Z3NbM10tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0IChk
cmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSk7CiAgICAgICAgICAgICByZW5kZXJl
ci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkZpbGxSZWN0OiB7CiAgICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
OwotICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICBmbG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIGlm
IChpc0ltYWdlUGF0dGVybihjb250ZXh0T2JqZWN0LT5fZmlsbFN0eWxlKSkKICAgICAgICAgICAg
ICAgICBjb250ZXh0T2JqZWN0LT51cGRhdGVGaWxsSW1hZ2VQYXR0ZXJuKCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdCAoZHJhd2luZ0NvbnRleHQsIENHUmVjdE1ha2UoeCx5LHcsaCkp
OwpAQCAtNDI2OSwxOCArNDIzOSwxOSBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpj
YWxsKEV4ZWNTCiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpTdHJva2VSZWN0OiB7CiAgICAgICAg
ICAgICBpbnQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwogICAgICAgICAgICAgaWYgKHNpemUgPCA0KSB7
Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBm
bG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCB3ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBo
ID0gKGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0g
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChm
bG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxv
YXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBoID0gKGZsb2F0
KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
aXNJbWFnZVBhdHRlcm4oY29udGV4dE9iamVjdC0+X3N0cm9rZVN0eWxlKSkKICAgICAgICAgICAg
ICAgICBjb250ZXh0T2JqZWN0LT51cGRhdGVTdHJva2VJbWFnZVBhdHRlcm4oKTsKICAgICAgICAg
ICAgIGlmIChzaXplID4gNCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0
aFdpZHRoIChkcmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSwgKGZsb2F0KWFyZ3Nb
NF0udG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgIENHQ29udGV4dFN0cm9rZVJlY3RX
aXRoV2lkdGggKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKHgseSx3LGgpLCAoZmxvYXQpYXJn
c1s0XS0+dG9OdW1iZXIoZXhlYykpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IENHQ29udGV4dFN0cm9rZVJlY3QgKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKHgseSx3LGgp
KTsKICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CkBAIC00Mjkw
LDE3ICs0MjYxLDE3IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MK
ICAgICAgICAgICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChudW1BcmdzIDwgMykgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQ0dTaXplIG9mZnNldDsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgb2Zmc2V0LndpZHRoID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgICAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBibHVyID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIo
ZXhlYyk7CisgICAgICAgICAgICBvZmZzZXQud2lkdGggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgICAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KWFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgYmx1ciA9IChmbG9hdClhcmdzWzJdLT50
b051bWJlcihleGVjKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUUNvbG9yIGNvbG9yID0g
UUNvbG9yKGFyZ3NbM10udG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAgICAgICBRQ29s
b3IgY29sb3IgPSBRQ29sb3IoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAKICAg
ICAgICAgICAgICBpZiAobnVtQXJncyA9PSAzKSB7CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0
U2V0U2hhZG93IChkcmF3aW5nQ29udGV4dCwgb2Zmc2V0LCBibHVyKTsKQEAgLTQzMTAsOCArNDI4
MSw4IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG51bUFyZ3MgLSAzKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMTogewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Nb
M10udHlwZSgpID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
UmdiIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1szXS50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1szXS0+aXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFSZ2IgY29sb3IgPSBET006
OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdzWzNdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjKGNvbG9yKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzBdID0gcWMucmVkKCkvMjU1LjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gcWMuZ3JlZW4oKS8yNTUuOwpA
QCAtNDMyMCwxNiArNDI5MSwxNiBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxs
KEV4ZWNTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JT
cGFjZUNyZWF0ZURldmljZVJHQigpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50c1swXSA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMF0gPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIo
ZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IDEuMGY7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNy
ZWF0ZURldmljZUdyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gYXJnc1s0XS50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzNdLnR5cGUo
KSA9PSBTdHJpbmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBjb2xv
ciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbM10udG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IGFyZ3NbNF0tPnRvTnVt
YmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbM10tPmlzU3RyaW5n
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQ
YXJzZXI6OnBhcnNlQ29sb3IoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xvciBxYyhjb2xvcik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcG9uZW50c1swXSA9IHFjLnJlZCgpLzI1NS47CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IHFjLmdyZWVuKCkvMjU1LjsKQEAgLTQz
MzgsMzIgKzQzMDksMzIgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVj
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVu
dHNbMF0gPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRzWzBdID0gKGZsb2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gPSBhOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VHcmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1swXSA9IChmbG9hdClhcmdz
WzNdLnRvTnVtYmVyKGV4ZWMpOyAvLyByCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25l
bnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0udG9OdW1iZXIoZXhlYyk7IC8vIGcKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSAoZmxvYXQpYXJnc1s1XS50b051bWJlcihleGVj
KTsgLy8gYgotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1szXSA9IChmbG9hdClh
cmdzWzZdLnRvTnVtYmVyKGV4ZWMpOyAvLyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb21w
b25lbnRzWzBdID0gKGZsb2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOyAvLyByCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVtYmVy
KGV4ZWMpOyAvLyBnCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzJdID0gKGZs
b2F0KWFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpOyAvLyBiCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wb25lbnRzWzNdID0gKGZsb2F0KWFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpOyAvLyBhCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2
aWNlUkdCKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogewotICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcG9uZW50c1swXSA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOyAvLyBjCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0udG9O
dW1iZXIoZXhlYyk7IC8vIG0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0g
PSAoZmxvYXQpYXJnc1s1XS50b051bWJlcihleGVjKTsgLy8geQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcG9uZW50c1szXSA9IChmbG9hdClhcmdzWzZdLnRvTnVtYmVyKGV4ZWMpOyAvLyBr
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzRdID0gKGZsb2F0KWFyZ3NbN10u
dG9OdW1iZXIoZXhlYyk7IC8vIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNb
MF0gPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7IC8vIGMKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBvbmVudHNbMV0gPSAoZmxvYXQpYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyk7
IC8vIG0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSAoZmxvYXQpYXJn
c1s1XS0+dG9OdW1iZXIoZXhlYyk7IC8vIHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBv
bmVudHNbM10gPSAoZmxvYXQpYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyk7IC8vIGsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbNF0gPSAoZmxvYXQpYXJnc1s3XS0+dG9OdW1iZXIo
ZXhlYyk7IC8vIGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZUNNWUsoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAg
ICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzNzgsNyArNDM0OSw3IEBAIFZhbHVlIEtKUzo6
Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENv
bnRleHQyRDo6Q2xlYXJTaGFkb3c6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAw
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC00Mzk0
LDE1ICs0MzY1LDE1IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MK
ICAgICAgICAgLy8gaW1nIHBhcmFtZXRlciBjYW4gYmUgYSBKYXZhU2NyaXB0IEltYWdlLCA8aW1n
Piwgb3IgYSA8Y2FudmFzPgogICAgICAgICBjYXNlIENvbnRleHQyRDo6RHJhd0ltYWdlOiB7CiAg
ICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPCAzKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAg
ICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVy
biBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3QuCi0gICAgICAgICAgICBPYmplY3RJbXAg
Km8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBdLmltcCgpKTsKKyAgICAgICAgICAg
IE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGFyZ3NbMF0pOwogICAgICAg
ICAgICAgaWYgKG8tPnR5cGUoKSAhPSBPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgICAgICAgICAgICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAg
ICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycjsKICAgICAgICAgICAgIH0KQEAgLTQ0MjcsMTQgKzQzOTgsMTQgQEAgVmFsdWUgS0pTOjpD
b250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAgICAgIGggPSBwaXhtYXAu
aGVpZ2h0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChvLT5pbmhlcml0
cygmS0pTOjpIVE1MRWxlbWVudDo6aW1nX2luZm8pKXsKLSAgICAgICAgICAgICAgICBOb2RlSW1w
bCAqbiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KGFyZ3NbMF0uaW1wKCkpLT5pbXBsKCk7
CisgICAgICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAq
PihhcmdzWzBdKS0+aW1wbCgpOwogICAgICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBs
ICplID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihuKTsKICAgICAgICAgICAg
ICAgICBwaXhtYXAgPSBlLT5waXhtYXAoKTsKICAgICAgICAgICAgICAgICB3ID0gcGl4bWFwLndp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgaCA9IHBpeG1hcC5oZWlnaHQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVsc2UgaWYgKG8tPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50Ojpj
YW52YXNfaW5mbykpewotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQgKj4oYXJnc1swXS5pbXAoKSktPmltcGwoKTsKKyAgICAgICAgICAgICAgICBO
b2RlSW1wbCAqbiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KGFyZ3NbMF0pLT5pbXBsKCk7
CiAgICAgICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8
SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4obik7CiAgICAgICAgICAgICAgICAga2h0bWw6OlJlbmRl
ckNhbnZhc0ltYWdlICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXNJ
bWFnZSo+KGUtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpIHsK
QEAgLTQ0NDcsNyArNDQxOCw3IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwo
RXhlY1MKICAgICAgICAgICAgICAgICBoID0gKGZsb2F0KUNHQml0bWFwQ29udGV4dEdldEhlaWdo
dChzb3VyY2VDb250ZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC00NDU2LDI3ICs0NDI3LDI3
IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgICAg
IGZsb2F0IHN4ID0gMC5mLCBzeSA9IDAuZiwgc3cgPSB3LCBzaCA9IGg7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgZHgg
PSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGR5ID0gYXJnc1syXS50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBkeCA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOworICAgICAgICAgICAgICAgIGR5ID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA9PSA1KSB7Ci0gICAg
ICAgICAgICAgICAgZHggPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAg
IGR5ID0gYXJnc1syXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBkdyA9IGFyZ3Nb
M10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZGggPSBhcmdzWzRdLnRvTnVtYmVy
KGV4ZWMpOworICAgICAgICAgICAgICAgIGR4ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgZHkgPSBhcmdzWzJdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
ICAgICBkdyA9IGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGRoID0g
YXJnc1s0XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
IGlmIChhcmdzLnNpemUoKSA9PSA5KSB7Ci0gICAgICAgICAgICAgICAgc3ggPSBhcmdzWzFdLnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIHN5ID0gYXJnc1syXS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgICAgICBzdyA9IGFyZ3NbM10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
ICAgICAgICAgc2ggPSBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGR4
ID0gYXJnc1s1XS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBkeSA9IGFyZ3NbNl0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZHcgPSBhcmdzWzddLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgICAgIGRoID0gYXJnc1s4XS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgICAgICBzeCA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAg
IHN5ID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgc3cgPSBhcmdz
WzNdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBzaCA9IGFyZ3NbNF0tPnRvTnVt
YmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGR4ID0gYXJnc1s1XS0+dG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgICAgICAgZHkgPSBhcmdzWzZdLT50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgICAgICBkdyA9IGFyZ3NbN10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGRo
ID0gYXJnc1s4XS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5
bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KQEAgLTQ0
ODQsNyArNDQ1NSw3IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MK
ICAgICAgICAgICAgIGlmICghc291cmNlQ29udGV4dCkgewogICAgICAgICAgICAgICAgIFFQYWlu
dGVyIHA7CiAgICAgICAgICAgICAgICAgcC5kcmF3RmxvYXRQaXhtYXAgKGR4LCBkeSwgZHcsIGRo
LCBwaXhtYXAsIHN4LCBzeSwgc3csIHNoLCAKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXI6
OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhjb250ZXh0T2JqZWN0LT5fZ2xvYmFsQ29tcG9z
aXRlLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpKSwgZHJhd2luZ0NvbnRleHQpOwor
ICAgICAgICAgICAgICAgICAgICBRUGFpbnRlcjo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5n
KGNvbnRleHRPYmplY3QtPl9nbG9iYWxDb21wb3NpdGUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmco
KS5sb3dlcigpKSwgZHJhd2luZ0NvbnRleHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlYXAsIGJlY2F1c2UgdGhlIGltYWdlIGlzIGJh
Y2tlZCBieSBjb3B5LW9uLXdyaXRlIG1lbW9yeSwgYW5kIHdlJ3JlCkBAIC00NTMwLDI2ICs0NTAx
LDI2IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAg
fQogICAgICAgICBjYXNlIENvbnRleHQyRDo6RHJhd0ltYWdlRnJvbVJlY3Q6IHsKICAgICAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSAhPSAxMCkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wKj4oYXJnc1swXS5pbXAoKSk7CisgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBdKTsKICAgICAgICAgICAgIGlmIChvLT50eXBl
KCkgIT0gT2JqZWN0VHlwZSB8fCAhby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewotICAgICAg
ICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAg
ICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJy
b3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBJbWFnZSAqaSA9
IHN0YXRpY19jYXN0PEltYWdlKj4obyk7Ci0gICAgICAgICAgICBmbG9hdCBzeCA9IGFyZ3NbMV0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBzeSA9IGFyZ3NbMl0udG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBzdyA9IGFyZ3NbM10udG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICBmbG9hdCBzaCA9IGFyZ3NbNF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICBmbG9hdCBkeCA9IGFyZ3NbNV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBk
eSA9IGFyZ3NbNl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBkdyA9IGFyZ3Nb
N10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBkaCA9IGFyZ3NbOF0udG9OdW1i
ZXIoZXhlYyk7Ci0gICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gYXJnc1s5
XS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgIGZsb2F0IHN4
ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBzeSA9IGFyZ3Nb
Ml0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgc3cgPSBhcmdzWzNdLT50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHNoID0gYXJnc1s0XS0+dG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgICAgICBmbG9hdCBkeCA9IGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgZmxvYXQgZHkgPSBhcmdzWzZdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
IGZsb2F0IGR3ID0gYXJnc1s3XS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBk
aCA9IGFyZ3NbOF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgUVN0cmluZyBjb21wb3Np
dGVPcGVyYXRvciA9IGFyZ3NbOV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwog
ICAgICAgICAgICAga2h0bWw6OkNhY2hlZEltYWdlICpjaSA9IGktPmltYWdlKCk7CiAgICAgICAg
ICAgICBpZiAoY2kpIHsKICAgICAgICAgICAgICAgICBRUGl4bWFwIHBpeG1hcCA9IGNpLT5waXht
YXAoKTsKQEAgLTQ1NjYsNzYgKzQ1MzcsNzYgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlv
bjo6Y2FsbChFeGVjUwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRBbHBo
YTogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAg
ICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAg
ICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0IGEgPSAgKGZs
b2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBhID0gIChmbG9h
dClhcmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldEFscGhh
IChkcmF3aW5nQ29udGV4dCwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENvbnRleHQyRDo6U2V0Q29tcG9zaXRlT3BlcmF0aW9uOiB7CiAgICAgICAgICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgUVN0cmluZyBjb21wb3NpdGVPcGVyYXRvciA9IGFy
Z3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBRU3Ry
aW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygp
Lmxvd2VyKCk7CiAgICAgICAgICAgICBRUGFpbnRlcjo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChk
cmF3aW5nQ29udGV4dCxjb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkNyZWF0ZUxpbmVhckdy
YWRpZW50OiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNCkgewotICAgICAgICAg
ICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAg
ICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVy
cm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgeDAg
PSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTAgPSBhcmdzWzFd
LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeDEgPSBhcmdzWzJdLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTEgPSBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwor
ICAgICAgICAgICAgZmxvYXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAgICAg
ICAgIGZsb2F0IHkwID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9h
dCB4MSA9IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeTEgPSBh
cmdzWzNdLT50b051bWJlcihleGVjKTsKIAotICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcg
R3JhZGllbnQoeDAsIHkwLCB4MSwgeTEpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR3JhZGll
bnQoeDAsIHkwLCB4MSwgeTEpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIENv
bnRleHQyRDo6Q3JlYXRlUmFkaWFsR3JhZGllbnQ6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSA2KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmbG9hdCB4MCA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
ICAgICBmbG9hdCB5MCA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCByMCA9IGFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4MSA9IGFy
Z3NbM10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5MSA9IGFyZ3NbNF0udG9O
dW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCByMSA9IGFyZ3NbNV0udG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgICAgICBmbG9hdCB4MCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgZmxvYXQgeTAgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
IGZsb2F0IHIwID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4
MSA9IGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeTEgPSBhcmdz
WzRdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHIxID0gYXJnc1s1XS0+dG9O
dW1iZXIoZXhlYyk7CiAKLSAgICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IEdyYWRpZW50KHgw
LCB5MCwgcjAsIHgxLCB5MSwgcjEpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR3JhZGllbnQo
eDAsIHkwLCByMCwgeDEsIHkxLCByMSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ29udGV4dDJEOjpDcmVhdGVQYXR0ZXJuOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oYXJnc1sw
XS5pbXAoKSk7CisgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJ
bXAqPihhcmdzWzBdKTsKICAgICAgICAgICAgIGlmIChvLT50eXBlKCkgIT0gT2JqZWN0VHlwZSB8
fCAhby0+aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewotICAgICAgICAgICAgICAgIE9iamVjdCBl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgICAgICAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBh
dHRlcm46OlJlcGVhdDsKLSAgICAgICAgICAgIFFTdHJpbmcgcmVwZXRpdGlvblN0cmluZyA9IGFy
Z3NbMV0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBRU3Ry
aW5nIHJlcGV0aXRpb25TdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCku
bG93ZXIoKTsKICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBlYXQteCIp
CiAgICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVhdFg7
CiAgICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBlYXQteSIpCiAg
ICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVhdFk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJuby1yZXBlYXQiKQogICAg
ICAgICAgICAgICAgIHJlcGV0aXRpb25UeXBlID0gSW1hZ2VQYXR0ZXJuOjpOb1JlcGVhdDsKLSAg
ICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IEltYWdlUGF0dGVybihzdGF0aWNfY2FzdDxJbWFn
ZSo+KG8pLCByZXBldGl0aW9uVHlwZSkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZVBh
dHRlcm4oc3RhdGljX2Nhc3Q8SW1hZ2UqPihvKSwgcmVwZXRpdGlvblR5cGUpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC00Njk2LDEzICs0NjY3LDEzIEBAIGNvbnN0IENsYXNzSW5mbyBDb250ZXh0
MkQ6OmluZm8gPSB7ICJDb24KIEBlbmQKICovCiAKLWJvb2wgQ29udGV4dDJEOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgQ29udGV4dDJEOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGZ1bmN0aW9ucyBzaG91bGQgYmUgb24gdGhlIHBy
b3RvdHlwZSwgbm90IGluIHRoZSBvYmplY3QgaXRzZWxmCiAgICAgcmV0dXJuIGxvb2t1cEdldE93
blByb3BlcnR5PENvbnRleHQyREZ1bmN0aW9uLCBDb250ZXh0MkQsIERPTU9iamVjdD4oZXhlYywg
cHJvcGVydHlOYW1lLCAmQ29udGV4dDJEVGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVl
IENvbnRleHQyRDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkNvbnRleHQyRDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAogewogICAgIHN3aXRjaCh0b2tlbikgewogICAgICAgICBjYXNlIFN0cm9r
ZVN0eWxlOiB7CkBAIC00NzYwLDcgKzQ3MzEsNyBAQCBWYWx1ZSBDb250ZXh0MkQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENvbnRl
eHQyRDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQordm9pZCBDb250ZXh0MkQ6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cikKIHsKICAgICBsb29rdXBQdXQ8Q29udGV4dDJELERPTU9iamVjdD4oZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkNvbnRleHQyRFRhYmxlLCB0aGlzICk7CiB9
CkBAIC00Nzc5LDEzICs0NzUwLDEzIEBAIENHQ29udGV4dFJlZiBDb250ZXh0MkQ6OmRyYXdpbmdD
b250ZXh0KCkKIH0KIAogCi1DR0NvbG9yUmVmIGNvbG9yUmVmRnJvbVZhbHVlKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgVmFsdWUgJnZhbHVlKQorQ0dDb2xvclJlZiBjb2xvclJlZkZyb21WYWx1ZShF
eGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSkKIHsKICAgICBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZTsKICAgICBmbG9hdCBjb21wb25lbnRzWzRdOwogICAgIAotICAgIGlmICh2YWx1
ZS50eXBlKCkgPT0gU3RyaW5nVHlwZSkgewotICAgICAgICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQ
YXJzZXI6OnBhcnNlQ29sb3IodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgIGlm
ICh2YWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAgICAg
UUNvbG9yIHFjKGNvbG9yKTsKICAgICAgICAgY29tcG9uZW50c1swXSA9IHFjLnJlZCgpLzI1NS47
CiAgICAgICAgIGNvbXBvbmVudHNbMV0gPSBxYy5ncmVlbigpLzI1NS47CkBAIC00ODAyLDkgKzQ3
NzMsOSBAQCBDR0NvbG9yUmVmIGNvbG9yUmVmRnJvbVZhbHVlKEV4ZWNTdGF0ZSAqCiAgICAgcmV0
dXJuIGNvbG9yUmVmOwogfQogCi1RQ29sb3IgY29sb3JGcm9tVmFsdWUoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBWYWx1ZSAmdmFsdWUpCitRQ29sb3IgY29sb3JGcm9tVmFsdWUoRXhlY1N0YXRlICpl
eGVjLCBWYWx1ZUltcCAqdmFsdWUpCiB7Ci0gICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBRUmdiIGNv
bG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKTsKICAgICByZXR1cm4gUUNvbG9yKGNvbG9yKTsKIH0KIApAQCAtNDgxNSw5ICs0Nzg2
LDkgQEAgdm9pZCBDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUgKmV4ZQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgQ0dTaXplIG9mZnNldDsKLSAgICBvZmZzZXQud2lkdGggPSAoZmxv
YXQpX3NoYWRvd09mZnNldFgudG9OdW1iZXIoZXhlYyk7Ci0gICAgb2Zmc2V0LmhlaWdodCA9IChm
bG9hdClfc2hhZG93T2Zmc2V0WS50b051bWJlcihleGVjKTsKLSAgICBmbG9hdCBibHVyID0gKGZs
b2F0KV9zaGFkb3dCbHVyLnRvTnVtYmVyKGV4ZWMpOworICAgIG9mZnNldC53aWR0aCA9IChmbG9h
dClfc2hhZG93T2Zmc2V0WC0+dG9OdW1iZXIoZXhlYyk7CisgICAgb2Zmc2V0LmhlaWdodCA9IChm
bG9hdClfc2hhZG93T2Zmc2V0WS0+dG9OdW1iZXIoZXhlYyk7CisgICAgZmxvYXQgYmx1ciA9IChm
bG9hdClfc2hhZG93Qmx1ci0+dG9OdW1iZXIoZXhlYyk7CiAgICAgQ0dDb2xvclJlZiBjb2xvclJl
ZiA9IGNvbG9yUmVmRnJvbVZhbHVlKGV4ZWMsIF9zaGFkb3dDb2xvcik7CiAgICAgQ0dDb250ZXh0
U2V0U2hhZG93V2l0aENvbG9yIChjb250ZXh0LCBvZmZzZXQsIGJsdXIsIGNvbG9yUmVmKTsKICAg
ICBDRlJlbGVhc2UgKGNvbG9yUmVmKTsKQEAgLTQ4MjksNyArNDgwMCw3IEBAIHZvaWQgQ29udGV4
dDJEOjp1cGRhdGVGaWxsSW1hZ2VQYXR0ZXJuKCkKICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY29udGV4dCk7CiAgICAgCiAgICAgaWYgKCFfdmFsaWRG
aWxsSW1hZ2VQYXR0ZXJuIHx8ICFDR0FmZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0odHJh
bnNmb3JtLCBfbGFzdEZpbGxJbWFnZVBhdHRlcm5DVE0pKSB7Ci0gICAgICAgIEltYWdlUGF0dGVy
biAqaW1hZ2VQYXR0ZXJuID0gc3RhdGljX2Nhc3Q8SW1hZ2VQYXR0ZXJuICo+KF9maWxsU3R5bGUu
aW1wKCkpOworICAgICAgICBJbWFnZVBhdHRlcm4gKmltYWdlUGF0dGVybiA9IHN0YXRpY19jYXN0
PEltYWdlUGF0dGVybiAqPihfZmlsbFN0eWxlKTsKICAgICAgICAgQ0dQYXR0ZXJuUmVmIHBhdHRl
cm4gPSBpbWFnZVBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4oQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQp
KTsKICAgICAgICAgZmxvYXQgcGF0dGVybkFscGhhID0gMTsKICAgICAgICAgQ0dDb2xvclNwYWNl
UmVmIHBhdHRlcm5TcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZVBhdHRlcm4oMCk7CkBAIC00ODQ4
LDcgKzQ4MTksNyBAQCB2b2lkIENvbnRleHQyRDo6dXBkYXRlU3Ryb2tlSW1hZ2VQYXR0ZXJuCiAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQp
OwogICAgIAogICAgIGlmICghX3ZhbGlkU3Ryb2tlSW1hZ2VQYXR0ZXJuIHx8ICFDR0FmZmluZVRy
YW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0odHJhbnNmb3JtLCBfbGFzdFN0cm9rZUltYWdlUGF0dGVy
bkNUTSkpIHsKLSAgICAgICAgSW1hZ2VQYXR0ZXJuICppbWFnZVBhdHRlcm4gPSBzdGF0aWNfY2Fz
dDxJbWFnZVBhdHRlcm4gKj4oX2ZpbGxTdHlsZS5pbXAoKSk7CisgICAgICAgIEltYWdlUGF0dGVy
biAqaW1hZ2VQYXR0ZXJuID0gc3RhdGljX2Nhc3Q8SW1hZ2VQYXR0ZXJuICo+KF9maWxsU3R5bGUp
OwogICAgICAgICBDR1BhdHRlcm5SZWYgcGF0dGVybiA9IGltYWdlUGF0dGVybi0+Y3JlYXRlUGF0
dGVybihDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpOwogICAgICAgICBmbG9hdCBwYXR0ZXJuQWxw
aGEgPSAxOwogICAgICAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlUGF0dGVybigwKTsKQEAgLTQ4NjEsNyArNDgzMiw3IEBAIHZvaWQgQ29udGV4dDJE
Ojp1cGRhdGVTdHJva2VJbWFnZVBhdHRlcm4KICAgICB9CiB9CiAKLXZvaWQgQ29udGV4dDJEOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLykK
IHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYg
KCFjb250ZXh0KQpAQCAtNDg3MCwxOCArNDg0MSwxOCBAQCB2b2lkIENvbnRleHQyRDo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgc3dpdGNoKHRva2VuKSB7CiAgICAgICAgIGNhc2UgU3Ry
b2tlU3R5bGU6IHsKICAgICAgICAgICAgIF9zdHJva2VTdHlsZSA9IHZhbHVlOwotICAgICAgICAg
ICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBTdHJpbmdUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgICAgICBRQ29sb3IgcWMgPSBjb2xvckZyb21W
YWx1ZShleGVjLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tl
Q29sb3IoY29udGV4dCwgcWMucmVkKCkvMjU1LiwgcWMuZ3JlZW4oKS8yNTUuLCBxYy5ibHVlKCkv
MjU1LiwgcWMuYWxwaGEoKS8yNTUuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIF9zdHJva2VTdHlsZSBpcyB1c2VkIHdoZW4gc3Ryb2tlKCkg
aXMgY2FsbGVkIG9uIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgICAgIC8vIENHIGRvZXNuJ3Qg
aGF2ZSB0aGUgbm90aW9uIG9mIGEgc2V0dGluZyBhIHN0cm9rZSBncmFkaWVudC4KLSAgICAgICAg
ICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZS5pbXAo
KSk7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
Kj4odmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChvLT50eXBl
KCkgIT0gT2JqZWN0VHlwZSB8fCAKICAgICAgICAgICAgICAgICAgICAgKCEoby0+aW5oZXJpdHMo
JkdyYWRpZW50OjppbmZvKSB8fCBvLT5pbmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZvKSkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CkBAIC00ODkxLDE4ICs0ODYyLDE4IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKICAgICAgICAgCiAgICAgICAgIGNhc2UgRmlsbFN0eWxlOiB7CiAgICAgICAgICAg
ICBfZmlsbFN0eWxlID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUudHlwZSgpID09IFN0
cmluZ1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkgewogICAgICAg
ICAgICAgICAgIFFDb2xvciBxYyA9IGNvbG9yRnJvbVZhbHVlKGV4ZWMsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcWMucmVkKCkvMjU1
LiwgcWMuZ3JlZW4oKS8yNTUuLCBxYy5ibHVlKCkvMjU1LiwgcWMuYWxwaGEoKS8yNTUuKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIF9maWxs
U3R5bGUgaXMgY2hlY2tlZCB3aGVuIGZpbGwoKSBpcyBjYWxsZWQgb24gdGhlIGNvbnRleHQuCiAg
ICAgICAgICAgICAgICAgLy8gQ0cgZG9lc24ndCBoYXZlIHRoZSBub3Rpb24gb2Ygc2V0dGluZyBh
IGZpbGwgZ3JhZGllbnQuCi0gICAgICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wKj4odmFsdWUuaW1wKCkpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAq
byA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoby0+dHlwZSgpICE9IE9iamVjdFR5cGUgfHwgCiAgICAgICAgICAg
ICAgICAgICAgICghKG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5oZXJpdHMo
JkltYWdlUGF0dGVybjo6aW5mbykpKSkgewotICAgICAgICAgICAgICAgICAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAgICAg
ICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtNDkxNCw3ICs0ODg1LDcgQEAgdm9pZCBDb250
ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogICAgICAgICAKICAgICAgICAgY2FzZSBM
aW5lV2lkdGg6IHsKICAgICAgICAgICAgIF9saW5lV2lkdGggPSB2YWx1ZTsKLSAgICAgICAgICAg
IGZsb2F0IHcgPSAoZmxvYXQpdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9h
dCB3ID0gKGZsb2F0KXZhbHVlLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4
dFNldExpbmVXaWR0aCAoY29udGV4dCwgdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNDkyMyw3ICs0ODk0LDcgQEAgdm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YQogICAgICAgICAgICAgX2xpbmVDYXAgPSB2YWx1ZTsKICAgICAgICAgCiAgICAgICAg
ICAgICBDR0xpbmVDYXAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7Ci0gICAgICAgICAgICBRU3RyaW5n
IGNhcFN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOworICAg
ICAgICAgICAgUVN0cmluZyBjYXBTdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIpCiAgICAg
ICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcFJvdW5kOwogICAgICAgICAgICAgZWxzZSBpZiAo
Y2FwU3RyaW5nID09ICJzcXVhcmUiKQpAQCAtNDkzNiw3ICs0OTA3LDcgQEAgdm9pZCBDb250ZXh0
MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogICAgICAgICAgICAgX2xpbmVKb2luID0gdmFs
dWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENHTGluZUpvaW4gam9pbiA9IGtDR0xpbmVK
b2luTWl0ZXI7Ci0gICAgICAgICAgICBRU3RyaW5nIGpvaW5TdHJpbmcgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgIFFTdHJpbmcgam9pblN0cmlu
ZyA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAg
IGlmIChqb2luU3RyaW5nID09ICJyb3VuZCIpCiAgICAgICAgICAgICAgICAgam9pbiA9IGtDR0xp
bmVKb2luUm91bmQ7CiAgICAgICAgICAgICBlbHNlIGlmIChqb2luU3RyaW5nID09ICJiZXZlbCIp
CkBAIC00OTQ4LDcgKzQ5MTksNyBAQCB2b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhCiAgICAgICAgIGNhc2UgTWl0ZXJMaW1pdDogewogICAgICAgICAgICAgX21pdGVyTGlt
aXQgPSB2YWx1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZmxvYXQgbCA9IChmbG9hdCl2
YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGwgPSAoZmxvYXQpdmFsdWUt
PnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAoY29u
dGV4dCwgbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDk3OSwxNCArNDk1
MCwxNCBAQCB2b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgICAg
IAogICAgICAgICBjYXNlIEdsb2JhbEFscGhhOiB7CiAgICAgICAgICAgICBfZ2xvYmFsQWxwaGEg
PSB2YWx1ZTsKLSAgICAgICAgICAgIGZsb2F0IGEgPSAgKGZsb2F0KXZhbHVlLnRvTnVtYmVyKGV4
ZWMpOworICAgICAgICAgICAgZmxvYXQgYSA9ICAoZmxvYXQpdmFsdWUtPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0QWxwaGEgKGNvbnRleHQsIGEpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgR2xvYmFsQ29tcG9z
aXRlT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBfZ2xvYmFsQ29tcG9zaXRlID0gdmFsdWU7Ci0g
ICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gdmFsdWUudG9TdHJpbmcoZXhl
YykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJh
dG9yID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAg
ICAgUVBhaW50ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiAoY29udGV4dCwgY29tcG9zaXRlT3Bl
cmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUxNDEsMjYgKzUxMTIs
MjYgQEAgY29uc3QgQ2xhc3NJbmZvIEtKUzo6R3JhZGllbnQ6OmluZm8gPSB7IAogCiBJTVBMRU1F
TlRfUFJPVE9GVU5DKEdyYWRpZW50RnVuY3Rpb24pCiAKLVZhbHVlIEdyYWRpZW50RnVuY3Rpb246
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqR3JhZGllbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0
aGlzT2JqLmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykpIHsKLSAgICAgICAgT2JqZWN0IGVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJkdyYWRpZW50OjppbmZvKSkgeworICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKLSAgICBHcmFkaWVudCAqZ3JhZGllbnQgPSBz
dGF0aWNfY2FzdDxLSlM6OkdyYWRpZW50ICo+KHRoaXNPYmouaW1wKCkpOworICAgIEdyYWRpZW50
ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEtKUzo6R3JhZGllbnQgKj4odGhpc09iaik7CiAKICAg
ICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgIGNhc2UgR3JhZGllbnQ6OkFkZENvbG9yU3RvcDogewog
ICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgICAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAg
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUUNvbG9yIGNvbG9yID0gY29s
b3JGcm9tVmFsdWUoZXhlYywgYXJnc1sxXSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+YWRkQ29s
b3JTdG9wICgoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKSwgY29sb3IucmVkKCkvMjU1LmYs
IGNvbG9yLmdyZWVuKCkvMjU1LmYsIGNvbG9yLmJsdWUoKS8yNTUuZiwgY29sb3IuYWxwaGEoKS8y
NTUuZik7CisgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wICgoZmxvYXQpYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyksIGNvbG9yLnJlZCgpLzI1NS5mLCBjb2xvci5ncmVlbigpLzI1NS5m
LCBjb2xvci5ibHVlKCkvMjU1LmYsIGNvbG9yLmFscGhhKCkvMjU1LmYpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC01MjU4LDIyICs1MjI5LDIyIEBAIEdyYWRpZW50OjpHcmFkaWVudChmbG9hdCB4
MCwgZmxvYXQgeTAsIGYKICAgICBjb21tb25Jbml0KCk7CiB9CiAKLWJvb2wgR3JhZGllbnQ6Omdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBHcmFkaWVudDo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
IComcmVzdWx0KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRPd25Qcm9wZXJ0eTxHcmFk
aWVudEZ1bmN0aW9uLCBHcmFkaWVudCwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZH
cmFkaWVudFRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBHcmFkaWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkdyYWRp
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIEdyYWRpZW50OjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIEdyYWRpZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAg
ICAgbG9va3VwUHV0PEdyYWRpZW50LERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0ciwgJkdyYWRpZW50VGFibGUsIHRoaXMgKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIEdyYWRpZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLykKIHsK
IH0KIApAQCAtNTQ1NCwyMiArNTQyNSwyMiBAQCBDR1BhdHRlcm5SZWYgSW1hZ2VQYXR0ZXJuOjpj
cmVhdGVQYXR0ZXJuCiAgICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZSh0aGlzLCBfYm91bmRzLCBw
YXR0ZXJuVHJhbnNmb3JtLCBfcncsIF9yaCwga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2lu
ZywgdHJ1ZSwgJnBhdHRlcm5DYWxsYmFja3MpOwogfQogCi1ib29sIEltYWdlUGF0dGVybjo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIEltYWdlUGF0dGVybjo6Z2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxJbWFn
ZVBhdHRlcm4sIERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSW1hZ2VQYXR0ZXJuVGFi
bGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKLVZhbHVlIEltYWdlUGF0dGVybjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkltYWdlUGF0dGVy
bjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBJbWFnZVBhdHRlcm46OnB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQgYXR0cikKK3ZvaWQgSW1hZ2VQYXR0ZXJuOjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
CiB7CiAgICAgbG9va3VwUHV0PEltYWdlUGF0dGVybixET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIGF0dHIsICZJbWFnZVBhdHRlcm5UYWJsZSwgdGhpcyApOwogfQogCi12b2lk
IEltYWdlUGF0dGVybjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIEltYWdlUGF0dGVybjo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgLyphdHRyKi8pCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
aHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MwpkaWZmIC1wIC11IC11IC1wIC1y
MS41MyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc19odG1sLmgJMjUgSnVsIDIwMDUgMjI6MTc6MTkgLTAwMDAJMS41MworKysgV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19odG1sLmgJNyBBdWcgMjAwNSAwNDo0NDoxNSAtMDAwMApAQCAtNDcsOSAr
NDcsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgSFRNTERvY3VtZW50IDogcHVibGljIERP
TURvY3VtZW50IHsKICAgcHVibGljOgogICAgIEhUTUxEb2N1bWVudChFeGVjU3RhdGUgKmV4ZWMs
IERPTTo6SFRNTERvY3VtZW50SW1wbCAqZCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLyk7CisgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRy
Ki8pOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNjIsMTQgKzYyLDE0IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBjbGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBET01FbGVtZW50IHsKICAgcHVibGljOgog
ICAgIEhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MRWxlbWVudEltcGwgKmUp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBpbnQpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCk7CiAgICAgdmlydHVhbCBib29sIGhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSAq
ZXhlYywgU2NvcGVDaGFpbiAmc2NvcGUpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKKyAgICB2
aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NhbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3Q7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtODYsOCArODYsOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZvLCBm
cmFtZV9pbmZvLCBpRnJhbWVfaW5mbywgbWFycXVlZV9pbmZvOwogCiAgICAgLy8gRklYTUU6IE1p
Z2h0IG1ha2Ugc2Vuc2UgdG8gY29tYmluZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5Lgot
ICAgIHR5cGVkZWYgVmFsdWUgKEhUTUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVtZW50
OjoqU2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIHR5cGVkZWYgVmFsdWVJ
bXAgKihIVE1MRWxlbWVudDo6KkdldHRlckZ1bmN0aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChIVE1MRWxlbWVudDo6KlNldHRlckZ1bmN0
aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKICAgICBzdHJ1Y3QgQWNjZXNzb3JzIHsgR2V0dGVyRnVuY3Rp
b24gbV9nZXR0ZXI7IFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOyB9OwogICAgIGNvbnN0IEFjY2Vz
c29ycyogZ2V0U2V0SW5mbygpIGNvbnN0OwogICAgIHN0YXRpYyBjb25zdCBBY2Nlc3NvcnMgaHRt
bF9hY2Nlc3NvcnMsIGhlYWRfYWNjZXNzb3JzLCBsaW5rX2FjY2Vzc29ycywgdGl0bGVfYWNjZXNz
b3JzLApAQCAtMTAxLDExNCArMTAxLDExNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRp
b25fYWNjZXNzb3JzLCBjb2xfYWNjZXNzb3JzLCB0YWJsZXNlY3Rpb25fYWNjZXNzb3JzLCB0cl9h
Y2Nlc3NvcnMsCiAgICAgICB0YWJsZWNlbGxfYWNjZXNzb3JzLCBmcmFtZVNldF9hY2Nlc3NvcnMs
IGZyYW1lX2FjY2Vzc29ycywgaUZyYW1lX2FjY2Vzc29ycywgbWFycXVlZV9hY2Nlc3NvcnM7CiAK
LSAgICBWYWx1ZSBodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LSAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGhlYWRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGhlYWRT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgbGlua0dldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgbGlua1NldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKLSAgICBWYWx1ZSB0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0gICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAg
VmFsdWUgbWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAg
dm9pZCAgbWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBiYXNlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBiYXNlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7Ci0gICAgVmFsdWUgc3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwotICAgIHZvaWQgIHN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAg
IFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAg
IHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgZm9ybUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgZm9ybVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHNlbGVjdFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKLSAgICBWYWx1ZSBvcHRHcm91cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgb3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
Ci0gICAgVmFsdWUgb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUg
aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQg
IGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHRleHRBcmVhR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICB0ZXh0QXJlYVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBidXR0b25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGJ1dHRvblNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgbGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0g
ICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwotICAgIHZvaWQgIGZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVl
IGxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9p
ZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHVMaXN0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICB1TGlzdFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBvTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgb0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7Ci0gICAgVmFsdWUgZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwotICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZh
bHVlIGRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9p
ZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIG1lbnVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIG1lbnVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgbGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAg
IFZhbHVlIGRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAg
dm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHBhcmFncmFwaEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgcGFyYWdy
YXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGhlYWRpbmdHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgYmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgYmxvY2tRdW90ZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgcXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
Ci0gICAgVmFsdWUgcHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LSAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgYnJHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGJyU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGJhc2VGb250R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBiYXNlRm9udFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLSAgICB2b2lkICBmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAg
IFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2
b2lkICBoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBtb2RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIG1vZFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBhbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKLSAgICBWYWx1ZSBpbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0gICAgdm9pZCAgaW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUg
b2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lk
ICBvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgcGFyYW1HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHBhcmFtU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgYXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOwotICAgIFZhbHVlIG1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0gICAgdm9pZCAgbWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVl
IGFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQg
IGFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgc2NyaXB0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBzY3JpcHRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgdGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOwotICAgIFZhbHVlIHRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOwotICAgIFZhbHVlIHRhYmxlQ29sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKLSAgICB2b2lkICB0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAg
ICBWYWx1ZSB0YWJsZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotICAgIHZvaWQgIHRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAg
ICBWYWx1ZSB0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0gICAgdm9pZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUg
dGFibGVDZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2
b2lkICB0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgZnJhbWVT
ZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGZy
YW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGZyYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBmcmFtZVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBpRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKLSAgICBWYWx1ZSBtYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKLSAgICB2b2lkICBtYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlSW1wICpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpoZWFk
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBoZWFk
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpsaW5rR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlSW1wICp0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWVJbXAgKm1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIG1ldGFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmJhc2VH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmlzSW5kZXhHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzdHlsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZUltcCAqYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAq
Zm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqc2VsZWN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzZWxlY3RTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKm9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWVJbXAgKmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBpbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAq
dGV4dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpidXR0b25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJ1dHRv
blNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqbGFiZWxHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxhYmVsU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWVJbXAgKmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlSW1wICp1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgdUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKm9MaXN0
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlz
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqZExpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZUltcCAqbWVudUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgbWVudVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAg
KnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqbGlHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxpU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZUltcCAqcGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWVJbXAgKmhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAg
KmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnF1
b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBx
dW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqcHJlR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZUltcCAqYmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpm
b250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBm
b250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpockdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHJTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWVJbXAgKm1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgbW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
SW1wICphbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAg
KnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqaW1hZ2VH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGltYWdl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpvYmplY3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlSW1wICphcHBsZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUlt
cCAqbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmFyZWFHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
OworICAgIFZhbHVlSW1wICp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJ
bXAgKnRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
SW1wICp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgdGFibGVDb2xTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnRh
YmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICp0
YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnRhYmxlQ2Vs
bEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFi
bGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpmcmFtZVNldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZnJhbWVTZXRT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmZyYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqaUZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpRnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWVJbXAgKm1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CiAKICAgICBlbnVt
IHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwgTGlua1JlbCwgTGlua01lZGlh
LAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVkLCBMaW5rSHJlZkxhbmcsIExp
bmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLApAQCAtMjk1LDEzICsyOTUsMTMgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBIVE1MQ29sbGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IERPTTo6SFRNTENvbGxlY3Rpb25JbXBsICpjKTsKICAgICB+SFRNTENvbGxlY3Rpb24oKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwg
VmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZh
cmdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1w
bGVtZW50c0NhbGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHRv
Qm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAp
IGNvbnN0OwogICAgIGVudW0geyBJdGVtLCBOYW1lZEl0ZW0sIFRhZ3MgfTsKLSAgICBWYWx1ZSBn
ZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsICpp
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CkBAIC0zMTIsOCArMzEyLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEhUTUxTZWxlY3RDb2xsZWN0aW9uIDogcHVibGljIEhU
TUxDb2xsZWN0aW9uIHsKICAgcHVibGljOgogICAgIEhUTUxTZWxlY3RDb2xsZWN0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGwgKmMsIERPTTo6SFRNTFNlbGVjdEVs
ZW1lbnRJbXBsICplKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgIHByaXZhdGU6CiAg
ICAga2h0bWw6OlNoYXJlZFB0cjxET006OkhUTUxTZWxlY3RFbGVtZW50SW1wbD4gbV9lbGVtZW50
OwogICB9OwpAQCAtMzI0LDcgKzMyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAg
ICAgT3B0aW9uQ29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1w
bCAqZCk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncyk7CiAgIHByaXZhdGU6CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006
OkRvY3VtZW50SW1wbD4gbV9kb2M7CiAgIH07CkBAIC0zMzUsNyArMzM1LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIHB1YmxpYzoKICAgICBJbWFnZUNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhl
YywgRE9NOjpEb2N1bWVudEltcGwgKmQpOwogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29u
c3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmNvbnN0cnVj
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2YXRlOgogICAgIGto
dG1sOjpTaGFyZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IG1fZG9jOwogICB9OwpAQCAtMzQ0LDEw
ICszNDQsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBJbWFnZShET006OkRv
Y3VtZW50SW1wbCAqZCwgYm9vbCB3cywgaW50IHcsIGJvb2wgaHMsIGludCBoKTsKICAgICB+SW1h
Z2UoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAg
IFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAg
ICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAg
KnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwog
ICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9iamVjdCAqKTsKICAgICB2aXJ0
dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CkBAIC0zNzQsMTAgKzM3NCwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIENvbnRleHQyRChET006OkhUTUxFbGVtZW50SW1wbCAqZSk7CiAgICAgfkNvbnRleHQyRCgp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLyk7CiAgICAg
dmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC00MzEsMTggKzQzMSwxOCBA
QCBwcml2YXRlOgogICAgIAogICAgIFFQdHJMaXN0PExpc3Q+IHN0YXRlU3RhY2s7CiAgICAgCi0g
ICAgVmFsdWUgX3N0cm9rZVN0eWxlOwotICAgIFZhbHVlIF9maWxsU3R5bGU7Ci0gICAgVmFsdWUg
X2xpbmVXaWR0aDsKLSAgICBWYWx1ZSBfbGluZUNhcDsKLSAgICBWYWx1ZSBfbGluZUpvaW47Ci0g
ICAgVmFsdWUgX21pdGVyTGltaXQ7Ci0gICAgVmFsdWUgX3NoYWRvd09mZnNldFg7Ci0gICAgVmFs
dWUgX3NoYWRvd09mZnNldFk7Ci0gICAgVmFsdWUgX3NoYWRvd0JsdXI7Ci0gICAgVmFsdWUgX3No
YWRvd0NvbG9yOwotICAgIFZhbHVlIF9nbG9iYWxBbHBoYTsKLSAgICBWYWx1ZSBfZ2xvYmFsQ29t
cG9zaXRlOworICAgIFZhbHVlSW1wICpfc3Ryb2tlU3R5bGU7CisgICAgVmFsdWVJbXAgKl9maWxs
U3R5bGU7CisgICAgVmFsdWVJbXAgKl9saW5lV2lkdGg7CisgICAgVmFsdWVJbXAgKl9saW5lQ2Fw
OworICAgIFZhbHVlSW1wICpfbGluZUpvaW47CisgICAgVmFsdWVJbXAgKl9taXRlckxpbWl0Owor
ICAgIFZhbHVlSW1wICpfc2hhZG93T2Zmc2V0WDsKKyAgICBWYWx1ZUltcCAqX3NoYWRvd09mZnNl
dFk7CisgICAgVmFsdWVJbXAgKl9zaGFkb3dCbHVyOworICAgIFZhbHVlSW1wICpfc2hhZG93Q29s
b3I7CisgICAgVmFsdWVJbXAgKl9nbG9iYWxBbHBoYTsKKyAgICBWYWx1ZUltcCAqX2dsb2JhbENv
bXBvc2l0ZTsKICAgfTsKIAogICAgIC8vIEZJWE1FOiBNYWNpbnRvc2ggc3BlY2lmaWMsIGFuZCBz
aG91bGQgYmUgYWJzdHJhY3RlZCBieSBLV1EgaW4gUVBhaW50ZXIuCkBAIC00NjYsMTAgKzQ2Niwx
MCBAQCBwcml2YXRlOgogICAgIEdyYWRpZW50KGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEs
IGZsb2F0IHkxKTsKICAgICBHcmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHIwLCBm
bG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHIxKTsKICAgICB+R3JhZGllbnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
aW50IC8qYXR0ciovKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0
KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC01MTIsMTAgKzUxMiwxMCBAQCBw
cml2YXRlOiAgICAKICAgY2xhc3MgSW1hZ2VQYXR0ZXJuIDogcHVibGljIERPTU9iamVjdCB7CiAg
IHB1YmxpYzoKICAgICBJbWFnZVBhdHRlcm4oSW1hZ2UgKmksIGludCB0eXBlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
aW50IC8qYXR0ciovKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0
KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX25hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
MApkaWZmIC1wIC11IC11IC1wIC1yMS4zMCBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRv
ci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAkyNSBKdWwgMjAw
NSAyMjoxNzoxOSAtMDAwMAkxLjMwCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRv
ci5jcHAJNyBBdWcgMjAwNSAwNDo0NDoxNSAtMDAwMApAQCAtNzUsMTAgKzc1LDkgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgY2xhc3MgUGx1Z2lucyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFBsdWdpbnMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdpbkJhc2UoZXhl
Yykge307Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIHBy
aXZhdGU6CiAgICAgfTsKICAgICBjb25zdCBDbGFzc0luZm8gUGx1Z2luczo6aW5mbyA9IHsgIlBs
dWdpbkFycmF5IiwgMCwgMCwgMCB9OwogCkBAIC04NiwxMCArODUsOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBjbGFzcyBNaW1lVHlwZXMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBNaW1lVHlwZXMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykg
eyB9OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBwcml2
YXRlOgogICAgIH07CiAgICAgY29uc3QgQ2xhc3NJbmZvIE1pbWVUeXBlczo6aW5mbyA9IHsgIk1p
bWVUeXBlQXJyYXkiLCAwLCAwLCAwIH07CiAKQEAgLTk3LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2UgewogICAgIHB1YmxpYzoK
ICAgICAgICAgUGx1Z2luKEV4ZWNTdGF0ZSAqZXhlYywgUGx1Z2luSW5mbyAqaW5mbykgOiBQbHVn
aW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiZyZXN1bHQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogICAgIHByaXZhdGU6CkBAIC0xMDksNyArMTA3LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgY2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAg
cHVibGljOgogICAgICAgICBNaW1lVHlwZSggRXhlY1N0YXRlICpleGVjLCBNaW1lQ2xhc3NJbmZv
ICppbmZvICkgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIHByaXZhdGU6CkBAIC0xNDQsMTIg
KzE0MiwxMiBAQCBJTVBMRU1FTlRfUFJPVE9GVU5DKE5hdmlnYXRvckZ1bmMpCiBOYXZpZ2F0b3I6
Ok5hdmlnYXRvcihFeGVjU3RhdGUgKmV4ZWMsIEtIVE1MUGFydCAqcCkKICAgOiBPYmplY3RJbXAo
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSksIG1f
cGFydChwKSB7IH0KIAotYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dAorYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAg
cmV0dXJuIGxvb2t1cEdldE93blByb3BlcnR5PE5hdmlnYXRvckZ1bmMsIE5hdmlnYXRvciwgT2Jq
ZWN0SW1wPihleGVjLCBwcm9wZXJ0eU5hbWUsICZOYXZpZ2F0b3JUYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAotVmFsdWUgTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICNpZiBBUFBMRV9DSEFOR0VT
CiAgIFFTdHJpbmcgdXNlckFnZW50ID0gS1dRKG1fcGFydCktPnVzZXJBZ2VudCgpOwpAQCAtMjI0
LDkgKzIyMiw5IEBAIFZhbHVlIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QKICAg
ICBlbHNlCiAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6OmZyb21MYXRpbjEoIlgxMSIpKTsK
ICAgY2FzZSBfUGx1Z2luczoKLSAgICByZXR1cm4gVmFsdWUobmV3IFBsdWdpbnMoZXhlYykpOwor
ICAgIHJldHVybiBuZXcgUGx1Z2lucyhleGVjKTsKICAgY2FzZSBfTWltZVR5cGVzOgotICAgIHJl
dHVybiBWYWx1ZShuZXcgTWltZVR5cGVzKGV4ZWMpKTsKKyAgICByZXR1cm4gbmV3IE1pbWVUeXBl
cyhleGVjKTsKICAgY2FzZSBDb29raWVFbmFibGVkOgogI2lmIEFQUExFX0NIQU5HRVMKICAgICBy
ZXR1cm4gQm9vbGVhbihLV1FLQ29va2llSmFyOjpjb29raWVFbmFibGVkKCkpOwpAQCAtMjM1LDcg
KzIzMyw3IEBAIFZhbHVlIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QKICNlbmRp
ZgogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9N
RXZlbnQ6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJu
IFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIApAQCAtMzM2LDcgKzMzNCw3IEBA
IHZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKIC8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSU1Q
TEVNRU5UX1BST1RPRlVOQyhQbHVnaW5zRnVuYykKIAotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0
KSBjb25zdAogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gInJlZnJlc2giKSB7CiAgICAgICAg
IHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248UGx1Z2luc0Z1bmM+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpcywgMCwgMCwgRG9udERlbGV0ZXxGdW5jdGlvbik7CkBAIC0zNDksMTQgKzM0
NywxNCBAQCBib29sIFBsdWdpbnM6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgICAg
IGJvb2wgb2s7CiAgICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUxvbmco
Jm9rKTsKICAgICAgICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5jb3VudCgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBWYWx1ZShuZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KGkpKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBuZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KGkpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gcGx1Z2luW25h
bWVdCiAgICAgICAgIGZvciAoUGx1Z2luSW5mbyAqcGwgPSBwbHVnaW5zLT5maXJzdCgpOyBwbDsg
cGwgPSBwbHVnaW5zLT5uZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChwbC0+bmFtZT09cHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZhbHVlKG5ldyBQ
bHVnaW4oZXhlYywgcGwpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgUGx1Z2luKGV4
ZWMsIHBsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMzY3LDcgKzM2NSw3IEBAIGJvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICoKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1
bHQpIGNvbnN0CiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUp
IHsKICAgICAgICAgcmVzdWx0ID0gTnVtYmVyKG1pbWVzLT5jb3VudCgpKTsKQEAgLTM3NywxNCAr
Mzc1LDE0IEBAIGJvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUKICAgICAg
ICAgYm9vbCBvazsKICAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VTG9u
Zygmb2spOwogICAgICAgICBpZiAob2sgJiYgaSA8IG1pbWVzLT5jb3VudCgpKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBWYWx1ZShuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KGkpKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KGkpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gbWltZVR5cGVz
W25hbWVdCiAgICAgICAgIGZvciAoTWltZUNsYXNzSW5mbyAqbSA9IG1pbWVzLT5maXJzdCgpOyBt
OyBtID0gbWltZXMtPm5leHQoKSkgewogICAgICAgICAgICAgaWYgKG0tPnR5cGUgPT0gcHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZhbHVlKG5ldyBN
aW1lVHlwZShleGVjLCBtKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IE1pbWVUeXBl
KGV4ZWMsIG0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0zOTYsNyArMzk0LDcgQEAgYm9vbCBNaW1lVHlwZXM6OmdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIFBsdWdpbjo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVz
dWx0KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBoYXNodGFibGUgbWVj
aGFuaXNtIGZvciBwcm9wZXJ0aWVzCiAKQEAgLTQxNywxNCArNDE1LDE0IEBAIGJvb2wgUGx1Z2lu
OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmUKICAgICAgICAgYm9vbCBvazsKICAgICAgICAg
dW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwogICAgICAgICBpZiAo
b2sgJiYgaSA8IG1faW5mby0+bWltZXMuY291bnQoKSkgewotICAgICAgICAgICAgcmVzdWx0ID0g
VmFsdWUobmV3IE1pbWVUeXBlKGV4ZWMsIG1faW5mby0+bWltZXMuYXQoaSkpKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG5ldyBNaW1lVHlwZShleGVjLCBtX2luZm8tPm1pbWVzLmF0KGkpKTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBwbHVnaW5b
Im5hbWUiXQogICAgICAgICBmb3IgKE1pbWVDbGFzc0luZm8gKm09bV9pbmZvLT5taW1lcy5maXJz
dCgpOyBtOyBtID0gbV9pbmZvLT5taW1lcy5uZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChtLT50
eXBlPT1wcm9wZXJ0eU5hbWUucXN0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
VmFsdWUobmV3IE1pbWVUeXBlKGV4ZWMsIG0pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBu
ZXcgTWltZVR5cGUoZXhlYywgbSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDM3LDcgKzQzNSw3IEBAIGJvb2wgUGx1Z2luOjpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmUKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1i
b29sIE1pbWVUeXBlOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgTWltZVR5cGU6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogc2hvdWxk
IHVzZSBoYXNodGFibGUgbWVjaGFuaXNtCiAKQEAgLTQ1MSw3ICs0NDksNyBAQCBib29sIE1pbWVU
eXBlOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgCiAgICAgICAgIHJlc3VsdCA9IFN0cmluZyht
X2luZm8tPmRlc2MpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHByb3Bl
cnR5TmFtZSA9PSAiZW5hYmxlZFBsdWdpbiIpIHsKLSAgICAgICAgcmVzdWx0ID0gVmFsdWUobmV3
IFBsdWdpbihleGVjLCBtX2luZm8tPnBsdWdpbikpOworICAgICAgICByZXN1bHQgPSBuZXcgUGx1
Z2luKGV4ZWMsIG1faW5mby0+cGx1Z2luKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC00NTksMjEgKzQ1NywyMSBAQCBib29sIE1pbWVUeXBlOjpnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgCiB9CiAKIAotVmFsdWUgUGx1Z2luc0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpQbHVnaW5zRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKiwgY29uc3QgTGlzdCAmYXJncykK
IHsKLSAgICBQbHVnaW5CYXNlKGV4ZWMpLnJlZnJlc2goYXJnc1swXS50b0Jvb2xlYW4oZXhlYykp
OworICAgIFBsdWdpbkJhc2UoZXhlYykucmVmcmVzaChhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogCi1WYWx1ZSBOYXZpZ2F0b3JGdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1
ZUltcCAqTmF2aWdhdG9yRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRz
KCZLSlM6Ok5hdmlnYXRvcjo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6TmF2aWdh
dG9yOjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsK
ICAgfQotICBOYXZpZ2F0b3IgKm5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvciAqPih0aGlzT2Jq
LmltcCgpKTsKKyAgTmF2aWdhdG9yICpuYXYgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3IgKj4odGhp
c09iaik7CiAgIC8vIGphdmFFbmFibGVkKCkKICAgcmV0dXJuIEJvb2xlYW4obmF2LT5wYXJ0KCkt
PmphdmFFbmFibGVkKCkpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tq
c19uYXZpZ2F0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXUgLXAg
LXIxLjYgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuaAotLS0gV2ViQ29yZS9raHRt
bC9lY21hL2tqc19uYXZpZ2F0b3IuaAkyNSBKdWwgMjAwNSAyMjoxNzoxOSAtMDAwMAkxLjYKKysr
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmgJNyBBdWcgMjAwNSAwNDo0NDoxNSAt
MDAwMApAQCAtMzAsOCArMzAsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgTmF2aWdhdG9y
IDogcHVibGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKICAgICBOYXZpZ2F0b3IoRXhlY1N0YXRl
ICpleGVjLCBLSFRNTFBhcnQgKnApOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJl
c3VsdCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJl
c3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5hbWUsIEFwcFZlcnNpb24sIExh
bmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tq
c19wcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS9ranNfcHJveHkuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUg
LXUgLXAgLXIxLjIxIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCi0tLSBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX3Byb3h5LmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjIx
CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3Byb3h5LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjE1
IC0wMDAwCkBAIC0xMTIsNyArMTEyLDcgQEAgUVZhcmlhbnQgS0pTUHJveHlJbXBsOjpldmFsdWF0
ZShRU3RyaW5nIAogI2VuZGlmCiAKICAgbV9zY3JpcHQtPnNldElubGluZUNvZGUoaW5saW5lQ29k
ZSk7Ci0gIEtKUzo6VmFsdWUgdGhpc05vZGUgPSBuID8gV2luZG93OjpyZXRyaWV2ZSggbV9wYXJ0
ICkgOiBWYWx1ZShnZXRET01Ob2RlKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksIG4pKTsKKyAgS0pT
OjpWYWx1ZUltcCAqdGhpc05vZGUgPSBuID8gV2luZG93OjpyZXRyaWV2ZShtX3BhcnQpIDogZ2V0
RE9NTm9kZShtX3NjcmlwdC0+Z2xvYmFsRXhlYygpLCBuKTsKIAogICBLSlM6OkludGVycHJldGVy
Ojpsb2NrKCk7CiAgIFVTdHJpbmcgY29kZSggc3RyICk7CkBAIC0xMjUsMTQgKzEyNSwxNCBAQCBR
VmFyaWFudCBLSlNQcm94eUltcGw6OmV2YWx1YXRlKFFTdHJpbmcgCiAjZW5kaWYKIAogICAvLyBs
ZXQncyB0cnkgdG8gY29udmVydCB0aGUgcmV0dXJuIHZhbHVlCi0gIGlmIChzdWNjZXNzICYmICFj
b21wLnZhbHVlKCkuaXNOdWxsKCkpCi0gICAgcmV0dXJuIFZhbHVlVG9WYXJpYW50KCBtX3Njcmlw
dC0+Z2xvYmFsRXhlYygpLCBjb21wLnZhbHVlKCkpOworICBpZiAoc3VjY2VzcyAmJiBjb21wLnZh
bHVlKCkpCisgICAgcmV0dXJuIFZhbHVlVG9WYXJpYW50KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCks
IGNvbXAudmFsdWUoKSk7CiAKICAgaWYgKCBjb21wLmNvbXBsVHlwZSgpID09IFRocm93ICkgewog
ICAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBVU3RyaW5nIGVycm9yTWVzc2FnZSA9
IGNvbXAudmFsdWUoKS50b1N0cmluZyhtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKTsKLSAgICBpbnQg
bGluZU51bWJlciA9ICBjb21wLnZhbHVlKCkudG9PYmplY3QobV9zY3JpcHQtPmdsb2JhbEV4ZWMo
KSkuZ2V0KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksICJsaW5lIikudG9JbnQzMihtX3NjcmlwdC0+
Z2xvYmFsRXhlYygpKTsKLSAgICBVU3RyaW5nIHNvdXJjZVVSTCA9IGNvbXAudmFsdWUoKS50b09i
amVjdChtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKS5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwg
InNvdXJjZVVSTCIpLnRvU3RyaW5nKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpOworICAgIFVTdHJp
bmcgZXJyb3JNZXNzYWdlID0gY29tcC52YWx1ZSgpLT50b1N0cmluZyhtX3NjcmlwdC0+Z2xvYmFs
RXhlYygpKTsKKyAgICBpbnQgbGluZU51bWJlciA9ICBjb21wLnZhbHVlKCktPnRvT2JqZWN0KG1f
c2NyaXB0LT5nbG9iYWxFeGVjKCkpLT5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgImxpbmUi
KS0+dG9JbnQzMihtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKTsKKyAgICBVU3RyaW5nIHNvdXJjZVVS
TCA9IGNvbXAudmFsdWUoKS0+dG9PYmplY3QobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSktPmdldCht
X3NjcmlwdC0+Z2xvYmFsRXhlYygpLCAic291cmNlVVJMIiktPnRvU3RyaW5nKG1fc2NyaXB0LT5n
bG9iYWxFeGVjKCkpOwogICAgIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAjaWYgQVBQ
TEVfQ0hBTkdFUwpAQCAtMjUwLDEyICsyNTAsMTIgQEAgY2xhc3MgVGVzdEZ1bmN0aW9uSW1wIDog
cHVibGljIE9iamVjdEltcAogcHVibGljOgogICBUZXN0RnVuY3Rpb25JbXAoKSA6IE9iamVjdElt
cCgpIHt9CiAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
OwogfTsKIAotVmFsdWUgVGVzdEZ1bmN0aW9uSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpUZXN0RnVuY3Rp
b25JbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNP
YmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgZnByaW50ZihzdGRlcnIsIi0tPiAlc1xuIixh
cmdzWzBdLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOworICBmcHJpbnRmKHN0ZGVyciwiLS0+ICVz
XG4iLGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICByZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIEtKU1Byb3h5SW1wbDo6aW5pdFNjcmlw
dCgpCiAKICAgLy8gQnVpbGQgdGhlIGdsb2JhbCBvYmplY3QgLSB3aGljaCBpcyBhIFdpbmRvdyBp
bnN0YW5jZQogICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7Ci0gIE9iamVjdCBnbG9iYWxPYmpl
Y3QoIG5ldyBXaW5kb3cobV9wYXJ0KSApOworICBPYmplY3RJbXAgKmdsb2JhbE9iamVjdCggbmV3
IFdpbmRvdyhtX3BhcnQpICk7CiAgIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAgIC8v
IENyZWF0ZSBhIEtKUyBpbnRlcnByZXRlciBmb3IgdGhpcyBwYXJ0CkBAIC0yNzcsOCArMjc3LDcg
QEAgdm9pZCBLSlNQcm94eUltcGw6OmluaXRTY3JpcHQoKQogI2VuZGlmCiAgIC8vbV9zY3JpcHQt
PmVuYWJsZURlYnVnKCk7CiAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgZ2xvYmFsT2Jq
ZWN0LnB1dChtX3NjcmlwdC0+Z2xvYmFsRXhlYygpLAotCQkgICAiZGVidWciLCBWYWx1ZShuZXcg
VGVzdEZ1bmN0aW9uSW1wKCkpLCBJbnRlcm5hbCk7CisgIGdsb2JhbE9iamVjdC0+cHV0KG1fc2Ny
aXB0LT5nbG9iYWxFeGVjKCksICJkZWJ1ZyIsIG5ldyBUZXN0RnVuY3Rpb25JbXAoKSwgSW50ZXJu
YWwpOwogICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsKIAogI2lmIEFQUExFX0NIQU5HRVMK
SW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC11IC1wIC1yMS4xMiBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX3JhbmdlLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5jcHAJMjUg
SnVsIDIwMDUgMjI6MTc6MTkgLTAwMDAJMS4xMgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19y
YW5nZS5jcHAJNyBBdWcgMjAwNSAwNDo0NDoxNSAtMDAwMApAQCAtODMsMTIgKzgzLDEyIEBAIERP
TVJhbmdlOjp+RE9NUmFuZ2UoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0
KG1faW1wbC5nZXQoKSk7CiB9CiAKLWJvb2wgRE9NUmFuZ2U6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jv
b2wgRE9NUmFuZ2U6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRP
d25WYWx1ZTxET01SYW5nZSwgRE9NT2JqZWN0PihleGVjLCBwLCAmRE9NUmFuZ2VUYWJsZSwgdGhp
cywgcmVzdWx0KTsKIH0KIAotVmFsdWUgRE9NUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NUmFuZ2U6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIERPTUV4Y2Vw
dGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBSYW5nZUltcGwgJnJhbmdlID0gKm1f
aW1wbDsKQEAgLTk2LDcgKzk2LDcgQEAgVmFsdWUgRE9NUmFuZ2U6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YQogICBjYXNlIFN0YXJ0Q29udGFpbmVyOgogICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsIHJhbmdlLnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikpOwogICBjYXNlIFN0YXJ0T2Zmc2V0
OgotICAgIHJldHVybiBudW1iZXIocmFuZ2Uuc3RhcnRPZmZzZXQoZXhjZXB0aW9uKSk7CisgICAg
cmV0dXJuIGpzTnVtYmVyKHJhbmdlLnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbikpOwogICBjYXNlIEVu
ZENvbnRhaW5lcjoKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCByYW5nZS5lbmRDb250YWlu
ZXIoZXhjZXB0aW9uKSk7CiAgIGNhc2UgRW5kT2Zmc2V0OgpAQCAtMTA3LDI3ICsxMDcsMjcgQEAg
VmFsdWUgRE9NUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGV4Y2VwdGlvbikpOwog
ICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9NUmFu
Z2U6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZh
bHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotVmFsdWUgRE9NUmFuZ2VQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqRE9NUmFuZ2VQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAo
IXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NUmFuZ2U6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVy
aXRzKCZLSlM6OkRPTVJhbmdlOjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAg
ICAgcmV0dXJuIGVycjsKICAgfQotICBSYW5nZUltcGwgJnJhbmdlID0gKnN0YXRpY19jYXN0PERP
TVJhbmdlICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCk7Ci0gIFZhbHVlIHJlc3VsdCA9IFVuZGVm
aW5lZCgpOworICBSYW5nZUltcGwgJnJhbmdlID0gKnN0YXRpY19jYXN0PERPTVJhbmdlICo+KHRo
aXNPYmopLT5pbXBsKCk7CisgIFZhbHVlSW1wICpyZXN1bHQgPSBVbmRlZmluZWQoKTsKICAgaW50
IGV4Y2VwdGlvbiA9IDA7CiAKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NUmFuZ2U6OlNl
dFN0YXJ0OgotICAgICAgcmFuZ2Uuc2V0U3RhcnQodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzLmltcEF0
KDEpLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgcmFuZ2Uuc2V0U3RhcnQodG9O
b2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwogICAgICAg
YnJlYWs7CiAgICAgY2FzZSBET01SYW5nZTo6U2V0RW5kOgotICAgICAgcmFuZ2Uuc2V0RW5kKHRv
Tm9kZShhcmdzWzBdKSwgYXJncy5pbXBBdCgxKS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsK
KyAgICAgIHJhbmdlLnNldEVuZCh0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIoZXhl
YyksIGV4Y2VwdGlvbik7CiAgICAgICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpTZXRTdGFy
dEJlZm9yZToKICAgICAgIHJhbmdlLnNldFN0YXJ0QmVmb3JlKHRvTm9kZShhcmdzWzBdKSwgZXhj
ZXB0aW9uKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBWYWx1ZSBET01SYW5nZVByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgCiAgICAgICByYW5nZS5zZXRFbmRBZnRlcih0b05vZGUoYXJnc1swXSksIGV4
Y2VwdGlvbik7CiAgICAgICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpDb2xsYXBzZToKLSAg
ICAgIHJhbmdlLmNvbGxhcHNlKGFyZ3NbMF0udG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pOwor
ICAgICAgcmFuZ2UuY29sbGFwc2UoYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24p
OwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01SYW5nZTo6U2VsZWN0Tm9kZToKICAgICAgIHJh
bmdlLnNlbGVjdE5vZGUodG9Ob2RlKGFyZ3NbMF0pLCBleGNlcHRpb24pOwpAQCAtMTUxLDggKzE1
MSw4IEBAIFZhbHVlIERPTVJhbmdlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICAgIHJh
bmdlLnNlbGVjdE5vZGVDb250ZW50cyh0b05vZGUoYXJnc1swXSksIGV4Y2VwdGlvbik7CiAgICAg
ICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpDb21wYXJlQm91bmRhcnlQb2ludHM6Ci0gICAg
ICAgIHJlc3VsdCA9IG51bWJlcihyYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGljX2Nh
c3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KGFyZ3NbMF0udG9JbnQzMihleGVjKSksIHRvUmFuZ2UoYXJn
c1sxXSksIGV4Y2VwdGlvbikpOwotICAgICAgYnJlYWs7CisgICAgICAgIHJlc3VsdCA9IGpzTnVt
YmVyKHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGF0aWNfY2FzdDxSYW5nZTo6Q29tcGFy
ZUhvdz4oYXJnc1swXS0+dG9JbnQzMihleGVjKSksIHRvUmFuZ2UoYXJnc1sxXSksIGV4Y2VwdGlv
bikpOworICAgICAgICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpEZWxldGVDb250ZW50czoK
ICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKGV4Y2VwdGlvbik7CiAgICAgICBicmVhazsKQEAg
LTE3OCw4ICsxNzgsNyBAQCBWYWx1ZSBET01SYW5nZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
CiAgICAgICByYW5nZS5kZXRhY2goZXhjZXB0aW9uKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RE9NUmFuZ2U6OkNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudDoKLSAgICAgIFZhbHVlIHZhbHVlID0g
YXJnc1swXTsKLSAgICAgIERPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9N
OjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgICAgRE9N
U3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogICAgICAgcmVz
dWx0ID0gZ2V0RE9NTm9kZShleGVjLCByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3Ry
LCBleGNlcHRpb24pKTsKICAgICAgIGJyZWFrOwogICB9OwpAQCAtMjA0LDEyICsyMDMsMTIgQEAg
Y29uc3QgQ2xhc3NJbmZvIFJhbmdlQ29uc3RydWN0b3I6OmluZm8gPQogICBFTkRfVE9fU1RBUlQJ
CURPTTo6UmFuZ2U6OkVORF9UT19TVEFSVAlEb250RGVsZXRlfFJlYWRPbmx5CiBAZW5kCiAqLwot
Ym9vbCBSYW5nZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIFJhbmdlQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1
ZTxSYW5nZUNvbnN0cnVjdG9yLERPTU9iamVjdD4oZXhlYywgcCwgJlJhbmdlQ29uc3RydWN0b3JU
YWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAotVmFsdWUgUmFuZ2VDb25zdHJ1Y3Rvcjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlJhbmdl
Q29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKICAgcmV0dXJuIE51bWJlcih0b2tlbik7CiB9CkluZGV4OiBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX3JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWNtYS9ranNfcmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUg
LXUgLXAgLXIxLjcgV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5oCi0tLSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX3JhbmdlLmgJMjUgSnVsIDIwMDUgMjI6MTc6MTkgLTAwMDAJMS43CisrKyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmgJNyBBdWcgMjAwNSAwNDo0NDoxNSAtMDAwMApA
QCAtMzMsOCArMzMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTVJhbmdl
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpSYW5nZUltcGwgKnIpOwogICAgIH5ET01SYW5nZSgpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRl
bnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1
ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFk
LW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC01NCw4
ICs1NCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBSYW5nZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBSYW5nZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSAqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBw
LCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJl
YWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjEzIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfdHJhdmVyc2FsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJz
YWwuY3BwCTI1IEp1bCAyMDA1IDIyOjE3OjE5IC0wMDAwCTEuMTMKKysrIFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfdHJhdmVyc2FsLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjE1IC0wMDAwCkBAIC02OCwx
MiArNjgsMTIgQEAgRE9NTm9kZUl0ZXJhdG9yOjp+RE9NTm9kZUl0ZXJhdG9yKCkKICAgU2NyaXB0
SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1ib29sIERP
TU5vZGVJdGVyYXRvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBET01Ob2RlSXRlcmF0b3I6Omdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Ob2Rl
SXRlcmF0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkRPTU5vZGVJdGVyYXRvclRhYmxlLCB0aGlz
LCByZXN1bHQpOwogfQogCi1WYWx1ZSBET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NTm9kZUl0ZXJh
dG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogICBOb2RlSXRlcmF0b3JJbXBsICZuaSA9ICptX2ltcGw7CiAgIHN3aXRjaCAodG9rZW4pIHsK
QEAgLTkxLDE5ICs5MSwxOSBAQCBWYWx1ZSBET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVy
dHkoCiAgICAgcmV0dXJuIEJvb2xlYW4obmkucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSk7
CiAgZGVmYXVsdDoKICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9NTm9k
ZUl0ZXJhdG9yOjpnZXRWYWx1ZVByb3BlcnR5IDogIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgcmV0
dXJuIFZhbHVlKCk7CisgICByZXR1cm4gTlVMTDsKICAgfQogfQogCi1WYWx1ZSBET01Ob2RlSXRl
cmF0b3JQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJikKK1ZhbHVlSW1wICpET01Ob2RlSXRlcmF0b3JQcm90b0Z1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYp
CiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01Ob2RlSXRlcmF0b3I6OmluZm8p
KSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGVJdGVyYXRvcjo6aW5mbykpIHsKKyAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9NRXhjZXB0
aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIE5vZGVJdGVyYXRvckltcGwgJm5vZGVJ
dGVyYXRvciA9ICpzdGF0aWNfY2FzdDxET01Ob2RlSXRlcmF0b3IgKj4odGhpc09iai5pbXAoKSkt
PmltcGwoKTsKKyAgTm9kZUl0ZXJhdG9ySW1wbCAmbm9kZUl0ZXJhdG9yID0gKnN0YXRpY19jYXN0
PERPTU5vZGVJdGVyYXRvciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
IGNhc2UgRE9NTm9kZUl0ZXJhdG9yOjpQcmV2aW91c05vZGU6CiAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyxub2RlSXRlcmF0b3IucHJldmlvdXNOb2RlKGV4Y2VwdGlvbikpOwpAQCAtMTQ1LDE4
ICsxNDUsMTggQEAgY29uc3QgQ2xhc3NJbmZvIE5vZGVGaWx0ZXJDb25zdHJ1Y3Rvcjo6aQogICBT
SE9XX05PVEFUSU9OCQlET006Ok5vZGVGaWx0ZXI6OlNIT1dfTk9UQVRJT04JRG9udERlbGV0ZXxS
ZWFkT25seQogQGVuZAogKi8KLWJvb2wgTm9kZUZpbHRlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQp
IGNvbnN0Citib29sIE5vZGVGaWx0ZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QK
IHsKICAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciwgRE9N
T2JqZWN0PihleGVjLCBwLCAmTm9kZUZpbHRlckNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKLVZhbHVlIE5vZGVGaWx0ZXJDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVGaWx0ZXJDb25zdHJ1
Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewog
ICAvLyBXZSB1c2UgdGhlIHRva2VuIGFzIHRoZSB2YWx1ZSB0byByZXR1cm4gZGlyZWN0bHkKICAg
cmV0dXJuIE51bWJlcih0b2tlbik7CiB9CiAKLVZhbHVlIGdldE5vZGVGaWx0ZXJDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0Tm9kZUZpbHRlckNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSAqZXhlYykKIHsKICAgcmV0dXJuIGNhY2hlR2xvYmFsT2JqZWN0PE5vZGVGaWx0ZXJD
b25zdHJ1Y3Rvcj4oZXhlYywgIltbbm9kZUZpbHRlci5jb25zdHJ1Y3Rvcl1dIik7CiB9CkBAIC0x
ODQsMTQgKzE4NCwxNCBAQCBET01Ob2RlRmlsdGVyOjp+RE9NTm9kZUZpbHRlcigpCiAgIFNjcmlw
dEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotVmFsdWUg
RE9NTm9kZUZpbHRlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01Ob2RlRmlsdGVyUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTU5vZGVG
aWx0ZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5vZGVGaWx0ZXI6Omlu
Zm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0g
IE5vZGVGaWx0ZXJJbXBsICZub2RlRmlsdGVyID0gKnN0YXRpY19jYXN0PERPTU5vZGVGaWx0ZXIg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKTsKKyAgTm9kZUZpbHRlckltcGwgJm5vZGVGaWx0ZXIg
PSAqc3RhdGljX2Nhc3Q8RE9NTm9kZUZpbHRlciAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0
Y2ggKGlkKSB7CiAgICAgY2FzZSBET01Ob2RlRmlsdGVyOjpBY2NlcHROb2RlOgogICAgICAgcmV0
dXJuIE51bWJlcihub2RlRmlsdGVyLmFjY2VwdE5vZGUodG9Ob2RlKGFyZ3NbMF0pKSk7CkBAIC0y
NDcsMTIgKzI0NywxMiBAQCBET01UcmVlV2Fsa2VyOjp+RE9NVHJlZVdhbGtlcigpCiAgIFNjcmlw
dEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotYm9vbCBE
T01UcmVlV2Fsa2VyOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIERPTVRyZWVXYWxrZXI6OmdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAg
KiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01UcmVlV2Fs
a2VyLCBET01PYmplY3Q+KGV4ZWMsIHAsICZET01UcmVlV2Fsa2VyVGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKLVZhbHVlIERPTVRyZWVXYWxrZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NVHJlZVdhbGtlcjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgVHJlZVdh
bGtlckltcGwgJnR3ID0gKm1faW1wbDsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjY4LDEyICsy
NjgsMTIgQEAgVmFsdWUgRE9NVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdHcuY3VycmVudE5vZGUoKSk7CiAgIGRlZmF1bHQ6CiAgICAg
a2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxlZCB0b2tlbiBpbiBET01UcmVlV2Fsa2VyOjpnZXRWYWx1
ZVByb3BlcnR5IDogIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAg
IHJldHVybiBOVUxMOwogICB9CiB9CiAKIHZvaWQgRE9NVHJlZVdhbGtlcjo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gImN1cnJlbnROb2RlIikgewogICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhj
ZXB0aW9uKGV4ZWMpOwpAQCAtMjgzLDE0ICsyODMsMTQgQEAgdm9pZCBET01UcmVlV2Fsa2VyOjpw
dXQoRXhlY1N0YXRlICpleGVjLAogICAgIE9iamVjdEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHIpOwogfQogCi1WYWx1ZSBET01UcmVlV2Fsa2VyUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1ZUlt
cCAqRE9NVHJlZVdhbGtlclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsKLSAgaWYgKCF0aGlzT2JqLmlu
aGVyaXRzKCZLSlM6OkRPTVRyZWVXYWxrZXI6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZL
SlM6OkRPTVRyZWVXYWxrZXI6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAg
ICByZXR1cm4gZXJyOwogICB9Ci0gIFRyZWVXYWxrZXJJbXBsICZ0cmVlV2Fsa2VyID0gKnN0YXRp
Y19jYXN0PERPTVRyZWVXYWxrZXIgKj4odGhpc09iai5pbXAoKSktPmltcGwoKTsKKyAgVHJlZVdh
bGtlckltcGwgJnRyZWVXYWxrZXIgPSAqc3RhdGljX2Nhc3Q8RE9NVHJlZVdhbGtlciAqPih0aGlz
T2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01UcmVlV2Fsa2VyOjpQ
YXJlbnROb2RlOgogICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0cmVlV2Fsa2VyLnBhcmVu
dE5vZGUoKSk7CkBAIC0zMTcsNyArMzE3LDcgQEAgVmFsdWVJbXAgKmdldERPTVRyZWVXYWxrZXIo
RXhlY1N0YXRlICpleAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpTTm9kZUZpbHRlckNvbmRp
dGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKE9iamVjdCAmIF9maWx0ZXIpIDogZmlsdGVyKCBf
ZmlsdGVyICkKK0pTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uKE9i
amVjdEltcCAqIF9maWx0ZXIpIDogZmlsdGVyKCBfZmlsdGVyICkKIHsKIH0KIApAQCAtMzMwLDEz
ICszMzAsMTMgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKAogI2Vu
ZGlmCiAgICAgS0hUTUxQYXJ0ICpwYXJ0ID0gbm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpOwog
ICAgIEtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5Ojpwcm94eShwYXJ0KTsKLSAgICBpZiAocHJv
eHkgJiYgZmlsdGVyLmltcGxlbWVudHNDYWxsKCkpIHsKKyAgICBpZiAocHJveHkgJiYgZmlsdGVy
LT5pbXBsZW1lbnRzQ2FsbCgpKSB7CiAgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5p
bnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIExpc3QgYXJnczsKICAgICAgICAg
YXJncy5hcHBlbmQoZ2V0RE9NTm9kZShleGVjLCBub2RlKSk7Ci0gICAgICAgIE9iamVjdCBvYmog
PSBjb25zdF9jYXN0PFByb3RlY3RlZE9iamVjdCAmPihmaWx0ZXIpOwotICAgICAgICBWYWx1ZSBy
ZXN1bHQgPSBvYmouY2FsbChleGVjLCBvYmosIGFyZ3MpOwotICAgICAgICByZXR1cm4gcmVzdWx0
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIE9iamVjdEltcCAqb2JqID0gZmlsdGVyOworICAgICAg
ICBWYWx1ZUltcCAqcmVzdWx0ID0gb2JqLT5jYWxsKGV4ZWMsIG9iaiwgYXJncyk7CisgICAgICAg
IHJldHVybiByZXN1bHQtPnRvSW50MzIoZXhlYyk7CiAgICAgfQogCiAgICAgcmV0dXJuIERPTTo6
Tm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
dHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS9ranNfdHJhdmVyc2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11
IC11IC1wIC1yMS44IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgKLS0tIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgJMjUgSnVsIDIwMDUgMjI6MTc6MTkgLTAwMDAJ
MS44CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCTcgQXVnIDIwMDUgMDQ6
NDQ6MTUgLTAwMDAKQEAgLTM2LDggKzM2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoK
ICAgICBET01Ob2RlSXRlcmF0b3IoRXhlY1N0YXRlICpleGVjLCBET006Ok5vZGVJdGVyYXRvcklt
cGwgKm5pKTsKICAgICB+RE9NTm9kZUl0ZXJhdG9yKCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsK
KyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgIGNsYXNzIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3Qgewog
ICBwdWJsaWM6CiAgICAgTm9kZUZpbHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqKSB7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50
aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNzYsMTAg
Kzc2LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NVHJlZVdhbGtlcihF
eGVjU3RhdGUgKmV4ZWMsIERPTTo6VHJlZVdhbGtlckltcGwgKnR3KTsKICAgICB+RE9NVHJlZVdh
bGtlcigpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
Y29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgVmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVy
JiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9u
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0g
Tm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIGVu
dW0geyBSb290LCBXaGF0VG9TaG93LCBGaWx0ZXIsIEV4cGFuZEVudGl0eVJlZmVyZW5jZXMsIEN1
cnJlbnROb2RlLApAQCAtOTEsNyArOTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgfTsKIAogICBW
YWx1ZUltcCAqZ2V0RE9NTm9kZUl0ZXJhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSXRl
cmF0b3JJbXBsICpuaSk7Ci0gIFZhbHVlIGdldE5vZGVGaWx0ZXJDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUgKmV4ZWMpOworICBWYWx1ZUltcCAqZ2V0Tm9kZUZpbHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgIFZhbHVlSW1wICpnZXRET01Ob2RlRmlsdGVyKEV4ZWNTdGF0ZSAqZXhlYywg
RE9NOjpOb2RlRmlsdGVySW1wbCAqbmYpOwogICBWYWx1ZUltcCAqZ2V0RE9NVHJlZVdhbGtlcihF
eGVjU3RhdGUgKmV4ZWMsIERPTTo6VHJlZVdhbGtlckltcGwgKnR3KTsKIApAQCAtOTksNyArOTks
NyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBKU05vZGVGaWx0ZXJDb25kaXRpb24gOiBw
dWJsaWMgRE9NOjpOb2RlRmlsdGVyQ29uZGl0aW9uIHsKICAgcHVibGljOgotICAgIEpTTm9kZUZp
bHRlckNvbmRpdGlvbihPYmplY3QgJiBfZmlsdGVyKTsKKyAgICBKU05vZGVGaWx0ZXJDb25kaXRp
b24oT2JqZWN0SW1wICogX2ZpbHRlcik7CiAgICAgdmlydHVhbCB+SlNOb2RlRmlsdGVyQ29uZGl0
aW9uKCkge30KICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRE9NOjpGaWx0ZXJOb2RlKSBj
b25zdDsKICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNf
dmlld3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtdSAtcCAtcjEu
NyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc192aWV3cy5jcHAJMjUgSnVsIDIwMDUgMjI6MTc6MTkgLTAwMDAJMS43CisrKyBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjE1IC0wMDAwCkBAIC01
NCw3ICs1NCw3IEBAIERPTUFic3RyYWN0Vmlldzo6fkRPTUFic3RyYWN0VmlldygpCiAgIFNjcmlw
dEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotYm9vbCBE
T01BYnN0cmFjdFZpZXc6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRE9NQWJzdHJhY3RWaWV3Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdAogewogICAgIGlmIChwID09ICJkb2N1bWVudCIpIHsKICAgICAg
ICAgcmVzdWx0ID0gZ2V0RE9NTm9kZShleGVjLCBtX2ltcGwtPmRvY3VtZW50KCkpOwpAQCAtNjcs
MTQgKzY3LDE0IEBAIGJvb2wgRE9NQWJzdHJhY3RWaWV3OjpnZXRPd25Qcm9wZXJ0eShFeGUKICAg
ICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQog
Ci1WYWx1ZSBET01BYnN0cmFjdFZpZXdGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUFic3RyYWN0Vmlld0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkRPTUFic3RyYWN0
Vmlldzo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTUFic3RyYWN0Vmlldzo6aW5mbykp
IHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwog
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgQWJz
dHJhY3RWaWV3SW1wbCAmYWJzdHJhY3RWaWV3ID0gKnN0YXRpY19jYXN0PERPTUFic3RyYWN0Vmll
dyAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOworICBBYnN0cmFjdFZpZXdJbXBsICZhYnN0cmFj
dFZpZXcgPSAqc3RhdGljX2Nhc3Q8RE9NQWJzdHJhY3RWaWV3ICo+KHRoaXNPYmopLT5pbXBsKCk7
CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUFic3RyYWN0Vmlldzo6R2V0Q29tcHV0ZWRT
dHlsZTogewogICAgICAgICBFbGVtZW50SW1wbCAqYXJnMCA9IHRvRWxlbWVudChhcmdzWzBdKTsK
QEAgLTgzLDcgKzgzLDcgQEAgVmFsdWUgRE9NQWJzdHJhY3RWaWV3RnVuYzo6Y2FsbChFeGVjU3Rh
dAogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhcmcw
LT5nZXREb2N1bWVudCgpKQogICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbihleGVjLCBhYnN0cmFjdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhcmcwLCBhcmdzWzFdLnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCkpKTsKKyAgICAgICAgICByZXR1
cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLCBhYnN0cmFjdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShhcmcwLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1lbnRh
dGlvbigpKSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL2tqc192aWV3cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEva2pzX3ZpZXdzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11
IC11IC1wIC1yMS42IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuaAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL2tqc192aWV3cy5oCTI1IEp1bCAyMDA1IDIyOjE3OjE5IC0wMDAwCTEuNgorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5oCTcgQXVnIDIwMDUgMDQ6NDQ6MTUgLTAwMDAK
QEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01BYnN0
cmFjdFZpZXcoRXhlY1N0YXRlICosIERPTTo6QWJzdHJhY3RWaWV3SW1wbCAqYXYpIDogbV9pbXBs
KGF2KSB7IH0KICAgICB+RE9NQWJzdHJhY3RWaWV3KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKICAgICAv
LyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY4CmRpZmYgLXAgLXUgLXUgLXAgLXIxLjE2OCBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfd2luZG93LmNwcAkyNSBKdWwgMjAwNSAyMjoxNzoxOSAtMDAwMAkxLjE2OAorKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTcgQXVnIDIwMDUgMDQ6NDQ6MTYgLTAwMDAKQEAg
LTEwNCw4ICsxMDQsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEhpc3Rvcnko
RXhlY1N0YXRlICpleGVjLCBLSFRNTFBhcnQgKnApCiAgICAgICA6IE9iamVjdEltcChleGVjLT5s
ZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgcGFydChwKSB7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0OworICAgIFZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7
IEJhY2ssIEZvcndhcmQsIEdvLCBMZW5ndGggfTsKQEAgLTExOCw3ICsxMTgsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgcHVibGljOgogICAgIEZyYW1lQXJyYXkoRXhlY1N0YXRlICpleGVjLCBLSFRN
TFBhcnQgKnApCiAgICAgICA6IE9iamVjdEltcChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgcGFydChwKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKiZyZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFFHdWFyZGVkUHRyPEtIVE1MUGFy
dD4gcGFydDsKQEAgLTEyOSw3ICsxMjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIEtvbnF1ZXJvckZ1bmMoY29uc3QgS29ucXVlcm9yKiBrLCBjb25zdCBjaGFyKiBuYW1lKQog
ICAgICAgOiBET01GdW5jdGlvbigpLCBrb25xdWVyb3IoayksIG1fbmFtZShuYW1lKSB7IH0KLSAg
ICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAog
ICBwcml2YXRlOgogICAgIGNvbnN0IEtvbnF1ZXJvcioga29ucXVlcm9yOwpAQCAtMTY1LDEyICsx
NjUsMTIgQEAgY29uc3QgQ2xhc3NJbmZvIFNjcmVlbjo6aW5mbyA9IHsgIlNjcmVlbgogU2NyZWVu
OjpTY3JlZW4oRXhlY1N0YXRlICpleGVjKQogICA6IE9iamVjdEltcChleGVjLT5sZXhpY2FsSW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSB7fQogCi1ib29sIFNjcmVlbjo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBTY3JlZW46OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAg
IHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxTY3JlZW4sIE9iamVjdEltcD4oZXhlYywgcCwgJlNj
cmVlblRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBTY3JlZW46OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU2NyZWVu
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
ICBLV2luTW9kdWxlIGluZm87CiAgIFFXaWRnZXQgKnRoaXNXaWRnZXQgPSBXaW5kb3c6OnJldHJp
ZXZlQWN0aXZlKGV4ZWMpLT5wYXJ0KCktPnZpZXcoKTsKQEAgLTM1NCwyNSArMzU0LDI1IEBAIEtK
Uzo6SW50ZXJwcmV0ZXIgKldpbmRvdzo6aW50ZXJwcmV0ZXIoKSAKIAogV2luZG93ICpXaW5kb3c6
OnJldHJpZXZlV2luZG93KEtIVE1MUGFydCAqcCkKIHsKLSAgT2JqZWN0IG9iaiA9IE9iamVjdDo6
ZHluYW1pY0Nhc3QoIHJldHJpZXZlKCBwICkgKTsKKyAgT2JqZWN0SW1wICpvYmogPSByZXRyaWV2
ZShwKS0+Z2V0T2JqZWN0KCk7CiAjaWZuZGVmIE5ERUJVRwogICAvLyBvYmogc2hvdWxkIG5ldmVy
IGJlIG51bGwsIGV4Y2VwdCB3aGVuIGphdmFzY3JpcHQgaGFzIGJlZW4gZGlzYWJsZWQgaW4gdGhh
dCBwYXJ0LgogICBpZiAoIHAgJiYgcC0+alNjcmlwdEVuYWJsZWQoKSApCiAgIHsKLSAgICBhc3Nl
cnQoICFvYmouaXNOdWxsKCkgKTsKKyAgICBhc3NlcnQob2JqKTsKICNpZm5kZWYgUVdTCi0gICAg
Ly9hc3NlcnQoIGR5bmFtaWNfY2FzdDxLSlM6OldpbmRvdyo+KG9iai5pbXAoKSkgKTsgLy8gdHlw
ZSBjaGVja2luZworICAgIC8vYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8S0pTOjpXaW5kb3cqPihvYmop
ICk7IC8vIHR5cGUgY2hlY2tpbmcKICNlbmRpZgogICB9CiAjZW5kaWYKLSAgaWYgKCBvYmouaXNO
dWxsKCkgKSAvLyBKUyBkaXNhYmxlZAorICBpZiAoIW9iaikgLy8gSlMgZGlzYWJsZWQKICAgICBy
ZXR1cm4gMDsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6V2luZG93Kj4ob2JqLmltcCgpKTsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvdyo+KG9iaik7CiB9CiAKIFdpbmRvdyAqV2luZG93
OjpyZXRyaWV2ZUFjdGl2ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlSW1wICppbXAgPSBl
eGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCk7CisgIFZhbHVl
SW1wICppbXAgPSBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAg
IGFzc2VydCggaW1wICk7CiAjaWZuZGVmIFFXUwogICAvL2Fzc2VydCggZHluYW1pY19jYXN0PEtK
Uzo6V2luZG93Kj4oaW1wKSApOwpAQCAtMzgwLDEzICszODAsMTMgQEAgV2luZG93ICpXaW5kb3c6
OnJldHJpZXZlQWN0aXZlKEV4ZWNTdGF0ZQogICByZXR1cm4gc3RhdGljX2Nhc3Q8S0pTOjpXaW5k
b3cqPihpbXApOwogfQogCi1WYWx1ZSBXaW5kb3c6OnJldHJpZXZlKEtIVE1MUGFydCAqcCkKK1Zh
bHVlSW1wICpXaW5kb3c6OnJldHJpZXZlKEtIVE1MUGFydCAqcCkKIHsKICAgYXNzZXJ0KHApOwog
ICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoIHAgKTsKICAgaWYgKHByb3h5KSB7
CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6OnJldHJp
ZXZlIHBhcnQ9IiA8PCBwIDw8ICIgaW50ZXJwcmV0ZXI9IiA8PCBwcm94eS0+aW50ZXJwcmV0ZXIo
KSA8PCAiIHdpbmRvdz0iIDw8IHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKS5p
bXAoKSA8PCBlbmRsOworICAgIGtkRGVidWcoNjA3MCkgPDwgIldpbmRvdzo6cmV0cmlldmUgcGFy
dD0iIDw8IHAgPDwgIiBpbnRlcnByZXRlcj0iIDw8IHByb3h5LT5pbnRlcnByZXRlcigpIDw8ICIg
d2luZG93PSIgPDwgcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpIDw8IGVuZGw7
CiAjZW5kaWYKICAgICByZXR1cm4gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgp
OyAvLyB0aGUgR2xvYmFsIG9iamVjdCBpcyB0aGUgIndpbmRvdyIKICAgfSBlbHNlCkBAIC01MTMs
NyArNTEzLDcgQEAgc3RhdGljIFFNYXA8UVN0cmluZywgUVN0cmluZz4gcGFyc2VGZWF0dQogewog
ICAgIFFNYXA8UVN0cmluZywgUVN0cmluZz4gbWFwOwogCi0gICAgUVN0cmluZ0xpc3QgZmVhdHVy
ZXMgPSBRU3RyaW5nTGlzdDo6c3BsaXQoJzsnLCBmZWF0dXJlc0FyZy0+ZGlzcGF0Y2hUb1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkpOworICAgIFFTdHJpbmdMaXN0IGZlYXR1cmVzID0gUVN0cmluZ0xp
c3Q6OnNwbGl0KCc7JywgZmVhdHVyZXNBcmctPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CiAg
ICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7CiAgICAg
Zm9yIChRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IGZlYXR1cmVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBRU3RyaW5nIHMgPSAqaXQ7CkBAIC02MjgsMTAgKzYy
OCwxMCBAQCBzdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2dOb3coY29uc3QgCiAKIHN0YXRp
YyBWYWx1ZUltcCAqc2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSAqZXhlYywgV2luZG93ICpvcGVu
ZXJXaW5kb3csIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgVVN0cmluZyBVUkwgPSBhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpOworICAgIFVTdHJpbmcgVVJMID0gYXJnc1swXS0+dG9TdHJpbmcoZXhl
Yyk7CiAKICAgICBpZiAoIWNhblNob3dNb2RhbERpYWxvZ05vdyhvcGVuZXJXaW5kb3cpIHx8ICFh
bGxvd1BvcFVwKGV4ZWMsIG9wZW5lcldpbmRvdykpCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KS5pbXAoKTsKKyAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIAogICAgIGNvbnN0IFFN
YXA8UVN0cmluZywgUVN0cmluZz4gZmVhdHVyZXMgPSBwYXJzZUZlYXR1cmVzKGV4ZWMsIGFyZ3Nb
Ml0pOwogCkBAIC02NzgsMTcgKzY3OCwxNyBAQCBzdGF0aWMgVmFsdWVJbXAgKnNob3dNb2RhbERp
YWxvZyhFeGVjU3RhCiAKICAgICBLSFRNTFBhcnQgKmRpYWxvZ1BhcnQgPSBjcmVhdGVOZXdXaW5k
b3coZXhlYywgb3BlbmVyV2luZG93LCBVUkwucXN0cmluZygpLCAiIiwgd2FyZ3MsIGFyZ3NbMV0p
OwogICAgIGlmICghZGlhbG9nUGFydCkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpLmltcCgp
OworICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAKICAgICBXaW5kb3cgKmRpYWxvZ1dpbmRv
dyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3coZGlhbG9nUGFydCk7Ci0gICAgVmFsdWVJbXAgKnJl
dHVyblZhbHVlID0gVW5kZWZpbmVkKCkuaW1wKCk7CisgICAgVmFsdWVJbXAgKnJldHVyblZhbHVl
ID0gVW5kZWZpbmVkKCk7CiAgICAgZGlhbG9nV2luZG93LT5zZXRSZXR1cm5WYWx1ZVNsb3QoJnJl
dHVyblZhbHVlKTsKICAgICBzdGF0aWNfY2FzdDxLSFRNTFBhcnRCcm93c2VyRXh0ZW5zaW9uICo+
KGRpYWxvZ1BhcnQtPmJyb3dzZXJFeHRlbnNpb24oKSktPnJ1bk1vZGFsKCk7CiAgICAgZGlhbG9n
V2luZG93LT5zZXRSZXR1cm5WYWx1ZVNsb3QoTlVMTCk7CiAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwogfQogCi1ib29sIFdpbmRvdzo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAorYm9vbCBXaW5kb3c6OmdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAg
KiZyZXN1bHQpIGNvbnN0CiB7CiAgIGlmIChwID09ICJjbG9zZWQiKSB7CiAgICAgICByZXN1bHQg
PSBCb29sZWFuKG1fcGFydC5pc051bGwoKSk7CkBAIC03MDUsNyArNzA1LDcgQEAgYm9vbCBXaW5k
b3c6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogICBWYWx1ZUltcCAqIHZhbCA9IE9iamVj
dEltcDo6Z2V0RGlyZWN0KHApOwogICBpZiAodmFsKSB7CiAgICAgaWYgKGlzU2FmZVNjcmlwdChl
eGVjKSkKLSAgICAgIHJlc3VsdCA9IFZhbHVlKHZhbCk7CisgICAgICByZXN1bHQgPSB2YWw7CiAg
ICAgZWxzZQogICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC03NjcsMTIgKzc2NywxMCBAQCBib29sIFdpbmRvdzo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICplCiAgICAgICByZXN1bHQgPSBnZXRFdmVudENvbnN0cnVjdG9yKGV4ZWMpOwogICAgICAgcmV0
dXJuIHRydWU7CiAgICAgY2FzZSBGcmFtZXM6Ci0gICAgICByZXN1bHQgPSBWYWx1ZShmcmFtZXMg
PyBmcmFtZXMgOgotICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2Nhc3Q8V2luZG93Kj4odGhp
cyktPmZyYW1lcyA9IG5ldyBGcmFtZUFycmF5KGV4ZWMsbV9wYXJ0KSkpOworICAgICAgcmVzdWx0
ID0gZnJhbWVzID8gZnJhbWVzIDogKGNvbnN0X2Nhc3Q8V2luZG93Kj4odGhpcyktPmZyYW1lcyA9
IG5ldyBGcmFtZUFycmF5KGV4ZWMsIG1fcGFydCkpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBfSGlzdG9yeToKLSAgICAgIHJlc3VsdCA9IFZhbHVlKGhpc3RvcnkgPyBoaXN0b3J5IDoK
LSAgICAgICAgICAgICAgICAgICAgIChjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5oaXN0b3J5
ID0gbmV3IEhpc3RvcnkoZXhlYyxtX3BhcnQpKSk7CisgICAgICByZXN1bHQgPSBoaXN0b3J5ID8g
aGlzdG9yeSA6IChjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5oaXN0b3J5ID0gbmV3IEhpc3Rv
cnkoZXhlYywgbV9wYXJ0KSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEV2ZW50Ogog
ICAgICAgaWYgKG1fZXZ0KQpAQCAtNzk2LDcgKzc5NCw3IEBAIGJvb2wgV2luZG93OjpnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmUKICAgICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPmZyYW1l
cygpLmNvdW50KCkpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBfTG9jYXRpb246Ci0g
ICAgICByZXN1bHQgPSBWYWx1ZShsb2NhdGlvbigpKTsKKyAgICAgIHJlc3VsdCA9IGxvY2F0aW9u
KCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE5hbWU6CiAgICAgICByZXN1bHQgPSBT
dHJpbmcobV9wYXJ0LT5uYW1lKCkpOwpAQCAtODA3LDE5ICs4MDUsMTkgQEAgYm9vbCBXaW5kb3c6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogICAgICAgTmF2aWdhdG9yICpuID0gbmV3IE5h
dmlnYXRvcihleGVjLCBtX3BhcnQpOwogICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcykt
PnB1dERpcmVjdCgibmF2aWdhdG9yIiwgbiwgRG9udERlbGV0ZXxSZWFkT25seSk7CiAgICAgICBj
b25zdF9jYXN0PFdpbmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJjbGllbnRJbmZvcm1hdGlvbiIs
IG4sIERvbnREZWxldGV8UmVhZE9ubHkpOwotICAgICAgcmVzdWx0ID0gVmFsdWUobik7CisgICAg
ICByZXN1bHQgPSBuOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmZGVmIFFfV1NfUVdT
CiAgICAgY2FzZSBfS29ucXVlcm9yOgotICAgICAgcmVzdWx0ID0gVmFsdWUobmV3IEtvbnF1ZXJv
cihtX3BhcnQpKTsKKyAgICAgIHJlc3VsdCA9IG5ldyBLb25xdWVyb3IobV9wYXJ0KTsKICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgY2FzZSBMb2NhdGlvbmJhcjoKLSAgICAgIHJlc3Vs
dCA9IFZhbHVlKGxvY2F0aW9uYmFyKGV4ZWMpKTsKKyAgICAgIHJlc3VsdCA9IGxvY2F0aW9uYmFy
KGV4ZWMpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBNZW51YmFyOgotICAgICAgcmVz
dWx0ID0gVmFsdWUobWVudWJhcihleGVjKSk7CisgICAgICByZXN1bHQgPSBtZW51YmFyKGV4ZWMp
OwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBPZmZzY3JlZW5CdWZmZXJpbmc6CiAgICAg
ICByZXN1bHQgPSBCb29sZWFuKHRydWUpOwpAQCAtODU2LDEwICs4NTQsMTAgQEAgYm9vbCBXaW5k
b3c6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogICAgICAgICByZXN1bHQgPSBVbmRlZmlu
ZWQoKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUGFyZW50OgotICAgICAgcmVzdWx0
ID0gVmFsdWUocmV0cmlldmUobV9wYXJ0LT5wYXJlbnRQYXJ0KCkgPyBtX3BhcnQtPnBhcmVudFBh
cnQoKSA6IChLSFRNTFBhcnQqKW1fcGFydCkpOworICAgICAgcmVzdWx0ID0gcmV0cmlldmUobV9w
YXJ0LT5wYXJlbnRQYXJ0KCkgPyBtX3BhcnQtPnBhcmVudFBhcnQoKSA6IChLSFRNTFBhcnQqKW1f
cGFydCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBlcnNvbmFsYmFyOgotICAgICAg
cmVzdWx0ID0gVmFsdWUocGVyc29uYWxiYXIoZXhlYykpOworICAgICAgcmVzdWx0ID0gcGVyc29u
YWxiYXIoZXhlYyk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNjcmVlbkxlZnQ6CiAg
ICAgY2FzZSBTY3JlZW5YOiB7CkBAIC05MDcsMjggKzkwNSwyNyBAQCBib29sIFdpbmRvdzo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICplCiAgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOwog
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBTY3JvbGxiYXJzOgotICAgICAgcmVzdWx0ID0g
VmFsdWUoc2Nyb2xsYmFycyhleGVjKSk7CisgICAgICByZXN1bHQgPSBzY3JvbGxiYXJzKGV4ZWMp
OwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBTdGF0dXNiYXI6Ci0gICAgICByZXN1bHQg
PSBWYWx1ZShzdGF0dXNiYXIoZXhlYykpOworICAgICAgcmVzdWx0ID0gc3RhdHVzYmFyKGV4ZWMp
OwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBUb29sYmFyOgotICAgICAgcmVzdWx0ID0g
VmFsdWUodG9vbGJhcihleGVjKSk7CisgICAgICByZXN1bHQgPSB0b29sYmFyKGV4ZWMpOwogICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBTZWxmOgogICAgIGNhc2UgX1dpbmRvdzoKLSAgICAg
IHJlc3VsdCA9IFZhbHVlKHJldHJpZXZlKG1fcGFydCkpOworICAgICAgcmVzdWx0ID0gcmV0cmll
dmUobV9wYXJ0KTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgVG9wOiB7CiAgICAgICBL
SFRNTFBhcnQgKnAgPSBtX3BhcnQ7CiAgICAgICB3aGlsZSAocC0+cGFyZW50UGFydCgpKQogICAg
ICAgICBwID0gcC0+cGFyZW50UGFydCgpOwotICAgICAgcmVzdWx0ID0gVmFsdWUocmV0cmlldmUo
cCkpOworICAgICAgcmVzdWx0ID0gcmV0cmlldmUocCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgY2FzZSBfU2NyZWVuOgotICAgICAgcmVzdWx0ID0gVmFsdWUoc2NyZWVuID8gc2Ny
ZWVuIDoKLSAgICAgICAgICAgICAgICAgICAgIChjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5z
Y3JlZW4gPSBuZXcgU2NyZWVuKGV4ZWMpKSk7CisgICAgICByZXN1bHQgPSBzY3JlZW4gPyBzY3Jl
ZW4gOiAoY29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+c2NyZWVuID0gbmV3IFNjcmVlbihleGVj
KSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEltYWdlOgogICAgICAgLy8gRklYTUU6
IHRoaXMgcHJvcGVydHkgKGFuZCB0aGUgZmV3IGJlbG93KSBwcm9iYWJseSBzaG91bGRuJ3QgY3Jl
YXRlIGEgbmV3IG9iamVjdCBldmVyeQpAQCAtMTE1Niw3ICsxMTUzLDcgQEAgYm9vbCBXaW5kb3c6
OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogCiAgIEtIVE1MUGFydCAqa3AgPSBtX3BhcnQt
PmZpbmRGcmFtZShwLnFzdHJpbmcoKSk7CiAgIGlmIChrcCkgewotICAgIHJlc3VsdCA9IFZhbHVl
KHJldHJpZXZlKGtwKSk7CisgICAgcmVzdWx0ID0gcmV0cmlldmUoa3ApOwogICAgIHJldHVybiB0
cnVlOwogICB9CiAKQEAgLTEyMjYsNyArMTIyMyw3IEBAIGJvb2wgV2luZG93OjpoYXNPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmUKICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdpbmRvdzo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBW
YWx1ZSAmdmFsdWUsIGludCBhdHRyKQordm9pZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cikKIHsKICAgLy8gQ2FsbGVkIGJ5IGFuIGludGVybmFsIEtKUyBjYWxsIChlLmcuIEludGVycHJl
dGVySW1wJ3MgY29uc3RydWN0b3IpID8KICAgLy8gSWYgeWVzLCBzYXZlIHRpbWUgYW5kIGp1bXAg
ZGlyZWN0bHkgdG8gT2JqZWN0SW1wLgpAQCAtMTI0MiwyMCArMTIzOSwxNiBAQCB2b2lkIFdpbmRv
dzo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgIGlmIChlbnRyeSkKICAgewogICAgIHN3
aXRjaCggZW50cnktPnZhbHVlICkgewotICAgIGNhc2UgU3RhdHVzOiB7Ci0gICAgICBTdHJpbmcg
cyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgbV9wYXJ0LT5zZXRKU1N0YXR1c0JhclRl
eHQocy52YWx1ZSgpLnFzdHJpbmcoKSk7CisgICAgY2FzZSBTdGF0dXM6CisgICAgICBtX3BhcnQt
PnNldEpTU3RhdHVzQmFyVGV4dCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBEZWZhdWx0U3RhdHVzOiB7Ci0gICAgICBTdHJp
bmcgcyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgbV9wYXJ0LT5zZXRKU0RlZmF1bHRT
dGF0dXNCYXJUZXh0KHMudmFsdWUoKS5xc3RyaW5nKCkpOworICAgIGNhc2UgRGVmYXVsdFN0YXR1
czoKKyAgICAgIG1fcGFydC0+c2V0SlNEZWZhdWx0U3RhdHVzQmFyVGV4dCh2YWx1ZS0+dG9TdHJp
bmcoZXhlYykucXN0cmluZygpKTsKICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgY2FzZSBfTG9j
YXRpb246IHsKICAgICAgIEtIVE1MUGFydCogcCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhl
YyktPm1fcGFydDsKICAgICAgIGlmIChwKSB7Ci0gICAgICAgIFFTdHJpbmcgZHN0VXJsID0gcC0+
eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTCh2YWx1ZS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkp
OworICAgICAgICBRU3RyaW5nIGRzdFVybCA9IHAtPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwo
dmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CiAgICAgICAgIGlmICghZHN0VXJsLnN0
YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8IGlzU2FmZVNjcmlwdChleGVjKSkKICAg
ICAgICAgewogICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJ
bnRlcnByZXRlciAqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdl
c3R1cmUoKTsKQEAgLTEzNzgsOSArMTM3MSw5IEBAIHZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCAKICAgICBjYXNlIE5hbWU6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4
ZWMpKQogI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgICAgbV9wYXJ0LT5zZXROYW1lKCB2YWx1ZS50
b1N0cmluZyhleGVjKS5xc3RyaW5nKCkgKTsKKyAgICAgICAgbV9wYXJ0LT5zZXROYW1lKCB2YWx1
ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpICk7CiAjZWxzZQotICAgICAgICBtX3BhcnQtPnNl
dE5hbWUoIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb2NhbDhCaXQoKS5kYXRhKCkg
KTsKKyAgICAgICAgbV9wYXJ0LT5zZXROYW1lKCB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpLmxvY2FsOEJpdCgpLmRhdGEoKSApOwogI2VuZGlmCiAgICAgICByZXR1cm47CiAgICAgZGVm
YXVsdDoKQEAgLTE0MDIsNyArMTM5NSw3IEBAIGludCBXaW5kb3c6Omluc3RhbGxUaW1lb3V0KGNv
bnN0IFVTdHJpbmcKICAgcmV0dXJuIHdpbnEtPmluc3RhbGxUaW1lb3V0KGhhbmRsZXIsIHQsIHNp
bmdsZVNob3QpOwogfQogCi1pbnQgV2luZG93OjppbnN0YWxsVGltZW91dChjb25zdCBWYWx1ZSAm
ZnVuY3Rpb24sIExpc3QgJmFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpCitpbnQgV2luZG93
OjppbnN0YWxsVGltZW91dChWYWx1ZUltcCAqZnVuY3Rpb24sIExpc3QgJmFyZ3MsIGludCB0LCBi
b29sIHNpbmdsZVNob3QpCiB7CiAgIHJldHVybiB3aW5xLT5pbnN0YWxsVGltZW91dChmdW5jdGlv
biwgYXJncywgdCwgc2luZ2xlU2hvdCk7CiB9CkBAIC0xNTcwLDcgKzE1NjMsNyBAQCBib29sIFdp
bmRvdzo6aXNTYWZlU2NyaXB0KEV4ZWNTdGF0ZSAqZXhlCiAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBXaW5kb3c6OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQsIFZh
bHVlIGZ1bmMpCit2b2lkIFdpbmRvdzo6c2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
ZXZlbnRJZCwgVmFsdWVJbXAgKmZ1bmMpCiB7CiAgIGlmICghaXNTYWZlU2NyaXB0KGV4ZWMpKQog
ICAgIHJldHVybjsKQEAgLTE1ODEsNyArMTU3NCw3IEBAIHZvaWQgV2luZG93OjpzZXRMaXN0ZW5l
cihFeGVjU3RhdGUgKmV4ZWMKICAgZG9jLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVu
dElkLGdldEpTRXZlbnRMaXN0ZW5lcihmdW5jLHRydWUpKTsKIH0KIAotVmFsdWUgV2luZG93Ojpn
ZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGludCBldmVudElkKSBjb25zdAorVmFsdWVJbXAg
KldpbmRvdzo6Z2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCkgY29uc3QK
IHsKICAgaWYgKCFpc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtMTU5NiwyNyArMTU4OSwyNSBAQCBWYWx1ZSBXaW5kb3c6OmdldExpc3RlbmVyKEV4ZWNTdGF0
ZSAqZXhlCiAgICAgcmV0dXJuIE51bGwoKTsKIH0KIAotSlNFdmVudExpc3RlbmVyICpXaW5kb3c6
OmdldEpTRXZlbnRMaXN0ZW5lcihjb25zdCBWYWx1ZSYgdmFsLCBib29sIGh0bWwpCitKU0V2ZW50
TGlzdGVuZXIgKldpbmRvdzo6Z2V0SlNFdmVudExpc3RlbmVyKFZhbHVlSW1wICp2YWwsIGJvb2wg
aHRtbCkKIHsKLSAgLy8gVGhpcyBmdW5jdGlvbiBpcyBzbyBob3QgdGhhdCBpdCdzIHdvcnRoIGNv
ZGluZyBpdCBkaXJlY3RseSB3aXRoIGltcHMuCi0gIGlmICh2YWwudHlwZSgpICE9IE9iamVjdFR5
cGUpCisgIGlmICghdmFsLT5pc09iamVjdCgpKQogICAgIHJldHVybiAwOwotICBPYmplY3RJbXAg
Kmxpc3RlbmVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHZhbC5pbXAoKSk7Cisg
IE9iamVjdEltcCAqbGlzdGVuZXJPYmplY3QgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odmFs
KTsKIAogICBKU0V2ZW50TGlzdGVuZXIgKmV4aXN0aW5nTGlzdGVuZXIgPSBqc0V2ZW50TGlzdGVu
ZXJzW2xpc3RlbmVyT2JqZWN0XTsKICAgaWYgKGV4aXN0aW5nTGlzdGVuZXIpCiAgICAgcmV0dXJu
IGV4aXN0aW5nTGlzdGVuZXI7CiAKICAgLy8gTm90ZSB0aGF0IHRoZSBKU0V2ZW50TGlzdGVuZXIg
Y29uc3RydWN0b3IgYWRkcyBpdCB0byBvdXIganNFdmVudExpc3RlbmVycyBsaXN0Ci0gIHJldHVy
biBuZXcgSlNFdmVudExpc3RlbmVyKE9iamVjdChsaXN0ZW5lck9iamVjdCksIE9iamVjdCh0aGlz
KSwgaHRtbCk7CisgIHJldHVybiBuZXcgSlNFdmVudExpc3RlbmVyKGxpc3RlbmVyT2JqZWN0LCB0
aGlzLCBodG1sKTsKIH0KIAotSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKldpbmRvdzo6Z2V0
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoY29uc3QgVmFsdWUmIHZhbCwgYm9vbCBodG1sKQor
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKldpbmRvdzo6Z2V0SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIoVmFsdWVJbXAgKnZhbCwgYm9vbCBodG1sKQogewotICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIHNvIGhvdCB0aGF0IGl0J3Mgd29ydGggY29kaW5nIGl0IGRpcmVjdGx5IHdpdGggaW1wcy4K
LSAgaWYgKHZhbC50eXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgaWYgKCF2YWwtPmlzT2JqZWN0KCkp
CiAgICAgcmV0dXJuIDA7Ci0gIE9iamVjdEltcCAqbGlzdGVuZXJPYmplY3QgPSBzdGF0aWNfY2Fz
dDxPYmplY3RJbXAgKj4odmFsLmltcCgpKTsKKyAgT2JqZWN0SW1wICpsaXN0ZW5lck9iamVjdCA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2YWwpOwogCiAgIEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyICpleGlzdGluZ0xpc3RlbmVyID0ganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzW2xp
c3RlbmVyT2JqZWN0XTsKICAgaWYgKGV4aXN0aW5nTGlzdGVuZXIpCkBAIC0xNjI0LDEyICsxNjE1
LDEyIEBAIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyICpXaW5kb3c6OmdldEoKIAogICAvLyBO
b3RlIHRoYXQgdGhlIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyIGNvbnN0cnVjdG9yIGFkZHMg
aXQgdG8KICAgLy8gb3VyIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycyBsaXN0Ci0gIHJldHVy
biBuZXcgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoT2JqZWN0KGxpc3RlbmVyT2JqZWN0KSwg
T2JqZWN0KHRoaXMpLCBodG1sKTsKKyAgcmV0dXJuIG5ldyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lck9iamVjdCwgdGhpcywgaHRtbCk7CiB9CiAKIEpTTGF6eUV2ZW50TGlzdGVu
ZXIgKldpbmRvdzo6Z2V0SlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBRU3RyaW5nJiBjb2RlLCBE
T006Ok5vZGVJbXBsICpub2RlLCBpbnQgbGluZU51bWJlcikKIHsKLSAgcmV0dXJuIG5ldyBKU0xh
enlFdmVudExpc3RlbmVyKGNvZGUsIE9iamVjdCh0aGlzKSwgbm9kZSwgbGluZU51bWJlcik7Cisg
IHJldHVybiBuZXcgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb2RlLCB0aGlzLCBub2RlLCBsaW5lTnVt
YmVyKTsKIH0KIAogdm9pZCBXaW5kb3c6OmNsZWFyKCBFeGVjU3RhdGUgKmV4ZWMgKQpAQCAtMTY1
NywxNCArMTY0OCwxNCBAQCB2b2lkIFdpbmRvdzo6c2V0Q3VycmVudEV2ZW50KEV2ZW50SW1wbCAq
CiAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93ICIgPDwgdGhpcyA8PCAiIChwYXJ0PSIgPDwg
bV9wYXJ0IDw8ICIpOjpzZXRDdXJyZW50RXZlbnQgbV9ldnQ9IiA8PCBldnQgPDwgZW5kbDsKIH0K
IAotVmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
IHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZXaW5kb3c6OmluZm8pKSB7Ci0gICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZXaW5kb3c6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICBy
ZXR1cm4gZXJyOwogICB9Ci0gIFdpbmRvdyAqd2luZG93ID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+
KHRoaXNPYmouaW1wKCkpOworICBXaW5kb3cgKndpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyAq
Pih0aGlzT2JqKTsKICAgUVN0cmluZyBzdHIsIHN0cjI7CiAKICAgS0hUTUxQYXJ0ICpwYXJ0ID0g
d2luZG93LT5tX3BhcnQ7CkBAIC0xNjcyLDggKzE2NjMsOCBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogCiAgIEtIVE1M
VmlldyAqd2lkZ2V0ID0gcGFydC0+dmlldygpOwotICBWYWx1ZSB2ID0gYXJnc1swXTsKLSAgVVN0
cmluZyBzID0gdi50b1N0cmluZyhleGVjKTsKKyAgVmFsdWVJbXAgKnYgPSBhcmdzWzBdOworICBV
U3RyaW5nIHMgPSB2LT50b1N0cmluZyhleGVjKTsKICAgc3RyID0gcy5xc3RyaW5nKCk7CiAKICAg
c3dpdGNoIChpZCkgewpAQCAtMTcwMCwxMyArMTY5MSwxMyBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgICBwYXJ0LT54bWxEb2NJbXBsKCktPnVwZGF0ZVJl
bmRlcmluZygpOwogICAgIGJvb2wgb2s7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIG9rID0gS1dR
KHBhcnQpLT5ydW5KYXZhU2NyaXB0UHJvbXB0KHN0ciwgYXJncy5zaXplKCkgPj0gMiA/IGFyZ3Nb
MV0udG9TdHJpbmcoZXhlYykucXN0cmluZygpIDogUVN0cmluZzo6bnVsbCwgc3RyMik7CisgICAg
b2sgPSBLV1EocGFydCktPnJ1bkphdmFTY3JpcHRQcm9tcHQoc3RyLCBhcmdzLnNpemUoKSA+PSAy
ID8gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpIDogUVN0cmluZzo6bnVsbCwgc3Ry
Mik7CiAjZWxzZQogICAgIGlmIChhcmdzLnNpemUoKSA+PSAyKQogICAgICAgc3RyMiA9IFFJbnB1
dERpYWxvZzo6Z2V0VGV4dChpMThuKCJLb25xdWVyb3I6IFByb21wdCIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBRU3R5bGVTaGVldDo6Y29udmVydEZyb21QbGFpblRleHQo
c3RyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUxpbmVFZGl0OjpOb3Jt
YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0udG9TdHJpbmco
ZXhlYykucXN0cmluZygpLCAmb2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCksICZvayk7CiAgICAgZWxzZQogICAg
ICAgc3RyMiA9IFFJbnB1dERpYWxvZzo6Z2V0VGV4dChpMThuKCJLb25xdWVyb3I6IFByb21wdCIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3R5bGVTaGVldDo6Y29udmVy
dEZyb21QbGFpblRleHQoc3RyKSwKQEAgLTE3NDUsMjEgKzE3MzYsMTkgQEAgVmFsdWUgV2luZG93
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogI2Vsc2UKICAgICAgIHsKICAgICAgICAgcG9s
aWN5ID0gMDsKLQlMT0coUG9wdXBCbG9ja2luZywgIkFsbG93ZWQgSmF2YVNjcmlwdCB3aW5kb3cg
b3BlbiBvZiAlcyIsIGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmFzY2lpKCkpOwor
CUxPRyhQb3B1cEJsb2NraW5nLCAiQWxsb3dlZCBKYXZhU2NyaXB0IHdpbmRvdyBvcGVuIG9mICVz
IiwgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmFzY2lpKCkpOwogICAgICAgfSBl
bHNlIHsKLQlMT0coUG9wdXBCbG9ja2luZywgIkJsb2NrZWQgSmF2YVNjcmlwdCB3aW5kb3cgb3Bl
biBvZiAlcyIsIGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmFzY2lpKCkpOworCUxP
RyhQb3B1cEJsb2NraW5nLCAiQmxvY2tlZCBKYXZhU2NyaXB0IHdpbmRvdyBvcGVuIG9mICVzIiwg
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmFzY2lpKCkpOwogICAgICAgfQogI2Vu
ZGlmCiAgICAgfQogCi0gICAgUVN0cmluZyBmcmFtZU5hbWUgPSAhYXJnc1sxXS5pc051bGwoKSAm
JiBhcmdzWzFdLnR5cGUoKSAhPSBVbmRlZmluZWRUeXBlID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykucXN0cmluZygpCi0gICAgICAgICAgICAgICAgICAg
ICAgICA6IFFTdHJpbmcoIl9ibGFuayIpOworICAgIFFTdHJpbmcgZnJhbWVOYW1lID0gYXJnc1sx
XS0+aXNVbmRlZmluZWRPck51bGwoKSA/IFFTdHJpbmcoIl9ibGFuayIpIDogYXJnc1sxXS0+dG9T
dHJpbmcoZXhlYykucXN0cmluZygpOwogCiAgICAgaWYgKCBwb2xpY3kgIT0gMCAmJiAhKHBhcnQt
PmZpbmRGcmFtZShmcmFtZU5hbWUpIHx8IGZyYW1lTmFtZSA9PSAiX3RvcCIgfHwgZnJhbWVOYW1l
ID09ICJfcGFyZW50IiB8fCBmcmFtZU5hbWUgPT0gIl9zZWxmIikpIHsKICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICB9IGVsc2UgewotICAgICAgaWYgKHYudHlwZSgpID09IFVuZGVmaW5l
ZFR5cGUpCisgICAgICBpZiAodi0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgc3RyID0gUVN0cmlu
ZygpOwogCiAgICAgICBLUGFydHM6OldpbmRvd0FyZ3Mgd2luYXJnczsKQEAgLTE3NjcsOCArMTc1
Niw4IEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCAKICAgICAgIC8v
IHNjYW4gZmVhdHVyZSBhcmd1bWVudAogICAgICAgdiA9IGFyZ3NbMl07CiAgICAgICBRU3RyaW5n
IGZlYXR1cmVzOwotICAgICAgaWYgKCF2LmlzTnVsbCgpICYmIHYudHlwZSgpICE9IFVuZGVmaW5l
ZFR5cGUgJiYgdi50b1N0cmluZyhleGVjKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGZlYXR1cmVz
ID0gdi50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICBpZiAoIXYtPmlzVW5kZWZpbmVk
T3JOdWxsKCkgJiYgdi0+dG9TdHJpbmcoZXhlYykuc2l6ZSgpID4gMCkgeworICAgICAgICBmZWF0
dXJlcyA9IHYtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKICAgICAgICAgLy8gc3BlY2lmeWlu
ZyB3aW5kb3cgcGFyYW1zIG1lYW5zIGZhbHNlIGRlZmF1bHRzCiAgICAgICAgIHdpbmFyZ3MubWVu
dUJhclZpc2libGUgPSBmYWxzZTsKICAgICAgICAgd2luYXJncy50b29sQmFyc1Zpc2libGUgPSBm
YWxzZTsKQEAgLTE5NzEsMjAgKzE5NjAsMjAgQEAgVmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIAogICBjYXNlIFdpbmRvdzo6U2Nyb2xsQnk6CiAgICAgd2luZG93LT51cGRh
dGVMYXlvdXQoKTsKICAgICBpZihhcmdzLnNpemUoKSA+PSAyICYmIHdpZGdldCkKLSAgICAgIHdp
ZGdldC0+c2Nyb2xsQnkoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhl
YykpOworICAgICAgd2lkZ2V0LT5zY3JvbGxCeShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIGNhc2UgV2lu
ZG93OjpTY3JvbGw6CiAgIGNhc2UgV2luZG93OjpTY3JvbGxUbzoKICAgICB3aW5kb3ctPnVwZGF0
ZUxheW91dCgpOwogICAgIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgd2lkZ2V0KQotICAgICAgd2lk
Z2V0LT5zZXRDb250ZW50c1BvcyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQz
MihleGVjKSk7CisgICAgICB3aWRnZXQtPnNldENvbnRlbnRzUG9zKGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
ICAgY2FzZSBXaW5kb3c6Ok1vdmVCeToKICAgICBpZihhcmdzLnNpemUoKSA+PSAyICYmIHdpZGdl
dCkKICAgICB7CiAgICAgICBRV2lkZ2V0ICogdGwgPSB3aWRnZXQtPnRvcExldmVsV2lkZ2V0KCk7
CiAJICBRUmVjdCBzZyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5HZW9tZXRyeShR
QXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuTnVtYmVyKHRsKSk7Ci0gICAgICBRUG9pbnQg
ZGVzdCA9IHRsLT5wb3MoKSArIFFQb2ludCggYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFd
LnRvSW50MzIoZXhlYykgKTsKKyAgICAgIFFQb2ludCBkZXN0ID0gdGwtPnBvcygpICsgUVBvaW50
KCBhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpICk7CiAgICAg
ICAvLyBTZWN1cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3MgYWJvdXQgVW5pdmVyc2FsQnJvd3Nl
cldyaXRlIHRvIGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAgICAgIGlmICggZGVzdC54KCkgPj0g
c2cueCgpICYmIGRlc3QueSgpID49IHNnLngoKSAmJgogICAgICAgICAgICBkZXN0LngoKSt0bC0+
d2lkdGgoKSA8PSBzZy53aWR0aCgpK3NnLngoKSAmJgpAQCAtMTk5Nyw3ICsxOTg2LDcgQEAgVmFs
dWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogICAgIHsKICAgICAgIFFXaWRn
ZXQgKiB0bCA9IHdpZGdldC0+dG9wTGV2ZWxXaWRnZXQoKTsKIAkgIFFSZWN0IHNnID0gUUFwcGxp
Y2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgp
LT5zY3JlZW5OdW1iZXIodGwpKTsKLSAgICAgIFFQb2ludCBkZXN0KCBhcmdzWzBdLnRvSW50MzIo
ZXhlYykrc2cueCgpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykrc2cueSgpICk7CisgICAgICBRUG9p
bnQgZGVzdCggYXJnc1swXS0+dG9JbnQzMihleGVjKStzZy54KCksIGFyZ3NbMV0tPnRvSW50MzIo
ZXhlYykrc2cueSgpICk7CiAgICAgICAvLyBTZWN1cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3Mg
YWJvdXQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIHRvIGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAg
ICAgIGlmICggZGVzdC54KCkgPj0gc2cueCgpICYmIGRlc3QueSgpID49IHNnLnkoKSAmJgogICAg
ICAgICAgICBkZXN0LngoKSt0bC0+d2lkdGgoKSA8PSBzZy53aWR0aCgpK3NnLngoKSAmJgpAQCAt
MjAwOSw3ICsxOTk4LDcgQEAgVmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IAogICAgIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgd2lkZ2V0KQogICAgIHsKICAgICAgIFFXaWRn
ZXQgKiB0bCA9IHdpZGdldC0+dG9wTGV2ZWxXaWRnZXQoKTsKLSAgICAgIFFTaXplIGRlc3QgPSB0
bC0+c2l6ZSgpICsgUVNpemUoIGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMy
KGV4ZWMpICk7CisgICAgICBRU2l6ZSBkZXN0ID0gdGwtPnNpemUoKSArIFFTaXplKCBhcmdzWzBd
LT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpICk7CiAJICBRUmVjdCBzZyA9
IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5HZW9tZXRyeShRQXBwbGljYXRpb246OmRl
c2t0b3AoKS0+c2NyZWVuTnVtYmVyKHRsKSk7CiAgICAgICAvLyBTZWN1cml0eSBjaGVjazogd2l0
aGluIGRlc2t0b3AgbGltaXRzIGFuZCBiaWdnZXIgdGhhbiAxMDB4MTAwIChwZXIgc3BlYykKICAg
ICAgIGlmICggdGwtPngoKStkZXN0LndpZHRoKCkgPD0gc2cueCgpK3NnLndpZHRoKCkgJiYKQEAg
LTIwMjcsNyArMjAxNiw3IEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCAKICAgICBpZihhcmdzLnNpemUoKSA+PSAyICYmIHdpZGdldCkKICAgICB7CiAgICAgICBRV2lk
Z2V0ICogdGwgPSB3aWRnZXQtPnRvcExldmVsV2lkZ2V0KCk7Ci0gICAgICBRU2l6ZSBkZXN0ID0g
UVNpemUoIGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpICk7Cisg
ICAgICBRU2l6ZSBkZXN0ID0gUVNpemUoIGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGFyZ3NbMV0t
PnRvSW50MzIoZXhlYykgKTsKIAkgIFFSZWN0IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCkt
PnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1iZXIodGwp
KTsKICAgICAgIC8vIFNlY3VyaXR5IGNoZWNrOiB3aXRoaW4gZGVza3RvcCBsaW1pdHMgYW5kIGJp
Z2dlciB0aGFuIDEwMHgxMDAgKHBlciBzcGVjKQogICAgICAgaWYgKCB0bC0+eCgpK2Rlc3Qud2lk
dGgoKSA8PSBzZy54KCkrc2cud2lkdGgoKSAmJgpAQCAtMjA0NCwxNCArMjAzMywxNCBAQCBWYWx1
ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgIGNhc2UgV2luZG93OjpTZXRU
aW1lb3V0OgogICAgIGlmICghd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiB2LmlzQShTdHJp
bmdUeXBlKSkgewotICAgICAgaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7CisgICAgaWYg
KGFyZ3Muc2l6ZSgpID49IDIgJiYgdi0+aXNTdHJpbmcoKSkgeworICAgICAgaW50IGkgPSBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpOwogICAgICAgaW50IHIgPSAoY29uc3RfY2FzdDxXaW5kb3cqPih3
aW5kb3cpKS0+aW5zdGFsbFRpbWVvdXQocywgaSwgdHJ1ZSAvKnNpbmdsZSBzaG90Ki8pOwogICAg
ICAgcmV0dXJuIE51bWJlcihyKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPj0g
MiAmJiB2LmlzQShPYmplY3RUeXBlKSAmJiBPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmltcGxlbWVu
dHNDYWxsKCkpIHsKLSAgICAgIFZhbHVlIGZ1bmMgPSBhcmdzWzBdOwotICAgICAgaW50IGkgPSBh
cmdzWzFdLnRvSW50MzIoZXhlYyk7CisgICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiB2
LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2KS0+aW1wbGVtZW50c0Nh
bGwoKSkgeworICAgICAgVmFsdWVJbXAgKmZ1bmMgPSBhcmdzWzBdOworICAgICAgaW50IGkgPSBh
cmdzWzFdLT50b0ludDMyKGV4ZWMpOwogCiAgICAgICAvLyBBbGwgYXJndW1lbnRzIGFmdGVyIHRo
ZSBzZWNvbmQgc2hvdWxkIGdvIHRvIHRoZSBmdW5jdGlvbgogICAgICAgLy8gRklYTUU6IGNvdWxk
IGJlIG1vcmUgZWZmaWNpZW50CkBAIC0yMDY1LDE1ICsyMDU0LDE0IEBAIFZhbHVlIFdpbmRvd0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCAKICAgY2FzZSBXaW5kb3c6OlNldEludGVydmFsOgog
ICAgIGlmICghd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiB2LmlzQShTdHJpbmdUeXBlKSkg
ewotICAgICAgaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGFyZ3Muc2l6
ZSgpID49IDIgJiYgdi0+aXNTdHJpbmcoKSkgeworICAgICAgaW50IGkgPSBhcmdzWzFdLT50b0lu
dDMyKGV4ZWMpOwogICAgICAgaW50IHIgPSAoY29uc3RfY2FzdDxXaW5kb3cqPih3aW5kb3cpKS0+
aW5zdGFsbFRpbWVvdXQocywgaSwgZmFsc2UpOwogICAgICAgcmV0dXJuIE51bWJlcihyKTsKICAg
ICB9Ci0gICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiAhT2JqZWN0OjpkeW5hbWljQ2Fz
dCh2KS5pc051bGwoKSAmJgotCSAgICAgT2JqZWN0OjpkeW5hbWljQ2FzdCh2KS5pbXBsZW1lbnRz
Q2FsbCgpKSB7Ci0gICAgICBWYWx1ZSBmdW5jID0gYXJnc1swXTsKLSAgICAgIGludCBpID0gYXJn
c1sxXS50b0ludDMyKGV4ZWMpOworICAgIGVsc2UgaWYgKGFyZ3Muc2l6ZSgpID49IDIgJiYgdi0+
aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odiktPmltcGxlbWVudHNDYWxs
KCkpIHsKKyAgICAgIFZhbHVlSW1wICpmdW5jID0gYXJnc1swXTsKKyAgICAgIGludCBpID0gYXJn
c1sxXS0+dG9JbnQzMihleGVjKTsKIAogICAgICAgLy8gQWxsIGFyZ3VtZW50cyBhZnRlciB0aGUg
c2Vjb25kIHNob3VsZCBnbyB0byB0aGUgZnVuY3Rpb24KICAgICAgIC8vIEZJWE1FOiBjb3VsZCBi
ZSBtb3JlIGVmZmljaWVudApAQCAtMjA4OCw3ICsyMDc2LDcgQEAgVmFsdWUgV2luZG93RnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogICBjYXNlIFdpbmRvdzo6Q2xlYXJJbnRlcnZhbDoKICAg
ICBpZiAoIXdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpKQogICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgKGNvbnN0X2Nhc3Q8V2luZG93Kj4od2luZG93KSktPmNsZWFyVGltZW91dCh2
LnRvSW50MzIoZXhlYykpOworICAgIChjb25zdF9jYXN0PFdpbmRvdyo+KHdpbmRvdykpLT5jbGVh
clRpbWVvdXQodi0+dG9JbnQzMihleGVjKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICBj
YXNlIFdpbmRvdzo6Rm9jdXM6CiAgICAgaWYgKHdpZGdldCkKQEAgLTIwOTcsNyArMjA4NSw3IEBA
IFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCAKICAgY2FzZSBXaW5kb3c6
OkdldFNlbGVjdGlvbjoKICAgICBpZiAoIXdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpKQogICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIFZhbHVlKHdpbmRvdy0+c2VsZWN0
aW9uKCkpOworICAgIHJldHVybiB3aW5kb3ctPnNlbGVjdGlvbigpOwogICBjYXNlIFdpbmRvdzo6
Qmx1cjoKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgS1dRKHBhcnQpLT51bmZvY3VzV2luZG93KCk7
CkBAIC0yMTIxLDcgKzIxMDksNyBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgCiAgICAgICAvLyBUbyBjb25mb3JtIHRvIHRoZSBTUEVDLCB3ZSBvbmx5IGFzayBpZiB0
aGUgd2luZG93CiAgICAgICAvLyBoYXMgbW9yZSB0aGFuIG9uZSBlbnRyeSBpbiB0aGUgaGlzdG9y
eSAoTlMgZG9lcyB0aGF0IHRvbykuCiAgICAgICBIaXN0b3J5IGhpc3RvcnkoZXhlYyxwYXJ0KTsK
LSAgICAgIGlmICggaGlzdG9yeS5nZXQoIGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSApLnRvSW50
MzIoZXhlYykgPD0gMQorICAgICAgaWYgKCBoaXN0b3J5LmdldCggZXhlYywgbGVuZ3RoUHJvcGVy
dHlOYW1lICktPnRvSW50MzIoZXhlYykgPD0gMQogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAg
ICAgLy8gRklYTUU6IEhvdyBhcmUgd2UgZ29pbmcgdG8gaGFuZGxlIHRoaXM/CiAjZWxzZQpAQCAt
MjE1MCw3ICsyMTM4LDcgQEAgVmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IAogICAgICAgICBpZiAobGlzdGVuZXIpIHsKIAkgICAgRG9jdW1lbnRJbXBsKiBkb2NpbXBsID0g
cGFydC0+eG1sRG9jSW1wbCgpOwogICAgICAgICAgICAgaWYgKGRvY2ltcGwpCi0gICAgICAgICAg
ICAgICAgZG9jaW1wbC0+YWRkV2luZG93RXZlbnRMaXN0ZW5lcihET006OkV2ZW50SW1wbDo6dHlw
ZVRvSWQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSksbGlzdGVuZXIsYXJnc1syXS50
b0Jvb2xlYW4oZXhlYykpOworICAgICAgICAgICAgICAgIGRvY2ltcGwtPmFkZFdpbmRvd0V2ZW50
TGlzdGVuZXIoRE9NOjpFdmVudEltcGw6OnR5cGVUb0lkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpKSxsaXN0ZW5lcixhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICB9CkBAIC0yMTYxLDcgKzIxNDksNyBA
QCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgICAgIGlmIChs
aXN0ZW5lcikgewogCSAgICBEb2N1bWVudEltcGwqIGRvY2ltcGwgPSBwYXJ0LT54bWxEb2NJbXBs
KCk7CiAgICAgICAgICAgICBpZiAoZG9jaW1wbCkKLSAgICAgICAgICAgICAgICBkb2NpbXBsLT5y
ZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjp0eXBlVG9JZChhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSxsaXN0ZW5lcixhcmdzWzJdLnRvQm9vbGVhbihleGVj
KSk7CisgICAgICAgICAgICAgICAgZG9jaW1wbC0+cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihE
T006OkV2ZW50SW1wbDo6dHlwZVRvSWQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkp
LGxpc3RlbmVyLGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KQEAgLTIxODEsNyArMjE2OSw3IEBAIHZvaWQgV2lu
ZG93Ojp1cGRhdGVMYXlvdXQoKSBjb25zdAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFNjaGVk
dWxlZEFjdGlvbiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotU2NoZWR1bGVkQWN0aW9uOjpT
Y2hlZHVsZWRBY3Rpb24oT2JqZWN0IF9mdW5jLCBMaXN0IF9hcmdzLCBib29sIF9zaW5nbGVTaG90
KQorU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oT2JqZWN0SW1wICpfZnVuYywgTGlz
dCBfYXJncywgYm9vbCBfc2luZ2xlU2hvdCkKIHsKICAgLy9rZERlYnVnKDYwNzApIDw8ICJTY2hl
ZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihpc0Z1bmN0aW9uKSAiIDw8IHRoaXMgPDwgZW5k
bDsKICAgZnVuYyA9IF9mdW5jOwpAQCAtMjIwOSwyMyArMjE5NywyMyBAQCB2b2lkIFNjaGVkdWxl
ZEFjdGlvbjo6ZXhlY3V0ZShXaW5kb3cgKndpCiAKICAgLy9rZERlYnVnKDYwNzApIDw8ICJTY2hl
ZHVsZWRBY3Rpb246OmV4ZWN1dGUgIiA8PCB0aGlzIDw8IGVuZGw7CiAgIGlmIChpc0Z1bmN0aW9u
KSB7Ci0gICAgaWYgKGZ1bmMuaW1wbGVtZW50c0NhbGwoKSkgeworICAgIGlmIChmdW5jLT5pbXBs
ZW1lbnRzQ2FsbCgpKSB7CiAgICAgICAvLyAjIyMjIGNoZWNrIHRoaXMKICAgICAgIFFfQVNTRVJU
KCB3aW5kb3ctPm1fcGFydCApOwogICAgICAgaWYgKCB3aW5kb3ctPm1fcGFydCApCiAgICAgICB7
CiAgICAgICAgIEtKUzo6SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gS0pTUHJveHk6OnByb3h5
KCB3aW5kb3ctPm1fcGFydCApLT5pbnRlcnByZXRlcigpOwogICAgICAgICBFeGVjU3RhdGUgKmV4
ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygpOwotICAgICAgICBRX0FTU0VSVCggd2luZG93
ID09IGludGVycHJldGVyLT5nbG9iYWxPYmplY3QoKS5pbXAoKSApOwotICAgICAgICBPYmplY3Qg
b2JqKCB3aW5kb3cgKTsKKyAgICAgICAgUV9BU1NFUlQoIHdpbmRvdyA9PSBpbnRlcnByZXRlci0+
Z2xvYmFsT2JqZWN0KCkgKTsKKyAgICAgICAgT2JqZWN0SW1wICpvYmooIHdpbmRvdyApOwogCUlu
dGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgIGZ1bmMuY2FsbChleGVjLG9iaixhcmdzKTsgLy8g
bm90ZSB0aGF0IGNhbGwoKSBjcmVhdGVzIGl0cyBvd24gZXhlY3V0aW9uIHN0YXRlIGZvciB0aGUg
ZnVuYyBjYWxsCisgICAgICAgIGZ1bmMtPmNhbGwoZXhlYyxvYmosYXJncyk7IC8vIG5vdGUgdGhh
dCBjYWxsKCkgY3JlYXRlcyBpdHMgb3duIGV4ZWN1dGlvbiBzdGF0ZSBmb3IgdGhlIGZ1bmMgY2Fs
bAogCUludGVycHJldGVyOjp1bmxvY2soKTsKIAlpZiAoIGV4ZWMtPmhhZEV4Y2VwdGlvbigpICkg
ewogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAg
ICAgICAgIGNoYXIgKm1lc3NhZ2UgPSBleGVjLT5leGNlcHRpb24oKS50b09iamVjdChleGVjKS5n
ZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSkudG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKLSAg
ICAgICAgICBpbnQgbGluZU51bWJlciA9ICBleGVjLT5leGNlcHRpb24oKS50b09iamVjdChleGVj
KS5nZXQoZXhlYywgImxpbmUiKS50b0ludDMyKGV4ZWMpOworICAgICAgICAgIGNoYXIgKm1lc3Nh
Z2UgPSBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBtZXNzYWdl
UHJvcGVydHlOYW1lKS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKKyAgICAgICAgICBpbnQgbGlu
ZU51bWJlciA9ICBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCAi
bGluZSIpLT50b0ludDMyKGV4ZWMpOwogICAgICAgICAgIEludGVycHJldGVyOjp1bmxvY2soKTsK
IAkgIGlmIChJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpIHsKIAkgICAgcHJp
bnRmKCIodGltZXIpOiVzXG4iLCBtZXNzYWdlKTsKQEAgLTIyODgsOSArMjI3Niw5IEBAIGludCBX
aW5kb3dRT2JqZWN0OjppbnN0YWxsVGltZW91dChjb25zdCAKICAgcmV0dXJuIGlkOwogfQogCi1p
bnQgV2luZG93UU9iamVjdDo6aW5zdGFsbFRpbWVvdXQoY29uc3QgVmFsdWUgJmZ1bmMsIExpc3Qg
YXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2ludCBXaW5kb3dRT2JqZWN0OjppbnN0YWxs
VGltZW91dChWYWx1ZUltcCAqZnVuYywgTGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90
KQogewotICBPYmplY3Qgb2JqRnVuYyA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGZ1bmMgKTsKKyAg
T2JqZWN0SW1wICpvYmpGdW5jID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGZ1bmMpOwogICBp
bnQgaWQgPSBzdGFydFRpbWVyKHQpOwogICBzY2hlZHVsZWRBY3Rpb25zLmluc2VydChpZCwgbmV3
IFNjaGVkdWxlZEFjdGlvbihvYmpGdW5jLGFyZ3Msc2luZ2xlU2hvdCkpOwogICByZXR1cm4gaWQ7
CkBAIC0yMzc5LDcgKzIzNjcsNyBAQCBib29sIFdpbmRvd1FPYmplY3Q6Omhhc1RpbWVvdXRzKCkK
IH0KICNlbmRpZgogCi1ib29sIEZyYW1lQXJyYXk6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRnJh
bWVBcnJheTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QKIHsKICAgaWYgKHBhcnQuaXNOdWxsKCkpCiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjM4OSwxMSArMjM3NywxMSBAQCBib29sIEZyYW1l
QXJyYXk6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0CiAgIGlmIChwID09IGxlbmd0aFByb3BlcnR5
TmFtZSkgewogICAgIHJlc3VsdCA9IE51bWJlcihsZW4pOwogICAgIHJldHVybiB0cnVlOwotICB9
IGVsc2UgaWYgKHA9PSAibG9jYXRpb24iKSB7CisgIH0gZWxzZSBpZiAocCA9PSAibG9jYXRpb24i
KSB7CiAgICAgLy8gbm9uLXN0YW5kYXJkIHByb3BlcnR5LCBidXQgd29ya3MgaW4gTlMgYW5kIElF
Ci0gICAgT2JqZWN0IG9iaiA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoV2luZG93OjpyZXRyaWV2ZShw
YXJ0KSk7Ci0gICAgaWYgKCFvYmouaXNOdWxsKCkpIHsKLSAgICAgIHJlc3VsdCA9IG9iai5nZXQo
ZXhlYywgImxvY2F0aW9uIik7CisgICAgT2JqZWN0SW1wICpvYmogPSBXaW5kb3c6OnJldHJpZXZl
V2luZG93KHBhcnQpOworICAgIGlmIChvYmopIHsKKyAgICAgIHJlc3VsdCA9IG9iai0+Z2V0KGV4
ZWMsICJsb2NhdGlvbiIpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CkBAIC0yNDQ2
LDcgKzI0MzQsNyBAQCBMb2NhdGlvbjo6TG9jYXRpb24oS0hUTUxQYXJ0ICpwKSA6IG1fcGFyCiB7
CiB9CiAKLWJvb2wgTG9jYXRpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgTG9jYXRpb246Omdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJ
bXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIGlmIChtX3BhcnQuaXNOdWxsKCkpCiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjUxMCwxMiArMjQ5OCwxMiBAQCBib29sIExvY2F0aW9uOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgCiAgIHJldHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMs
IHAsIHJlc3VsdCk7CiB9CiAKLXZvaWQgTG9jYXRpb246OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnAsIGNvbnN0IFZhbHVlICZ2LCBpbnQgYXR0cikKK3ZvaWQgTG9jYXRp
b246OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAsIFZhbHVlSW1wICp2
LCBpbnQgYXR0cikKIHsKICAgaWYgKG1fcGFydC5pc051bGwoKSkKICAgICByZXR1cm47CiAKLSAg
UVN0cmluZyBzdHIgPSB2LnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgUVN0cmluZyBzdHIg
PSB2LT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CiAgIEtVUkwgdXJsID0gbV9wYXJ0LT51cmwo
KTsKICAgY29uc3QgSGFzaEVudHJ5ICplbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMb2NhdGlv
blRhYmxlLCBwKTsKICAgaWYgKGVudHJ5KQpAQCAtMjU3Miw3ICsyNTYwLDcgQEAgdm9pZCBMb2Nh
dGlvbjo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29ucwogICB9CiB9CiAKLVZhbHVlIExvY2F0aW9u
Ojp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUpIGNvbnN0CitWYWx1ZUltcCAqTG9j
YXRpb246OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSkgY29uc3QKIHsKICAgcmV0
dXJuIFN0cmluZyh0b1N0cmluZyhleGVjKSk7CiB9CkBAIC0yNTg1LDE0ICsyNTczLDE0IEBAIFVT
dHJpbmcgTG9jYXRpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSAKICAgICByZXR1cm4gbV9wYXJ0
LT51cmwoKS5wcmV0dHlVUkwoKTsKIH0KIAotVmFsdWUgTG9jYXRpb25GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
KkxvY2F0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygm
TG9jYXRpb246OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxU
eXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZMb2NhdGlvbjo6aW5mbykpIHsK
KyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgTG9jYXRp
b24gKmxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8TG9jYXRpb24gKj4odGhpc09iai5pbXAoKSk7Cisg
IExvY2F0aW9uICpsb2NhdGlvbiA9IHN0YXRpY19jYXN0PExvY2F0aW9uICo+KHRoaXNPYmopOwog
ICBLSFRNTFBhcnQgKnBhcnQgPSBsb2NhdGlvbi0+cGFydCgpOwogICBpZiAocGFydCkgewogICAg
ICAgCkBAIC0yNjAzLDcgKzI1OTEsNyBAQCBWYWx1ZSBMb2NhdGlvbkZ1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjCiAgICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgTG9jYXRpb246OlJlcGxhY2U6
CiAgICAgewotICAgICAgUVN0cmluZyBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKTsKKyAgICAgIFFTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpOwogICAgICAgS0hUTUxQYXJ0KiBwID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+
cGFydCgpOwogICAgICAgaWYgKCBwICkgewogICAgICAgICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9
IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7CkBAIC0yNjI5LDcgKzI2MTcsNyBAQCBWYWx1
ZSBMb2NhdGlvbkZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjCiAgICAgICAgIEtIVE1MUGFydCAq
cCA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPnBhcnQoKTsKICAgICAgICAgaWYgKHAp
IHsKICAgICAgICAgICAgIGNvbnN0IFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdp
bmRvdyhwYXJ0KTsKLSAgICAgICAgICAgIFFTdHJpbmcgZHN0VXJsID0gcC0+eG1sRG9jSW1wbCgp
LT5jb21wbGV0ZVVSTChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CisgICAgICAg
ICAgICBRU3RyaW5nIGRzdFVybCA9IHAtPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICAgICAgICAgIGlmICghZHN0VXJsLnN0
YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpIHx8ICh3aW5kb3cgJiYgd2luZG93LT5pc1Nh
ZmVTY3JpcHQoZXhlYykpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHN0
YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigp
KS0+d2FzUnVuQnlVc2VyR2VzdHVyZSgpOwogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTI2ODEsNyAr
MjY2OSw3IEBAIFNlbGVjdGlvbjo6U2VsZWN0aW9uKEtIVE1MUGFydCAqcCkgOiBtX3AKIHsKIH0K
IAotYm9vbCBTZWxlY3Rpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK2Jvb2wgU2VsZWN0aW9uOjpnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlSW1w
IComcmVzdWx0KSBjb25zdAogewogICBpZiAobV9wYXJ0LmlzTnVsbCgpKQogICAgIHJldHVybiBm
YWxzZTsKQEAgLTI3NTYsNyArMjc0NCw3IEBAIGJvb2wgU2VsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUKICAgICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBw
LCByZXN1bHQpOwogfQogCi1WYWx1ZSBTZWxlY3Rpb246OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAq
ZXhlYywgVHlwZSkgY29uc3QKK1ZhbHVlSW1wICpTZWxlY3Rpb246OnRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSAqZXhlYywgVHlwZSkgY29uc3QKIHsKICAgcmV0dXJuIFN0cmluZyh0b1N0cmluZyhleGVj
KSk7CiB9CkBAIC0yNzY5LDE0ICsyNzU3LDE0IEBAIFVTdHJpbmcgU2VsZWN0aW9uOjp0b1N0cmlu
ZyhFeGVjU3RhdGUgKikKICAgICByZXR1cm4gVVN0cmluZyhtX3BhcnQtPnNlbGVjdGlvbigpLnRv
UmFuZ2UoKS0+dG9TdHJpbmcoZXhjZXB0aW9uKSk7CiB9CiAKLVZhbHVlIFNlbGVjdGlvbkZ1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqU2VsZWN0aW9uRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlz
T2JqLmluaGVyaXRzKCZTZWxlY3Rpb246OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZTZWxlY3Rpb246OmluZm8pKSB7CisgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwog
ICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICBTZWxlY3Rpb24gKnNlbGVjdGlvbiA9IHN0
YXRpY19jYXN0PFNlbGVjdGlvbiAqPih0aGlzT2JqLmltcCgpKTsKKyAgICBTZWxlY3Rpb24gKnNl
bGVjdGlvbiA9IHN0YXRpY19jYXN0PFNlbGVjdGlvbiAqPih0aGlzT2JqKTsKICAgICBLSFRNTFBh
cnQgKnBhcnQgPSBzZWxlY3Rpb24tPnBhcnQoKTsKICAgICBpZiAocGFydCkgewogICAgICAgICBE
b2N1bWVudEltcGwgKmRvY2ltcGwgPSBwYXJ0LT54bWxEb2NJbXBsKCk7CkBAIC0yNzg2LDcgKzI3
NzQsNyBAQCBWYWx1ZSBTZWxlY3Rpb25GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAgICAgICAg
IHN3aXRjaCAoaWQpIHsKICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDb2xsYXBzZToKICAg
ICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhwYXJ0LT5sYXN0RWRpdENv
bW1hbmQoKSk7Ci0gICAgICAgICAgICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpTZWxl
Y3Rpb24oUG9zaXRpb24odG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpLCBr
aHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgICAgICAgICBwYXJ0LT5zZXRT
ZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlvbihQb3NpdGlvbih0b05vZGUoYXJnc1swXSksIGFyZ3Nb
MV0tPnRvSW50MzIoZXhlYykpLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDb2xsYXBzZVRv
RW5kOgogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBhcnQtPmxh
c3RFZGl0Q29tbWFuZCgpKTsKQEAgLTI4MDIsMjIgKzI3OTAsMjIgQEAgVmFsdWUgU2VsZWN0aW9u
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlNldEJhc2VBbmRFeHRlbnQ6IHsKICAgICAgICAgICAgICAg
ICBUeXBpbmdDb21tYW5kOjpjbG9zZVR5cGluZyhwYXJ0LT5sYXN0RWRpdENvbW1hbmQoKSk7Ci0g
ICAgICAgICAgICAgICAgUG9zaXRpb24gYmFzZSh0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0udG9J
bnQzMihleGVjKSk7Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gZXh0ZW50KHRvTm9kZShhcmdz
WzJdKSwgYXJnc1szXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBQb3NpdGlvbiBi
YXNlKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICAgICAgUG9zaXRpb24gZXh0ZW50KHRvTm9kZShhcmdzWzJdKSwgYXJnc1szXS0+dG9JbnQzMihl
eGVjKSk7CiAgICAgICAgICAgICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpTZWxlY3Rp
b24oYmFzZSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZLCBleHRlbnQsIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlNldFBvc2l0aW9uOgogICAgICAgICAgICAg
ICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgpKTsK
LSAgICAgICAgICAgICAgICBwYXJ0LT5zZXRTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlvbihQb3Np
dGlvbih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0udG9JbnQzMihleGVjKSksIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVjdGlvbihr
aHRtbDo6U2VsZWN0aW9uKFBvc2l0aW9uKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQz
MihleGVjKSksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok1vZGlmeTogewogICAgICAgICAg
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgp
KTsKICAgICAgICAgICAgICAgICBraHRtbDo6U2VsZWN0aW9uIHMocGFydC0+c2VsZWN0aW9uKCkp
OwogICAgICAgICAgICAgICAgIGtodG1sOjpTZWxlY3Rpb246OkVBbHRlciBhbHRlciA9IGtodG1s
OjpTZWxlY3Rpb246Ok1PVkU7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkubG93ZXIoKSA9PSAiZXh0ZW5kIikKKyAgICAgICAgICAgICAgICBpZiAo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkubG93ZXIoKSA9PSAiZXh0ZW5kIikKICAg
ICAgICAgICAgICAgICAgICAgYWx0ZXIgPSBraHRtbDo6U2VsZWN0aW9uOjpFWFRFTkQ7Ci0gICAg
ICAgICAgICAgICAgRE9NU3RyaW5nIGRpcmVjdGlvblN0cmluZyA9IGFyZ3NbMV0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgICAgICBET01TdHJpbmcgZGlyZWN0
aW9uU3RyaW5nID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkubG93ZXIoKTsKICAg
ICAgICAgICAgICAgICBraHRtbDo6U2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGto
dG1sOjpTZWxlY3Rpb246OkZPUldBUkQ7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvblN0
cmluZyA9PSAiYmFja3dhcmQiKQogICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBraHRt
bDo6U2VsZWN0aW9uOjpCQUNLV0FSRDsKQEAgLTI4MjYsNyArMjgxNCw3IEBAIFZhbHVlIFNlbGVj
dGlvbkZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUKICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uU3RyaW5nID09ICJyaWdodCIpCiAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGto
dG1sOjpTZWxlY3Rpb246OlJJR0hUOwogICAgICAgICAgICAgICAgIGtodG1sOjpFVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5ID0ga2h0bWw6OkNIQVJBQ1RFUjsKLSAgICAgICAgICAgICAgICBE
T01TdHJpbmcgZ3JhbnVsYXJpdHlTdHJpbmcgPSBhcmdzWzJdLnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpLmxvd2VyKCk7CisgICAgICAgICAgICAgICAgRE9NU3RyaW5nIGdyYW51bGFyaXR5U3RyaW5n
ID0gYXJnc1syXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAg
ICAgICBpZiAoZ3JhbnVsYXJpdHlTdHJpbmcgPT0gIndvcmQiKQogICAgICAgICAgICAgICAgICAg
ICBncmFudWxhcml0eSA9IGtodG1sOjpXT1JEOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGdy
YW51bGFyaXR5U3RyaW5nID09ICJsaW5lIikKQEAgLTI4NTgsNyArMjg0Niw3IEBAIEJhckluZm86
OkJhckluZm8oRXhlY1N0YXRlICpleGVjLCBLSFRNTFAKIHsKIH0KIAotYm9vbCBCYXJJbmZvOjpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
JiByZXN1bHQpIGNvbnN0Citib29sIEJhckluZm86OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAg
IGlmIChtX3BhcnQuaXNOdWxsKCkpCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkwOSwxMiArMjg5
NywxMiBAQCBjb25zdCBDbGFzc0luZm8gSGlzdG9yeTo6aW5mbyA9IHsgIkhpc3RvCiAqLwogSU1Q
TEVNRU5UX1BST1RPRlVOQyhIaXN0b3J5RnVuYykKIAotYm9vbCBIaXN0b3J5OjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAsIFZhbHVlJiByZXN1bHQp
IGNvbnN0Citib29sIEhpc3Rvcnk6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcCwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0CiB7CiAgIHJldHVybiBs
b29rdXBHZXRPd25Qcm9wZXJ0eTxIaXN0b3J5RnVuYywgSGlzdG9yeSwgT2JqZWN0SW1wPihleGVj
LCBwLCAmSGlzdG9yeVRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCi1WYWx1ZSBIaXN0b3J5Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
SGlzdG9yeTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAog
ewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgTGVuZ3RoOgpAQCAtMjk0NSwxNCArMjkzMywx
NCBAQCBVU3RyaW5nIEhpc3Rvcnk6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlCiAgIHJldHVybiAi
W29iamVjdCBIaXN0b3J5XSI7CiB9CiAKLVZhbHVlIEhpc3RvcnlGdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkhp
c3RvcnlGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZIaXN0
b3J5OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVy
cm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSGlzdG9yeTo6aW5mbykpIHsKKyAgICBP
YmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgSGlzdG9yeSAqaGlz
dG9yeSA9IHN0YXRpY19jYXN0PEhpc3RvcnkgKj4odGhpc09iai5pbXAoKSk7CisgIEhpc3Rvcnkg
Kmhpc3RvcnkgPSBzdGF0aWNfY2FzdDxIaXN0b3J5ICo+KHRoaXNPYmopOwogCiAgIGludCBzdGVw
czsKICAgc3dpdGNoIChpZCkgewpAQCAtMjk2Myw3ICsyOTUxLDcgQEAgVmFsdWUgSGlzdG9yeUZ1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLAogICAgIHN0ZXBzID0gMTsKICAgICBicmVhazsKICAg
Y2FzZSBIaXN0b3J5OjpHbzoKLSAgICBzdGVwcyA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAg
ICBzdGVwcyA9IGFyZ3NbMF0tPnRvSW50MzIoZXhlYyk7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjk4Niw3ICsyOTc0LDcgQEAgYm9vbCBLb25x
dWVyb3I6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZQogICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFs
dWUgS29ucXVlcm9yOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBj
b25zdAorVmFsdWVJbXAgKktvbnF1ZXJvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcCkgY29uc3QKIHsKICAgaWYgKCBwID09ICJnb0hpc3RvcnkiIHx8IHBhcnQtPnVy
bCgpLnByb3RvY29sKCkgIT0gImh0dHAiIHx8IHBhcnQtPnVybCgpLmhvc3QoKSAhPSAibG9jYWxo
b3N0IiApCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzAwMiw3ICsyOTkwLDcgQEAgVmFs
dWUgS29ucXVlcm9yOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjbwogICAgICAgICBjYXNlIFFWYXJp
YW50OjpJbnQ6CiAgICAgICAgICAgcmV0dXJuIE51bWJlciggcHJvcC50b0ludCgpICk7CiAgICAg
ICAgIGNhc2UgUVZhcmlhbnQ6OlN0cmluZzoKLSAgICAgICAgICByZXR1cm4gU3RyaW5nKCBwcm9w
LnRvU3RyaW5nKCkgKTsKKyAgICAgICAgICByZXR1cm4gU3RyaW5nKCBwcm9wLT50b1N0cmluZygp
ICk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMw
MTMsNyArMzAwMSw3IEBAIFZhbHVlIEtvbnF1ZXJvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY28K
ICAgcmV0dXJuIC8qRnVuY3Rpb24qLyggbmV3IEtvbnF1ZXJvckZ1bmModGhpcywgcC5xc3RyaW5n
KCkubGF0aW4xKCkgKSApOwogfQogCi1WYWx1ZSBLb25xdWVyb3JGdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICYsIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqS29ucXVlcm9y
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKICAgS1BhcnRzOjpCcm93c2VyRXh0ZW5zaW9uICpleHQgPSBrb25xdWVy
b3ItPnBhcnQtPmJyb3dzZXJFeHRlbnNpb24oKTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21h
L2tqc193aW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC1wIC11
IC11IC1wIC1yMS40OCBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCi0tLSBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX3dpbmRvdy5oCTI3IEp1bCAyMDA1IDAxOjM0OjI4IC0wMDAwCTEuNDgK
KysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgJNyBBdWcgMjAwNSAwNDo0NDoxNiAt
MDAwMApAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIEhlaWdodCwgV2lk
dGgsIENvbG9yRGVwdGgsIFBpeGVsRGVwdGgsIEF2YWlsTGVmdCwgQXZhaWxUb3AsIEF2YWlsSGVp
Z2h0LAogICAgICAgQXZhaWxXaWR0aAogICAgIH07Ci0gICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgS0hUTUxWaWV3
ICp2aWV3OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQpAQCAtODEsNyArODEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
KiBmb3IgdGhlIHNwZWNpZmllZCBwYXJ0IHAgdGhpcyB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVy
IHRvIGhhdmUgdW5pcXVlCiAgICAgICogYmluZGluZ3MuCiAgICAgICovCi0gICAgc3RhdGljIFZh
bHVlIHJldHJpZXZlKEtIVE1MUGFydCAqcCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpyZXRyaWV2
ZShLSFRNTFBhcnQgKnApOwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIFdpbmRvdyBvYmpl
Y3QgZm9yIGEgZ2l2ZW4gSFRNTCBwYXJ0CiAgICAgICovCkBAIC05MywxMiArOTMsMTIgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIFdpbmRvdyAqcmV0cmlldmVBY3RpdmUoRXhlY1N0YXRl
ICpleGVjKTsKICAgICBRR3VhcmRlZFB0cjxLSFRNTFBhcnQ+IHBhcnQoKSBjb25zdCB7IHJldHVy
biBtX3BhcnQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBpbnQgaW5zdGFsbFRpbWVv
dXQoY29uc3QgVVN0cmluZyAmaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAg
aW50IGluc3RhbGxUaW1lb3V0KGNvbnN0IFZhbHVlICZmdW5jdGlvbiwgTGlzdCAmYXJncywgaW50
IHQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgaW50IGluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpm
dW5jdGlvbiwgTGlzdCAmYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CiAgICAgdm9pZCBj
bGVhclRpbWVvdXQoaW50IHRpbWVySWQpOwogI2lmZGVmIEFQUExFX0NIQU5HRVMKICAgICBib29s
IGhhc1RpbWVvdXRzKCk7CkBAIC0xMjAsOCArMTIwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
QmFySW5mbyAqc2Nyb2xsYmFycyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIEJhckluZm8g
KnN0YXR1c2JhcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIEJhckluZm8gKnRvb2xiYXIo
RXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBKU0V2ZW50TGlzdGVuZXIgKmdldEpTRXZlbnRM
aXN0ZW5lcihjb25zdCBWYWx1ZSAmdmFsLCBib29sIGh0bWwgPSBmYWxzZSk7Ci0gICAgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIgKmdldEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGNvbnN0
IFZhbHVlICZ2YWwsIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICBKU0V2ZW50TGlzdGVuZXIgKmdl
dEpTRXZlbnRMaXN0ZW5lcihWYWx1ZUltcCAqdmFsLCBib29sIGh0bWwgPSBmYWxzZSk7CisgICAg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKmdldEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KFZhbHVlSW1wICp2YWwsIGJvb2wgaHRtbCA9IGZhbHNlKTsKICAgICBKU0xhenlFdmVudExpc3Rl
bmVyICpnZXRKU0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFFTdHJpbmcgJmNvZGUsIERPTTo6Tm9k
ZUltcGwgKm5vZGUsIGludCBsaW5lbm8gPSAwKTsKICAgICB2b2lkIGNsZWFyKCBFeGVjU3RhdGUg
KmV4ZWMgKTsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKQEAgLTE1Miw4ICsxNTIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgT25z
ZWxlY3QsIE9uc3VibWl0LCBPbnVubG9hZCwKICAgICAgICAgICAgU3RhdHVzYmFyLCBUb29sYmFy
LCBGcmFtZUVsZW1lbnQsIFNob3dNb2RhbERpYWxvZyB9OwogICBwcm90ZWN0ZWQ6Ci0gICAgVmFs
dWUgZ2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGludCBldmVudElkLCBWYWx1ZSBmdW5j
KTsKKyAgICBWYWx1ZUltcCAqZ2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJ
ZCkgY29uc3Q7CisgICAgdm9pZCBzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGludCBldmVu
dElkLCBWYWx1ZUltcCAqZnVuYyk7CiAgIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXlvdXQo
KSBjb25zdDsKIApAQCAtMTgxLDcgKzE4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgKi8KICAg
Y2xhc3MgU2NoZWR1bGVkQWN0aW9uIHsKICAgcHVibGljOgotICAgIFNjaGVkdWxlZEFjdGlvbihP
YmplY3QgX2Z1bmMsIExpc3QgX2FyZ3MsIGJvb2wgX3NpbmdsZVNob3QpOworICAgIFNjaGVkdWxl
ZEFjdGlvbihPYmplY3RJbXAgKl9mdW5jLCBMaXN0IF9hcmdzLCBib29sIF9zaW5nbGVTaG90KTsK
ICAgICBTY2hlZHVsZWRBY3Rpb24oY29uc3QgUVN0cmluZyAmX2NvZGUsIGJvb2wgX3NpbmdsZVNo
b3QpOwogICAgIHZvaWQgZXhlY3V0ZShXaW5kb3cgKndpbmRvdyk7CiAKQEAgLTE5OCw3ICsxOTgs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBXaW5kb3dRT2JqZWN0KFdpbmRvdyAqdyk7CiAgICAg
fldpbmRvd1FPYmplY3QoKTsKICAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZyAm
aGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgaW50IGluc3RhbGxUaW1lb3V0
KGNvbnN0IFZhbHVlICZmdW5jLCBMaXN0IGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwor
ICAgIGludCBpbnN0YWxsVGltZW91dChWYWx1ZUltcCAqZnVuYywgTGlzdCBhcmdzLCBpbnQgdCwg
Ym9vbCBzaW5nbGVTaG90KTsKICAgICB2b2lkIGNsZWFyVGltZW91dChpbnQgdGltZXJJZCwgYm9v
bCBkZWxBY3Rpb24gPSB0cnVlKTsKICNpZmRlZiBBUFBMRV9DSEFOR0VTCiAgICAgYm9vbCBoYXNU
aW1lb3V0cygpOwpAQCAtMjIwLDkgKzIyMCw5IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNz
IExvY2F0aW9uIDogcHVibGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2aXJ0dWFsIFZhbHVlIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKiZyZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICp0b1ByaW1p
dGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkKSBjb25zdDsKICAgICB2aXJ0dWFs
IFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBlbnVtIHsgSGFz
aCwgSHJlZiwgSG9zdG5hbWUsIEhvc3QsIFBhdGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2VhcmNo
LCBFcXVhbEVxdWFsLAogICAgICAgICAgICBSZXBsYWNlLCBSZWxvYWQsIFRvU3RyaW5nLCBBc3Np
Z24gfTsKQEAgLTIzNyw4ICsyMzcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBTZWxl
Y3Rpb24gOiBwdWJsaWMgT2JqZWN0SW1wIHsKICAgcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2
ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1w
ICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBl
bnVtIHsgQW5jaG9yTm9kZSwgQW5jaG9yT2Zmc2V0LCBGb2N1c05vZGUsIEZvY3VzT2Zmc2V0LCBC
YXNlTm9kZSwgQmFzZU9mZnNldCwgRXh0ZW50Tm9kZSwgRXh0ZW50T2Zmc2V0LCAKICAgICAgICAg
ICAgSXNDb2xsYXBzZWQsIF9UeXBlLCBFcXVhbEVxdWFsLCBDb2xsYXBzZSwgQ29sbGFwc2VUb0Vu
ZCwgQ29sbGFwc2VUb1N0YXJ0LCBFbXB0eSwgVG9TdHJpbmcsIApAQCAtMjU0LDcgKzI1NCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEJhckluZm8gOiBwdWJsaWMgT2JqZWN0SW1wIHsK
ICAgcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAg
ZW51bSB7IFZpc2libGUgfTsKICAgICBlbnVtIFR5cGUgeyBMb2NhdGlvbmJhciwgTWVudWJhciwg
UGVyc29uYWxiYXIsIFNjcm9sbGJhcnMsIFN0YXR1c2JhciwgVG9vbGJhciB9OwogICAgIEtIVE1M
UGFydCAqcGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFydDsgfQpAQCAtMjcyLDcgKzI3Miw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIGZyaWVuZCBjbGFzcyBLb25xdWVyb3JGdW5jOwogICBwdWJs
aWM6CiAgICAgS29ucXVlcm9yKEtIVE1MUGFydCAqcCkgOiBwYXJ0KHApIHsgfQotICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc093blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3Q7CiAgICAg
dmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmly
dHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAgLXUgLXUgLXAgLXIxLjMzIFdlYkNv
cmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS94
bWxodHRwcmVxdWVzdC5jcHAJMjUgSnVsIDIwMDUgMjI6MTc6MjAgLTAwMDAJMS4zMworKysgV2Vi
Q29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAk3IEF1ZyAyMDA1IDA0OjQ0OjE2IC0w
MDAwCkBAIC0xMDgsOSArMTA4LDkgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1w
OjppbXBsZQogICByZXR1cm4gdHJ1ZTsKIH0KIAotT2JqZWN0IFhNTEh0dHBSZXF1ZXN0Q29uc3Ry
dWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJikKK09iamVj
dEltcCAqWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmKQogewotICByZXR1cm4gT2JqZWN0KG5ldyBYTUxIdHRwUmVxdWVz
dChleGVjLCBkb2MuZ2V0KCkpKTsKKyAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdChleGVjLCBk
b2MuZ2V0KCkpOwogfQogCiBjb25zdCBDbGFzc0luZm8gWE1MSHR0cFJlcXVlc3Q6OmluZm8gPSB7
ICJYTUxIdHRwUmVxdWVzdCIsIDAsICZYTUxIdHRwUmVxdWVzdFRhYmxlLCAwIH07CkBAIC0xMjcs
MTIgKzEyNywxMiBAQCBjb25zdCBDbGFzc0luZm8gWE1MSHR0cFJlcXVlc3Q6OmluZm8gPSB7CiBA
ZW5kCiAqLwogCi1ib29sIFhNTEh0dHBSZXF1ZXN0OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29u
c3QKK2Jvb2wgWE1MSHR0cFJlcXVlc3Q6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqJnJlc3VsdCkgY29uc3QK
IHsKICAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPFhNTEh0dHBSZXF1ZXN0LERPTU9iamVjdD4o
ZXhlYywgcHJvcGVydHlOYW1lLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwgdGhpcywgcmVzdWx0KTsK
IH0KIAotVmFsdWUgWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIHN3aXRjaCAo
dG9rZW4pIHsKICAgY2FzZSBSZWFkeVN0YXRlOgpAQCAtMTQ3LDExICsxNDcsMTEgQEAgVmFsdWUg
WE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkoRQogICAgICAgUVN0cmluZyBtaW1lVHlw
ZTsKICAgICAgIAogICAgICAgaWYgKE1JTUVUeXBlT3ZlcnJpZGUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFZhbHVlIGhlYWRlciA9IGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKTsKLSAg
ICAgICAgaWYgKGhlYWRlci50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkgeworICAgICAgICBWYWx1
ZUltcCAqaGVhZGVyID0gZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOworICAgICAg
ICBpZiAoaGVhZGVyLT5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgbWltZVR5cGUgPSAidGV4
dC94bWwiOwogICAgICAgICB9IGVsc2UgewotCSAgbWltZVR5cGUgPSBRU3RyaW5nTGlzdDo6c3Bs
aXQoIjsiLCBoZWFkZXIudG9TdHJpbmcoZXhlYykucXN0cmluZygpKVswXS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKKwkgIG1pbWVUeXBlID0gUVN0cmluZ0xpc3Q6OnNwbGl0KCI7IiwgaGVhZGVyLT50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCkpWzBdLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICB9CiAg
ICAgICB9IGVsc2UgewogICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlT3ZlcnJpZGU7CkBAIC0x
OTcsMTYgKzE5NywxNiBAQCBWYWx1ZSBYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eShF
CiAgICB9CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIlhNTEh0dHBSZXF1ZXN0Ojpn
ZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAg
cmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotdm9pZCBYTUxIdHRw
UmVxdWVzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1
ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBsb29rdXBQdXQ8WE1MSHR0cFJlcXVlc3QsRE9N
T2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmWE1MSHR0cFJlcXVlc3RU
YWJsZSwgdGhpcyApOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0
dHIqLykKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogICBzd2l0
Y2godG9rZW4pIHsKICAgY2FzZSBPbnJlYWR5c3RhdGVjaGFuZ2U6CkBAIC00MjYsNyArNDI2LDcg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwogICByZXF1ZXN0SGVh
ZGVycyArPSB2YWx1ZTsKIH0KIAotVmFsdWUgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNl
SGVhZGVycygpIGNvbnN0CitWYWx1ZUltcCAqWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNl
SGVhZGVycygpIGNvbnN0CiB7CiAgIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIFZhbHVlIFhNTEh0dHBS
ZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWQKICAgcmV0dXJuIFN0cmluZyhyZXNwb25zZUhlYWRl
cnMubWlkKGVuZE9mTGluZSArIDEpICsgIlxuIik7CiB9CiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0
OjpnZXRSZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAorVmFsdWVJbXAg
KlhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBj
b25zdAogewogICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSkgewogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCBWYWx1ZSBYTUxIdHRwUmVxdWVzdDo6Z2V0
UmVzcG9uc2VIZWFkZXIoCiAgIHJldHVybiBTdHJpbmcocmVzcG9uc2VIZWFkZXJzLm1pZChoZWFk
ZXJMaW5lUG9zICsgbWF0Y2hMZW5ndGgsIGVuZE9mTGluZSAtIChoZWFkZXJMaW5lUG9zICsgbWF0
Y2hMZW5ndGgpKS5zdHJpcFdoaXRlU3BhY2UoKSk7CiB9CiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0
OjpnZXRTdGF0dXMoKSBjb25zdAorVmFsdWVJbXAgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMo
KSBjb25zdAogewogICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSkgewogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQCBWYWx1ZSBYTUxIdHRwUmVxdWVzdDo6
Z2V0U3RhdHVzKCkgY29uc3QKICAgcmV0dXJuIE51bWJlcihjb2RlKTsKIH0KIAotVmFsdWUgWE1M
SHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoKSBjb25zdAorVmFsdWVJbXAgKlhNTEh0dHBSZXF1
ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0Vt
cHR5KCkpIHsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02NTIsMTUgKzY1MiwxNSBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhET006CiAgICAgUVB0ckRpY3RJdGVy
YXRvcjxYTUxIdHRwUmVxdWVzdD4oKnJlcXVlc3RzKS5jdXJyZW50KCktPmFib3J0KCk7CiB9CiAK
LVZhbHVlIFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhNTEh0dHBSZXF1ZXN0
UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZYTUxI
dHRwUmVxdWVzdDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlhNTEh0dHBSZXF1ZXN0Ojpp
bmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQog
Ci0gIFhNTEh0dHBSZXF1ZXN0ICpyZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3Qg
Kj4odGhpc09iai5pbXAoKSk7CisgIFhNTEh0dHBSZXF1ZXN0ICpyZXF1ZXN0ID0gc3RhdGljX2Nh
c3Q8WE1MSHR0cFJlcXVlc3QgKj4odGhpc09iaik7CiAKICAgc3dpdGNoIChpZCkgewogICBjYXNl
IFhNTEh0dHBSZXF1ZXN0OjpBYm9ydDogewpAQCAtNjc5LDcgKzY3OSw3IEBAIFZhbHVlIFhNTEh0
dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWMKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gcmVxdWVzdC0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1swXS50
b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAgIHJldHVybiByZXF1ZXN0LT5nZXRSZXNwb25z
ZUhlYWRlcihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogICB9CiAgIGNhc2Ug
WE1MSHR0cFJlcXVlc3Q6Ok9wZW46CiAgICAgewpAQCAtNjg3LDIwICs2ODcsMjAgQEAgVmFsdWUg
WE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwogCXJldHVybiBVbmRlZmluZWQoKTsK
ICAgICAgIH0KICAgICAKLSAgICAgIFFTdHJpbmcgbWV0aG9kID0gYXJnc1swXS50b1N0cmluZyhl
eGVjKS5xc3RyaW5nKCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFj
dGl2ZShleGVjKS0+cGFydCgpLT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKGFyZ3NbMV0udG9T
dHJpbmcoZXhlYykucXN0cmluZygpKSk7CisgICAgICBRU3RyaW5nIG1ldGhvZCA9IGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgIEtVUkwgdXJsID0gS1VSTChXaW5kb3c6
OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5wYXJ0KCktPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwo
YXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKSk7CiAKICAgICAgIGJvb2wgYXN5bmMg
PSB0cnVlOwogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpIHsKLQlhc3luYyA9IGFyZ3NbMl0u
dG9Cb29sZWFuKGV4ZWMpOworCWFzeW5jID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogICAg
ICAgfQogICAgIAogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQpIHsKLQl1cmwuc2V0VXNlcihh
cmdzWzNdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CisJdXJsLnNldFVzZXIoYXJnc1szXS0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICAgIH0KICAgICAgIAogICAgICAgaWYgKGFy
Z3Muc2l6ZSgpID49IDUpIHsKLQl1cmwuc2V0UGFzcyhhcmdzWzRdLnRvU3RyaW5nKGV4ZWMpLnFz
dHJpbmcoKSk7CisJdXJsLnNldFBhc3MoYXJnc1s0XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygp
KTsKICAgICAgIH0KIAogICAgICAgcmVxdWVzdC0+b3BlbihtZXRob2QsIHVybCwgYXN5bmMpOwpA
QCAtNzIwLDE0ICs3MjAsMTQgQEAgVmFsdWUgWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGwo
RXhlYwogICAgICAgUVN0cmluZyBib2R5OwogCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkg
ewotCWlmIChhcmdzWzBdLnRvT2JqZWN0KGV4ZWMpLmluaGVyaXRzKCZET01Eb2N1bWVudDo6aW5m
bykpIHsKLQkgIERvY3VtZW50SW1wbCAqZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+
KHN0YXRpY19jYXN0PERPTURvY3VtZW50ICo+KGFyZ3NbMF0udG9PYmplY3QoZXhlYykuaW1wKCkp
LT5pbXBsKCkpOworCWlmIChhcmdzWzBdLT50b09iamVjdChleGVjKS0+aW5oZXJpdHMoJkRPTURv
Y3VtZW50OjppbmZvKSkgeworCSAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1
bWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRG9jdW1lbnQgKj4oYXJnc1swXS0+dG9PYmplY3Qo
ZXhlYykpLT5pbXBsKCkpOwogICAgICAgICAgIGJvZHkgPSBkb2MtPnRvU3RyaW5nKCkuc3RyaW5n
KCk7CiAgICAgICAgICAgLy8gRklYTUU6IGFsc28gbmVlZCB0byBzZXQgY29udGVudCB0eXBlLCBp
bmNsdWRpbmcgZW5jb2RpbmchCiAJfSBlbHNlIHsKIAkgIC8vIGNvbnZlcnRpbmcgY2VydGFpbiB2
YWx1ZXMgKGxpa2UgbnVsbCkgdG8gb2JqZWN0IGNhbiBzZXQgYW4gZXhjZXB0aW9uCiAJICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOwotCSAgYm9keSA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0
cmluZygpOworCSAgYm9keSA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKIAl9
CiAgICAgICB9CiAKQEAgLTc0MCw3ICs3NDAsNyBAQCBWYWx1ZSBYTUxIdHRwUmVxdWVzdFByb3Rv
RnVuYzo6Y2FsbChFeGVjCiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIAot
ICAgIHJlcXVlc3QtPnNldFJlcXVlc3RIZWFkZXIoYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3Ry
aW5nKCksIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKKyAgICByZXF1ZXN0LT5z
ZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSwgYXJnc1sx
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICAKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiAgIH0KQEAgLTc0OCw3ICs3NDgsNyBAQCBWYWx1ZSBYTUxIdHRwUmVxdWVzdFByb3RvRnVu
Yzo6Y2FsbChFeGVjCiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmVxdWVzdC0+TUlNRVR5cGVPdmVycmlkZSA9IGFyZ3Nb
MF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpOworICAgIHJlcXVlc3QtPk1JTUVUeXBlT3ZlcnJp
ZGUgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogICB9CiAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1s
aHR0cHJlcXVlc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC11IC1w
IC1yMS4xNiBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJMjUgSnVsIDIwMDUgMjI6MTc6MjAgLTAwMDAJMS4x
NgorKysgV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJNyBBdWcgMjAwNSAwNDo0
NDoxNiAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudEltcGwg
KmQpOwogICAgIH5YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKCk7CiAgICAgdmlydHVhbCBi
b29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25z
dHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9i
amVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAg
IHByaXZhdGU6CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOwog
ICB9OwpAQCAtNjUsMTAgKzY1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAg
WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICosIERPTTo6RG9jdW1lbnRJbXBsICpkKTsKICAgICB+
WE1MSHR0cFJlcXVlc3QoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQp
IGNvbnN0OwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wIComcmVzdWx0KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQg
LyphdHRyKi8pOwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCkBAIC04NCw4ICs4
NCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGZyaWVuZCBjbGFzcyBYTUxIdHRwUmVxdWVzdFBy
b3RvRnVuYzsKICAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OwogCi0gICAg
VmFsdWUgZ2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIFZhbHVlIGdldFN0YXR1cygpIGNvbnN0
OworICAgIFZhbHVlSW1wICpnZXRTdGF0dXNUZXh0KCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdl
dFN0YXR1cygpIGNvbnN0OwogICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGNvbnN0
IEtVUkwmKSBjb25zdDsKIAogICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9iamVjdDsKQEAg
LTEwNiw4ICsxMDYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkIHNlbmQoY29uc3QgUVN0
cmluZyYgX2JvZHkpOwogICAgIHZvaWQgYWJvcnQoKTsKICAgICB2b2lkIHNldFJlcXVlc3RIZWFk
ZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFZhbHVl
IGdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNvbnN0OwotICAgIFZhbHVlIGdldFJlc3BvbnNlSGVh
ZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRBbGxSZXNw
b25zZUhlYWRlcnMoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0UmVzcG9uc2VIZWFkZXIoY29u
c3QgUVN0cmluZyYgbmFtZSkgY29uc3Q7CiAKICAgICB2b2lkIGNoYW5nZVN0YXRlKFhNTEh0dHBS
ZXF1ZXN0U3RhdGUgbmV3U3RhdGUpOwogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEveG1sc2Vy
aWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWNtYS94bWxzZXJpYWxpemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAg
LXUgLXUgLXAgLXIxLjQgV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuY3BwCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDkg
LTAwMDAJMS40CisrKyBXZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAJNyBBdWcg
MjAwNSAwNDo0NDoxNiAtMDAwMApAQCAtNTMsOSArNTMsOSBAQCBib29sIFhNTFNlcmlhbGl6ZXJD
b25zdHJ1Y3RvckltcDo6aW1wbGVtCiAgIHJldHVybiB0cnVlOwogfQogCi1PYmplY3QgWE1MU2Vy
aWFsaXplckNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICYpCitPYmplY3RJbXAgKlhNTFNlcmlhbGl6ZXJDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQogewotICByZXR1cm4gT2JqZWN0KG5ldyBY
TUxTZXJpYWxpemVyKGV4ZWMpKTsKKyAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKGV4ZWMpOwog
fQogCiBjb25zdCBDbGFzc0luZm8gWE1MU2VyaWFsaXplcjo6aW5mbyA9IHsgIlhNTFNlcmlhbGl6
ZXIiLCAwLCAmWE1MU2VyaWFsaXplclRhYmxlLCAwIH07CkBAIC03MCwxMCArNzAsMTAgQEAgWE1M
U2VyaWFsaXplcjo6WE1MU2VyaWFsaXplcihFeGVjU3RhdGUgKgogICBzZXRQcm90b3R5cGUoWE1M
U2VyaWFsaXplclByb3RvOjpzZWxmKGV4ZWMpKTsKIH0KIAotVmFsdWUgWE1MU2VyaWFsaXplclBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpYTUxTZXJpYWxpemVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
IHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZYTUxTZXJpYWxpemVyOjppbmZvKSkgewotICAg
IE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmWE1MU2VyaWFsaXplcjo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KQEAgLTg1LDExICs4NSwxMSBAQCBWYWx1ZSBY
TUxTZXJpYWxpemVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwog
ICAgICAgfQogCi0gICAgICBpZiAoIWFyZ3NbMF0udG9PYmplY3QoZXhlYykuaW5oZXJpdHMoJkRP
TURvY3VtZW50OjppbmZvKSkgeworICAgICAgaWYgKCFhcmdzWzBdLT50b09iamVjdChleGVjKS0+
aW5oZXJpdHMoJkRPTURvY3VtZW50OjppbmZvKSkgewogCXJldHVybiBVbmRlZmluZWQoKTsKICAg
ICAgIH0KIAotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudElt
cGwgKj4oc3RhdGljX2Nhc3Q8RE9NRG9jdW1lbnQgKj4oYXJnc1swXS50b09iamVjdChleGVjKS5p
bXAoKSktPmltcGwoKSk7CisgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHN0YXRpY19jYXN0PERv
Y3VtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01Eb2N1bWVudCAqPihhcmdzWzBdLT50b09iamVj
dChleGVjKSktPmltcGwoKSk7CiAgICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGRvYy0+dG9T
dHJpbmcoKS5zdHJpbmcoKSk7CiAgICAgfQogICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEv
eG1sc2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEveG1sc2VyaWFsaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAt
cCAtdSAtdSAtcCAtcjEuMiBXZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5oCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5oCTEyIE1heSAyMDA1IDE3OjExOjIxIC0w
MDAwCTEuMgorKysgV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuaAk3IEF1ZyAyMDA1
IDA0OjQ0OjE2IC0wMDAwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgWE1MU2VyaWFsaXplckNvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqKTsKICAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgT2Jq
ZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZp
cnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKTsKICAgfTsKIAogICBjbGFzcyBYTUxTZXJpYWxpemVyIDogcHVibGljIERPTU9iamVjdCB7
CkluZGV4OiBXZWJDb3JlL2t3cS9ET01VdGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9ET01VdGlsaXR5Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQKZGlmZiAtcCAtdSAtdSAtcCAtcjEuNCBXZWJDb3JlL2t3cS9ET01VdGlsaXR5Lm1tCi0tLSBX
ZWJDb3JlL2t3cS9ET01VdGlsaXR5Lm1tCTEyIE1heSAyMDA1IDE3OjExOjIyIC0wMDAwCTEuNAor
KysgV2ViQ29yZS9rd3EvRE9NVXRpbGl0eS5tbQk3IEF1ZyAyMDA1IDA0OjQ0OjE2IC0wMDAwCkBA
IC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGlubGluZSBpZCBjcmVhdGVPYmpDRE9NTm9kZShET006
OgogCiBuYW1lc3BhY2UgS0pTIHsKIAotdm9pZCAqU2NyaXB0SW50ZXJwcmV0ZXI6OmNyZWF0ZU9i
amNJbnN0YW5jZUZvclZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgT2JqZWN0ICZ2YWx1ZSwg
Y29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RP
YmplY3QgKmN1cnJlbnQpCit2b2lkICpTY3JpcHRJbnRlcnByZXRlcjo6Y3JlYXRlT2JqY0luc3Rh
bmNlRm9yVmFsdWUoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBCaW5k
aW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3Vy
cmVudCkKIHsKLSAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7Ci0JRE9N
Tm9kZSAqaW1wID0gc3RhdGljX2Nhc3Q8RE9NTm9kZSAqPih2YWx1ZS5pbXAoKSk7CisgICAgaWYg
KHZhbHVlLT5pbmhlcml0cygmRE9NTm9kZTo6aW5mbykpIHsKKwlET01Ob2RlICppbXAgPSBzdGF0
aWNfY2FzdDxET01Ob2RlICo+KHZhbHVlKTsKIAlpZCBuZXdPYmpjTm9kZSA9IGNyZWF0ZU9iakNE
T01Ob2RlKGltcC0+aW1wbCgpKTsKIAlbbmV3T2JqY05vZGUgX2luaXRpYWxpemVXaXRoT2JqZWN0
SW1wOmltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Om9yaWdpbiBleGVjdXRpb25Db250ZXh0OmN1
cnJlbnRdOwkKIAlyZXR1cm4gbmV3T2JqY05vZGU7CkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3Jl
U2NyaXB0RGVidWdnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL1dlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXUgLXAgLXIxLjEgV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1t
Ci0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0JMzAgSnVsIDIwMDUgMDM6
MDA6MzQgLTAwMDAJMS4xCisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0J
NyBBdWcgMjAwNSAwNDo0NDoxNiAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS0pTOwogCiAtIChXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lICopX2luaXRXaXRoR2xvYmFsT2Jq
ZWN0OihXZWJTY3JpcHRPYmplY3QgKilnbG9iYWxPYmogY2FsbGVyOihXZWJDb3JlU2NyaXB0Q2Fs
bEZyYW1lICopY2FsbGVyIHN0YXRlOihFeGVjU3RhdGUgKilzdGF0ZTsKIC0gKHZvaWQpX3NldFdy
YXBwZXI6KGlkKXdyYXBwZXI7Ci0tIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KFZhbHVl
KXZhbHVlOworLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihWYWx1ZUltcCAqKXZhbHVl
OwogCiBAZW5kCiAKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2Vy
SW1wIDogcHVibGljIAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAg
ICB2aXJ0dWFsIGJvb2wgY2FsbEV2ZW50KEV4ZWNTdGF0ZSAqc3RhdGUsIGludCBzaWQsIGludCBs
aW5lbm8sIE9iamVjdCAmZnVuYywgY29uc3QgTGlzdCAmYXJncykgeworICAgIHZpcnR1YWwgYm9v
bCBjYWxsRXZlbnQoRXhlY1N0YXRlICpzdGF0ZSwgaW50IHNpZCwgaW50IGxpbmVubywgT2JqZWN0
SW1wICpmdW5jLCBjb25zdCBMaXN0ICZhcmdzKSB7CiAgICAgICAgIGlmICghX25lc3RlZCkgewog
ICAgICAgICAgICAgX25lc3RlZCA9IHRydWU7CiAgICAgICAgICAgICBfY3VycmVudCA9IFtfb2Jq
YyBfZW50ZXJGcmFtZTpzdGF0ZV07CkBAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgV2ViQ29yZVNj
cmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcmV0dXJuRXZlbnQoRXhlY1N0YXRlICpzdGF0ZSwg
aW50IHNpZCwgaW50IGxpbmVubywgT2JqZWN0ICZmdW5jKSB7CisgICAgdmlydHVhbCBib29sIHJl
dHVybkV2ZW50KEV4ZWNTdGF0ZSAqc3RhdGUsIGludCBzaWQsIGludCBsaW5lbm8sIE9iamVjdElt
cCAqZnVuYykgewogICAgICAgICBpZiAoIV9uZXN0ZWQpIHsKICAgICAgICAgICAgIF9uZXN0ZWQg
PSB0cnVlOwogICAgICAgICAgICAgW1tfb2JqYyBkZWxlZ2F0ZV0gbGVhdmluZ0ZyYW1lOl9jdXJy
ZW50IHNvdXJjZUlkOnNpZCBsaW5lOmxpbmVub107CkBAIC0yMDMsMTMgKzIwOSwxMyBAQCBjbGFz
cyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgX3dyYXBwZXIgPSB3cmFw
cGVyOyAgICAgLy8gKGFscmVhZHkgcmV0YWluZWQpCiB9CiAKLS0gKGlkKV9jb252ZXJ0VmFsdWVU
b09iamNWYWx1ZTooVmFsdWUpdmFsdWUKKy0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZToo
VmFsdWVJbXAgKil2YWx1ZQogewotICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAgIGlmICgh
dmFsdWUpIHsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICBpZiAodmFsdWUudHlw
ZSgpID09IE9iamVjdFR5cGUgJiYgdmFsdWUuaW1wKCkgPT0gW19nbG9iYWxPYmogX2ltcF0pIHsK
KyAgICBpZiAodmFsdWUgPT0gW19nbG9iYWxPYmogX2ltcF0pIHsKICAgICAgICAgcmV0dXJuIF9n
bG9iYWxPYmo7CiAgICAgfQogCkBAIC0yNTksOCArMjY1LDcgQEAgY2xhc3MgV2ViQ29yZVNjcmlw
dERlYnVnZ2VySW1wIDogcHVibGljIAogICAgIE5TTXV0YWJsZUFycmF5ICpzY29wZXMgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKIAogICAgIHdoaWxlICghY2hhaW4uaXNFbXB0eSgp
KSB7Ci0gICAgICAgIE9iamVjdCBzY29wZShjaGFpbi50b3AoKSk7Ci0gICAgICAgIFtzY29wZXMg
YWRkT2JqZWN0OltzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpzY29wZV1dOworICAgICAg
ICBbc2NvcGVzIGFkZE9iamVjdDpbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6Y2hhaW4u
dG9wKCldXTsKICAgICAgICAgY2hhaW4ucG9wKCk7CiAgICAgfQogCkBAIC0zMDksMTQgKzMxNCwx
NCBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAKICAgICBFeGVj
U3RhdGUgICAqc3RhdGUgICA9IF9zdGF0ZTsKICAgICBJbnRlcnByZXRlciAqaW50ZXJwICA9IHN0
YXRlLT5pbnRlcnByZXRlcigpOwotICAgIE9iamVjdCAgICAgICBnbG9iT2JqID0gaW50ZXJwLT5n
bG9iYWxPYmplY3QoKTsKKyAgICBPYmplY3RJbXAgICAqZ2xvYk9iaiA9IGludGVycC0+Z2xvYmFs
T2JqZWN0KCk7CiAKICAgICAvLyBmaW5kICJldmFsIgotICAgIE9iamVjdCBldmFsOworICAgIE9i
amVjdEltcCAqZXZhbCA9IE5VTEw7CiAgICAgaWYgKHN0YXRlLT5jb250ZXh0KCkuaW1wKCkpIHsg
IC8vICJldmFsIiB3b24ndCB3b3JrIHdpdGhvdXQgY29udGV4dCAoaS5lLiBhdCBnbG9iYWwgc2Nv
cGUpCi0gICAgICAgIE9iamVjdCBvID0gT2JqZWN0OjpkeW5hbWljQ2FzdChnbG9iT2JqLmdldChz
dGF0ZSwgImV2YWwiKSk7Ci0gICAgICAgIGlmICghby5pc051bGwoKSAmJiBvLmltcGxlbWVudHND
YWxsKCkpIHsKLSAgICAgICAgICAgIGV2YWwgPSBvOworICAgICAgICBWYWx1ZUltcCAqdiA9IGds
b2JPYmotPmdldChzdGF0ZSwgImV2YWwiKTsKKyAgICAgICAgaWYgKHYtPmlzT2JqZWN0KCkgJiYg
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAg
ICAgICBldmFsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHYpOwogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgLy8gbm8gImV2YWwiIC0gZmFsbGJhY2sgb3BlcmF0ZXMg
b24gZ2xvYmFsIGV4ZWMgc3RhdGUKQEAgLTMyNCwxNyArMzI5LDE2IEBAIGNsYXNzIFdlYkNvcmVT
Y3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICAgICAgfQogICAgIH0KIAotICAgIFZhbHVl
IHNhdmVkRXhjZXB0aW9uID0gc3RhdGUtPmV4Y2VwdGlvbigpOworICAgIFZhbHVlSW1wICpzYXZl
ZEV4Y2VwdGlvbiA9IHN0YXRlLT5leGNlcHRpb24oKTsKICAgICBzdGF0ZS0+Y2xlYXJFeGNlcHRp
b24oKTsKIAogICAgIC8vIGV2YWx1YXRlCi0gICAgVmFsdWUgcmVzdWx0OwotICAgIGlmICghZXZh
bC5pc051bGwoKSkgeworICAgIFZhbHVlSW1wICpyZXN1bHQ7CisgICAgaWYgKGV2YWwpIHsKICAg
ICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgT2JqZWN0IGR1bW15OwogICAgICAg
ICBMaXN0IGFyZ3M7CiAgICAgICAgIGFyZ3MuYXBwZW5kKFN0cmluZyhjb2RlKSk7Ci0gICAgICAg
IHJlc3VsdCA9IGV2YWwuY2FsbChzdGF0ZSwgZHVtbXksIGFyZ3MpOworICAgICAgICByZXN1bHQg
PSBldmFsLT5jYWxsKHN0YXRlLCBOVUxMLCBhcmdzKTsKICAgICAgICAgSW50ZXJwcmV0ZXI6OnVu
bG9jaygpOwogICAgIH0KICAgICBlbHNlIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3270</attachid>
            <date>2005-08-07 18:23:20 -0700</date>
            <delta_ts>2005-08-07 20:59:50 -0700</delta_ts>
            <desc>patch, revised to work after Maciej&apos;s PropertySlot change</desc>
            <filename>NoSmartPatch5.txt</filename>
            <type>text/plain</type>
            <size>953539</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC1wIC11IC1yMS40IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJNyBBdWcgMjAwNSAwNjoxNzozMiAtMDAwMAkxLjQKKysr
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
OCBBdWcgMjAwNSAwMTowMDozMSAtMDAwMApAQCAtMjcsMTIgKzI3LDEwIEBACiAvKiBCZWdpbiBQ
QlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQk2NTMwNUVBRjA4QTU4RERFMDBGMzFFNzMgLyogcHJv
dGVjdGVkX29iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUzMDVFQUUwOEE1OERERTAwRjMxRTczIC8qIHByb3RlY3RlZF9vYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTMwNUVCMDA4
QTU4RTA5MDBGMzFFNzMgLyogcHJvdGVjdGVkX29iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUzMDVFQUUwOEE1OERERTAwRjMxRTczIC8qIHBy
b3RlY3RlZF9vYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk2NTM5QUFDQjA4QTMyMjVBMDAyMjNFRTIgLyogb2JqZWN0X3dyYXBwZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MzlBQUNBMDhB
MzIyNUEwMDIyM0VFMiAvKiBvYmplY3Rfd3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NjIxRTZEMDg5RTg1OTcwMDc2MEYzNSAvKiBw
cm9wZXJ0eV9zbG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NjIxRTZCMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmNwcCAqLzsg
fTsKIAkJNjU2MjFFNkUwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjIxRTZDMDg5RTg1OTcw
MDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2MjFFNkYwODlFODVEMzAwNzYwRjM1IC8qIHByb3BlcnR5
X3Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuY3BwICovOyB9OwogCQk2
NTYyMUU3MDA4OUU4NUQzMDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MjFFNkMwODlFODU5NzAwNzYwRjM1
IC8qIHByb3BlcnR5X3Nsb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk2NUJCQUVFMDA4QTMyOUIzMDAzNTc3MjggLyogb2JqZWN0X3dyYXBwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MzlBQUNB
MDhBMzIyNUEwMDIyM0VFMiAvKiBvYmplY3Rfd3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMkY1QjQwMDgyMkExQzcwMDczNjk3NSAv
KiBhcnJheV9vYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2OTJBODRFMDI1NTU5N0QwMUZGNjBGNyAvKiBhcnJheV9vYmplY3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzJGNUI0MjA4MjJB
MUM3MDA3MzY5NzUgLyogY29sbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1MzAyNTU1OTdEMDFGRjYwRjcgLyogY29sbGVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMyRjVC
NDMwODIyQTFDNzAwNzM2OTc1IC8qIGRhdGVfb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1NjAyNTU1OTdEMDFGRjYwRjcgLyogZGF0
ZV9vYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNDU4LDcgKzQ1Niw2IEBACiAJCTY1MUY2NDEyMDM5RDVCNUYwMDc4Mzk1QyAvKiBkdG9h
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkdG9hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxRjY0MTMwMzlENUI1RjAwNzgzOTVDIC8qIGR0
b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGR0b2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUzMDVFQUUwOEE1OERERTAwRjMxRTczIC8qIHByb3RlY3Rl
ZF9vYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHByb3RlY3RlZF9v
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjUzOUFBQ0EwOEEzMjI1QTAw
MjIzRUUyIC8qIG9iamVjdF93cmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBvYmplY3Rfd3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTQx
NzIwNTAzOUUwMkU3MDA1OEJGRUIgLyogZ2V0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7
IG5hbWUgPSBnZXQuYzsgcGF0aCA9IHBjcmUvZ2V0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1NDE3MjA2MDM5RTAyRTcwMDU4QkZFQiAvKiBtYWtldGFibGVzLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBtYWtldGFibGVzLmM7IHBhdGggPSBwY3JlL21ha2V0
YWJsZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU0MTcyMDcwMzlFMDJFNzAw
NThCRkVCIC8qIHBjcmUuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHBjcmUu
YzsgcGF0aCA9IHBjcmUvcGNyZS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ1
LDcgKzY0Miw2IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTY1
MzA1RUFFMDhBNThEREUwMEYzMUU3MyAvKiBwcm90ZWN0ZWRfb2JqZWN0LmggKi8sCi0JCQkJNjUz
OUFBQ0EwOEEzMjI1QTAwMjIzRUUyIC8qIG9iamVjdF93cmFwcGVyLmggKi8sCiAJCQkJNjU2MjFF
NkIwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuY3BwICovLAogCQkJCTY1NjIxRTZD
MDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggKi8sCiAJCQkJOTM4NzcyRTUwMzhC
RkUxOTAwODYzNUNFIC8qIGFycmF5X2luc3RhbmNlLmggKi8sCkBAIC05MTgsNyArOTE0LDYgQEAK
IAkJCQk5MzJGNUI4RjA4MjJBMUM3MDA3MzY5NzUgLyogZmFzdF9tYWxsb2MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMkZDMTFEMDgyNEE2QTMwMDVCM0M3NSAvKiBjcmVhdGVfaGFzaF90YWJsZSBp
biBIZWFkZXJzICovLAogCQkJCTY1NjIxRTZFMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9z
bG90LmggaW4gSGVhZGVycyAqLywKLQkJCQk2NTM5QUFDQjA4QTMyMjVBMDAyMjNFRTIgLyogb2Jq
ZWN0X3dyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtOTQyLDcgKzkzNyw2IEBACiAJCQkJQTg1
RDgyMDQwODdCMjgyMjAwNkE5MTcyIC8qIG5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODVE
ODIwNTA4N0IyODIyMDA2QTkxNzIgLyogbnVtYmVyX29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTg1RDgyMDYwODdCMjgyMjAwNkE5MTcyIC8qIG9iamVjdF9vYmplY3QuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTY1QkJBRUUwMDhBMzI5QjMwMDM1NzcyOCAvKiBvYmplY3Rfd3JhcHBlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTg1RDgyMDcwODdCMjgyMjAwNkE5MTcyIC8qIG9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTg1RDgyMDgwODdCMjgyMjAwNkE5MTcyIC8qIG9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4NUQ4MjA5MDg3QjI4MjIwMDZBOTE3MiAvKiBwcm9wZXJ0
eV9tYXAuaCBpbiBIZWFkZXJzICovLApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBf
anNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9OUF9qc29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlm
ZiAtcCAtdSAtcjEuMTkgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3QuY3BwCi0t
LSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9OUF9qc29iamVjdC5jcHAJMjcgQXByIDIwMDUgMDE6
MDM6NTcgLTAwMDAJMS4xOQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNvYmplY3Qu
Y3BwCTggQXVnIDIwMDUgMDE6MDA6MzIgLTAwMDAKQEAgLTE0OSwyNCArMTQ5LDI0IEBAIGJvb2wg
X05QTl9JbnZva2UgKE5QUCBucHAsIE5QT2JqZWN0ICpvLCAKIAkgICAgLy8gTG9va3VwIHRoZSBm
dW5jdGlvbiBvYmplY3QuCiAJICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29u
dGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogCSAgICBJbnRlcnByZXRlcjo6bG9j
aygpOwotCSAgICBWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldCAoZXhlYywgaWRlbnRpZmVyRnJv
bU5QSWRlbnRpZmllcihpLT52YWx1ZS5zdHJpbmcpKTsKKwkgICAgVmFsdWVJbXAgKmZ1bmMgPSBv
YmotPmltcC0+Z2V0IChleGVjLCBpZGVudGlmZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0
cmluZykpOwogCSAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKLQkgICAgaWYgKGZ1bmMuaXNO
dWxsKCkpIHsKKwkgICAgaWYgKGZ1bmMtPmlzTnVsbCgpKSB7CiAJCU5QTl9Jbml0aWFsaXplVmFy
aWFudEFzTnVsbChyZXN1bHQpOwogCQlyZXR1cm4gZmFsc2U7CiAJICAgIH0KLQkgICAgZWxzZSBp
ZiAoIGZ1bmMudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsKKwkgICAgZWxzZSBpZiAoZnVuYy0+
aXNVbmRlZmluZWQoKSkgewogCQlOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc1VuZGVmaW5lZChyZXN1
bHQpOwogCQlyZXR1cm4gZmFsc2U7CiAJICAgIH0KIAkgICAgZWxzZSB7CiAJCS8vIENhbGwgdGhl
IGZ1bmN0aW9uIG9iamVjdC4KLQkJT2JqZWN0SW1wICpmdW5jSW1wID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wKj4oZnVuYy5pbXAoKSk7Ci0JCU9iamVjdCB0aGlzT2JqID0gT2JqZWN0KGNvbnN0X2Nh
c3Q8T2JqZWN0SW1wKj4ob2JqLT5pbXApKTsKKwkJT2JqZWN0SW1wICpmdW5jSW1wID0gc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wKj4oZnVuYyk7CisJCU9iamVjdEltcCAqdGhpc09iaiA9IGNvbnN0X2Nh
c3Q8T2JqZWN0SW1wKj4ob2JqLT5pbXApOwogCQlMaXN0IGFyZ0xpc3QgPSBsaXN0RnJvbVZhcmlh
bnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50KTsKIAkJSW50ZXJwcmV0ZXI6OmxvY2soKTsKLQkJ
VmFsdWUgcmVzdWx0ViA9IGZ1bmNJbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwor
CQlWYWx1ZUltcCAqcmVzdWx0ViA9IGZ1bmNJbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ0xp
c3QpOwogCQlJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKIAkJLy8gQ29udmVydCBhbmQgcmV0dXJu
IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCkBAIC0xOTMsOCArMTkzLDcgQEAgYm9v
bCBfTlBOX0V2YWx1YXRlIChOUFAgbnBwLCBOUE9iamVjdCAqbwogCSAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgRXhlY1N0YXRlICpleGVjID0gb2JqLT5leGVjdXRpb25Db250ZXh0LT5pbnRl
cnByZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIE9iamVjdCB0aGlzT2JqID0gT2JqZWN0
KGNvbnN0X2Nhc3Q8T2JqZWN0SW1wKj4ob2JqLT5pbXApKTsKLSAgICAgICAgVmFsdWUgcmVzdWx0
OworICAgICAgICBWYWx1ZUltcCAqcmVzdWx0OwogICAgICAgICAKICAgICAgICAgSW50ZXJwcmV0
ZXI6OmxvY2soKTsKICAgICAgICAgTlBVVEYxNiAqc2NyaXB0U3RyaW5nOwpAQCAtMjA1LDcgKzIw
NCw3IEBAIGJvb2wgX05QTl9FdmFsdWF0ZSAoTlBQIG5wcCwgTlBPYmplY3QgKm8KICAgICAgICAg
CiAgICAgICAgIGlmICh0eXBlID09IE5vcm1hbCkgewogICAgICAgICAgICAgcmVzdWx0ID0gY29t
cGxldGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc051bGwoKSkgeworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBVbmRlZmlu
ZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjM0LDIxICsyMzMsOSBAQCBib29s
IF9OUE5fR2V0UHJvcGVydHkgKE5QUCBucHAsIE5QT2JqZWN0CiAgICAgICAgIEV4ZWNTdGF0ZSAq
ZXhlYyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygp
OwogCiAgICAgICAgIFByaXZhdGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICop
cHJvcGVydHlOYW1lOwotICAgICAgICBpZiAoaS0+aXNTdHJpbmcpIHsKLSAgICAgICAgICAgIGlm
ICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5IChleGVjLCBpZGVudGlmZXJGcm9tTlBJZGVudGlmaWVy
KGktPnZhbHVlLnN0cmluZykpKSB7Ci0gICAgICAgICAgICAgICAgTlBOX0luaXRpYWxpemVWYXJp
YW50QXNOdWxsKHZhcmlhbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmICghb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5IChleGVjLCBpLT52YWx1ZS5udW1iZXIpKSB7Ci0gICAgICAgICAg
ICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50QXNOdWxsKHZhcmlhbnQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgVmFsdWUgcmVzdWx0OworICAgICAg
ICBWYWx1ZUltcCAqcmVzdWx0OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpIHsKICAgICAgICAg
ICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZlckZyb21OUElkZW50aWZp
ZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIH0KQEAgLTI1NywxMSArMjQ0LDExIEBAIGJv
b2wgX05QTl9HZXRQcm9wZXJ0eSAoTlBQIG5wcCwgTlBPYmplY3QKICAgICAgICAgfQogICAgICAg
ICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKLSAgICAgICAgaWYgKHJlc3VsdC5pc051bGwoKSkg
eworICAgICAgICBpZiAocmVzdWx0LT5pc051bGwoKSkgewogICAgICAgICAgICAgTlBOX0luaXRp
YWxpemVWYXJpYW50QXNOdWxsKHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHJlc3VsdC50eXBlKCkgPT0gVW5kZWZpbmVkVHlw
ZSkgeworICAgICAgICBlbHNlIGlmIChyZXN1bHQtPmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAg
ICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudEFzVW5kZWZpbmVkKHZhcmlhbnQpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yOTIsNyArMjc5LDYgQEAgYm9vbCBfTlBO
X1NldFByb3BlcnR5IChOUFAgbnBwLCBOUE9iamVjdAogCiAgICAgICAgIEV4ZWNTdGF0ZSAqZXhl
YyA9IG9iai0+ZXhlY3V0aW9uQ29udGV4dC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgICAgICBWYWx1ZSByZXN1bHQ7CiAgICAg
ICAgIFByaXZhdGVJZGVudGlmaWVyICppID0gKFByaXZhdGVJZGVudGlmaWVyICopcHJvcGVydHlO
YW1lOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcpIHsKICAgICAgICAgICAgIG9iai0+aW1wLT5w
dXQgKGV4ZWMsIGlkZW50aWZlckZyb21OUElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSwgY29u
dmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCkpOwpAQCAtMzk0LDEwICszODAsMTAg
QEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAgbnBwLCBOUE9iamVjdCAqbwogICAgICAgICAvLyBM
b29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICAgICAgRXhlY1N0YXRlICpleGVjID0gb2Jq
LT5leGVjdXRpb25Db250ZXh0LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
IEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgIFZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0
IChleGVjLCBpZGVudGlmZXJGcm9tTlBJZGVudGlmaWVyKGktPnZhbHVlLnN0cmluZykpOworICAg
ICAgICBWYWx1ZUltcCAqZnVuYyA9IG9iai0+aW1wLT5nZXQgKGV4ZWMsIGlkZW50aWZlckZyb21O
UElkZW50aWZpZXIoaS0+dmFsdWUuc3RyaW5nKSk7CiAgICAgICAgIEludGVycHJldGVyOjp1bmxv
Y2soKTsKIAotICAgICAgICBpZiAoZnVuYy5pc051bGwoKSB8fCBmdW5jLnR5cGUoKSA9PSBVbmRl
ZmluZWRUeXBlKSB7CisgICAgICAgIGlmIChmdW5jLT5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00MTcsNyArNDAzLDcg
QEAgdm9pZCBfTlBOX1NldEV4Y2VwdGlvbiAoTlBPYmplY3QgKm8sIGNvbgogICAgICAgICBKYXZh
U2NyaXB0T2JqZWN0ICpvYmogPSAoSmF2YVNjcmlwdE9iamVjdCAqKW87IAogICAgICAgICBFeGVj
U3RhdGUgKmV4ZWMgPSBvYmotPmV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJldGVyKCktPmdsb2Jh
bEV4ZWMoKTsKICAgICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAgT2JqZWN0IGVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBtZXNzYWdlKTsKKyAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgbWVzc2Fn
ZSk7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbiAoZXJyKTsKICAgICAgICAgSW50ZXJwcmV0
ZXI6OnVubG9jaygpOwogICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ydW50aW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC1wIC11IC1y
MS4xOCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmNwcAotLS0gSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvcnVudGltZS5jcHAJMTIgRmViIDIwMDUgMDA6NTg6MTMgLTAwMDAJMS4xOAor
KysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAJOCBBdWcgMjAwNSAwMTowMDoz
MyAtMDAwMApAQCAtOTEsMTEgKzkxLDExIEBAIHN0YXRpYyBLSlNEaWRFeGVjdXRlRnVuY3Rpb25Q
dHIgX0RpZEV4ZWMKIHZvaWQgSW5zdGFuY2U6OnNldERpZEV4ZWN1dGVGdW5jdGlvbiAoS0pTRGlk
RXhlY3V0ZUZ1bmN0aW9uUHRyIGZ1bmMpIHsgX0RpZEV4ZWN1dGVGdW5jdGlvbiA9IGZ1bmM7IH0K
IEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBJbnN0YW5jZTo6ZGlkRXhlY3V0ZUZ1bmN0aW9uICgp
IHsgcmV0dXJuIF9EaWRFeGVjdXRlRnVuY3Rpb247IH0KIAotVmFsdWUgSW5zdGFuY2U6OmdldFZh
bHVlT2ZGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQpIGNv
bnN0IHsgIAorVmFsdWVJbXAgKkluc3RhbmNlOjpnZXRWYWx1ZU9mRmllbGQgKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkKSBjb25zdCB7ICAKICAgICByZXR1cm4gYUZp
ZWxkLT52YWx1ZUZyb21JbnN0YW5jZSAoZXhlYywgdGhpcyk7CiB9CiAKLXZvaWQgSW5zdGFuY2U6
OnNldFZhbHVlT2ZGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmll
bGQsIGNvbnN0IFZhbHVlICZhVmFsdWUpIGNvbnN0IHsgIAordm9pZCBJbnN0YW5jZTo6c2V0VmFs
dWVPZkZpZWxkIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmllbGQgKmFGaWVsZCwgVmFs
dWVJbXAgKmFWYWx1ZSkgY29uc3QgeyAgCiAgICAgYUZpZWxkLT5zZXRWYWx1ZVRvSW5zdGFuY2Ug
KGV4ZWMsIHRoaXMsIGFWYWx1ZSk7CiB9CiAKQEAgLTEyNiwyNSArMTI2LDI1IEBAIEluc3RhbmNl
ICpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0ZvckxhbmcKICAgICByZXR1cm4gbmV3SW5zdGFuY2U7
CiB9CiAKLU9iamVjdCBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCAoQmluZGluZ0xhbmd1
YWdlIGxhbmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9iamVjdCAqZXhl
Y3V0aW9uQ29udGV4dCkKK09iamVjdEltcCAqSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3Qg
KEJpbmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgdm9pZCAqbmF0aXZlSW5zdGFuY2UsIGNvbnN0IFJv
b3RPYmplY3QgKmV4ZWN1dGlvbkNvbnRleHQpCiB7CiAgICAgSW5zdGFuY2UgKmludGVyZmFjZU9i
amVjdCA9IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZSAobGFuZ3Vh
Z2UsICh2b2lkICopbmF0aXZlSW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQpOwogICAgIAogICAg
IEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgT2JqZWN0IHRoZU9iamVjdChuZXcgUnVudGltZU9i
amVjdEltcChpbnRlcmZhY2VPYmplY3QsdHJ1ZSkpOworICAgIE9iamVjdEltcCAqdGhlT2JqZWN0
KG5ldyBSdW50aW1lT2JqZWN0SW1wKGludGVyZmFjZU9iamVjdCx0cnVlKSk7CiAgICAgSW50ZXJw
cmV0ZXI6OnVubG9jaygpOwogICAgIAogICAgIHJldHVybiB0aGVPYmplY3Q7CiB9CiAKLXZvaWQg
Kkluc3RhbmNlOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKEV4ZWNTdGF0ZSAqZXhl
YywgQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25zdCBPYmplY3QgJnZhbHVlLCBjb25zdCBS
b290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpCit2b2lkICpJbnN0
YW5jZTo6Y3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIEJp
bmRpbmdMYW5ndWFnZSBsYW5ndWFnZSwgT2JqZWN0SW1wICp2YWx1ZSwgY29uc3QgUm9vdE9iamVj
dCAqb3JpZ2luLCBjb25zdCBSb290T2JqZWN0ICpjdXJyZW50KQogewogICAgIHZvaWQgKnJlc3Vs
dCA9IDA7CiAgICAgCi0gICAgaWYgKHZhbHVlLnR5cGUoKSAhPSBPYmplY3RUeXBlKQorICAgIGlm
ICghdmFsdWUtPmlzT2JqZWN0KCkpCiAJcmV0dXJuIDA7CiAKLSAgICBPYmplY3RJbXAgKmltcCA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlLmltcCgpKTsKKyAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKICAgICAKICAgICBzd2l0Y2ggKGxh
bmd1YWdlKSB7CiAJY2FzZSBJbnN0YW5jZTo6T2JqZWN0aXZlQ0xhbmd1YWdlOiB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yOQpkaWZmIC1wIC11IC1yMS4yOSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaAkxMiBGZWIgMjAwNSAw
MDo1ODoxMyAtMDAwMAkxLjI5CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgJ
OCBBdWcgMjAwNSAwMTowMDozNCAtMDAwMApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBQYXJhbWV0ZXIgKnBhcmFtZXRlckF0KGxvbmcgaSkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgbG9uZyBudW1QYXJhbWV0ZXJzKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB+Q29u
c3RydWN0b3IoKSB7fTsKKyAgICB2aXJ0dWFsIH5Db25zdHJ1Y3RvcigpIHt9CiB9OwogCiBjbGFz
cyBGaWVsZApAQCAtNjgsMjUgKzY4LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIgKm5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29u
c3QgPSAwOwogCi0gICAgdmlydHVhbCBLSlM6OlZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3Rh
bmNlICppbnN0YW5jZSwgY29uc3QgVmFsdWUgJmFWYWx1ZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgVmFsdWVJbXAgKnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqLCBjb25zdCBJbnN0YW5j
ZSAqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVj
U3RhdGUgKiwgY29uc3QgSW5zdGFuY2UgKiwgVmFsdWVJbXAgKikgY29uc3QgPSAwOwogCi0gICAg
dmlydHVhbCB+RmllbGQoKSB7fTsKKyAgICB2aXJ0dWFsIH5GaWVsZCgpIHt9CiB9OwogCiAKIGNs
YXNzIE1ldGhvZExpc3QKIHsKIHB1YmxpYzoKLSAgICBNZXRob2RMaXN0KCkgOiBfbWV0aG9kcygw
KSwgX2xlbmd0aCgwKSB7fTsKKyAgICBNZXRob2RMaXN0KCkgOiBfbWV0aG9kcygwKSwgX2xlbmd0
aCgwKSB7fQogICAgIAotICAgIHZvaWQgYWRkTWV0aG9kIChNZXRob2QgKmFNZXRob2QpOworICAg
IHZvaWQgYWRkTWV0aG9kKE1ldGhvZCAqYU1ldGhvZCk7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0
aCgpIGNvbnN0OwotICAgIE1ldGhvZCAqbWV0aG9kQXQgKHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3Q7CisgICAgTWV0aG9kICptZXRob2RBdCh1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAg
IAogICAgIH5NZXRob2RMaXN0KCk7CiAgICAgCi0gICAgTWV0aG9kTGlzdCAoY29uc3QgTWV0aG9k
TGlzdCAmb3RoZXIpOworICAgIE1ldGhvZExpc3QoY29uc3QgTWV0aG9kTGlzdCAmb3RoZXIpOwog
ICAgIE1ldGhvZExpc3QgJm9wZXJhdG9yPShjb25zdCBNZXRob2RMaXN0ICZvdGhlcik7CiAKIHBy
aXZhdGU6CkBAIC0xMTcsOSArMTE3LDkgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgRmll
bGQgKmZpZWxkTmFtZWQoY29uc3QgY2hhciAqbmFtZSwgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25z
dCA9IDA7CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSAqZXhl
YywgQmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKSB7IHJldHVybiBVbmRlZmluZWQoKTsgfQorICAgIHZpcnR1YWwgVmFsdWVJbXAgKmZh
bGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSAqLCBJbnN0YW5jZSAqLCBjb25zdCBJZGVudGlmaWVyICYp
IHsgcmV0dXJuIFVuZGVmaW5lZCgpOyB9CiAgICAgCi0gICAgdmlydHVhbCB+Q2xhc3MoKSB7fTsK
KyAgICB2aXJ0dWFsIH5DbGFzcygpIHt9CiB9OwogCiB0eXBlZGVmIHZvaWQgKCpLSlNEaWRFeGVj
dXRlRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICpyb290T2JqZWN0KTsK
QEAgLTEzMywxNiArMTMzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgQ0xhbmd1YWdlCiAgICAgfSBC
aW5kaW5nTGFuZ3VhZ2U7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXREaWRFeGVjdXRlRnVuY3Rpb24g
KEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBmdW5jKTsKLSAgICBzdGF0aWMgS0pTRGlkRXhlY3V0
ZUZ1bmN0aW9uUHRyIGRpZEV4ZWN1dGVGdW5jdGlvbiAoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRE
aWRFeGVjdXRlRnVuY3Rpb24oS0pTRGlkRXhlY3V0ZUZ1bmN0aW9uUHRyIGZ1bmMpOworICAgIHN0
YXRpYyBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZGlkRXhlY3V0ZUZ1bmN0aW9uKCk7CiAgICAg
Ci0gICAgc3RhdGljIEluc3RhbmNlICpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZSAo
QmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9v
dE9iamVjdCAqciA9IDApOwotICAgIHN0YXRpYyB2b2lkICpjcmVhdGVMYW5ndWFnZUluc3RhbmNl
Rm9yVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCBjb25z
dCBPYmplY3QgJnZhbHVlLCBjb25zdCBSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IFJvb3RPYmpl
Y3QgKmN1cnJlbnQpOwotICAgIHN0YXRpYyBPYmplY3QgY3JlYXRlUnVudGltZU9iamVjdCAoQmlu
ZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5jZSwgY29uc3QgUm9vdE9i
amVjdCAqciA9IDApOworICAgIHN0YXRpYyBJbnN0YW5jZSAqY3JlYXRlQmluZGluZ0Zvckxhbmd1
YWdlSW5zdGFuY2UoQmluZGluZ0xhbmd1YWdlIGxhbmd1YWdlLCB2b2lkICpuYXRpdmVJbnN0YW5j
ZSwgY29uc3QgUm9vdE9iamVjdCAqciA9IDApOworICAgIHN0YXRpYyB2b2lkICpjcmVhdGVMYW5n
dWFnZUluc3RhbmNlRm9yVmFsdWUoRXhlY1N0YXRlICpleGVjLCBCaW5kaW5nTGFuZ3VhZ2UgbGFu
Z3VhZ2UsIE9iamVjdEltcCAqdmFsdWUsIGNvbnN0IFJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3Qg
Um9vdE9iamVjdCAqY3VycmVudCk7CisgICAgc3RhdGljIE9iamVjdEltcCAqY3JlYXRlUnVudGlt
ZU9iamVjdChCaW5kaW5nTGFuZ3VhZ2UgbGFuZ3VhZ2UsIHZvaWQgKm5hdGl2ZUluc3RhbmNlLCBj
b25zdCBSb290T2JqZWN0ICpyID0gMCk7CiAKLSAgICBJbnN0YW5jZSAoKSA6IF9leGVjdXRpb25D
b250ZXh0KDApIHt9OworICAgIEluc3RhbmNlKCkgOiBfZXhlY3V0aW9uQ29udGV4dCgwKSB7fTsK
ICAgICAKLSAgICBJbnN0YW5jZSAoY29uc3QgSW5zdGFuY2UgJm90aGVyKTsKKyAgICBJbnN0YW5j
ZShjb25zdCBJbnN0YW5jZSAmb3RoZXIpOwogCiAgICAgSW5zdGFuY2UgJm9wZXJhdG9yPShjb25z
dCBJbnN0YW5jZSAmb3RoZXIpOwogCkBAIC0xNTQsMjMgKzE1NCwyMyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdmlydHVhbCBDbGFzcyAqZ2V0Q2xhc3MoKSBjb25zdCA9IDA7CiAgICAgCi0gICAgdmly
dHVhbCBWYWx1ZSBnZXRWYWx1ZU9mRmllbGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmllbGQg
KmFGaWVsZCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXRWYWx1ZU9mVW5kZWZpbmVkRmll
bGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIFR5cGUgaGlu
dCkgY29uc3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxkLCBjb25zdCBW
YWx1ZSAmYVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZXRWYWx1ZU9m
VW5kZWZpbmVkRmllbGQgKCkgeyByZXR1cm4gZmFsc2U7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eSwgY29uc3QgVmFsdWUgJmFWYWx1ZSkge307CisgICAgdmlydHVhbCBWYWx1ZUlt
cCAqZ2V0VmFsdWVPZkZpZWxkKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRmllbGQgKmFGaWVsZCkg
Y29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHksIFR5cGUgaGludCkgY29u
c3QgeyByZXR1cm4gVW5kZWZpbmVkKCk7IH07CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlT2ZG
aWVsZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQsIFZhbHVlSW1wICphVmFs
dWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZCgpIHsgcmV0dXJuIGZhbHNlOyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZU9mVW5k
ZWZpbmVkRmllbGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eSwg
VmFsdWVJbXAgKmFWYWx1ZSkge307CiAgICAgCi0gICAgdmlydHVhbCBWYWx1ZSBpbnZva2VNZXRo
b2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kLCBjb25zdCBMaXN0
ICZhcmdzKSA9IDA7Ci0gICAgdmlydHVhbCBWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kIChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpID0gMDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1w
ICppbnZva2VNZXRob2QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2Qs
IGNvbnN0IExpc3QgJmFyZ3MpID0gMDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VEZWZh
dWx0TWV0aG9kKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykgPSAwOwogICAgIAot
ICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVlIChUeXBlIGhpbnQpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFsdWUoVHlwZSBoaW50KSBjb25zdCA9IDA7CiAg
ICAgCi0gICAgdmlydHVhbCBWYWx1ZSB2YWx1ZU9mKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKGdl
dENsYXNzKCktPm5hbWUoKSk7IH07CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVPZigpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZyhnZXRDbGFzcygpLT5uYW1lKCkpOyB9OwogICAgIAotICAgIHZv
aWQgc2V0RXhlY3V0aW9uQ29udGV4dCAoY29uc3QgUm9vdE9iamVjdCAqcikgeyBfZXhlY3V0aW9u
Q29udGV4dCA9IHI7IH0KKyAgICB2b2lkIHNldEV4ZWN1dGlvbkNvbnRleHQoY29uc3QgUm9vdE9i
amVjdCAqcikgeyBfZXhlY3V0aW9uQ29udGV4dCA9IHI7IH0KICAgICBjb25zdCBSb290T2JqZWN0
ICpleGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gX2V4ZWN1dGlvbkNvbnRleHQ7IH0K
ICAgICAKLSAgICB2aXJ0dWFsIH5JbnN0YW5jZSgpIHt9OworICAgIHZpcnR1YWwgfkluc3RhbmNl
KCkge30KIAogcHJvdGVjdGVkOgogICAgIGNvbnN0IFJvb3RPYmplY3QgKl9leGVjdXRpb25Db250
ZXh0OwpAQCAtMTc5LDEzICsxNzksMTMgQEAgcHJvdGVjdGVkOgogY2xhc3MgQXJyYXkKIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2ln
bmVkIGludCBpbmRleCwgY29uc3QgVmFsdWUgJmFWYWx1ZSkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqLCB1bnNpZ25l
ZCBpbmRleCwgVmFsdWVJbXAgKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZh
bHVlQXQoRXhlY1N0YXRlICosIHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgfkFycmF5
KCkge307CisgICAgdmlydHVhbCB+QXJyYXkoKSB7fQogfTsKIAotY29uc3QgY2hhciAqc2lnbmF0
dXJlRm9yUGFyYW1ldGVycyhjb25zdCBLSlM6Okxpc3QgJmFMaXN0KTsKK2NvbnN0IGNoYXIgKnNp
Z25hdHVyZUZvclBhcmFtZXRlcnMoY29uc3QgTGlzdCAmYUxpc3QpOwogCiB9IC8vIG5hbWVzcGFj
ZSBCaW5kaW5ncwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9hcnJheS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11
IC1yMS45IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCi0tLSBKYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcAk3IEF1ZyAyMDA1IDA2OjE3OjMz
IC0wMDAwCTEuOQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJ
OCBBdWcgMjAwNSAwMTowMDozNCAtMDAwMApAQCAtMzIsNyArMzIsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS0pTOwogY29uc3QgQ2xhc3NJbmZvIFJ1bnRpbWVBcnJheUltcDo6aW5mbyA9IHsiUnVudGlt
ZUFycmF5IiwgJkFycmF5SW5zdGFuY2VJbXA6OmluZm8sIDAsIDB9OwogCiBSdW50aW1lQXJyYXlJ
bXA6OlJ1bnRpbWVBcnJheUltcChFeGVjU3RhdGUgKmV4ZWMsIEJpbmRpbmdzOjpBcnJheSAqYSkK
LSAgICA6IEFycmF5SW5zdGFuY2VJbXAgKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluQXJyYXlQcm90b3R5cGUoKS5pbXAoKSwgYS0+Z2V0TGVuZ3RoKCkpCisgICAgOiBBcnJheUlu
c3RhbmNlSW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXlQcm90b3R5
cGUoKSwgYS0+Z2V0TGVuZ3RoKCkpCiB7CiAgICAgLy8gQWx3YXlzIHRha2VzIG93bmVyc2hpcCBv
ZiBjb25jcmV0ZSBhcnJheS4KICAgICBfYXJyYXkgPSBhOwpAQCAtNDMsMTMgKzQzLDEzIEBAIFJ1
bnRpbWVBcnJheUltcDo6flJ1bnRpbWVBcnJheUltcCgpCiAgICAgZGVsZXRlIF9hcnJheTsKIH0K
IAotVmFsdWUgUnVudGltZUFycmF5SW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K1ZhbHVlSW1wICpSdW50aW1lQXJyYXlJbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFJ1bnRpbWVBcnJheUltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVB
cnJheUltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBOdW1iZXIodGhpc09iai0+
Z2V0TGVuZ3RoKCkpOwogfQogCi1WYWx1ZSBSdW50aW1lQXJyYXlJbXA6OmluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAqUnVudGltZUFycmF5SW1wOjppbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVBcnJheUltcCAqdGhpc09iaiA9IHN0YXRp
Y19jYXN0PFJ1bnRpbWVBcnJheUltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0
aGlzT2JqLT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgc2xvdC5pbmRleCgpKTsK
QEAgLTg0LDEwICs4NCwxMCBAQCBib29sIFJ1bnRpbWVBcnJheUltcDo6Z2V0T3duUHJvcGVydHlT
bG90CiAgICAgcmV0dXJuIEFycmF5SW5zdGFuY2VJbXA6OmdldE93blByb3BlcnR5U2xvdChleGVj
LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgUnVudGltZUFycmF5SW1wOjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIFJ1bnRpbWVBcnJheUltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRy
KQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7Ci0gICAg
ICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsUmFuZ2VFcnJvcik7CisgICAgICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFJhbmdlRXJyb3IpOwogICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEw
MiwxMCArMTAyLDEwIEBAIHZvaWQgUnVudGltZUFycmF5SW1wOjpwdXQoRXhlY1N0YXRlICpleGUK
ICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKIH0K
IAotdm9pZCBSdW50aW1lQXJyYXlJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQordm9pZCBSdW50aW1lQXJyYXlJbXA6
OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCBhdHRyKQogewogICAgIGlmIChpbmRleCA+PSBnZXRMZW5ndGgoKSkgewotICAgICAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFJhbmdlRXJyb3IpOworICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxSYW5nZUVycm9yKTsKICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX2FycmF5LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJy
YXkuaAk3IEF1ZyAyMDA1IDA2OjE3OjMzIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuaAk4IEF1ZyAyMDA1IDAxOjAwOjM0IC0wMDAwCkBAIC0zOSw4
ICszOSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgdW5zaWduZWQsIFBy
b3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIg
PSBOb25lKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
OwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSk7CkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFZhbHVlIGxlbmd0
aEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyBWYWx1ZSBpbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqbGVu
Z3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgQmluZGluZ3M6OkFy
cmF5ICpfYXJyYXk7CiB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlm
ZiAtcCAtdSAtcjEuMTIgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3Bw
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJNyBBdWcgMjAw
NSAwNjoxNzozMyAtMDAwMAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1l
X21ldGhvZC5jcHAJOCBBdWcgMjAwNSAwMTowMDozNCAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCBS
dW50aW1lTWV0aG9kSW1wOjp+UnVudGltZU1ldGhvZEltcCgpCiB7CiB9CiAKLVZhbHVlIFJ1bnRp
bWVNZXRob2RJbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKlJ1
bnRpbWVNZXRob2RJbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1
bnRpbWVNZXRob2RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lTWV0aG9kSW1wICo+
KHNsb3Quc2xvdEJhc2UoKSk7CiAKQEAgLTY4LDI2ICs2OCwyNiBAQCBib29sIFJ1bnRpbWVNZXRo
b2RJbXA6OmltcGxlbWVudHNDYWxsKCkgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlIFJ1
bnRpbWVNZXRob2RJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqUnVudGltZU1ldGhvZEltcDo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7CiAgICAgaWYgKF9tZXRob2RMaXN0Lmxlbmd0aCgpID4gMCkgewogCVJ1bnRpbWVPYmplY3RJ
bXAgKmltcDsKIAkKIAkvLyBJZiB0aGlzT2JqIGlzIHRoZSBET00gb2JqZWN0IGZvciBhIHBsdWdp
biwgZ2V0IHRoZSBjb3JyZXNwb25kaW5nCiAJLy8gcnVudGltZSBvYmplY3QgZnJvbSB0aGUgRE9N
IG9iamVjdC4KLQlpZiAodGhpc09iai5jbGFzc0luZm8oKSAhPSAmS0pTOjpSdW50aW1lT2JqZWN0
SW1wOjppbmZvKSB7Ci0JICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSB0aGlzT2JqLmdldChleGVj
LCAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpOwotCSAgICBpbXAgPSBzdGF0aWNfY2FzdDxSdW50
aW1lT2JqZWN0SW1wKj4ocnVudGltZU9iamVjdC5pbXAoKSk7CisJaWYgKHRoaXNPYmotPmNsYXNz
SW5mbygpICE9ICZLSlM6OlJ1bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKKwkgICAgVmFsdWVJbXAg
KnJ1bnRpbWVPYmplY3QgPSB0aGlzT2JqLT5nZXQoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmpl
Y3QiKTsKKwkgICAgaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KHJ1bnRpbWVP
YmplY3QpOwogCX0KIAllbHNlIHsKLQkgICAgaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVj
dEltcCo+KHRoaXNPYmouaW1wKCkpOworCSAgICBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2Jq
ZWN0SW1wKj4odGhpc09iaik7CiAJfQogICAgICAgICBpZiAoaW1wKSB7CiAgICAgICAgICAgICBJ
bnN0YW5jZSAqaW5zdGFuY2UgPSBpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZhbHVlIGFWYWx1ZSA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgX21ldGhv
ZExpc3QsIGFyZ3MpOworICAgICAgICAgICAgVmFsdWVJbXAgKmFWYWx1ZSA9IGluc3RhbmNlLT5p
bnZva2VNZXRob2QoZXhlYywgX21ldGhvZExpc3QsIGFyZ3MpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9k
LmgJNyBBdWcgMjAwNSAwNjoxNzozMyAtMDAwMAkxLjYKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL3J1bnRpbWVfbWV0aG9kLmgJOCBBdWcgMjAwNSAwMTowMDozNCAtMDAwMApAQCAtNDEsMTQg
KzQxLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAg
IHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAogICAgIHZpcnR1YWwgQ29kZVR5cGUg
Y29kZVR5cGUoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShF
eGVjU3RhdGUgKmV4ZWMpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBWYWx1ZSBsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgVmFsdWVJbXAgKmxlbmd0aEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgQmluZGluZ3M6Ok1ldGhvZExp
c3QgX21ldGhvZExpc3Q7CiB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcK
ZGlmZiAtcCAtdSAtcjEuMjcgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3Qu
Y3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHAJNyBBdWcg
MjAwNSAwNjoxNzozMyAtMDAwMAkxLjI3CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lX29iamVjdC5jcHAJOCBBdWcgMjAwNSAwMTowMDozNCAtMDAwMApAQCAtNjAsNyArNjAsNyBA
QCBSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0SW1wKEJpbmRpCiAgICAgaW5zdGFuY2Ug
PSBpOwogfQogCi1WYWx1ZSBSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKlJ1bnRpbWVPYmplY3RJbXA6OmZhbGxiYWNrT2Jq
ZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhp
c09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBA
IC02OCwxNCArNjgsMTQgQEAgVmFsdWUgUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RH
ZQogICAgIGluc3RhbmNlLT5iZWdpbigpOwogCiAgICAgQ2xhc3MgKmFDbGFzcyA9IGluc3RhbmNl
LT5nZXRDbGFzcygpOwotICAgIFZhbHVlIHJlc3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tPYmplY3Qo
ZXhlYywgaW5zdGFuY2UsIHByb3BlcnR5TmFtZSk7CisgICAgVmFsdWVJbXAgKnJlc3VsdCA9IGFD
bGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5zdGFuY2UsIHByb3BlcnR5TmFtZSk7CiAKICAg
ICBpbnN0YW5jZS0+ZW5kKCk7CiAgICAgICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1WYWx1ZSBSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
VmFsdWVJbXAgKlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVP
YmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmlu
c3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBAIC04NCwxNCArODQsMTQgQEAgVmFsdWUgUnVu
dGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlYwogCiAgICAgQ2xhc3MgKmFDbGFzcyA9IGlu
c3RhbmNlLT5nZXRDbGFzcygpOwogICAgIEZpZWxkICphRmllbGQgPSBhQ2xhc3MtPmZpZWxkTmFt
ZWQocHJvcGVydHlOYW1lLmFzY2lpKCksIGluc3RhbmNlKTsKLSAgICBWYWx1ZSByZXN1bHQgPSBp
bnN0YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAorICAgIFZhbHVlSW1wICpy
ZXN1bHQgPSBpbnN0YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAogICAgIAog
ICAgIGluc3RhbmNlLT5lbmQoKTsKICAgICAgICAgICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLVZhbHVlIFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorVmFsdWVJbXAgKlJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIFJ1bnRpbWVPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50
aW1lT2JqZWN0SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgQmluZGluZ3M6Okluc3RhbmNl
ICppbnN0YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtMTAwLDcgKzEwMCw3IEBAIFZhbHVl
IFJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdldHRlcihFeGUKIAogICAgIENsYXNzICphQ2xhc3Mg
PSBpbnN0YW5jZS0+Z2V0Q2xhc3MoKTsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBhQ2xh
c3MtPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUuYXNjaWkoKSwgaW5zdGFuY2UpOwotICAgIFZh
bHVlIHJlc3VsdCA9IE9iamVjdChuZXcgUnVudGltZU1ldGhvZEltcChleGVjLCBwcm9wZXJ0eU5h
bWUsIG1ldGhvZExpc3QpKTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gbmV3IFJ1bnRpbWVNZXRo
b2RJbXAoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIAogICAgIGluc3RhbmNlLT5l
bmQoKTsKICAgICAgICAgICAgIApAQCAtMTMyLDcgKzEzMiw3IEBAIGJvb2wgUnVudGltZU9iamVj
dEltcDo6Z2V0T3duUHJvcGVydHlTbG8KICAgICAgICAgfQogCQogICAgICAgICAvLyBUcnkgYSBm
YWxsYmFjayBvYmplY3QuCi0gICAgICAgIGlmICghYUNsYXNzLT5mYWxsYmFja09iamVjdChleGVj
LCBpbnN0YW5jZSwgcHJvcGVydHlOYW1lKS50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSkgeworICAg
ICAgICBpZiAoIWFDbGFzcy0+ZmFsbGJhY2tPYmplY3QoZXhlYywgaW5zdGFuY2UsIHByb3BlcnR5
TmFtZSktPmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IGZhbGxiYWNrT2JqZWN0R2V0dGVyKTsKICAgICAgICAgICAgIGluc3RhbmNlLT5lbmQoKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIGJvb2wgUnVudGltZU9i
amVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG8KIH0KIAogdm9pZCBSdW50aW1lT2JqZWN0SW1wOjpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgICAgaW5zdGFuY2UtPmJl
Z2luKCk7CiAKQEAgLTE4Nyw5ICsxODcsOSBAQCBib29sIFJ1bnRpbWVPYmplY3RJbXA6OmRlbGV0
ZVByb3BlcnR5KEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBSdW50aW1lT2JqZWN0
SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0CitWYWx1
ZUltcCAqUnVudGltZU9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlw
ZSBoaW50KSBjb25zdAogewotICAgIFZhbHVlIHJlc3VsdDsKKyAgICBWYWx1ZUltcCAqcmVzdWx0
OwogICAgIAogICAgIGluc3RhbmNlLT5iZWdpbigpOwogCkBAIC0yMDYsMTEgKzIwNiwxMSBAQCBi
b29sIFJ1bnRpbWVPYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkgCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVZhbHVlIFJ1bnRpbWVPYmplY3RJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqUnVudGltZU9iamVjdElt
cDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKLSAgICBWYWx1ZSBh
VmFsdWUgPSBnZXRJbnRlcm5hbEluc3RhbmNlKCktPmludm9rZURlZmF1bHRNZXRob2QoZXhlYywg
YXJncyk7CisgICAgVmFsdWVJbXAgKmFWYWx1ZSA9IGdldEludGVybmFsSW5zdGFuY2UoKS0+aW52
b2tlRGVmYXVsdE1ldGhvZChleGVjLCBhcmdzKTsKICAgICAKICAgICBpbnN0YW5jZS0+ZW5kKCk7
CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNjoxNzozMyAtMDAwMAkx
LjE1CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oCTggQXVnIDIw
MDUgMDE6MDA6MzQgLTAwMDAKQEAgLTQ0LDI3ICs0NCwyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICAgICAgICAgICAgICAgICAg
IFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW5QdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKTsKIAotICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhl
YywgVHlwZSBoaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpkZWZhdWx0VmFsdWUo
RXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbnRlcm5h
bEluc3RhbmNlIChCaW5kaW5nczo6SW5zdGFuY2UgKmkpIHsgaW5zdGFuY2UgPSBpOyB9CiAgICAg
QmluZGluZ3M6Okluc3RhbmNlICpnZXRJbnRlcm5hbEluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4g
aW5zdGFuY2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwog
ICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgVmFsdWUgZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgVmFsdWUgZmllbGRHZXR0
ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICBzdGF0aWMgVmFsdWUgbWV0aG9kR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICpmYWxsYmFj
a09iamVjdEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqZmllbGRHZXR0ZXIoRXhlY1N0YXRlICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgVmFs
dWVJbXAgKm1ldGhvZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgQmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZTsKICAg
ICBib29sIG93bnNJbnN0YW5jZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19p
bnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlm
ZiAtcCAtdSAtcjEuMTIgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmNwcAot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmNwcAkxNyBKYW4gMjAwNSAy
Mjo0MToyMiAtMDAwMAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFu
Y2UuY3BwCTggQXVnIDIwMDUgMDE6MDA6MzcgLTAwMDAKQEAgLTM5LDE1ICszOSwxNSBAQAogfQog
I2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwotdXNpbmcgbmFtZXNwYWNl
IEtKUzsKK25hbWVzcGFjZSBLSlMgeworbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAogQ0luc3RhbmNl
OjpDSW5zdGFuY2UgKE5QT2JqZWN0ICpvKSAKIHsKICAgICBfb2JqZWN0ID0gX05QTl9SZXRhaW5P
YmplY3QgKG8pOwogICAgIF9jbGFzcyA9IDA7CiAgICAgc2V0RXhlY3V0aW9uQ29udGV4dCAoMCk7
Ci19OworfQogCiBDSW5zdGFuY2U6On5DSW5zdGFuY2UgKCkgCiB7CkBAIC05NCw5ICs5NCw5IEBA
IHZvaWQgQ0luc3RhbmNlOjplbmQoKQogICAgIC8vIERvIG5vdGhpbmcuCiB9CiAKLVZhbHVlIENJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9k
TGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDSW5zdGFuY2U6
Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2RM
aXN0LCBjb25zdCBMaXN0ICZhcmdzKQogewotICAgIFZhbHVlIHJlc3VsdFZhbHVlOworICAgIFZh
bHVlSW1wICpyZXN1bHRWYWx1ZTsKIAogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgYXJlIG5v
dCBhbGxvd2VkIGJ5IE5QT2JqZWN0cy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAgIC8vIG5hbWUg
bWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCkBAIC0xNDYsOSArMTQ2LDkgQEAgVmFsdWUg
Q0luc3RhbmNlOjppbnZva2VNZXRob2QgKEtKUzo6RXhlYwogfQogCiAKLVZhbHVlIENJbnN0YW5j
ZTo6aW52b2tlRGVmYXVsdE1ldGhvZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgVmFsdWUgcmVzdWx0VmFsdWU7Cisg
ICAgVmFsdWVJbXAgKnJlc3VsdFZhbHVlOwogCiAgICAgaWYgKF9vYmplY3QtPl9jbGFzcy0+aW52
b2tlRGVmYXVsdCkgeyAgICAgCiAgICAgICAgIHVuc2lnbmVkIGksIGNvdW50ID0gYXJncy5zaXpl
KCk7CkBAIC0xODgsNDQgKzE4OCw0NCBAQCBWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRN
ZXRob2QgKEtKCiB9CiAKIAotS0pTOjpWYWx1ZSBDSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZSAoS0pT
OjpUeXBlIGhpbnQpIGNvbnN0CitWYWx1ZUltcCAqQ0luc3RhbmNlOjpkZWZhdWx0VmFsdWUgKFR5
cGUgaGludCkgY29uc3QKIHsKLSAgICBpZiAoaGludCA9PSBLSlM6OlN0cmluZ1R5cGUpIHsKKyAg
ICBpZiAoaGludCA9PSBTdHJpbmdUeXBlKSB7CiAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSgp
OwogICAgIH0KLSAgICBlbHNlIGlmIChoaW50ID09IEtKUzo6TnVtYmVyVHlwZSkgeworICAgIGVs
c2UgaWYgKGhpbnQgPT0gTnVtYmVyVHlwZSkgewogICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUo
KTsKICAgICB9Ci0gICAgZWxzZSBpZiAoaGludCA9PSBLSlM6OkJvb2xlYW5UeXBlKSB7CisgICAg
ZWxzZSBpZiAoaGludCA9PSBCb29sZWFuVHlwZSkgewogICAgICAgICByZXR1cm4gYm9vbGVhblZh
bHVlKCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiB2YWx1ZU9mKCk7CiB9CiAKLUtKUzo6VmFs
dWUgQ0luc3RhbmNlOjpzdHJpbmdWYWx1ZSgpIGNvbnN0CitWYWx1ZUltcCAqQ0luc3RhbmNlOjpz
dHJpbmdWYWx1ZSgpIGNvbnN0CiB7CiAgICAgY2hhciBidWZbMTAyNF07Ci0gICAgc25wcmludGYg
KGJ1ZiwgMTAyNCwgIk5QT2JqZWN0ICVwLCBOUENsYXNzICVwIiwgX29iamVjdCwgX29iamVjdC0+
X2NsYXNzKTsKLSAgICBLSlM6OlN0cmluZyB2KGJ1Zik7Ci0gICAgcmV0dXJuIHY7CisgICAgc25w
cmludGYoYnVmLCAxMDI0LCAiTlBPYmplY3QgJXAsIE5QQ2xhc3MgJXAiLCBfb2JqZWN0LCBfb2Jq
ZWN0LT5fY2xhc3MpOworICAgIHJldHVybiBqc1N0cmluZyhidWYpOwogfQogCi1LSlM6OlZhbHVl
IENJbnN0YW5jZTo6bnVtYmVyVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKkNJbnN0YW5jZTo6bnVt
YmVyVmFsdWUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiAgSW1wbGVtZW50IHNvbWV0aGluZyBz
ZW5zaWJsZQotICAgIEtKUzo6TnVtYmVyIHYoMCk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJu
IGpzTnVtYmVyKDApOwogfQogCi1LSlM6OlZhbHVlIENJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkg
Y29uc3QKK1ZhbHVlSW1wICpDSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNpYmxlCi0gICAgS0pTOjpCb29sZWFu
IHYoKGJvb2wpMCk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7
CiB9CiAKLUtKUzo6VmFsdWUgQ0luc3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCitWYWx1ZUltcCAq
Q0luc3RhbmNlOjp2YWx1ZU9mKCkgY29uc3QgCiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7
Ci19OworfQorCit9Cit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFu
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvYy9jX2luc3RhbmNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1y
MS42IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5oCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuaAkxNyBKYW4gMjAwNSAyMjo0MToyMiAtMDAwMAkx
LjYKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5oCTggQXVnIDIwMDUg
MDE6MDA6MzcgLTAwMDAKQEAgLTUxLDE1ICs1MSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGJlZ2luKCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZCgpOwogICAgIAotICAgIHZpcnR1YWwg
VmFsdWUgdmFsdWVPZigpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVlIChL
SlM6OlR5cGUgaGludCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVPZigpIGNv
bnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1ZSAoS0pTOjpUeXBlIGhpbnQp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBWYWx1ZSBpbnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kLCBjb25zdCBMaXN0ICZhcmdzKTsKLSAgICB2aXJ0
dWFsIFZhbHVlIGludm9rZURlZmF1bHRNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlz
dCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqaW52b2tlTWV0aG9kIChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAmYXJncyk7CisgICAg
dmlydHVhbCBWYWx1ZUltcCAqaW52b2tlRGVmYXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKTsKIAotICAgIFZhbHVlIHN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAg
VmFsdWUgbnVtYmVyVmFsdWUoKSBjb25zdDsKLSAgICBWYWx1ZSBib29sZWFuVmFsdWUoKSBjb25z
dDsKKyAgICBWYWx1ZUltcCAqc3RyaW5nVmFsdWUoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqbnVt
YmVyVmFsdWUoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqYm9vbGVhblZhbHVlKCkgY29uc3Q7CiAg
ICAgCiAgICAgTlBPYmplY3QgKmdldE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIF9vYmplY3Q7IH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGlt
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IEphdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvYy9jX3J1bnRpbWUuY3BwCTEgTm92IDIwMDQgMjM6NDY6MzEgLTAwMDAJMS42CisrKyBKYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5jcHAJOCBBdWcgMjAwNSAwMTowMDozNyAt
MDAwMApAQCAtNDEsMTEgKzQxLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLVZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEluc3RhbmNlICppbnN0KSBjb25zdAorVmFsdWVJbXAgKkNGaWVsZDo6dmFsdWVGcm9t
SW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdCkgY29uc3QKIHsK
ICAgICBjb25zdCBDSW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ0luc3Rh
bmNlKj4oaW5zdCk7CiAgICAgTlBPYmplY3QgKm9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsK
LSAgICBWYWx1ZSBhVmFsdWU7CisgICAgVmFsdWVJbXAgKmFWYWx1ZTsKICAgICBOUFZhcmlhbnQg
cHJvcGVydHk7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocHJvcGVydHkpOwogICAgIGlmIChvYmot
Pl9jbGFzcy0+Z2V0UHJvcGVydHkpIHsKQEAgLTU4LDcgKzU4LDcgQEAgVmFsdWUgQ0ZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZShLSlM6OkV4ZQogICAgIHJldHVybiBhVmFsdWU7CiB9CiAKLXZvaWQg
Q0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElu
c3RhbmNlICppbnN0LCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0Cit2b2lkIENGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmlu
c3QsIFZhbHVlSW1wICphVmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3QgQ0luc3RhbmNlICppbnN0
YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IENJbnN0YW5jZSo+KGluc3QpOwogICAgIE5QT2JqZWN0
ICpvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9jL2NfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUK
ZGlmZiAtcCAtdSAtcjEuNSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCi0t
LSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCTMwIFNlcCAyMDA0IDAxOjMy
OjA0IC0wMDAwCTEuNQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAk4
IEF1ZyAyMDA1IDAxOjAwOjM3IC0wMDAwCkBAIC0zNSw3ICszNSw2IEBACiAKIG5hbWVzcGFjZSBL
SlMKIHsKLWNsYXNzIFZhbHVlOwogCiBuYW1lc3BhY2UgQmluZGluZ3MKIHsKQEAgLTQ5LDggKzQ4
LDggQEAgcHVibGljOgogICAgICAgICBfZmllbGRJZGVudGlmaWVyID0gaWRlbnQ7CiAgICAgfTsK
ICAgICAKLSAgICB2aXJ0dWFsIEtKUzo6VmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5z
dGFuY2UgKmluc3RhbmNlLCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0OworICAgIHZp
cnR1YWwgVmFsdWVJbXAgKnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0lu
c3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBWYWx1ZUlt
cCAqYVZhbHVlKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKm5hbWUoKSBj
b25zdCB7IHJldHVybiBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihfZmllbGRJZGVudGlmaWVyKTsg
fQogICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CkBA
IC04NSw4ICs4NCw4IEBAIHB1YmxpYzoKIAogICAgIENBcnJheSAmb3BlcmF0b3I9KGNvbnN0IENB
cnJheSAmb3RoZXIpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IEtKUzo6VmFsdWUgJmFWYWx1
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBLSlM6OlZhbHVlIHZhbHVlQXQoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIFZhbHVlSW1wICphVmFs
dWUpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKnZhbHVlQXQoRXhlY1N0YXRlICpleGVj
LCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dExlbmd0aCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgfkNBcnJheSgpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45IEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2MvY191dGlsaXR5LmNwcAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxp
dHkuY3BwCTEyIEZlYiAyMDA1IDAwOjU4OjEzIC0wMDAwCTEuOQorKysgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCTggQXVnIDIwMDUgMDE6MDA6MzcgLTAwMDAKQEAgLTM3
LDU1ICszNyw1NSBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogdXNpbmcgbmFtZXNwYWNlIEtKUzo6
QmluZGluZ3M7CiAKIC8vIFJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBVVEYxNkNoYXJzLgot
dm9pZCBjb252ZXJ0TlBTdHJpbmdUb1VURjE2IChjb25zdCBOUFN0cmluZyAqc3RyaW5nLCBOUFVU
RjE2ICoqVVRGMTZDaGFycywgdW5zaWduZWQgaW50ICpVVEYxNkxlbmd0aCkKK3ZvaWQgY29udmVy
dE5QU3RyaW5nVG9VVEYxNihjb25zdCBOUFN0cmluZyAqc3RyaW5nLCBOUFVURjE2ICoqVVRGMTZD
aGFycywgdW5zaWduZWQgaW50ICpVVEYxNkxlbmd0aCkKIHsKLSAgICBjb252ZXJ0VVRGOFRvVVRG
MTYgKHN0cmluZy0+VVRGOENoYXJhY3RlcnMsIHN0cmluZy0+VVRGOExlbmd0aCwgVVRGMTZDaGFy
cywgVVRGMTZMZW5ndGgpOworICAgIGNvbnZlcnRVVEY4VG9VVEYxNihzdHJpbmctPlVURjhDaGFy
YWN0ZXJzLCBzdHJpbmctPlVURjhMZW5ndGgsIFVURjE2Q2hhcnMsIFVURjE2TGVuZ3RoKTsKIH0K
IAogLy8gUmVxdWlyZXMgZnJlZSgpIG9mIHJldHVybmVkIFVURjE2Q2hhcnMuCi12b2lkIGNvbnZl
cnRVVEY4VG9VVEYxNiAoY29uc3QgTlBVVEY4ICpVVEY4Q2hhcnMsIGludCBVVEY4TGVuZ3RoLCBO
UFVURjE2ICoqVVRGMTZDaGFycywgdW5zaWduZWQgaW50ICpVVEYxNkxlbmd0aCkKK3ZvaWQgY29u
dmVydFVURjhUb1VURjE2KGNvbnN0IE5QVVRGOCAqVVRGOENoYXJzLCBpbnQgVVRGOExlbmd0aCwg
TlBVVEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVkIGludCAqVVRGMTZMZW5ndGgpCiB7Ci0gICAg
YXNzZXJ0IChVVEY4Q2hhcnMpOworICAgIGFzc2VydChVVEY4Q2hhcnMpOwogICAgIAogICAgIGlm
IChVVEY4TGVuZ3RoID09IC0xKQogICAgICAgICBVVEY4TGVuZ3RoID0gc3RybGVuKFVURjhDaGFy
cyk7CiAgICAgICAgIAotICAgIENGU3RyaW5nUmVmIHN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRl
V2l0aEJ5dGVzIChOVUxMLCAoY29uc3QgVUludDgqKVVURjhDaGFycywgKENGSW5kZXgpVVRGOExl
bmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4LCBmYWxzZSk7CisgICAgQ0ZTdHJpbmdSZWYgc3Ry
aW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoTlVMTCwgKGNvbnN0IFVJbnQ4KilVVEY4
Q2hhcnMsIChDRkluZGV4KVVURjhMZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCwgZmFsc2Up
OwogCi0gICAgKlVURjE2TGVuZ3RoID0gKHVuc2lnbmVkIGludClDRlN0cmluZ0dldExlbmd0aCAo
c3RyaW5nUmVmKTsKLSAgICAqVVRGMTZDaGFycyA9IChOUFVURjE2ICopbWFsbG9jIChzaXplb2Yo
TlBVVEYxNikgKiAoKlVURjE2TGVuZ3RoKSk7CisgICAgKlVURjE2TGVuZ3RoID0gKHVuc2lnbmVk
IGludClDRlN0cmluZ0dldExlbmd0aChzdHJpbmdSZWYpOworICAgICpVVEYxNkNoYXJzID0gKE5Q
VVRGMTYgKiltYWxsb2Moc2l6ZW9mKE5QVVRGMTYpICogKCpVVEYxNkxlbmd0aCkpOwogCiAgICAg
Ly8gQ29udmVydCB0aGUgc3RyaW5nIHRvIFVURjE2LgogICAgIENGUmFuZ2UgcmFuZ2UgPSB7IDAs
ICpVVEYxNkxlbmd0aCB9OwotICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyAoc3RyaW5nUmVmLCBy
YW5nZSwgKFVuaUNoYXIgKikqVVRGMTZDaGFycyk7Ci0gICAgQ0ZSZWxlYXNlIChzdHJpbmdSZWYp
OworICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmdSZWYsIHJhbmdlLCAoVW5pQ2hhciAq
KSpVVEYxNkNoYXJzKTsKKyAgICBDRlJlbGVhc2Uoc3RyaW5nUmVmKTsKIH0KIAogLy8gVmFyaWFu
dCB2YWx1ZSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkKLXZv
aWQgY29lcmNlVmFsdWVUb05QVmFyaWFudFN0cmluZ1R5cGUgKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQpCit2b2lkIGNvZXJj
ZVZhbHVlVG9OUFZhcmlhbnRTdHJpbmdUeXBlKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZh
bHVlLCBOUFZhcmlhbnQgKnJlc3VsdCkKIHsKLSAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhl
Yyk7CiAgICAgQ1N0cmluZyBjc3RyaW5nID0gdXN0cmluZy5VVEY4U3RyaW5nKCk7CiAgICAgTlBT
dHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4ICopY3N0cmluZy5jX3N0cigpLCBjc3RyaW5n
LnNpemUoKSB9OwotICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5IChyZXN1
bHQsICZzdHJpbmcpOworICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHJl
c3VsdCwgJnN0cmluZyk7CiB9CiAKIC8vIFZhcmlhbnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3
aXRoIE5QUmVsZWFzZVZhcmlhbnRWYWx1ZSgpCi12b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50
IChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIE5QVmFyaWFu
dCAqcmVzdWx0KQordm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUgKmV4ZWMs
IFZhbHVlSW1wICp2YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQpCiB7Ci0gICAgVHlwZSB0eXBlID0g
dmFsdWUudHlwZSgpOworICAgIFR5cGUgdHlwZSA9IHZhbHVlLT50eXBlKCk7CiAgICAgCiAgICAg
aWYgKHR5cGUgPT0gU3RyaW5nVHlwZSkgewotICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUtPnRvU3Ry
aW5nKGV4ZWMpOwogICAgICAgICBDU3RyaW5nIGNzdHJpbmcgPSB1c3RyaW5nLlVURjhTdHJpbmco
KTsKICAgICAgICAgTlBTdHJpbmcgc3RyaW5nID0geyAoY29uc3QgTlBVVEY4ICopY3N0cmluZy5j
X3N0cigpLCBjc3RyaW5nLnNpemUoKSB9OwotICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRX
aXRoU3RyaW5nQ29weSAocmVzdWx0LCAmc3RyaW5nICk7CisgICAgICAgIE5QTl9Jbml0aWFsaXpl
VmFyaWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwgJnN0cmluZyApOwogICAgIH0KICAgICBlbHNl
IGlmICh0eXBlID09IE51bWJlclR5cGUpIHsKLSAgICAgICAgTlBOX0luaXRpYWxpemVWYXJpYW50
V2l0aERvdWJsZSAocmVzdWx0LCB2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgICAgIE5QTl9J
bml0aWFsaXplVmFyaWFudFdpdGhEb3VibGUocmVzdWx0LCB2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09IEJvb2xlYW5UeXBlKSB7Ci0gICAgICAgIE5Q
Tl9Jbml0aWFsaXplVmFyaWFudFdpdGhCb29sIChyZXN1bHQsIHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7CisgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhCb29sKHJlc3VsdCwgdmFsdWUt
PnRvQm9vbGVhbihleGVjKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gVW5zcGVjaWZp
ZWRUeXBlKSB7CiAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudEFzVW5kZWZpbmVkKHJlc3Vs
dCk7CkBAIC05NCwyMCArOTQsMjAgQEAgdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudCAoS0pT
OjpFeGVjUwogICAgICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRBc051bGwocmVzdWx0KTsKICAg
ICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBPYmplY3RUeXBlKSB7Ci0gICAgICAgIEtKUzo6T2Jq
ZWN0SW1wICpvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KHZhbHVlLmlt
cCgpKTsKLSAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJktKUzo6UnVudGlt
ZU9iamVjdEltcDo6aW5mbykgewotICAgICAgICAgICAgS0pTOjpSdW50aW1lT2JqZWN0SW1wICpp
bXAgPSBzdGF0aWNfY2FzdDxLSlM6OlJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUuaW1wKCkpOwor
ICAgICAgICBPYmplY3RJbXAgKm9iamVjdEltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZh
bHVlKTsKKyAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmpl
Y3RJbXA6OmluZm8pIHsKKyAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAgKmltcCA9IHN0YXRp
Y19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUpOwogICAgICAgICAgICAgQ0luc3RhbmNl
ICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PENJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0
YW5jZSgpKTsKLSAgICAgICAgICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhPYmplY3QgKHJl
c3VsdCwgaW5zdGFuY2UtPmdldE9iamVjdCgpKTsKKyAgICAgICAgICAgIE5QTl9Jbml0aWFsaXpl
VmFyaWFudFdpdGhPYmplY3QocmVzdWx0LCBpbnN0YW5jZS0+Z2V0T2JqZWN0KCkpOwogICAgICAg
ICB9CiAJZWxzZSB7CiAKLQkgICAgS0pTOjpJbnRlcnByZXRlciAqb3JpZ2luSW50ZXJwcmV0ZXIg
PSBleGVjLT5pbnRlcnByZXRlcigpOworCSAgICBJbnRlcnByZXRlciAqb3JpZ2luSW50ZXJwcmV0
ZXIgPSBleGVjLT5pbnRlcnByZXRlcigpOwogICAgICAgICAgICAgY29uc3QgQmluZGluZ3M6OlJv
b3RPYmplY3QgKm9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgPSByb290Rm9ySW50ZXJwcmV0ZXIob3Jp
Z2luSW50ZXJwcmV0ZXIpOwogCi0JICAgIEtKUzo6SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0g
MDsKKwkgICAgSW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gMDsKIAkgICAgaWYgKG9yaWdpbklu
dGVycHJldGVyLT5pc0dsb2JhbE9iamVjdCh2YWx1ZSkpIHsKLQkJaW50ZXJwcmV0ZXIgPSBvcmln
aW5JbnRlcnByZXRlci0+aW50ZXJwcmV0ZXJGb3JHbG9iYWxPYmplY3QgKHZhbHVlLmltcCgpKTsK
KwkJaW50ZXJwcmV0ZXIgPSBvcmlnaW5JbnRlcnByZXRlci0+aW50ZXJwcmV0ZXJGb3JHbG9iYWxP
YmplY3QodmFsdWUpOwogCSAgICB9CiAKIAkgICAgaWYgKCFpbnRlcnByZXRlcikKQEAgLTExNSwy
OSArMTE1LDI5IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQgKEtKUzo6RXhlY1MKIAkJ
CiAgICAgICAgICAgICBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4
dCA9IHJvb3RGb3JJbnRlcnByZXRlcihpbnRlcnByZXRlcik7CiAgICAgICAgICAgICBpZiAoIWV4
ZWN1dGlvbkNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCAq
bmV3RXhlY3V0aW9uQ29udGV4dCA9IG5ldyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KDApOwot
ICAgICAgICAgICAgICAgIG5ld0V4ZWN1dGlvbkNvbnRleHQtPnNldEludGVycHJldGVyIChpbnRl
cnByZXRlcik7CisgICAgICAgICAgICAgICAgQmluZGluZ3M6OlJvb3RPYmplY3QgKm5ld0V4ZWN1
dGlvbkNvbnRleHQgPSBuZXcgQmluZGluZ3M6OlJvb3RPYmplY3QoMCk7CisgICAgICAgICAgICAg
ICAgbmV3RXhlY3V0aW9uQ29udGV4dC0+c2V0SW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpOwogICAg
ICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBuZXdFeGVjdXRpb25Db250ZXh0OwogICAg
ICAgICAgICAgfQogICAgIAotCSAgICBOUE9iamVjdCAqb2JqID0gKE5QT2JqZWN0ICopZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+Y3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChleGVjLCBJbnN0
YW5jZTo6Q0xhbmd1YWdlLCB2YWx1ZS50b09iamVjdChleGVjKSwgb3JpZ2luRXhlY3V0aW9uQ29u
dGV4dCwgZXhlY3V0aW9uQ29udGV4dCk7Ci0JICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhP
YmplY3QgKHJlc3VsdCwgb2JqKTsKLQkgICAgX05QTl9SZWxlYXNlT2JqZWN0IChvYmopOworCSAg
ICBOUE9iamVjdCAqb2JqID0gKE5QT2JqZWN0ICopZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Y3JlYXRl
TGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlKGV4ZWMsIEluc3RhbmNlOjpDTGFuZ3VhZ2UsIHZhbHVl
LT50b09iamVjdChleGVjKSwgb3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgZXhlY3V0aW9uQ29udGV4
dCk7CisJICAgIE5QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhPYmplY3QocmVzdWx0LCBvYmopOwor
CSAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqKTsKIAl9CiAgICAgfQogICAgIGVsc2UKICAgICAg
ICAgTlBOX0luaXRpYWxpemVWYXJpYW50QXNVbmRlZmluZWQocmVzdWx0KTsKIH0KIAotVmFsdWUg
Y29udmVydE5QVmFyaWFudFRvVmFsdWUgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBOUFZh
cmlhbnQgKnZhcmlhbnQpCitWYWx1ZUltcCAqY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpCiB7CiAgICAgTlBWYXJpYW50VHlw
ZSB0eXBlID0gdmFyaWFudC0+dHlwZTsKIAogICAgIGlmICh0eXBlID09IE5QVmFyaWFudFR5cGVf
Qm9vbCkgewogICAgICAgICBOUEJvb2wgYUJvb2w7Ci0gICAgICAgIGlmIChOUE5fVmFyaWFudFRv
Qm9vbCAodmFyaWFudCwgJmFCb29sKSkKLSAgICAgICAgICAgIHJldHVybiBLSlM6OkJvb2xlYW4g
KGFCb29sKTsKLSAgICAgICAgcmV0dXJuIEtKUzo6Qm9vbGVhbiAoZmFsc2UpOworICAgICAgICBp
ZiAoTlBOX1ZhcmlhbnRUb0Jvb2wodmFyaWFudCwgJmFCb29sKSkKKyAgICAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4oYUJvb2wpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKICAg
ICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX051bGwpIHsKICAgICAgICAg
cmV0dXJuIE51bGwoKTsKQEAgLTE0NywyMyArMTQ3LDIzIEBAIFZhbHVlIGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlIChLSlM6OkV4ZWMKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBOUFZhcmlh
bnRUeXBlX0ludDMyKSB7CiAgICAgICAgIGludDMyX3QgYW5JbnQ7Ci0gICAgICAgIGlmIChOUE5f
VmFyaWFudFRvSW50MzIgKHZhcmlhbnQsICZhbkludCkpCi0gICAgICAgICAgICByZXR1cm4gTnVt
YmVyIChhbkludCk7Ci0gICAgICAgIHJldHVybiBOdW1iZXIgKDApOworICAgICAgICBpZiAoTlBO
X1ZhcmlhbnRUb0ludDMyKHZhcmlhbnQsICZhbkludCkpCisgICAgICAgICAgICByZXR1cm4gTnVt
YmVyKGFuSW50KTsKKyAgICAgICAgcmV0dXJuIE51bWJlcigwKTsKICAgICB9CiAgICAgZWxzZSBp
ZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0RvdWJsZSkgewogICAgICAgICBkb3VibGUgYURvdWJs
ZTsKLSAgICAgICAgaWYgKE5QTl9WYXJpYW50VG9Eb3VibGUgKHZhcmlhbnQsICZhRG91YmxlKSkK
LSAgICAgICAgICAgIHJldHVybiBOdW1iZXIgKGFEb3VibGUpOwotICAgICAgICByZXR1cm4gTnVt
YmVyICgwKTsKKyAgICAgICAgaWYgKE5QTl9WYXJpYW50VG9Eb3VibGUodmFyaWFudCwgJmFEb3Vi
bGUpKQorICAgICAgICAgICAgcmV0dXJuIE51bWJlcihhRG91YmxlKTsKKyAgICAgICAgcmV0dXJu
IE51bWJlcigwKTsKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0
cmluZykgewogICAgICAgICBOUFVURjE2ICpzdHJpbmdWYWx1ZTsKICAgICAgICAgdW5zaWduZWQg
aW50IFVURjE2TGVuZ3RoOwotICAgICAgICBjb252ZXJ0TlBTdHJpbmdUb1VURjE2ICgmdmFyaWFu
dC0+dmFsdWUuc3RyaW5nVmFsdWUsICZzdHJpbmdWYWx1ZSwgJlVURjE2TGVuZ3RoKTsgICAgLy8g
cmVxdWlyZXMgZnJlZSgpIG9mIHJldHVybmVkIG1lbW9yeS4KLSAgICAgICAgU3RyaW5nIHJlc3Vs
dFN0cmluZyhVU3RyaW5nKChjb25zdCBVQ2hhciAqKXN0cmluZ1ZhbHVlLFVURjE2TGVuZ3RoKSk7
Ci0gICAgICAgIGZyZWUgKHN0cmluZ1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmlu
ZzsKKyAgICAgICAgY29udmVydE5QU3RyaW5nVG9VVEYxNigmdmFyaWFudC0+dmFsdWUuc3RyaW5n
VmFsdWUsICZzdHJpbmdWYWx1ZSwgJlVURjE2TGVuZ3RoKTsgICAgLy8gcmVxdWlyZXMgZnJlZSgp
IG9mIHJldHVybmVkIG1lbW9yeS4KKyAgICAgICAgVVN0cmluZyByZXN1bHRTdHJpbmcoKGNvbnN0
IFVDaGFyICopc3RyaW5nVmFsdWUsVVRGMTZMZW5ndGgpOworICAgICAgICBmcmVlKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHJlc3VsdFN0cmluZyk7CiAgICAgfQogICAg
IGVsc2UgaWYgKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9PYmplY3QpIHsKICAgICAgICAgTlBPYmpl
Y3QgKm9iaiA9IHZhcmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlOwpAQCAtMTcxLDcgKzE3MSw3IEBA
IFZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlIChLSlM6OkV4ZWMKICAgICAgICAgaWYgKG9i
ai0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgICAgICAgIC8vIEdldCBP
YmplY3RJbXAgZnJvbSBOUF9KYXZhU2NyaXB0T2JqZWN0LgogICAgICAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCAqbyA9IChKYXZhU2NyaXB0T2JqZWN0ICopb2JqOwotICAgICAgICAgICAgcmV0dXJu
IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KG8tPmltcCkpOworICAgICAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8T2JqZWN0SW1wKj4oby0+aW1wKTsKICAgICAgICAgfQogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIC8vICBXcmFwIE5QT2JqZWN0IGluIGEgQ0luc3RhbmNlLgpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIxLjYgSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvYy9jX3V0aWxpdHkuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxp
dHkuaAkyNCBKdW4gMjAwNCAwMDozNjozMyAtMDAwMAkxLjYKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2MvY191dGlsaXR5LmgJOCBBdWcgMjAwNSAwMTowMDozNyAtMDAwMApAQCAtNDUsMTIg
KzQ1LDExIEBAIHR5cGVkZWYgZW51bSAKICAgICBOUF9JbnZhbGlkVmFsdWVUeXBlCiB9IE5QX1Zh
bHVlVHlwZTsKIAotCi1leHRlcm4gdm9pZCBjb252ZXJ0TlBTdHJpbmdUb1VURjE2IChjb25zdCBO
UFN0cmluZyAqc3RyaW5nLCBOUFVURjE2ICoqVVRGMTZDaGFycywgdW5zaWduZWQgaW50ICpVVEYx
Nkxlbmd0aCk7Ci1leHRlcm4gdm9pZCBjb252ZXJ0VVRGOFRvVVRGMTYgKGNvbnN0IE5QVVRGOCAq
VVRGOENoYXJzLCBpbnQgVVRGOExlbmd0aCwgTlBVVEYxNiAqKlVURjE2Q2hhcnMsIHVuc2lnbmVk
IGludCAqVVRGMTZMZW5ndGgpOwotZXh0ZXJuIHZvaWQgY29lcmNlVmFsdWVUb05QVmFyaWFudFN0
cmluZ1R5cGUgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwg
TlBWYXJpYW50ICpyZXN1bHQpOwotZXh0ZXJuIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQg
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgTlBWYXJpYW50
ICpyZXN1bHQpOwotZXh0ZXJuIEtKUzo6VmFsdWUgY29udmVydE5QVmFyaWFudFRvVmFsdWUgKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBOUFZhcmlhbnQgKnZhcmlhbnQpOwordm9pZCBjb252
ZXJ0TlBTdHJpbmdUb1VURjE2KGNvbnN0IE5QU3RyaW5nICpzdHJpbmcsIE5QVVRGMTYgKipVVEYx
NkNoYXJzLCB1bnNpZ25lZCBpbnQgKlVURjE2TGVuZ3RoKTsKK3ZvaWQgY29udmVydFVURjhUb1VU
RjE2KGNvbnN0IE5QVVRGOCAqVVRGOENoYXJzLCBpbnQgVVRGOExlbmd0aCwgTlBVVEYxNiAqKlVU
RjE2Q2hhcnMsIHVuc2lnbmVkIGludCAqVVRGMTZMZW5ndGgpOwordm9pZCBjb2VyY2VWYWx1ZVRv
TlBWYXJpYW50U3RyaW5nVHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAq
dmFsdWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3ZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBOUFZhcmlhbnQgKnJl
c3VsdCk7CitLSlM6OlZhbHVlSW1wICpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KTsKIAogdHlwZWRlZiBzdHJ1Y3Qg
CiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5p
L2puaV9pbnN0YW5jZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlmZiAtcCAtdSAt
cjEuMjUgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuY3BwCTEyIEZlYiAyMDA1IDAw
OjU4OjEzIC0wMDAwCTEuMjUKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5z
dGFuY2UuY3BwCTggQXVnIDIwMDUgMDE6MDA6MzcgLTAwMDAKQEAgLTgxLDM2ICs4MSwzMyBAQCBD
bGFzcyAqSmF2YUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0IAogICAgIHJldHVybiBfY2xhc3M7
CiB9CiAKLUtKUzo6VmFsdWUgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSgpIGNvbnN0CitWYWx1
ZUltcCAqSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSgpIGNvbnN0CiB7CiAgICAganN0cmluZyBz
dHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklPYmplY3RNZXRob2QgKF9pbnN0YW5jZS0+X2lu
c3RhbmNlLCAidG9TdHJpbmciLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBKTklFbnYg
KmVudiA9IGdldEpOSUVudigpOwotICAgIGNvbnN0IFVDaGFyICpjID0gKGNvbnN0IFVDaGFyICop
Z2V0VUNoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChlbnYsIHN0cmluZ1ZhbHVlKTsKLSAgICBV
U3RyaW5nIHUoYywgKGludCllbnYtPkdldFN0cmluZ0xlbmd0aChzdHJpbmdWYWx1ZSkpOwotICAg
IFN0cmluZyB2KHUpOwotICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoZW52
LCBzdHJpbmdWYWx1ZSwgKGNvbnN0IGpjaGFyICopYyk7Ci0gICAgcmV0dXJuIHY7CisgICAgY29u
c3QgamNoYXIgKmMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZW52LCBzdHJpbmdW
YWx1ZSk7CisgICAgVVN0cmluZyB1KChjb25zdCBVQ2hhciAqKWMsIChpbnQpZW52LT5HZXRTdHJp
bmdMZW5ndGgoc3RyaW5nVmFsdWUpKTsKKyAgICByZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3RyaW5n
SW5FbnYoZW52LCBzdHJpbmdWYWx1ZSwgYyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKHUpOwogfQog
Ci1LSlM6OlZhbHVlIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoKSBjb25zdAorVmFsdWVJbXAg
KkphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoKSBjb25zdAogewogICAgIGpkb3VibGUgZG91Ymxl
VmFsdWUgPSBjYWxsSk5JRG91YmxlTWV0aG9kIChfaW5zdGFuY2UtPl9pbnN0YW5jZSwgImRvdWJs
ZVZhbHVlIiwgIigpRCIpOwotICAgIEtKUzo6TnVtYmVyIHYoZG91YmxlVmFsdWUpOwotICAgIHJl
dHVybiB2OworICAgIHJldHVybiBqc051bWJlcihkb3VibGVWYWx1ZSk7CiB9CiAKLUtKUzo6VmFs
dWUgSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKkphdmFJbnN0
YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAgICBqYm9vbGVhbiBib29sZWFuVmFsdWUg
PSBjYWxsSk5JQm9vbGVhbk1ldGhvZCAoX2luc3RhbmNlLT5faW5zdGFuY2UsICJib29sZWFuVmFs
dWUiLCAiKClaIik7Ci0gICAgS0pTOjpCb29sZWFuIHYoYm9vbGVhblZhbHVlKTsKLSAgICByZXR1
cm4gdjsKKyAgICByZXR1cm4ganNCb29sZWFuKGJvb2xlYW5WYWx1ZSk7CiB9CiAKLVZhbHVlIEph
dmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0
aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpKYXZhSW5z
dGFuY2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZt
ZXRob2RMaXN0LCBjb25zdCBMaXN0ICZhcmdzKQogewogICAgIGludCBpLCBjb3VudCA9IGFyZ3Mu
c2l6ZSgpOwogICAgIGp2YWx1ZSAqakFyZ3M7Ci0gICAgVmFsdWUgcmVzdWx0VmFsdWU7CisgICAg
VmFsdWVJbXAgKnJlc3VsdFZhbHVlOwogICAgIE1ldGhvZCAqbWV0aG9kID0gMDsKICAgICB1bnNp
Z25lZCBpbnQgbnVtTWV0aG9kcyA9IG1ldGhvZExpc3QubGVuZ3RoKCk7CiAgICAgCkBAIC0xNDUs
NyArMTQyLDcgQEAgVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgKEtKUzo6RQogICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIEphdmFQYXJhbWV0ZXIgKmFQ
YXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxKYXZhUGFyYW1ldGVyICo+KGpNZXRob2QtPnBhcmFtZXRl
ckF0KGkpKTsKICAgICAgICAgakFyZ3NbaV0gPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywg
YXJncy5hdChpKSwgYVBhcmFtZXRlci0+Z2V0Sk5JVHlwZSgpLCBhUGFyYW1ldGVyLT50eXBlKCkp
OwotCUpTX0xPRygiYXJnWyVkXSA9ICVzXG4iLCBpLCBhcmdzLmF0KGkpLnRvU3RyaW5nKGV4ZWMp
LmFzY2lpKCkpOworCUpTX0xPRygiYXJnWyVkXSA9ICVzXG4iLCBpLCBhcmdzLmF0KGkpLT50b1N0
cmluZyhleGVjKS5hc2NpaSgpKTsKICAgICB9CiAgICAgICAgIAogCkBAIC0xNTgsMTIgKzE1NSwx
MSBAQCBWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoS0pTOjpFCiAgICAgYm9vbCBo
YW5kbGVkID0gZmFsc2U7CiAgICAgaWYgKGV4ZWNDb250ZXh0ICYmIGV4ZWNDb250ZXh0LT5uYXRp
dmVIYW5kbGUoKSkgewogICAgICAgICBqb2JqZWN0IG9iaiA9IF9pbnN0YW5jZS0+X2luc3RhbmNl
OwotICAgICAgICBWYWx1ZSBleGNlcHRpb25EZXNjcmlwdGlvbjsKKyAgICAgICAgVmFsdWVJbXAg
KmV4Y2VwdGlvbkRlc2NyaXB0aW9uOwogICAgICAgICBjb25zdCBjaGFyICpjYWxsaW5nVVJMID0g
MDsgIC8vIEZJWE1FLCBuZWVkIHRvIHByb3BhZ2F0ZSBjYWxsaW5nIFVSTCB0byBKYXZhCiAgICAg
ICAgIGhhbmRsZWQgPSBkaXNwYXRjaEpOSUNhbGwgKGV4ZWNDb250ZXh0LT5uYXRpdmVIYW5kbGUo
KSwgb2JqLCBqTWV0aG9kLT5pc1N0YXRpYygpLCBqTWV0aG9kLT5KTklSZXR1cm5UeXBlKCksIGpN
ZXRob2QtPm1ldGhvZElEKG9iaiksIGpBcmdzLCByZXN1bHQsIGNhbGxpbmdVUkwsIGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKTsKLSAgICAgICAgaWYgKCFleGNlcHRpb25EZXNjcmlwdGlvbi5pc051bGwo
KSkgewotICAgICAgICAgICAgT2JqZWN0IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5l
cmFsRXJyb3IsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLlVURjhTdHJpbmco
KS5jX3N0cigpKTsKLSAgICAgICAgICAgIAorICAgICAgICBpZiAoZXhjZXB0aW9uRGVzY3JpcHRp
b24pIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24tPnRvU3RyaW5nKGV4ZWMpLlVURjhT
dHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZyZWUgKGpBcmdzKTsKQEAgLTI1Niw3ICsyNTIs
NyBAQCBWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZCAoS0pTOjpFCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICAgICAgY2FzZSBib29sZWFuX3R5cGU6IHsKLSAgICAgICAgICAg
IHJlc3VsdFZhbHVlID0gS0pTOjpCb29sZWFuKHJlc3VsdC56KTsKKyAgICAgICAgICAgIHJlc3Vs
dFZhbHVlID0gQm9vbGVhbihyZXN1bHQueik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIApAQCAtMzA3LDEzICszMDMsMTMgQEAgVmFsdWUgSmF2YUluc3RhbmNlOjppbnZva2VN
ZXRob2QgKEtKUzo6RQogICAgIHJldHVybiByZXN1bHRWYWx1ZTsKIH0KIAotS0pTOjpWYWx1ZSBK
YXZhSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6Okxpc3QgJmFyZ3MpCitWYWx1ZUltcCAqSmF2YUluc3RhbmNlOjppbnZva2VEZWZh
dWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCiAKLUtKUzo6VmFsdWUgSmF2YUluc3RhbmNlOjpkZWZhdWx0
VmFsdWUgKEtKUzo6VHlwZSBoaW50KSBjb25zdAorVmFsdWVJbXAgKkphdmFJbnN0YW5jZTo6ZGVm
YXVsdFZhbHVlIChUeXBlIGhpbnQpIGNvbnN0CiB7CiAgICAgaWYgKGhpbnQgPT0gU3RyaW5nVHlw
ZSkgewogICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKQEAgLTM0MCw3ICszMzYsNyBAQCBL
SlM6OlZhbHVlIEphdmFJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIChLCiAgICAgcmV0dXJuIHZhbHVl
T2YoKTsKIH0KIAotS0pTOjpWYWx1ZSBKYXZhSW5zdGFuY2U6OnZhbHVlT2YoKSBjb25zdCAKK1Zh
bHVlSW1wICpKYXZhSW5zdGFuY2U6OnZhbHVlT2YoKSBjb25zdCAKIHsKICAgICByZXR1cm4gc3Ry
aW5nVmFsdWUoKTsKIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2lu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC1wIC11IC1yMS4xNyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmgK
LS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuaAkxNyBKYW4gMjAw
NSAyMjo0MToyMiAtMDAwMAkxLjE3CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X2luc3RhbmNlLmgJOCBBdWcgMjAwNSAwMTowMDozNyAtMDAwMApAQCAtOTAsMTcgKzkwLDE3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5k
KCk7CiAgICAgCi0gICAgdmlydHVhbCBWYWx1ZSB2YWx1ZU9mKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBWYWx1ZSBkZWZhdWx0VmFsdWUgKFR5cGUgaGludCkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1
ZUltcCAqdmFsdWVPZigpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1
ZSAoVHlwZSBoaW50KSBjb25zdDsKIAotICAgIHZpcnR1YWwgVmFsdWUgaW52b2tlTWV0aG9kIChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZCwgY29uc3QgTGlzdCAmYXJn
cyk7Ci0gICAgdmlydHVhbCBWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kIChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmludm9rZU1ldGhv
ZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2QsIGNvbnN0IExpc3Qg
JmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmludm9rZURlZmF1bHRNZXRob2QgKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICBqb2JqZWN0IGphdmFJbnN0YW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIF9pbnN0YW5jZS0+X2luc3RhbmNlOyB9CiAgICAgCi0gICAgVmFs
dWUgc3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICBWYWx1ZSBudW1iZXJWYWx1ZSgpIGNvbnN0Owot
ICAgIFZhbHVlIGJvb2xlYW5WYWx1ZSgpIGNvbnN0OworICAgIFZhbHVlSW1wICpzdHJpbmdWYWx1
ZSgpIGNvbnN0OworICAgIFZhbHVlSW1wICpudW1iZXJWYWx1ZSgpIGNvbnN0OworICAgIFZhbHVl
SW1wICpib29sZWFuVmFsdWUoKSBjb25zdDsKICAgICAgICAgCiBwcml2YXRlOgogICAgIEpPYmpl
Y3RXcmFwcGVyICpfaW5zdGFuY2U7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkv
am5pX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTEKZGlmZiAtcCAtdSAtcjEuMTEgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9q
c29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3Qu
Y3BwCTI5IEFwciAyMDA1IDAwOjIyOjU1IC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2puaS9qbmlfanNvYmplY3QuY3BwCTggQXVnIDIwMDUgMDE6MDA6MzggLTAwMDAKQEAg
LTc3LDcgKzc3LDcgQEAganZhbHVlIEpTT2JqZWN0OjppbnZva2UgKEpTT2JqZWN0Q2FsbENvbgog
ICAgICAgICAgICAgcmVzdWx0LmogPSBKU09iamVjdDo6Y3JlYXRlTmF0aXZlKG5hdGl2ZUhhbmRs
ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBLSlM6Ok9iamVjdElt
cCAqaW1wID0gamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSk7CisgICAgICAgICAgICBPYmpl
Y3RJbXAgKmltcCA9IGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpOwogICAgICAgICAgICAg
aWYgKCFyb290Rm9ySW1wKGltcCkpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIs
ICIlczolZDogIEF0dGVtcHQgdG8gYWNjZXNzIEphdmFTY3JpcHQgZnJvbSBkZXN0cm95ZWQgYXBw
bGV0LCB0eXBlICVkLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBjb250ZXh0LT50eXBlKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTczLDE5ICsxNzMsMTkgQEAgam9iamVj
dCBKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvZE5hbQogICAgIEludGVycHJldGVyOjpsb2Nr
KCk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKEphdmFTdHJpbmcobWV0aG9kTmFt
ZSkudXN0cmluZygpKTsKLSAgICBWYWx1ZSBmdW5jID0gX2ltcC0+Z2V0IChleGVjLCBpZGVudGlm
aWVyKTsKKyAgICBWYWx1ZUltcCAqZnVuYyA9IF9pbXAtPmdldCAoZXhlYywgaWRlbnRpZmllcik7
CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwotICAgIGlmIChmdW5jLmlzTnVsbCgpIHx8IGZ1
bmMudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsKKyAgICBpZiAoZnVuYy0+aXNVbmRlZmluZWRP
ck51bGwoKSkgewogICAgICAgICAvLyBNYXliZSB0aHJvdyBhbiBleGNlcHRpb24gaGVyZT8KICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgotICAgIE9iamVjdEltcCAqZnVuY0ltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGZ1bmMu
aW1wKCkpOwotICAgIE9iamVjdCB0aGlzT2JqID0gT2JqZWN0KGNvbnN0X2Nhc3Q8T2JqZWN0SW1w
Kj4oX2ltcCkpOworICAgIE9iamVjdEltcCAqZnVuY0ltcCA9IHN0YXRpY19jYXN0PE9iamVjdElt
cCo+KGZ1bmMpOworICAgIE9iamVjdEltcCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8T2JqZWN0SW1w
Kj4oX2ltcCk7CiAgICAgTGlzdCBhcmdMaXN0ID0gbGlzdEZyb21KQXJyYXkoYXJncyk7CiAgICAg
SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBWYWx1ZSByZXN1bHQgPSBmdW5jSW1wLT5jYWxsIChl
eGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gZnVuY0ltcC0+
Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygp
OwogCiAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9u
IGNhbGwuCkBAIC0xOTYsOCArMTk2LDggQEAgam9iamVjdCBKU09iamVjdDo6ZXZhbChqc3RyaW5n
IHNjcmlwdCkgYwogewogICAgIEpTX0xPRyAoInNjcmlwdCA9ICVzXG4iLCBKYXZhU3RyaW5nKHNj
cmlwdCkuVVRGOFN0cmluZygpKTsKIAotICAgIE9iamVjdCB0aGlzT2JqID0gT2JqZWN0KGNvbnN0
X2Nhc3Q8T2JqZWN0SW1wKj4oX2ltcCkpOwotICAgIFZhbHVlIHJlc3VsdDsKKyAgICBPYmplY3RJ
bXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCo+KF9pbXApOworICAgIFZhbHVlSW1w
ICpyZXN1bHQ7CiAgICAgCiAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKIApAQCAtMjA2LDcgKzIw
Niw3IEBAIGpvYmplY3QgSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcHQpIGMKICAgICAKICAg
ICBpZiAodHlwZSA9PSBOb3JtYWwpIHsKICAgICAgICAgcmVzdWx0ID0gY29tcGxldGlvbi52YWx1
ZSgpOwotICAgICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghcmVzdWx0
KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTIyNSw3ICsyMjUsNyBAQCBqb2JqZWN0IEpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyBt
ZW1iCiAgICAgRXhlY1N0YXRlICpleGVjID0gX3Jvb3QtPmludGVycHJldGVyKCktPmdsb2JhbEV4
ZWMoKTsKIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgVmFsdWUgcmVzdWx0ID0gX2lt
cC0+Z2V0IChleGVjLCBJZGVudGlmaWVyIChKYXZhU3RyaW5nKG1lbWJlck5hbWUpLnVzdHJpbmco
KSkpOworICAgIFZhbHVlSW1wICpyZXN1bHQgPSBfaW1wLT5nZXQgKGV4ZWMsIElkZW50aWZpZXIg
KEphdmFTdHJpbmcobWVtYmVyTmFtZSkudXN0cmluZygpKSk7CiAgICAgSW50ZXJwcmV0ZXI6OnVu
bG9jaygpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdCAocmVzdWx0KTsKQEAg
LTI1OCw3ICsyNTgsNyBAQCBqb2JqZWN0IEpTT2JqZWN0OjpnZXRTbG90KGppbnQgaW5kZXgpIGNv
CiAKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBfcm9vdC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhl
YygpOwogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgVmFsdWUgcmVzdWx0ID0gX2ltcC0+
Z2V0IChleGVjLCAodW5zaWduZWQpaW5kZXgpOworICAgIFZhbHVlSW1wICpyZXN1bHQgPSBfaW1w
LT5nZXQgKGV4ZWMsICh1bnNpZ25lZClpbmRleCk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygp
OwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdCAocmVzdWx0KTsKQEAgLTI4MSw3
ICsyODEsNyBAQCBqc3RyaW5nIEpTT2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0CiAgICAgSlNfTE9H
ICgiXG4iKTsKIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgT2JqZWN0IHRoaXNPYmog
PSBPYmplY3QoY29uc3RfY2FzdDxPYmplY3RJbXAqPihfaW1wKSk7CisgICAgT2JqZWN0SW1wICp0
aGlzT2JqID0gY29uc3RfY2FzdDxPYmplY3RJbXAqPihfaW1wKTsKICAgICBFeGVjU3RhdGUgKmV4
ZWMgPSBfcm9vdC0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogICAgIAogICAgIGpzdHJp
bmcgcmVzdWx0ID0gKGpzdHJpbmcpY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIHRoaXNPYmos
IG9iamVjdF90eXBlLCAiamF2YS5sYW5nLlN0cmluZyIpLmw7CkBAIC0zMjgsNyArMzI4LDcgQEAg
amxvbmcgSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuYXRpdgogICAgIHJldHVybiBwdHJf
dG9famxvbmcoMCk7CiB9CiAKLWpvYmplY3QgSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVj
dCAoS0pTOjpWYWx1ZSB2YWx1ZSkgY29uc3QKK2pvYmplY3QgSlNPYmplY3Q6OmNvbnZlcnRWYWx1
ZVRvSk9iamVjdCAoVmFsdWVJbXAgKnZhbHVlKSBjb25zdAogewogICAgIEV4ZWNTdGF0ZSAqZXhl
YyA9IF9yb290LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CiAgICAgSk5JRW52ICplbnYg
PSBnZXRKTklFbnYoKTsKQEAgLTM0MiwzOSArMzQyLDM5IEBAIGpvYmplY3QgSlNPYmplY3Q6OmNv
bnZlcnRWYWx1ZVRvSk9iamVjdCAKICAgICAvLyBKYXZhIGluc3RhbmNlIC0+IEphdmEgaW5zdGFu
Y2UKICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgLT4gSlNPYmplY3QKICAgICAKLSAgICBLSlM6OlR5
cGUgdHlwZSA9IHZhbHVlLnR5cGUoKTsKLSAgICBpZiAodHlwZSA9PSBLSlM6Ok51bWJlclR5cGUp
IHsKKyAgICBUeXBlIHR5cGUgPSB2YWx1ZS0+dHlwZSgpOworICAgIGlmICh0eXBlID09IE51bWJl
clR5cGUpIHsKICAgICAgICAgamNsYXNzIEpTT2JqZWN0Q2xhc3MgPSBlbnYtPkZpbmRDbGFzcyAo
ImphdmEvbGFuZy9Eb3VibGUiKTsKICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9ySUQgPSBl
bnYtPkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGluaXQ+IiwgIihEKVYiKTsKICAgICAg
ICAgaWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgewotICAgICAgICAgICAgcmVzdWx0ID0gZW52
LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVjdG9ySUQsIChqZG91YmxlKXZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGVudi0+TmV3T2JqZWN0IChK
U09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRvdWJsZSl2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gS0pTOjpTdHJpbmdU
eXBlKSB7Ci0gICAgICAgIEtKUzo6VVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nVHlwZSkgeworICAgICAgICBVU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICBKTklFbnYg
KmVudiA9IGdldEpOSUVudigpOwogICAgICAgICByZXN1bHQgPSBlbnYtPk5ld1N0cmluZyAoKGNv
bnN0IGpjaGFyICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpOwogICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09IEtKUzo6Qm9vbGVhblR5cGUpIHsKKyAgICBlbHNlIGlm
ICh0eXBlID09IEJvb2xlYW5UeXBlKSB7CiAgICAgICAgIGpjbGFzcyBKU09iamVjdENsYXNzID0g
ZW52LT5GaW5kQ2xhc3MgKCJqYXZhL2xhbmcvQm9vbGVhbiIpOwogICAgICAgICBqbWV0aG9kSUQg
Y29uc3RydWN0b3JJRCA9IGVudi0+R2V0TWV0aG9kSUQgKEpTT2JqZWN0Q2xhc3MsICI8aW5pdD4i
LCAiKFopViIpOwogICAgICAgICBpZiAoY29uc3RydWN0b3JJRCAhPSBOVUxMKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBlbnYtPk5ld09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJ
RCwgKGpib29sZWFuKXZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgICAgICByZXN1bHQg
PSBlbnYtPk5ld09iamVjdCAoSlNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJRCwgKGpib29sZWFu
KXZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2Ugewog
ICAgICAgICAvLyBDcmVhdGUgYSBKU09iamVjdC4KICAgICAgICAgamxvbmcgbmF0aXZlSGFuZGxl
OwogICAgICAgICAKLSAgICAgICAgaWYgKHR5cGUgPT0gS0pTOjpPYmplY3RUeXBlKXsKLSAgICAg
ICAgICAgIEtKUzo6T2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+
KHZhbHVlLmltcCgpKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0VHlwZSl7CisgICAgICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgZWl0aGVyIGhhdmUgYSB3cmFwcGVyIGFyb3Vu
ZCBhIEphdmEgaW5zdGFuY2Ugb3IgYSBKYXZhU2NyaXB0CiAgICAgICAgICAgICAvLyBvYmplY3Qu
ICBJZiB3ZSBoYXZlIGEgd3JhcHBlciBhcm91bmQgYSBKYXZhIGluc3RhbmNlLCByZXR1cm4gdGhh
dAogICAgICAgICAgICAgLy8gaW5zdGFuY2UsIG90aGVyd2lzZSBjcmVhdGUgYSBuZXcgSmF2YSBK
U09iamVjdCB3aXRoIHRoZSBPYmplY3RJbXAqCiAgICAgICAgICAgICAvLyBhcyBpdCdzIG5hdGl2
ZUhhbmRsZS4KICAgICAgICAgICAgIGlmIChpbXAtPmNsYXNzSW5mbygpICYmIHN0cmNtcChpbXAt
PmNsYXNzSW5mbygpLT5jbGFzc05hbWUsICJSdW50aW1lT2JqZWN0IikgPT0gMCkgewotICAgICAg
ICAgICAgICAgIEtKUzo6UnVudGltZU9iamVjdEltcCAqcnVudGltZUltcCA9IHN0YXRpY19jYXN0
PEtKUzo6UnVudGltZU9iamVjdEltcCo+KHZhbHVlLmltcCgpKTsKKyAgICAgICAgICAgICAgICBS
dW50aW1lT2JqZWN0SW1wICpydW50aW1lSW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdElt
cCo+KHZhbHVlKTsKICAgICAgICAgICAgICAgICBCaW5kaW5nczo6SmF2YUluc3RhbmNlICpydW50
aW1lSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxCaW5kaW5nczo6SmF2YUluc3RhbmNlICo+KHJ1bnRp
bWVJbXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1
bnRpbWVJbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7CiAgICAgICAgICAgICB9CkBAIC00MTEsNyAr
NDExLDcgQEAgam9iamVjdCBKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0IAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUtKUzo6VmFsdWUgSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9W
YWx1ZSAoam9iamVjdCB0aGVPYmplY3QpIGNvbnN0CitWYWx1ZUltcCAqSlNPYmplY3Q6OmNvbnZl
cnRKT2JqZWN0VG9WYWx1ZSAoam9iamVjdCB0aGVPYmplY3QpIGNvbnN0CiB7CiAgICAgLy8gSW5z
dGFuY2VzIG9mIG5ldHNjYXBlLmphdmFzY3JpcHQuSlNPYmplY3QgZ2V0IGNvbnZlcnRlZCBiYWNr
IHRvCiAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3RzLiAgQWxsIG90aGVyIG9iamVjdHMgYXJlIHdy
YXBwZWQuICBJdCdzIG5vdApAQCAtNDI3LDI4ICs0MjcsMjggQEAgS0pTOjpWYWx1ZSBKU09iamVj
dDo6Y29udmVydEpPYmplY3RUb1ZhbAogICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigp
OwogICAgICAgICBqZmllbGRJRCBmaWVsZElEID0gZW52LT5HZXRGaWVsZElEKChqY2xhc3MpY2xh
c3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmplY3QiLCAibG9uZyIpOwogICAgICAgICBpZiAoZmll
bGRJRCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gS0pTOjpVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBqbG9uZyBu
YXRpdmVIYW5kbGUgPSBlbnYtPkdldExvbmdGaWVsZCh0aGVPYmplY3QsIGZpZWxkSUQpOwogICAg
ICAgICBpZiAobmF0aXZlSGFuZGxlID09IFVuZGVmaW5lZEhhbmRsZSkgewotICAgICAgICAgICAg
cmV0dXJuIEtKUzo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiAgICAgICAgIH0KLSAgICAgICAgS0pTOjpPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PEtK
Uzo6T2JqZWN0SW1wKj4oamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSkpOwotICAgICAgICBy
ZXR1cm4gS0pTOjpPYmplY3QoY29uc3RfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGltcCkpOworICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGpsb25nX3RvX2lt
cHB0cihuYXRpdmVIYW5kbGUpKTsKKyAgICAgICAgcmV0dXJuIGltcDsKICAgICB9CiAKICAgICBJ
bnRlcnByZXRlcjo6bG9jaygpOwotICAgIEtKUzo6UnVudGltZU9iamVjdEltcCAqbmV3SW1wID0g
bmV3IEtKUzo6UnVudGltZU9iamVjdEltcChuZXcgQmluZGluZ3M6OkphdmFJbnN0YW5jZSAodGhl
T2JqZWN0LCBfcm9vdCkpOworICAgIFJ1bnRpbWVPYmplY3RJbXAgKm5ld0ltcCA9IG5ldyBSdW50
aW1lT2JqZWN0SW1wKG5ldyBCaW5kaW5nczo6SmF2YUluc3RhbmNlICh0aGVPYmplY3QsIF9yb290
KSk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCi0gICAgcmV0dXJuIEtKUzo6T2JqZWN0
KG5ld0ltcCk7CisgICAgcmV0dXJuIG5ld0ltcDsKIH0KIAotS0pTOjpMaXN0IEpTT2JqZWN0Ojps
aXN0RnJvbUpBcnJheShqb2JqZWN0QXJyYXkgakFycmF5KSBjb25zdAorTGlzdCBKU09iamVjdDo6
bGlzdEZyb21KQXJyYXkoam9iamVjdEFycmF5IGpBcnJheSkgY29uc3QKIHsKICAgICBKTklFbnYg
KmVudiA9IGdldEpOSUVudigpOwogICAgIGxvbmcgaSwgbnVtT2JqZWN0cyA9IGpBcnJheSA/IGVu
di0+R2V0QXJyYXlMZW5ndGggKGpBcnJheSkgOiAwOwotICAgIEtKUzo6TGlzdCBhTGlzdDsKKyAg
ICBMaXN0IGFMaXN0OwogICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1PYmplY3RzOyBpKysp
IHsKICAgICAgICAgam9iamVjdCBhbk9iamVjdCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50
ICgoam9iamVjdEFycmF5KWpBcnJheSwgaSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9qbmkvam5pX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zCmRpZmYgLXAgLXUgLXIxLjMgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9q
c29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2JqZWN0LmgJ
MTkgTWF5IDIwMDQgMTQ6MzM6MjUgLTAwMDAJMS4zCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9qbmkvam5pX2pzb2JqZWN0LmgJOCBBdWcgMjAwNSAwMTowMDozOCAtMDAwMApAQCAtODgsMTMg
Kzg4LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMganZhbHVlIGludm9rZSAoSlNPYmpl
Y3RDYWxsQ29udGV4dCAqY29udGV4dCk7CiAKLSAgICBqb2JqZWN0IGNvbnZlcnRWYWx1ZVRvSk9i
amVjdCAoS0pTOjpWYWx1ZSB2YWx1ZSkgY29uc3Q7Ci0gICAgS0pTOjpWYWx1ZSBjb252ZXJ0Sk9i
amVjdFRvVmFsdWUgKGpvYmplY3QgdGhlT2JqZWN0KSBjb25zdDsKLSAgICBLSlM6Okxpc3QgbGlz
dEZyb21KQXJyYXkoam9iamVjdEFycmF5IGpBcnJheSkgY29uc3Q7CisgICAgam9iamVjdCBjb252
ZXJ0VmFsdWVUb0pPYmplY3QgKFZhbHVlSW1wICp2YWx1ZSkgY29uc3Q7CisgICAgVmFsdWVJbXAg
KmNvbnZlcnRKT2JqZWN0VG9WYWx1ZSAoam9iamVjdCB0aGVPYmplY3QpIGNvbnN0OworICAgIExp
c3QgbGlzdEZyb21KQXJyYXkoam9iamVjdEFycmF5IGpBcnJheSkgY29uc3Q7CiAgICAgCiBwcml2
YXRlOgotICAgIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpfcm9vdDsKLSAgICBLSlM6Ok9i
amVjdEltcCAqX2ltcDsKKyAgICBjb25zdCBSb290T2JqZWN0ICpfcm9vdDsKKyAgICBPYmplY3RJ
bXAgKl9pbXA7CiB9OwogCiAKQEAgLTExNiw2ICsxMTYsNiBAQCBqb2JqZWN0IEtKU19KU09iamVj
dF9KU09iamVjdEdldFNsb3QgKEpOCiB2b2lkIEtKU19KU09iamVjdF9KU09iamVjdFNldFNsb3Qg
KEpOSUVudiAqZW52LCBqY2xhc3MganNDbGFzcywgamxvbmcgbmF0aXZlSlNPYmplY3QsIGpzdHJp
bmcganVybCwgamludCBqaW5kZXgsIGpvYmplY3QgdmFsdWUsIGpib29sZWFuIGN0eCk7CiBqc3Ry
aW5nIEtKU19KU09iamVjdF9KU09iamVjdFRvU3RyaW5nIChKTklFbnYgKmVudiwgamNsYXNzIGNs
YXp6LCBqbG9uZyBuYXRpdmVKU09iamVjdCk7CiAKLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCit9
CiAKICNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL2puaS9qbmlfb2JqYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9vYmpjLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjMKZGlmZiAtcCAtdSAtcjEuMyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkv
am5pX29iamMubW0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfb2JqYy5tbQkx
NSBEZWMgMjAwNCAwMjowMDozMyAtMDAwMAkxLjMKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L2puaS9qbmlfb2JqYy5tbQk4IEF1ZyAyMDA1IDAxOjAwOjM4IC0wMDAwCkBAIC00Myw3ICs0Myw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogLSAoTlNVUkwgKilfd2ViVmlld1VS
TDsKIEBlbmQKIAotYm9vbCBLSlM6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwgKGNvbnN0IHZv
aWQgKnRhcmdldEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGljLCBKTklUeXBl
IHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzLCBqdmFsdWUgJnJl
c3VsdCwgY29uc3QgY2hhciAqY2FsbGluZ1VSTCwgVmFsdWUgJmV4Y2VwdGlvbkRlc2NyaXB0aW9u
KQorYm9vbCBLSlM6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwgKGNvbnN0IHZvaWQgKnRhcmdl
dEFwcGxldFZpZXcsIGpvYmplY3Qgb2JqLCBib29sIGlzU3RhdGljLCBKTklUeXBlIHJldHVyblR5
cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzLCBqdmFsdWUgJnJlc3VsdCwgY29u
c3QgY2hhciAqY2FsbGluZ1VSTCwgVmFsdWVJbXAgKiZleGNlcHRpb25EZXNjcmlwdGlvbikKIHsK
ICAgICBpZCB2aWV3ID0gKGlkKXRhcmdldEFwcGxldFZpZXc7CiAgICAgCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYgLXAgLXUgLXIxLjI1IEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L2puaS9qbmlfcnVudGltZS5jcHAJNCBNYXkgMjAwNSAwMDowOTo0NyAtMDAwMAkxLjI1CisrKyBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3J1bnRpbWUuY3BwCTggQXVnIDIwMDUgMDE6
MDA6MzkgLTAwMDAKQEAgLTY3LDE1ICs2NywxNSBAQCBKYXZhRmllbGQ6OkphdmFGaWVsZCAoSk5J
RW52ICplbnYsIGpvYmplCiAgICAgX2ZpZWxkID0gbmV3IEphdmFJbnN0YW5jZShhRmllbGQsIDAp
OwogfQogCi1LSlM6OlZhbHVlIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5IChLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciAqdHlwZSwgY29u
c3QgUm9vdE9iamVjdCAqcikKK1ZhbHVlSW1wICpKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9B
cnJheSAoRXhlY1N0YXRlICpleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyICp0eXBl
LCBjb25zdCBSb290T2JqZWN0ICpyKQogewogICAgIGlmICh0eXBlWzBdICE9ICdbJykKICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIEtKUzo6T2JqZWN0KG5ldyBSdW50
aW1lQXJyYXlJbXAoZXhlYywgbmV3IEphdmFBcnJheSAoKGpvYmplY3QpYW5PYmplY3QsIHR5cGUs
IHIpKSk7CisgICAgcmV0dXJuIG5ldyBSdW50aW1lQXJyYXlJbXAoZXhlYywgbmV3IEphdmFBcnJh
eSgoam9iamVjdClhbk9iamVjdCwgdHlwZSwgcikpOwogfQogCi1qdmFsdWUgSmF2YUZpZWxkOjpk
aXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZh
SW5zdGFuY2UgKmluc3RhbmNlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIEpO
SVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKK2p2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVG
cm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNl
LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkg
Y29uc3QKIHsKICAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2Uo
KTsKICAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gX2ZpZWxkLT5qYXZhSW5zdGFuY2UoKTsK
QEAgLTkwLDEzICs5MCwxMyBAQCBqdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUlu
c3RhCiAJewogCSAgICBjb25zdCBSb290T2JqZWN0ICpleGVjQ29udGV4dCA9IGluc3RhbmNlLT5l
eGVjdXRpb25Db250ZXh0KCk7CiAJICAgIGlmIChleGVjQ29udGV4dCAmJiBleGVjQ29udGV4dC0+
bmF0aXZlSGFuZGxlKCkpIHsKLQkJVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisJCVZhbHVl
SW1wICpleGNlcHRpb25EZXNjcmlwdGlvbjsKIAkJanZhbHVlIGFyZ3NbMV07CiAJCQogCQlhcmdz
WzBdLmwgPSBqaW5zdGFuY2U7CiAJCWRpc3BhdGNoSk5JQ2FsbCAoZXhlY0NvbnRleHQtPm5hdGl2
ZUhhbmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywg
cmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0JCWlmICghZXhjZXB0aW9uRGVzY3Jp
cHRpb24uaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdCBlcnJvciA9IEVycm9yOjpjcmVhdGUoZXhl
YywgR2VuZXJhbEVycm9yLCBleGNlcHRpb25EZXNjcmlwdGlvbi50b1N0cmluZyhleGVjKS5VVEY4
U3RyaW5nKCkuY19zdHIoKSk7CisJCWlmIChleGNlcHRpb25EZXNjcmlwdGlvbikgeworCQkgICAg
T2JqZWN0SW1wICplcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBleGNl
cHRpb25EZXNjcmlwdGlvbi0+dG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmNfc3RyKCkpOwog
CQkgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKIAkJfQogCSAgICB9CkBAIC0xMDUsMTEg
KzEwNSwxMSBAQCBqdmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotS0pTOjpWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3Rh
bmNlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaSkgY29uc3QgCitWYWx1
ZUltcCAqSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IEluc3RhbmNlICppKSBjb25zdCAKIHsKICAgICBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOwogCi0gICAgVmFsdWUganNy
ZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICBWYWx1ZUltcCAqanNyZXN1bHQgPSBVbmRlZmluZWQo
KTsKICAgICAKICAgICBzd2l0Y2ggKF9KTklUeXBlKSB7CiAgICAgICAgIGNhc2Ugb2JqZWN0X3R5
cGU6IHsKQEAgLTEyOSw3ICsxMjksNyBAQCBLSlM6OlZhbHVlIEphdmFGaWVsZDo6dmFsdWVGcm9t
SW5zdGFuY2UoCiAgICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7CiAJICAgIGp2YWx1ZSByZXN1
bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgImdldEJvb2xl
YW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0OylaIiwgYm9vbGVhbl90eXBlKTsKIAkgICAgamJvb2xl
YW4gdmFsdWUgPSByZXN1bHQuejsKLSAgICAgICAgICAgIGpzcmVzdWx0ID0gS0pTOjpCb29sZWFu
KChib29sKXZhbHVlKTsKKyAgICAgICAgICAgIGpzcmVzdWx0ID0gQm9vbGVhbigoYm9vbCl2YWx1
ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE1OCwxMiAr
MTU4LDEyIEBAIEtKUzo6VmFsdWUgSmF2YUZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSgKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgSlNfTE9HICgiZ2V0dGluZyAlcyA9ICVzXG4iLCBuYW1l
KCksIGpzcmVzdWx0LnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOworICAgIEpTX0xPRyAoImdldHRp
bmcgJXMgPSAlc1xuIiwgbmFtZSgpLCBqc3Jlc3VsdC0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7
CiAgICAgCiAgICAgcmV0dXJuIGpzcmVzdWx0OwogfQogCi12b2lkIEphdmFGaWVsZDo6ZGlzcGF0
Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0
YW5jZSAqaW5zdGFuY2UsIGp2YWx1ZSBqYXZhVmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZykgY29uc3QKK3ZvaWQgSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGp2YWx1
ZSBqYXZhVmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZykgY29uc3QKIHsK
ICAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKICAgICBq
b2JqZWN0IGZpZWxkSkluc3RhbmNlID0gX2ZpZWxkLT5qYXZhSW5zdGFuY2UoKTsKQEAgLTE3Niwx
NSArMTc2LDE1IEBAIHZvaWQgSmF2YUZpZWxkOjpkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW4KIAl7
CiAJICAgIGNvbnN0IFJvb3RPYmplY3QgKmV4ZWNDb250ZXh0ID0gaW5zdGFuY2UtPmV4ZWN1dGlv
bkNvbnRleHQoKTsKIAkgICAgaWYgKGV4ZWNDb250ZXh0ICYmIGV4ZWNDb250ZXh0LT5uYXRpdmVI
YW5kbGUoKSkgewotCQlWYWx1ZSBleGNlcHRpb25EZXNjcmlwdGlvbjsKKwkJVmFsdWVJbXAgKmV4
Y2VwdGlvbkRlc2NyaXB0aW9uOwogCQlqdmFsdWUgYXJnc1syXTsKIAkJanZhbHVlIHJlc3VsdDsK
IAkJCiAJCWFyZ3NbMF0ubCA9IGppbnN0YW5jZTsKIAkJYXJnc1sxXSA9IGphdmFWYWx1ZTsKIAkJ
ZGlzcGF0Y2hKTklDYWxsIChleGVjQ29udGV4dC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3Rh
bmNlLCBmYWxzZSwgdm9pZF90eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVz
Y3JpcHRpb24pOwotCQlpZiAoIWV4Y2VwdGlvbkRlc2NyaXB0aW9uLmlzTnVsbCgpKSB7Ci0JCSAg
ICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0
aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYykuVVRGOFN0cmluZygpLmNfc3RyKCkpOworCQlp
ZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pIHsKKwkJICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgZXhjZXB0aW9uRGVzY3JpcHRpb24tPnRvU3Ry
aW5nKGV4ZWMpLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKIAkJICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnJvcik7CiAJCX0KIAkgICAgfQpAQCAtMTkyLDEyICsxOTIsMTIgQEAgdm9pZCBKYXZhRmll
bGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbgogICAgIH0KIH0KIAotdm9pZCBKYXZhRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2Ug
KmksIGNvbnN0IEtKUzo6VmFsdWUgJmFWYWx1ZSkgY29uc3QKK3ZvaWQgSmF2YUZpZWxkOjpzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaSwgVmFsdWVJ
bXAgKmFWYWx1ZSkgY29uc3QKIHsKICAgICBjb25zdCBKYXZhSW5zdGFuY2UgKmluc3RhbmNlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOwogICAgIGp2YWx1ZSBqYXZhVmFs
dWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywgYVZhbHVlLCBfSk5JVHlwZSwgdHlwZSgp
KTsKIAotICAgIEpTX0xPRyAoInNldHRpbmcgdmFsdWUgJXMgdG8gJXNcbiIsIG5hbWUoKSwgYVZh
bHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOworICAgIEpTX0xPRyAoInNldHRpbmcgdmFsdWUg
JXMgdG8gJXNcbiIsIG5hbWUoKSwgYVZhbHVlLT50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKIAog
ICAgIHN3aXRjaCAoX0pOSVR5cGUpIHsKICAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewpAQCAt
Mzk0LDcgKzM5NCw3IEBAIEphdmFBcnJheTo6SmF2YUFycmF5IChjb25zdCBKYXZhQXJyYXkgJm8K
ICAgICBfdHlwZSA9IHN0cmR1cChvdGhlci5fdHlwZSk7CiB9OwogCi12b2lkIEphdmFBcnJheTo6
c2V0VmFsdWVBdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBjb25z
dCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0Cit2b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgVmFsdWVJbXAgKmFWYWx1ZSkgY29u
c3QKIHsKICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwogICAgIGNoYXIgKmphdmFDbGFz
c05hbWUgPSAwOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIHZvaWQgSmF2YUFycmF5OjpzZXRWYWx1ZUF0
KEtKUzo6RXhlY1N0YXQKIH0KIAogCi1LSlM6OlZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAorVmFsdWVJbXAgKkph
dmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29u
c3QKIHsKICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwogICAgIEpOSVR5cGUgYXJyYXlU
eXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKF90eXBlWzFdKTsKQEAgLTQ4OSw3ICs0ODks
NyBAQCBLSlM6OlZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChLSlM6OkV4ZWNTCiAgICAgICAgICAg
ICBqYm9vbGVhbkFycmF5IGJvb2xlYW5BcnJheSA9IChqYm9vbGVhbkFycmF5KWphdmFBcnJheSgp
OwogICAgICAgICAgICAgamJvb2xlYW4gYUJvb2xlYW47CiAgICAgICAgICAgICBlbnYtPkdldEJv
b2xlYW5BcnJheVJlZ2lvbihib29sZWFuQXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwotICAg
ICAgICAgICAgcmV0dXJuIEtKUzo6Qm9vbGVhbiAoYUJvb2xlYW4pOworICAgICAgICAgICAgcmV0
dXJuIEJvb2xlYW4gKGFCb29sZWFuKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgYnl0ZV90eXBlOiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUKZGlm
ZiAtcCAtdSAtcjEuMjUgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9ydW50aW1lLmgK
LS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfcnVudGltZS5oCTEyIEphbiAyMDA1
IDIyOjAzOjU1IC0wMDAwCTEuMjUKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlf
cnVudGltZS5oCTggQXVnIDIwMDUgMDE6MDA6MzkgLTAwMDAKQEAgLTM1LDcgKzM1LDYgQEAKIAog
bmFtZXNwYWNlIEtKUwogewotY2xhc3MgVmFsdWU7CiAKIG5hbWVzcGFjZSBCaW5kaW5ncwogewpA
QCAtNjgsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIGNvbnN0IGpjaGFyICp1Y2hhcnMo
KSBjb25zdCB7IHJldHVybiAoY29uc3QgamNoYXIgKilfdXN0cmluZy5kYXRhKCk7IH0KICAgICBp
bnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX3VzdHJpbmcuc2l6ZSgpOyB9Ci0gICAgS0pTOjpV
U3RyaW5nIHVzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfdXN0cmluZzsgfQorICAgIFVTdHJpbmcg
dXN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF91c3RyaW5nOyB9CiAgICAgCiBwcml2YXRlOgogICAg
IFVTdHJpbmcgX3VzdHJpbmc7CkBAIC0xODIsOCArMTgxLDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSB2YWx1ZUZy
b21JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNl
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IEtKUzo6VmFsdWUgJmFW
YWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVGcm9tSW5zdGFuY2UoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5j
ZSAqaW5zdGFuY2UsIFZhbHVlSW1wICphVmFsdWUpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciAqbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lLlVURjhTdHJpbmcoKTsgfQog
ICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF90eXBlLlVURjhT
dHJpbmcoKTsgfQpAQCAtMTkxLDggKzE5MCw4IEBAIHB1YmxpYzoKICAgICBKTklUeXBlIGdldEpO
SVR5cGUoKSBjb25zdCB7IHJldHVybiBfSk5JVHlwZTsgfQogICAgIAogcHJpdmF0ZToKLSAgICB2
b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGp2YWx1ZSBqYXZhVmFsdWUsIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZykgY29uc3Q7Ci0gICAganZhbHVlIEphdmFG
aWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnLCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0OworICAgIHZvaWQgSmF2YUZpZWxkOjpkaXNw
YXRjaFNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5j
ZSAqaW5zdGFuY2UsIGp2YWx1ZSBqYXZhVmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZykgY29uc3Q7CisgICAganZhbHVlIEphdmFGaWVsZDo6ZGlzcGF0Y2hWYWx1ZUZyb21J
bnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25z
dDsKIAogICAgIEphdmFTdHJpbmcgX25hbWU7CiAgICAgSmF2YVN0cmluZyBfdHlwZTsKQEAgLTI2
MSw3ICsyNjAsNyBAQCBwcml2YXRlOgogICAgIEphdmFQYXJhbWV0ZXIgKl9wYXJhbWV0ZXJzOwog
ICAgIGxvbmcgX251bVBhcmFtZXRlcnM7CiAgICAgSmF2YVN0cmluZyBfbmFtZTsKLSAgICBtdXRh
YmxlIEtKUzo6VVN0cmluZyAqX3NpZ25hdHVyZTsKKyAgICBtdXRhYmxlIFVTdHJpbmcgKl9zaWdu
YXR1cmU7CiAgICAgSmF2YVN0cmluZyBfcmV0dXJuVHlwZTsKICAgICBKTklUeXBlIF9KTklSZXR1
cm5UeXBlOwogICAgIG11dGFibGUgam1ldGhvZElEIF9tZXRob2RJRDsKQEAgLTI5MSwxNSArMjkw
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH07CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWVBdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGlu
ZGV4LCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0OwotICAgIHZpcnR1YWwgS0pTOjpW
YWx1ZSB2YWx1ZUF0KEtKUzo6RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWdu
ZWQgaW50IGluZGV4LCBWYWx1ZUltcCAqYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKICAgICAKICAgICB2
aXJ0dWFsIH5KYXZhQXJyYXkoKTsKIAogICAgIGpvYmplY3QgamF2YUFycmF5KCkgY29uc3QgeyBy
ZXR1cm4gX2FycmF5LT5faW5zdGFuY2U7IH0KIAotICAgIHN0YXRpYyBLSlM6OlZhbHVlIGNvbnZl
cnRKT2JqZWN0VG9BcnJheSAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGpvYmplY3QgYW5PYmplY3Qs
IGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IFJvb3RPYmplY3QgKnIpOworICAgIHN0YXRpYyBWYWx1
ZUltcCAqY29udmVydEpPYmplY3RUb0FycmF5IChFeGVjU3RhdGUgKmV4ZWMsIGpvYmplY3QgYW5P
YmplY3QsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IFJvb3RPYmplY3QgKnIpOwogCiAgICAgY29u
c3QgUm9vdE9iamVjdCAqZXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIF9yb290OyB9
CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9q
bmkvam5pX3V0aWxpdHkuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXAgLXUg
LXIxLjIzIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5jcHAJMjkgQXByIDIwMDUgMDA6
MjI6NTUgLTAwMDAJMS4yMworKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV91dGls
aXR5LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjQyIC0wMDAwCkBAIC0zMCwxMSArMzAsMTMgQEAKICNp
bmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKIAot
dXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CituYW1lc3BhY2UgS0pTIHsKKworbmFtZXNw
YWNlIEJpbmRpbmdzIHsKIAogc3RhdGljIEphdmFWTSAqanZtID0gMDsKIAotSmF2YVZNICpLSlM6
OkJpbmRpbmdzOjpnZXRKYXZhVk0oKQorSmF2YVZNICpnZXRKYXZhVk0oKQogewogICAgIGlmIChq
dm0pCiAgICAgICAgIHJldHVybiBqdm07CkBAIC01NSw3ICs1Nyw3IEBAIEphdmFWTSAqS0pTOjpC
aW5kaW5nczo6Z2V0SmF2YVZNKCkKICAgICByZXR1cm4ganZtOwogfQogCi1KTklFbnYgKktKUzo6
QmluZGluZ3M6OmdldEpOSUVudigpCitKTklFbnYgKmdldEpOSUVudigpCiB7CiAgICAgSk5JRW52
ICplbnY7CiAgICAgamludCBqbmlFcnJvciA9IDA7CkBAIC0yNzAsNyArMjcyLDcgQEAgc3RhdGlj
IGp2YWx1ZSBjYWxsSk5JTWV0aG9kQSAoSk5JVHlwZSB0eQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWptZXRob2RJRCBLSlM6OkJpbmRpbmdzOjpnZXRNZXRob2RJRCAoam9iamVjdCBvYmosIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZykKK2ptZXRob2RJRCBnZXRNZXRob2RJRCAo
am9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZykKIHsKICAgICBK
TklFbnYgKmVudiA9IGdldEpOSUVudigpOwogICAgIGptZXRob2RJRCBtaWQgPSAwOwpAQCAtMzA5
LDIwMCArMzExLDIwMCBAQCBqbWV0aG9kSUQgS0pTOjpCaW5kaW5nczo6Z2V0TWV0aG9kSUQgKGpv
CiAgICAgXAogICAgIHZhX2VuZCAoYXJncyk7CiAKLXZvaWQgS0pTOjpCaW5kaW5nczo6Y2FsbEpO
SVZvaWRNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpz
aWcsIC4uLiApCit2b2lkIGNhbGxKTklWb2lkTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAo
dm9pZF90eXBlLCBvYmosIG5hbWUsIHNpZyk7CiB9CiAKLWpvYmplY3QgS0pTOjpCaW5kaW5nczo6
Y2FsbEpOSU9iamVjdE1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywgLi4uICkKK2pvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZCAoam9iamVjdCBv
YmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxM
X0pOSV9NRVRIT0QgKG9iamVjdF90eXBlLCBvYmosIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJl
c3VsdC5sOwogfQogCi1qYm9vbGVhbiBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JQm9vbGVhbk1ldGhv
ZCggam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICkK
K2pib29sZWFuIGNhbGxKTklCb29sZWFuTWV0aG9kKCBqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoYm9v
bGVhbl90eXBlLCBvYmosIG5hbWUsIHNpZyk7CiAgICAgcmV0dXJuIHJlc3VsdC56OwogfQogCi1q
Ym9vbGVhbiBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JU3RhdGljQm9vbGVhbk1ldGhvZCAoamNsYXNz
IGNscywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQoramJvb2xlYW4g
Y2FsbEpOSVN0YXRpY0Jvb2xlYW5NZXRob2QgKGpjbGFzcyBjbHMsIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnNpZywgLi4uICkKIHsKICAgICBDQUxMX0pOSV9TVEFUSUNfTUVUSE9EIChi
b29sZWFuX3R5cGUsIGNscywgbmFtZSwgc2lnKTsKICAgICByZXR1cm4gcmVzdWx0Lno7CiB9CiAK
LWpieXRlIEtKUzo6QmluZGluZ3M6OmNhbGxKTklCeXRlTWV0aG9kKCBqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQoramJ5dGUgY2FsbEpOSUJ5dGVN
ZXRob2QoIGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4u
LiApCiB7CiAgICAgQ0FMTF9KTklfTUVUSE9EIChieXRlX3R5cGUsIG9iaiwgbmFtZSwgc2lnKTsK
ICAgICByZXR1cm4gcmVzdWx0LmI7CiB9CiAKLWpjaGFyIEtKUzo6QmluZGluZ3M6OmNhbGxKTklD
aGFyTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCAuLi4gKQoramNoYXIgY2FsbEpOSUNoYXJNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFy
ICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCiB7CiAgICAgQ0FMTF9KTklfTUVUSE9EIChj
aGFyX3R5cGUsIG9iaiwgbmFtZSwgc2lnKTsKICAgICByZXR1cm4gcmVzdWx0LmM7CiB9CiAKLWpz
aG9ydCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JU2hvcnRNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCitqc2hvcnQgY2FsbEpOSVNob3J0
TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAu
Li4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoc2hvcnRfdHlwZSwgb2JqLCBuYW1lLCBzaWcp
OwogICAgIHJldHVybiByZXN1bHQuczsKIH0KIAotamludCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5J
SW50TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCAuLi4gKQoramludCBjYWxsSk5JSW50TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoaW50
X3R5cGUsIG9iaiwgbmFtZSwgc2lnKTsKICAgICByZXR1cm4gcmVzdWx0Lmk7CiB9CiAKLWpsb25n
IEtKUzo6QmluZGluZ3M6OmNhbGxKTklMb25nTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQoramxvbmcgY2FsbEpOSUxvbmdNZXRob2Qg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApCiB7
CiAgICAgQ0FMTF9KTklfTUVUSE9EIChsb25nX3R5cGUsIG9iaiwgbmFtZSwgc2lnKTsKICAgICBy
ZXR1cm4gcmVzdWx0Lmo7CiB9CiAKLWpmbG9hdCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JRmxvYXRN
ZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4u
LiApCitqZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoZmxv
YXRfdHlwZSwgb2JqLCBuYW1lLCBzaWcpOwogICAgIHJldHVybiByZXN1bHQuZjsKIH0KIAotamRv
dWJsZSBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JRG91YmxlTWV0aG9kIChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKQoramRvdWJsZSBjYWxsSk5JRG91
YmxlTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCAuLi4gKQogewogICAgIENBTExfSk5JX01FVEhPRCAoZG91YmxlX3R5cGUsIG9iaiwgbmFtZSwg
c2lnKTsKICAgICByZXR1cm4gcmVzdWx0LmQ7CiB9CiAKLXZvaWQgS0pTOjpCaW5kaW5nczo6Y2Fs
bEpOSVZvaWRNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqc2lnLCBqdmFsdWUgKmFyZ3MpCit2b2lkIGNhbGxKTklWb2lkTWV0aG9kQSAoam9iamVjdCBv
YmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewog
ICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kQSAodm9pZF90eXBlLCBvYmosIG5hbWUs
IHNpZywgYXJncyk7CiB9CiAKLWpvYmplY3QgS0pTOjpCaW5kaW5nczo6Y2FsbEpOSU9iamVjdE1l
dGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2
YWx1ZSAqYXJncykKK2pvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBj
b25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKIHsKICAgICBq
dmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgKG9iamVjdF90eXBlLCBvYmosIG5hbWUsIHNp
ZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5sOwogfQogCi1qYnl0ZSBLSlM6OkJpbmRpbmdz
OjpjYWxsSk5JQnl0ZU1ldGhvZEEgKCBqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpCitqYnl0ZSBjYWxsSk5JQnl0ZU1ldGhvZEEgKCBq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFy
Z3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RBIChieXRlX3R5cGUsIG9i
aiwgbmFtZSwgc2lnLCBhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0LmI7CiB9CiAKLWpjaGFyIEtK
Uzo6QmluZGluZ3M6OmNhbGxKTklDaGFyTWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQoramNoYXIgY2FsbEpOSUNoYXJN
ZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBq
dmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RBIChjaGFy
X3R5cGUsIG9iaiwgbmFtZSwgc2lnLCBhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0LmM7CiB9CiAK
LWpzaG9ydCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JU2hvcnRNZXRob2RBIChqb2JqZWN0IG9iaiwg
Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpCitqc2hvcnQg
Y2FsbEpOSVNob3J0TWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5J
TWV0aG9kQSAoc2hvcnRfdHlwZSwgb2JqLCBuYW1lLCBzaWcsIGFyZ3MpOwogICAgIHJldHVybiBy
ZXN1bHQuczsKIH0KIAotamludCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JSW50TWV0aG9kQSAoam9i
amVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdz
KQoramludCBjYWxsSk5JSW50TWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1bHQgPSBj
YWxsSk5JTWV0aG9kQSAoaW50X3R5cGUsIG9iaiwgbmFtZSwgc2lnLCBhcmdzKTsKICAgICByZXR1
cm4gcmVzdWx0Lmk7CiB9CiAKLWpsb25nIEtKUzo6QmluZGluZ3M6OmNhbGxKTklMb25nTWV0aG9k
QSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVl
ICphcmdzKQoramxvbmcgY2FsbEpOSUxvbmdNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJl
c3VsdCA9IGNhbGxKTklNZXRob2RBIChsb25nX3R5cGUsIG9iaiwgbmFtZSwgc2lnLCBhcmdzKTsK
ICAgICByZXR1cm4gcmVzdWx0Lmo7CiB9CiAKLWpmbG9hdCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5J
RmxvYXRNZXRob2RBIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnLCBqdmFsdWUgKmFyZ3MpCitqZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kQSAoam9iamVjdCBv
YmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewog
ICAgIGp2YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kQSAgKGZsb2F0X3R5cGUsIG9iaiwgbmFt
ZSwgc2lnLCBhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0LmY7CiB9CiAKLWpkb3VibGUgS0pTOjpC
aW5kaW5nczo6Y2FsbEpOSURvdWJsZU1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykKK2pkb3VibGUgY2FsbEpOSURvdWJs
ZU1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcs
IGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZEEgKGRv
dWJsZV90eXBlLCBvYmosIG5hbWUsIHNpZywgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5kOwog
fQogCi1qYm9vbGVhbiBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JQm9vbGVhbk1ldGhvZEEgKGpvYmpl
Y3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncykK
K2pib29sZWFuIGNhbGxKTklCb29sZWFuTWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKQogewogICAgIGp2YWx1ZSByZXN1
bHQgPSBjYWxsSk5JTWV0aG9kQSAoYm9vbGVhbl90eXBlLCBvYmosIG5hbWUsIHNpZywgYXJncyk7
CiAgICAgcmV0dXJuIHJlc3VsdC56OwogfQogCi12b2lkIEtKUzo6QmluZGluZ3M6OmNhbGxKTklW
b2lkTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFy
Z3MpCit2b2lkIGNhbGxKTklWb2lkTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l
dGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRo
b2RJREEgKHZvaWRfdHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7CiB9CiAKLWpvYmplY3QgS0pT
OjpCaW5kaW5nczo6Y2FsbEpOSU9iamVjdE1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJ
RCBtZXRob2RJRCwganZhbHVlICphcmdzKQoram9iamVjdCBjYWxsSk5JT2JqZWN0TWV0aG9kSURB
IChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAg
anZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RJREEgKG9iamVjdF90eXBlLCBvYmosIG1ldGhv
ZElELCBhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0Lmw7CiB9CiAKLWpieXRlIEtKUzo6QmluZGlu
Z3M6OmNhbGxKTklCeXRlTWV0aG9kSURBICggam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ
RCwganZhbHVlICphcmdzKQoramJ5dGUgY2FsbEpOSUJ5dGVNZXRob2RJREEgKCBqb2JqZWN0IG9i
aiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3Vs
dCA9IGNhbGxKTklNZXRob2RJREEgKGJ5dGVfdHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7CiAg
ICAgcmV0dXJuIHJlc3VsdC5iOwogfQogCi1qY2hhciBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JQ2hh
ck1ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdz
KQoramNoYXIgY2FsbEpOSUNoYXJNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhv
ZElEQSAoY2hhcl90eXBlLCBvYmosIG1ldGhvZElELCBhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0
LmM7CiB9CiAKLWpzaG9ydCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JU2hvcnRNZXRob2RJREEgKGpv
YmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2pzaG9ydCBjYWxs
Sk5JU2hvcnRNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1
ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZElEQSAoc2hvcnRf
dHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5zOwogfQogCi1q
aW50IEtKUzo6QmluZGluZ3M6OmNhbGxKTklJbnRNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0
aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2ppbnQgY2FsbEpOSUludE1ldGhvZElEQSAo
am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKQogewogICAgIGp2
YWx1ZSByZXN1bHQgPSBjYWxsSk5JTWV0aG9kSURBIChpbnRfdHlwZSwgb2JqLCBtZXRob2RJRCwg
YXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC5pOwogfQogCi1qbG9uZyBLSlM6OkJpbmRpbmdzOjpj
YWxsSk5JTG9uZ01ldGhvZElEQSAoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZh
bHVlICphcmdzKQoramxvbmcgY2FsbEpOSUxvbmdNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0
aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2Fs
bEpOSU1ldGhvZElEQSAobG9uZ190eXBlLCBvYmosIG1ldGhvZElELCBhcmdzKTsKICAgICByZXR1
cm4gcmVzdWx0Lmo7CiB9CiAKLWpmbG9hdCBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JRmxvYXRNZXRo
b2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2pm
bG9hdCBjYWxsSk5JRmxvYXRNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k
SUQsIGp2YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZElE
QSAgKGZsb2F0X3R5cGUsIG9iaiwgbWV0aG9kSUQsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQu
ZjsKIH0KIAotamRvdWJsZSBLSlM6OkJpbmRpbmdzOjpjYWxsSk5JRG91YmxlTWV0aG9kSURBIChq
b2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpCitqZG91YmxlIGNh
bGxKTklEb3VibGVNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2
YWx1ZSAqYXJncykKIHsKICAgICBqdmFsdWUgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZElEQSAoZG91
YmxlX3R5cGUsIG9iaiwgbWV0aG9kSUQsIGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQuZDsKIH0K
IAotamJvb2xlYW4gS0pTOjpCaW5kaW5nczo6Y2FsbEpOSUJvb2xlYW5NZXRob2RJREEgKGpvYmpl
Y3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncykKK2pib29sZWFuIGNhbGxK
TklCb29sZWFuTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs
dWUgKmFyZ3MpCiB7CiAgICAganZhbHVlIHJlc3VsdCA9IGNhbGxKTklNZXRob2RJREEgKGJvb2xl
YW5fdHlwZSwgb2JqLCBtZXRob2RJRCwgYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdC56OwogfQog
Ci1jb25zdCBjaGFyICpLSlM6OkJpbmRpbmdzOjpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmcgKGpz
dHJpbmcgYUpTdHJpbmcpCitjb25zdCBjaGFyICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmcgKGpz
dHJpbmcgYUpTdHJpbmcpCiB7CiAgICAgcmV0dXJuIGdldENoYXJhY3RlcnNGcm9tSlN0cmluZ0lu
RW52IChnZXRKTklFbnYoKSwgYUpTdHJpbmcpOwogfQogCi12b2lkIEtKUzo6QmluZGluZ3M6OnJl
bGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyAoanN0cmluZyBhSlN0cmluZywgY29uc3QgY2hhciAq
cykKK3ZvaWQgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nIChqc3RyaW5nIGFKU3RyaW5nLCBj
b25zdCBjaGFyICpzKQogewogICAgIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52IChn
ZXRKTklFbnYoKSwgYUpTdHJpbmcsIHMpOwogfQogCi1jb25zdCBjaGFyICpLSlM6OkJpbmRpbmdz
OjpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpT
dHJpbmcpCitjb25zdCBjaGFyICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudiAoSk5JRW52
ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpCiB7CiAgICAgamJvb2xlYW4gaXNDb3B5OwogICAgIGNv
bnN0IGNoYXIgKnMgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKChqc3RyaW5nKWFKU3RyaW5nLCAm
aXNDb3B5KTsKQEAgLTUxNCwxMiArNTE2LDEyIEBAIGNvbnN0IGNoYXIgKktKUzo6QmluZGluZ3M6
OmdldENoYXJhY3RlcnMKICAgICByZXR1cm4gczsKIH0KIAotdm9pZCBLSlM6OkJpbmRpbmdzOjpy
ZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpT
dHJpbmcsIGNvbnN0IGNoYXIgKnMpCit2b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0lu
RW52IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgY2hhciAqcykKIHsKICAg
ICBlbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyAoYUpTdHJpbmcsIHMpOwogfQogCi1jb25zdCBq
Y2hhciAqS0pTOjpCaW5kaW5nczo6Z2V0VUNoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChKTklF
bnYgKmVudiwganN0cmluZyBhSlN0cmluZykKK2NvbnN0IGpjaGFyICpnZXRVQ2hhcmFjdGVyc0Zy
b21KU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nKQogewogICAgIGpi
b29sZWFuIGlzQ29weTsKICAgICBjb25zdCBqY2hhciAqcyA9IGVudi0+R2V0U3RyaW5nQ2hhcnMo
KGpzdHJpbmcpYUpTdHJpbmcsICZpc0NvcHkpOwpAQCAtNTMxLDEyICs1MzMsMTIgQEAgY29uc3Qg
amNoYXIgKktKUzo6QmluZGluZ3M6OmdldFVDaGFyYWN0ZQogICAgIHJldHVybiBzOwogfQogCi12
b2lkIEtKUzo6QmluZGluZ3M6OnJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoSk5J
RW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGpjaGFyICpzKQordm9pZCByZWxlYXNl
VUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5n
LCBjb25zdCBqY2hhciAqcykKIHsKICAgICBlbnYtPlJlbGVhc2VTdHJpbmdDaGFycyAoYUpTdHJp
bmcsIHMpOwogfQogCi1KTklUeXBlIEtKUzo6QmluZGluZ3M6OkpOSVR5cGVGcm9tQ2xhc3NOYW1l
KGNvbnN0IGNoYXIgKm5hbWUpCitKTklUeXBlIEpOSVR5cGVGcm9tQ2xhc3NOYW1lKGNvbnN0IGNo
YXIgKm5hbWUpCiB7CiAgICAgSk5JVHlwZSB0eXBlOwogICAgIApAQCAtNTY0LDcgKzU2Niw3IEBA
IEpOSVR5cGUgS0pTOjpCaW5kaW5nczo6Sk5JVHlwZUZyb21DbGFzc04KICAgICByZXR1cm4gdHlw
ZTsKIH0KIAotY29uc3QgY2hhciAqS0pTOjpCaW5kaW5nczo6c2lnbmF0dXJlRnJvbVByaW1pdGl2
ZVR5cGUoSk5JVHlwZSB0eXBlKQorY29uc3QgY2hhciAqc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5
cGUoSk5JVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSl7CiAgICAgICAgIGNhc2Ugdm9p
ZF90eXBlOiAKQEAgLTYwNCw3ICs2MDYsNyBAQCBjb25zdCBjaGFyICpLSlM6OkJpbmRpbmdzOjpz
aWduYXR1cmVGcm9tCiAgICAgcmV0dXJuICIiOwogfQogCi1KTklUeXBlIEtKUzo6QmluZGluZ3M6
OkpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShjaGFyIHR5cGUpCitKTklUeXBlIEpOSVR5cGVGcm9t
UHJpbWl0aXZlVHlwZShjaGFyIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKXsKICAgICAgICAg
Y2FzZSAnVic6IApAQCAtNjQ0LDcgKzY0Niw3IEBAIEpOSVR5cGUgS0pTOjpCaW5kaW5nczo6Sk5J
VHlwZUZyb21QcmltaXQKICAgICByZXR1cm4gaW52YWxpZF90eXBlOwogfQogCi1qdmFsdWUgS0pT
OjpCaW5kaW5nczo6Z2V0Sk5JRmllbGQoIGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSkKK2p2YWx1ZSBnZXRKTklGaWVsZCgg
am9iamVjdCBvYmosIEpOSVR5cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnbmF0dXJlKQogewogICAgIEphdmFWTSAqanZtID0gZ2V0SmF2YVZNKCk7CiAgICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKQEAgLTcwNiw3ICs3MDgsNyBAQCBqdmFsdWUgS0pTOjpCaW5k
aW5nczo6Z2V0Sk5JRmllbGQoIGpvYmplCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotanZhbHVl
IEtKUzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgS0pTOjpWYWx1ZSB2YWx1ZSwgSk5JVHlwZSBfSk5JVHlwZSwgY29uc3QgY2hhciAqamF2YUNs
YXNzTmFtZSkKK2p2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBW
YWx1ZUltcCAqdmFsdWUsIEpOSVR5cGUgX0pOSVR5cGUsIGNvbnN0IGNoYXIgKmphdmFDbGFzc05h
bWUpCiB7CiAgICAganZhbHVlIHJlc3VsdDsKICAgIApAQCAtNzE1LDE1ICs3MTcsMTUgQEAganZh
bHVlIEtKUzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbAogICAgICAgICAgICAgcmVzdWx0
LmwgPSAoam9iamVjdCkwOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGaXJzdCBzZWUg
aWYgd2UgaGF2ZSBhIEphdmEgaW5zdGFuY2UuCi0gICAgICAgICAgICBpZiAodmFsdWUudHlwZSgp
ID09IEtKUzo6T2JqZWN0VHlwZSl7Ci0gICAgICAgICAgICAgICAgS0pTOjpPYmplY3RJbXAgKm9i
amVjdEltcCA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4odmFsdWUuaW1wKCkpOwotCQlp
ZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmS0pTOjpSdW50aW1lT2JqZWN0SW1wOjppbmZv
KSB7Ci0JCSAgICBLSlM6OlJ1bnRpbWVPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PEtKUzo6
UnVudGltZU9iamVjdEltcCAqPih2YWx1ZS5pbXAoKSk7CisgICAgICAgICAgICBpZiAodmFsdWUt
PmlzT2JqZWN0KCkpeworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqb2JqZWN0SW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wKj4odmFsdWUpOworCQlpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8o
KSA9PSAmUnVudGltZU9iamVjdEltcDo6aW5mbykgeworCQkgICAgUnVudGltZU9iamVjdEltcCAq
aW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCAqPih2YWx1ZSk7CiAJCSAgICBKYXZh
SW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlKj4oaW1wLT5nZXRJ
bnRlcm5hbEluc3RhbmNlKCkpOwogCQkgICAgcmVzdWx0LmwgPSBpbnN0YW5jZS0+amF2YUluc3Rh
bmNlKCk7CiAJCX0KLQkJZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmS0pTOjpS
dW50aW1lQXJyYXlJbXA6OmluZm8pIHsKLQkJICAgIEtKUzo6UnVudGltZUFycmF5SW1wICppbXAg
PSBzdGF0aWNfY2FzdDxLSlM6OlJ1bnRpbWVBcnJheUltcCAqPih2YWx1ZS5pbXAoKSk7CisJCWVs
c2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVBcnJheUltcDo6aW5mbykg
eworCQkgICAgUnVudGltZUFycmF5SW1wICppbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXlJ
bXAgKj4odmFsdWUpOwogCQkgICAgSmF2YUFycmF5ICphcnJheSA9IHN0YXRpY19jYXN0PEphdmFB
cnJheSo+KGltcC0+Z2V0Q29uY3JldGVBcnJheSgpKTsKIAkJICAgIHJlc3VsdC5sID0gYXJyYXkt
PmphdmFBcnJheSgpOwogCQl9CkBAIC03MzMsNyArNzM1LDcgQEAganZhbHVlIEtKUzo6QmluZGlu
Z3M6OmNvbnZlcnRWYWx1ZVRvSlZhbAogICAgICAgICAgICAgLy8gY29udmVydGluZyBmcm9tIGEg
TnVsbC4KICAgICAgICAgICAgIGlmIChyZXN1bHQubCA9PSAwICYmIHN0cmNtcChqYXZhQ2xhc3NO
YW1lLCAiamF2YS5sYW5nLlN0cmluZyIpID09IDApIHsKICNpZiBDT05WRVJUX05VTExfVE9fRU1Q
VFlfU1RSSU5HCi0JCWlmICh2YWx1ZS50eXBlKCkgPT0gS0pTOjpOdWxsVHlwZSkgeworCQlpZiAo
dmFsdWUtPmlzTnVsbCgpKSB7CiAJCSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwogCQkg
ICAgamNoYXIgYnVmWzJdOwogCQkgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlv
bnMtPk5ld1N0cmluZyAoZW52LCBidWYsIDApOwpAQCAtNzQxLDEwICs3NDMsMTAgQEAganZhbHVl
IEtKUzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbAogCQl9CiAJCWVsc2UgCiAjZWxzZQot
CQlpZiAodmFsdWUudHlwZSgpICE9IEtKUzo6TnVsbFR5cGUpCisJCWlmICghdmFsdWUtPmlzTnVs
bCgpKQogI2VuZGlmCiAJCXsKLQkJICAgIEtKUzo6VVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVl
LnRvU3RyaW5nKGV4ZWMpOworCQkgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLT50b1N0
cmluZyhleGVjKTsKIAkJICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CiAJCSAgICBqb2Jq
ZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nIChlbnYsIChjb25zdCBq
Y2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgpKTsKIAkJICAgIHJl
c3VsdC5sID0gamF2YVN0cmluZzsKQEAgLTc1NCw0MiArNzU2LDQyIEBAIGp2YWx1ZSBLSlM6OkJp
bmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWwKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
ICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LnogPSAoamJvb2xl
YW4pdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICByZXN1bHQueiA9IChqYm9vbGVh
bil2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5i
ID0gKGpieXRlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0LmIgPSAo
amJ5dGUpdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICAgICAgY2FzZSBjaGFyX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5j
ID0gKGpjaGFyKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0LmMgPSAo
amNoYXIpdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewotICAgICAgICAgICAgcmVzdWx0LnMgPSAoanNo
b3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0LnMgPSAoanNob3J0
KXZhbHVlLT50b051bWJlcihleGVjKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIGludF90eXBlOiB7Ci0gICAgICAgICAgICByZXN1bHQuaSA9IChqaW50KXZhbHVl
LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0LmkgPSAoamludCl2YWx1ZS0+dG9O
dW1iZXIoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBs
b25nX3R5cGU6IHsKLSAgICAgICAgICAgIHJlc3VsdC5qID0gKGpsb25nKXZhbHVlLnRvTnVtYmVy
KGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0LmogPSAoamxvbmcpdmFsdWUtPnRvTnVtYmVyKGV4
ZWMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgZmxvYXRfdHlw
ZTogewotICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0KXZhbHVlLnRvTnVtYmVyKGV4ZWMp
OworICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0KXZhbHVlLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGRvdWJsZV90eXBlOiB7
Ci0gICAgICAgICAgICByZXN1bHQuZCA9IChqZG91YmxlKXZhbHVlLnRvTnVtYmVyKGV4ZWMpOwor
ICAgICAgICAgICAgcmVzdWx0LmQgPSAoamRvdWJsZSl2YWx1ZS0+dG9OdW1iZXIoZXhlYyk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTgwNSwzICs4MDcsNiBA
QCBqdmFsdWUgS0pTOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorfQorCit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvam5pL2puaV91dGlsaXR5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlm
ZiAtcCAtdSAtcjEuMTcgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV91dGlsaXR5LmgK
LS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5oCTE0IERlYyAyMDA0
IDAyOjQ0OjQ1IC0wMDAwCTEuMTcKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlf
dXRpbGl0eS5oCTggQXVnIDIwMDUgMDE6MDA6NDIgLTAwMDAKQEAgLTUxLDYyICs1MSw2MiBAQCBu
YW1lc3BhY2UgQmluZGluZ3MgCiB7CiBjbGFzcyBKYXZhUGFyYW1ldGVyOwogCi1jb25zdCBjaGFy
ICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmcgKGpzdHJpbmcgYUpTdHJpbmcpOwotdm9pZCByZWxl
YXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmcgKGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGNoYXIgKnMp
OworY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nKGpzdHJpbmcgYUpTdHJpbmcp
Owordm9pZCByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmcoanN0cmluZyBhSlN0cmluZywgY29u
c3QgY2hhciAqcyk7CiAKLWNvbnN0IGNoYXIgKmdldENoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52
IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZyk7Ci12b2lkIHJlbGVhc2VDaGFyYWN0ZXJz
Rm9ySlN0cmluZ0luRW52IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgY2hh
ciAqcyk7Ci1jb25zdCBqY2hhciAqZ2V0VUNoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChKTklF
bnYgKmVudiwganN0cmluZyBhSlN0cmluZyk7Ci12b2lkIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpT
dHJpbmdJbkVudiAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGpjaGFyICpz
KTsKK2NvbnN0IGNoYXIgKmdldENoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52KEpOSUVudiAqZW52
LCBqc3RyaW5nIGFKU3RyaW5nKTsKK3ZvaWQgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5F
bnYoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcsIGNvbnN0IGNoYXIgKnMpOworY29uc3Qg
amNoYXIgKmdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihKTklFbnYgKmVudiwganN0cmlu
ZyBhSlN0cmluZyk7Cit2b2lkIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihKTklF
bnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgamNoYXIgKnMpOwogCiBKTklUeXBlIEpO
SVR5cGVGcm9tQ2xhc3NOYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogSk5JVHlwZSBKTklUeXBlRnJv
bVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKTsKIGNvbnN0IGNoYXIgKnNpZ25hdHVyZUZyb21Qcmlt
aXRpdmVUeXBlKEpOSVR5cGUgdHlwZSk7CiAKLWp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWUgdmFsdWUsIEpOSVR5cGUgX0pOSVR5cGUs
IGNvbnN0IGNoYXIgKmphdmFDbGFzc05hbWUpOworanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVl
KEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVlLCBKTklUeXBlIF9KTklUeXBlLCBjb25z
dCBjaGFyICpqYXZhQ2xhc3NOYW1lKTsKIAotanZhbHVlIGdldEpOSUZpZWxkIChqb2JqZWN0IG9i
aiwgSk5JVHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUp
OworanZhbHVlIGdldEpOSUZpZWxkKGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0IGNo
YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSk7CiAKLWptZXRob2RJRCBnZXRNZXRob2RJ
RCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZyk7CitqbWV0
aG9kSUQgZ2V0TWV0aG9kSUQoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZyk7CiAKLWpvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZCAoam9iamVjdCBvYmosIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICk7Ci12b2lkIGNhbGxKTklWb2lk
TWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAu
Li4gKTsKLWpib29sZWFuIGNhbGxKTklCb29sZWFuTWV0aG9kIChqb2JqZWN0IG9iaiwgY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4gKTsKLWpib29sZWFuIGNhbGxKTklTdGF0
aWNCb29sZWFuTWV0aG9kIChqY2xhc3MgY2xzLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy
ICpzaWcsIC4uLiApOwotamJ5dGUgY2FsbEpOSUJ5dGVNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOwotamNoYXIgY2FsbEpOSUNoYXJN
ZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4u
LiApOwotanNob3J0IGNhbGxKTklTaG9ydE1ldGhvZCAoam9iamVjdCBvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICk7Ci1qaW50IGNhbGxKTklJbnRNZXRob2QgKGpv
YmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOwotamxv
bmcgY2FsbEpOSUxvbmdNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBjaGFyICpzaWcsIC4uLiApOwotamZsb2F0IGNhbGxKTklGbG9hdE1ldGhvZCAoam9iamVjdCBv
YmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICk7Ci1qZG91YmxlIGNh
bGxKTklEb3VibGVNZXRob2QgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj
aGFyICpzaWcsIC4uLiApOwotCi1qb2JqZWN0IGNhbGxKTklPYmplY3RNZXRob2RBIChqb2JqZWN0
IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOwot
dm9pZCBjYWxsSk5JVm9pZE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Ci1qYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1l
dGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2
YWx1ZSAqYXJncyk7Ci1qYnl0ZSBjYWxsSk5JQnl0ZU1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Ci1qY2hhciBjYWxs
Sk5JQ2hhck1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy
ICpzaWcsIGp2YWx1ZSAqYXJncyk7Ci1qc2hvcnQgY2FsbEpOSVNob3J0TWV0aG9kQSAoam9iamVj
dCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsK
LWppbnQgY2FsbEpOSUludE1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Ci1qbG9uZyBjYWxsSk5JTG9uZ01ldGhvZEEg
KGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAq
YXJncyk7Ci1qZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kQSAoam9iamVjdCBvYmosIGNvbnN0IGNo
YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsKLWpkb3VibGUgY2FsbEpO
SURvdWJsZU1ldGhvZEEgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFy
ICpzaWcsIGp2YWx1ZSAqYXJncyk7Ci0KLWpvYmplY3QgY2FsbEpOSU9iamVjdE1ldGhvZElEQSAo
am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKLXZvaWQgY2Fs
bEpOSVZvaWRNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1
ZSAqYXJncyk7Ci1qYm9vbGVhbiBjYWxsSk5JQm9vbGVhbk1ldGhvZElEQSAoam9iamVjdCBvYmos
IGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKLWpieXRlIGNhbGxKTklCeXRlTWV0
aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwot
amNoYXIgY2FsbEpOSUNoYXJNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k
SUQsIGp2YWx1ZSAqYXJncyk7Ci1qc2hvcnQgY2FsbEpOSVNob3J0TWV0aG9kSURBIChqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwotamludCBjYWxsSk5JSW50
TWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3Mp
OwotamxvbmcgY2FsbEpOSUxvbmdNZXRob2RJREEgKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0
aG9kSUQsIGp2YWx1ZSAqYXJncyk7Ci1qZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kSURBIChqb2Jq
ZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUgKmFyZ3MpOwotamRvdWJsZSBjYWxs
Sk5JRG91YmxlTWV0aG9kSURBIChqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs
dWUgKmFyZ3MpOworam9iamVjdCBjYWxsSk5JT2JqZWN0TWV0aG9kKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOwordm9pZCBjYWxsSk5JVm9pZE1l
dGhvZChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCAuLi4g
KTsKK2pib29sZWFuIGNhbGxKTklCb29sZWFuTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFy
ICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOworamJvb2xlYW4gY2FsbEpOSVN0YXRpY0Jv
b2xlYW5NZXRob2QoamNsYXNzIGNscywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCAuLi4gKTsKK2pieXRlIGNhbGxKTklCeXRlTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFy
ICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOworamNoYXIgY2FsbEpOSUNoYXJNZXRob2Qo
am9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgLi4uICk7Citq
c2hvcnQgY2FsbEpOSVNob3J0TWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBj
b25zdCBjaGFyICpzaWcsIC4uLiApOworamludCBjYWxsSk5JSW50TWV0aG9kKGpvYmplY3Qgb2Jq
LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOworamxvbmcgY2FsbEpO
SUxvbmdNZXRob2Qoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNp
ZywgLi4uICk7CitqZmxvYXQgY2FsbEpOSUZsb2F0TWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4uLiApOworamRvdWJsZSBjYWxsSk5JRG91Ymxl
TWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIC4u
LiApOworCitqb2JqZWN0IGNhbGxKTklPYmplY3RNZXRob2RBKGpvYmplY3Qgb2JqLCBjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Cit2b2lkIGNhbGxKTklW
b2lkTWV0aG9kQShqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2ln
LCBqdmFsdWUgKmFyZ3MpOworamJvb2xlYW4gY2FsbEpOSUJvb2xlYW5NZXRob2RBKGpvYmplY3Qg
b2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIGp2YWx1ZSAqYXJncyk7Citq
Ynl0ZSBjYWxsSk5JQnl0ZU1ldGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsKK2pjaGFyIGNhbGxKTklDaGFyTWV0aG9kQShq
b2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFy
Z3MpOworanNob3J0IGNhbGxKTklTaG9ydE1ldGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsKK2ppbnQgY2FsbEpOSUludE1l
dGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZh
bHVlICphcmdzKTsKK2psb25nIGNhbGxKTklMb25nTWV0aG9kQShqb2JqZWN0IG9iaiwgY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnLCBqdmFsdWUgKmFyZ3MpOworamZsb2F0IGNhbGxK
TklGbG9hdE1ldGhvZEEoam9iamVjdCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg
KnNpZywganZhbHVlICphcmdzKTsKK2pkb3VibGUgY2FsbEpOSURvdWJsZU1ldGhvZEEoam9iamVj
dCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywganZhbHVlICphcmdzKTsK
Kworam9iamVjdCBjYWxsSk5JT2JqZWN0TWV0aG9kSURBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg
bWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7Cit2b2lkIGNhbGxKTklWb2lkTWV0aG9kSURBKGpvYmpl
Y3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7CitqYm9vbGVhbiBjYWxs
Sk5JQm9vbGVhbk1ldGhvZElEQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBqdmFs
dWUgKmFyZ3MpOworamJ5dGUgY2FsbEpOSUJ5dGVNZXRob2RJREEoam9iamVjdCBvYmosIGptZXRo
b2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKK2pjaGFyIGNhbGxKTklDaGFyTWV0aG9kSURB
KGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7Citqc2hvcnQg
Y2FsbEpOSVNob3J0TWV0aG9kSURBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2
YWx1ZSAqYXJncyk7CitqaW50IGNhbGxKTklJbnRNZXRob2RJREEoam9iamVjdCBvYmosIGptZXRo
b2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKK2psb25nIGNhbGxKTklMb25nTWV0aG9kSURB
KGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncyk7CitqZmxvYXQg
Y2FsbEpOSUZsb2F0TWV0aG9kSURBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2
YWx1ZSAqYXJncyk7CitqZG91YmxlIGNhbGxKTklEb3VibGVNZXRob2RJREEoam9iamVjdCBvYmos
IGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlICphcmdzKTsKIAogSmF2YVZNICpnZXRKYXZhVk0o
KTsKIEpOSUVudiAqZ2V0Sk5JRW52KCk7CiAKLWJvb2wgZGlzcGF0Y2hKTklDYWxsIChjb25zdCB2
b2lkICp0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlw
ZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSAqYXJncywganZhbHVlICZy
ZXN1bHQsIGNvbnN0IGNoYXIgKmNhbGxpbmdVUkwsIFZhbHVlICZleGNlcHRpb25EZXNjcmlwdGlv
bik7Citib29sIGRpc3BhdGNoSk5JQ2FsbChjb25zdCB2b2lkICp0YXJnZXRBcHBsZXRWaWV3LCBq
b2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5JVHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQg
bWV0aG9kSUQsIGp2YWx1ZSAqYXJncywganZhbHVlICZyZXN1bHQsIGNvbnN0IGNoYXIgKmNhbGxp
bmdVUkwsIFZhbHVlSW1wIComZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogCiB9IC8vIG5hbWVzcGFj
ZSBCaW5kaW5ncwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjAKZGlmZiAtcCAtdSAtcjEuMjAgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tCTMwIEp1biAyMDA1IDE4OjE5OjQyIC0wMDAwCTEuMjAKKysrIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCTggQXVnIDIwMDUgMDE6MDA6NDIgLTAw
MDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CiAKICNk
ZWZpbmUgTE9HX0VYQ0VQVElPTihleGVjKSBcCiAgICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQ
cmludEV4Y2VwdGlvbnMoKSkgXAotICAgICAgICBwcmludGYoIiVzOiVkOlslZF0gIEphdmFTY3Jp
cHQgZXhjZXB0aW9uOiAgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgZ2V0cGlkKCksIGV4ZWMt
PmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVjLCBtZXNzYWdlUHJvcGVydHlOYW1l
KS50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICAgICAgcHJpbnRmKCIlczolZDpbJWRdICBK
YXZhU2NyaXB0IGV4Y2VwdGlvbjogICVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIGdldHBpZCgp
LCBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCBtZXNzYWdlUHJv
cGVydHlOYW1lKS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJTY3JpcHRPYmplY3RQcml2YXRlCiAKQEAgLTYyLDEwICs2MiwxMCBAQCBzdGF0aWMgdm9pZCBf
ZGlkRXhlY3V0ZShXZWJTY3JpcHRPYmplY3QgCiAgICAgRXhlY1N0YXRlICpleGVjID0gW29iaiBf
ZXhlY3V0aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICBLSlNE
aWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24o
KTsKICAgICBpZiAoZnVuYykKLSAgICAgICAgZnVuYyAoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpP
YmplY3RJbXAqPihbb2JqIF9leGVjdXRpb25Db250ZXh0XS0+cm9vdE9iamVjdEltcCgpKSk7Cisg
ICAgICAgIGZ1bmMgKGV4ZWMsIHN0YXRpY19jYXN0PE9iamVjdEltcCo+KFtvYmogX2V4ZWN1dGlv
bkNvbnRleHRdLT5yb290T2JqZWN0SW1wKCkpKTsKIH0KIAotLSAodm9pZClfaW5pdGlhbGl6ZVdp
dGhPYmplY3RJbXA6KEtKUzo6T2JqZWN0SW1wICopaW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6
KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVj
dXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRl
eHQKKy0gKHZvaWQpX2luaXRpYWxpemVXaXRoT2JqZWN0SW1wOihPYmplY3RJbXAgKilpbXAgb3Jp
Z2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5F
eGVjdXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2Jq
ZWN0ICopZXhlY3V0aW9uQ29udGV4dAogewogICAgIF9wcml2YXRlLT5pbXAgPSBpbXA7CiAgICAg
X3ByaXZhdGUtPmV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0OyAgICAKQEAgLTc0
LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0IAogICAg
IGFkZE5hdGl2ZVJlZmVyZW5jZSAoZXhlY3V0aW9uQ29udGV4dCwgaW1wKTsKIH0KIAotLSBfaW5p
dFdpdGhPYmplY3RJbXA6KEtKUzo6T2JqZWN0SW1wICopaW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRl
eHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBl
eGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNv
bnRleHQKKy0gX2luaXRXaXRoT2JqZWN0SW1wOihPYmplY3RJbXAgKilpbXAgb3JpZ2luRXhlY3V0
aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25D
b250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhl
Y3V0aW9uQ29udGV4dAogewogICAgIGFzc2VydCAoaW1wICE9IDApOwogICAgIC8vYXNzZXJ0IChy
b290ICE9IDApOwpAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgdm9pZCBfZGlkRXhlY3V0ZShXZWJT
Y3JpcHRPYmplY3QgCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKEtKUzo6T2JqZWN0SW1wICop
X2ltcAorLSAoT2JqZWN0SW1wICopX2ltcAogewogICAgIGlmICghX3ByaXZhdGUtPmltcCAmJiBf
cHJpdmF0ZS0+aXNDcmVhdGVkQnlET01XcmFwcGVyKSB7CiAgICAgICAgIC8vIEFzc29jaWF0ZSB0
aGUgV2ViU2NyaXB0T2JqZWN0IHdpdGggdGhlIEpTIHdyYXBwZXIgZm9yIHRoZSBPYmpDIERPTQpA
QCAtOTgsMjMgKzk4LDIzIEBAIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVj
dCAKICAgICByZXR1cm4gX3ByaXZhdGUtPmltcDsKIH0KIAotLSAoY29uc3QgS0pTOjpCaW5kaW5n
czo6Um9vdE9iamVjdCAqKV9leGVjdXRpb25Db250ZXh0CistIChjb25zdCBSb290T2JqZWN0ICop
X2V4ZWN1dGlvbkNvbnRleHQKIHsKICAgICByZXR1cm4gX3ByaXZhdGUtPmV4ZWN1dGlvbkNvbnRl
eHQ7CiB9CiAKLS0gKHZvaWQpX3NldEV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QgKiljb250ZXh0CistICh2b2lkKV9zZXRFeGVjdXRpb25Db250ZXh0Oihj
b25zdCBSb290T2JqZWN0ICopY29udGV4dAogewogICAgIF9wcml2YXRlLT5leGVjdXRpb25Db250
ZXh0ID0gY29udGV4dDsKIH0KIAogCi0tIChjb25zdCBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0
ICopX29yaWdpbkV4ZWN1dGlvbkNvbnRleHQKKy0gKGNvbnN0IFJvb3RPYmplY3QgKilfb3JpZ2lu
RXhlY3V0aW9uQ29udGV4dAogewogICAgIHJldHVybiBfcHJpdmF0ZS0+b3JpZ2luRXhlY3V0aW9u
Q29udGV4dDsKIH0KIAotLSAodm9pZClfc2V0T3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3Qg
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQKKy0gKHZv
aWQpX3NldE9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IFJvb3RPYmplY3QgKilvcmlnaW5F
eGVjdXRpb25Db250ZXh0CiB7CiAgICAgX3ByaXZhdGUtPm9yaWdpbkV4ZWN1dGlvbkNvbnRleHQg
PSBvcmlnaW5FeGVjdXRpb25Db250ZXh0OwogfQpAQCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyB2
b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAKICAgICAgICAgRXhlY1N0YXRlICpleGVj
ID0gaW50ZXJwLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIC8vIElmIHRoZSBpbnRlcnByZXRlciBo
YXMgYSBjb250ZXh0LCB3ZSBzZXQgdGhlIGV4Y2VwdGlvbi4KICAgICAgICAgaWYgKGludGVycC0+
Y29udGV4dCgpKSB7Ci0gICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LCBHZW5lcmFsRXJyb3IsIFtleGNlcHRpb25NZXNzYWdlIFVURjhTdHJpbmddKTsKKyAgICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIFtl
eGNlcHRpb25NZXNzYWdlIFVURjhTdHJpbmddKTsKICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbiAoZXJyKTsKICAgICAgICAgICAgIHJldHVybiBZRVM7CiAgICAgICAgIH0KQEAgLTE2OCwx
MCArMTY4LDEwIEBAIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAKICAg
ICByZXR1cm4gTk87CiB9CiAKLXN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNT
dGF0ZSAqZXhlYywgTlNBcnJheSAqYXJyYXkpCitzdGF0aWMgTGlzdCBsaXN0RnJvbU5TQXJyYXko
RXhlY1N0YXRlICpleGVjLCBOU0FycmF5ICphcnJheSkKIHsKICAgICBsb25nIGksIG51bU9iamVj
dHMgPSBhcnJheSA/IFthcnJheSBjb3VudF0gOiAwOwotICAgIEtKUzo6TGlzdCBhTGlzdDsKKyAg
ICBMaXN0IGFMaXN0OwogICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1PYmplY3RzOyBpKysp
IHsKICAgICAgICAgaWQgYW5PYmplY3QgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDppXTsKQEAgLTE5
MywyMSArMTkzLDIxIEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEK
IAogICAgIEludGVycHJldGVyOjpsb2NrKCk7CiAgICAgCi0gICAgVmFsdWUgdiA9IGNvbnZlcnRP
YmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZuYW1lLCBPYmpjT2JqZWN0VHlwZSk7Ci0gICAgSWRlbnRp
ZmllciBpZGVudGlmaWVyKHYudG9TdHJpbmcoZXhlYykpOwotICAgIFZhbHVlIGZ1bmMgPSBbc2Vs
ZiBfaW1wXS0+Z2V0IChleGVjLCBpZGVudGlmaWVyKTsKKyAgICBWYWx1ZUltcCAqdiA9IGNvbnZl
cnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZuYW1lLCBPYmpjT2JqZWN0VHlwZSk7CisgICAgSWRl
bnRpZmllciBpZGVudGlmaWVyKHYtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBWYWx1ZUltcCAqZnVu
YyA9IFtzZWxmIF9pbXBdLT5nZXQgKGV4ZWMsIGlkZW50aWZpZXIpOwogICAgIEludGVycHJldGVy
Ojp1bmxvY2soKTsKLSAgICBpZiAoZnVuYy5pc051bGwoKSB8fCBmdW5jLnR5cGUoKSA9PSBVbmRl
ZmluZWRUeXBlKSB7CisgICAgaWYgKCFmdW5jIHx8IGZ1bmMtPmlzVW5kZWZpbmVkKCkpIHsKICAg
ICAgICAgLy8gTWF5YmUgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmU/CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4gICAgCiAgICAgSW50
ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBPYmplY3RJbXAgKmZ1bmNJbXAgPSBzdGF0aWNfY2FzdDxP
YmplY3RJbXAqPihmdW5jLmltcCgpKTsKLSAgICBPYmplY3QgdGhpc09iaiA9IE9iamVjdChjb25z
dF9jYXN0PE9iamVjdEltcCo+KFtzZWxmIF9pbXBdKSk7CisgICAgT2JqZWN0SW1wICpmdW5jSW1w
ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oZnVuYyk7CisgICAgT2JqZWN0SW1wICp0aGlzT2Jq
ID0gY29uc3RfY2FzdDxPYmplY3RJbXAqPihbc2VsZiBfaW1wXSk7CiAgICAgTGlzdCBhcmdMaXN0
ID0gbGlzdEZyb21OU0FycmF5KGV4ZWMsIGFyZ3MpOwotICAgIFZhbHVlIHJlc3VsdCA9IGZ1bmNJ
bXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOworICAgIFZhbHVlSW1wICpyZXN1bHQg
PSBmdW5jSW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKICAgICBJbnRlcnByZXRl
cjo6dW5sb2NrKCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTIzMywx
OCArMjMzLDE3IEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKIAog
ICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IFtzZWxmIF9leGVjdXRpb25Db250ZXh0XS0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgT2JqZWN0IHRoaXNPYmogPSBPYmplY3QoY29uc3Rf
Y2FzdDxPYmplY3RJbXAqPihbc2VsZiBfaW1wXSkpOwotICAgIFZhbHVlIHJlc3VsdDsKKyAgICBW
YWx1ZUltcCAqcmVzdWx0OwogICAgIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7CiAgICAgCi0g
ICAgVmFsdWUgdiA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZzY3JpcHQsIE9iamNP
YmplY3RUeXBlKTsKLSAgICBDb21wbGV0aW9uIGNvbXBsZXRpb24gPSBbc2VsZiBfZXhlY3V0aW9u
Q29udGV4dF0tPmludGVycHJldGVyKCktPmV2YWx1YXRlKFVTdHJpbmcoKSwgMCwgdi50b1N0cmlu
ZyhleGVjKSk7CisgICAgVmFsdWVJbXAgKnYgPSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVj
LCAmc2NyaXB0LCBPYmpjT2JqZWN0VHlwZSk7CisgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0g
W3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5ldmFsdWF0ZShVU3RyaW5n
KCksIDAsIHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICBDb21wbFR5cGUgdHlwZSA9IGNvbXBsZXRp
b24uY29tcGxUeXBlKCk7CiAgICAgCiAgICAgaWYgKHR5cGUgPT0gTm9ybWFsKSB7CiAgICAgICAg
IHJlc3VsdCA9IGNvbXBsZXRpb24udmFsdWUoKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc051bGwo
KSkgeworICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgcmVzdWx0ID0gVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzYsOCArMjc1LDggQEAgc3RhdGljIEtKUzo6
TGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YQogICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IFtzZWxm
IF9leGVjdXRpb25Db250ZXh0XS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogCiAgICAg
SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBWYWx1ZSB2ID0gY29udmVydE9iamNWYWx1ZVRvVmFs
dWUoZXhlYywgJmtleSwgT2JqY09iamVjdFR5cGUpOwotICAgIFtzZWxmIF9pbXBdLT5wdXQgKGV4
ZWMsIElkZW50aWZpZXIgKHYudG9TdHJpbmcoZXhlYykpLCAoY29udmVydE9iamNWYWx1ZVRvVmFs
dWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSkpKTsKKyAgICBWYWx1ZUltcCAqdiA9IGNv
bnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZrZXksIE9iamNPYmplY3RUeXBlKTsKKyAgICBb
c2VsZiBfaW1wXS0+cHV0IChleGVjLCBJZGVudGlmaWVyICh2LT50b1N0cmluZyhleGVjKSksIChj
b252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlKSkpOwog
ICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgewpAQCAtMjk4LDggKzI5Nyw4IEBAIHN0YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5
KEV4ZWNTdGEKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBbc2VsZiBfZXhlY3V0aW9uQ29udGV4dF0t
PmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKIAogICAgIEludGVycHJldGVyOjpsb2NrKCk7
Ci0gICAgVmFsdWUgdiA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZrZXksIE9iamNP
YmplY3RUeXBlKTsKLSAgICBWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0IChleGVjLCBJ
ZGVudGlmaWVyICh2LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgVmFsdWVJbXAgKnYgPSBjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAma2V5LCBPYmpjT2JqZWN0VHlwZSk7CisgICAgVmFsdWVJ
bXAgKnJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQgKGV4ZWMsIElkZW50aWZpZXIgKHYtPnRvU3Ry
aW5nKGV4ZWMpKSk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogICAgIAogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMzI1LDggKzMyNCw4IEBAIHN0YXRpYyBLSlM6Okxp
c3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBbc2VsZiBf
ZXhlY3V0aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKIAogICAgIElu
dGVycHJldGVyOjpsb2NrKCk7Ci0gICAgVmFsdWUgdiA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KGV4ZWMsICZrZXksIE9iamNPYmplY3RUeXBlKTsKLSAgICBbc2VsZiBfaW1wXS0+ZGVsZXRlUHJv
cGVydHkgKGV4ZWMsIElkZW50aWZpZXIgKHYudG9TdHJpbmcoZXhlYykpKTsKKyAgICBWYWx1ZUlt
cCAqdiA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZrZXksIE9iamNPYmplY3RUeXBl
KTsKKyAgICBbc2VsZiBfaW1wXS0+ZGVsZXRlUHJvcGVydHkgKGV4ZWMsIElkZW50aWZpZXIgKHYt
PnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0zNDMsNyArMzQyLDcgQEAgc3RhdGljIEtKUzo6
TGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YQogCXJldHVybiBAIlVuZGVmaW5lZCI7CiAKICAg
ICBJbnRlcnByZXRlcjo6bG9jaygpOwotICAgIE9iamVjdCB0aGlzT2JqID0gT2JqZWN0KGNvbnN0
X2Nhc3Q8T2JqZWN0SW1wKj4oW3NlbGYgX2ltcF0pKTsKKyAgICBPYmplY3RJbXAgKnRoaXNPYmog
PSBjb25zdF9jYXN0PE9iamVjdEltcCo+KFtzZWxmIF9pbXBdKTsKICAgICBFeGVjU3RhdGUgKmV4
ZWMgPSBbc2VsZiBfZXhlY3V0aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCB0
aGlzT2JqLCBPYmpjT2JqZWN0VHlwZSkub2JqZWN0VmFsdWU7CkBAIC0zNjcsNyArMzY2LDcgQEAg
c3RhdGljIEtKUzo6TGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0YQogCiAgICAgRXhlY1N0YXRl
ICpleGVjID0gW3NlbGYgX2V4ZWN1dGlvbkNvbnRleHRdLT5pbnRlcnByZXRlcigpLT5nbG9iYWxF
eGVjKCk7CiAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICBWYWx1ZSByZXN1bHQgPSBbc2Vs
ZiBfaW1wXS0+Z2V0IChleGVjLCAodW5zaWduZWQpaW5kZXgpOworICAgIFZhbHVlSW1wICpyZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0IChleGVjLCAodW5zaWduZWQpaW5kZXgpOwogICAgIEludGVy
cHJldGVyOjp1bmxvY2soKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAt
NDA4LDMwICs0MDcsMzAgQEAgc3RhdGljIEtKUzo6TGlzdCBsaXN0RnJvbU5TQXJyYXkoRXhlY1N0
YQogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBbc2VsZiBfZXhlY3V0
aW9uQ29udGV4dF0tPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKLSAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIFtkZXNjcmlwdGlvbiBVVEY4U3Ry
aW5nXSk7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxF
cnJvciwgW2Rlc2NyaXB0aW9uIFVURjhTdHJpbmddKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24g
KGVycik7CiB9CiAKLSsgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooS0pTOjpWYWx1ZSl2
YWx1ZSBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAq
KW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3QgQmluZGluZ3M6
OlJvb3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CisrIChpZClfY29udmVydFZhbHVlVG9PYmpj
VmFsdWU6KFZhbHVlSW1wICopdmFsdWUgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgUm9v
dE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29uc3Qg
QmluZGluZ3M6OlJvb3RPYmplY3QgKilleGVjdXRpb25Db250ZXh0CiB7CiAgICAgaWQgcmVzdWx0
ID0gMDsKIAogICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBoYXZlIGEgT2JqQyBpbnN0YW5jZS4KLSAg
ICBpZiAodmFsdWUudHlwZSgpID09IEtKUzo6T2JqZWN0VHlwZSl7Ci0gICAgICAgIE9iamVjdElt
cCAqb2JqZWN0SW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odmFsdWUuaW1wKCkpOworICAg
IGlmICh2YWx1ZS0+aXNPYmplY3QoKSkgeworICAgICAgICBPYmplY3RJbXAgKm9iamVjdEltcCA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKIAlJbnRlcnByZXRlciAqaW50ZXByZXRl
ciA9IGV4ZWN1dGlvbkNvbnRleHQtPmludGVycHJldGVyKCk7CiAJRXhlY1N0YXRlICpleGVjID0g
aW50ZXByZXRlci0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwog
CQotICAgICAgICBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSAhPSAmS0pTOjpSdW50aW1lT2Jq
ZWN0SW1wOjppbmZvKSB7Ci0JICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBvYmplY3RJbXAtPmdl
dChleGVjLCAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpOwotCSAgICBpZiAoIXJ1bnRpbWVPYmpl
Y3QuaXNOdWxsKCkgJiYgcnVudGltZU9iamVjdC50eXBlKCkgPT0gS0pTOjpPYmplY3RUeXBlKQot
CQlvYmplY3RJbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4ocnVudGltZU9iamVj
dC5pbXAoKSk7CisgICAgICAgIGlmIChvYmplY3RJbXAtPmNsYXNzSW5mbygpICE9ICZSdW50aW1l
T2JqZWN0SW1wOjppbmZvKSB7CisJICAgIFZhbHVlSW1wICpydW50aW1lT2JqZWN0ID0gb2JqZWN0
SW1wLT5nZXQoZXhlYywgIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKTsKKwkgICAgaWYgKCFydW50
aW1lT2JqZWN0ICYmIHJ1bnRpbWVPYmplY3QtPmlzT2JqZWN0KCkpCisJCW9iamVjdEltcCA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihydW50aW1lT2JqZWN0KTsKIAl9CiAgICAgICAg
IAogICAgICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKLSAgICAgICAgaWYgKG9iamVjdElt
cC0+Y2xhc3NJbmZvKCkgPT0gJktKUzo6UnVudGltZU9iamVjdEltcDo6aW5mbykgeworICAgICAg
ICBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZU9iamVjdEltcDo6aW5mbykg
ewogICAgICAgICAgICAgUnVudGltZU9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8UnVudGlt
ZU9iamVjdEltcCAqPihvYmplY3RJbXApOwogICAgICAgICAgICAgT2JqY0luc3RhbmNlICppbnN0
YW5jZSA9IHN0YXRpY19jYXN0PE9iamNJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5j
ZSgpKTsKICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkKQEAgLTQzOSwxMyArNDM4LDEzIEBAIHN0
YXRpYyBLSlM6Okxpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGEKICAgICAgICAgfQogICAgICAg
ICAvLyBDb252ZXJ0IHRvIGEgV2ViU2NyaXB0T2JqZWN0CiAgICAgICAgIGVsc2UgewotCSAgICBy
ZXN1bHQgPSAoaWQpaW50ZXByZXRlci0+Y3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChl
eGVjLCBJbnN0YW5jZTo6T2JqZWN0aXZlQ0xhbmd1YWdlLCB2YWx1ZS50b09iamVjdChleGVjKSwg
b3JpZ2luRXhlY3V0aW9uQ29udGV4dCwgZXhlY3V0aW9uQ29udGV4dCk7CisJICAgIHJlc3VsdCA9
IChpZClpbnRlcHJldGVyLT5jcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKGV4ZWMsIElu
c3RhbmNlOjpPYmplY3RpdmVDTGFuZ3VhZ2UsIHZhbHVlLT50b09iamVjdChleGVjKSwgb3JpZ2lu
RXhlY3V0aW9uQ29udGV4dCwgZXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgLy8gQ29udmVydCBKYXZhU2NyaXB0IFN0cmluZyB2YWx1ZSB0byBOU1N0cmluZz8K
LSAgICBlbHNlIGlmICh2YWx1ZS50eXBlKCkgPT0gS0pTOjpTdHJpbmdUeXBlKSB7Ci0gICAgICAg
IFN0cmluZ0ltcCAqcyA9IHN0YXRpY19jYXN0PEtKUzo6U3RyaW5nSW1wKj4odmFsdWUuaW1wKCkp
OworICAgIGVsc2UgaWYgKHZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgIFN0cmluZ0ltcCAq
cyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KHZhbHVlKTsKICAgICAgICAgVVN0cmluZyB1ID0g
cy0+dmFsdWUoKTsKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6KGNvbnN0IHVuaWNoYXIqKXUuZGF0YSgpIGxlbmd0aDp1
LnNpemUoKV07CkBAIC00NTMsMTggKzQ1MiwxNyBAQCBzdGF0aWMgS0pTOjpMaXN0IGxpc3RGcm9t
TlNBcnJheShFeGVjU3RhCiAgICAgfQogICAgIAogICAgIC8vIENvbnZlcnQgSmF2YVNjcmlwdCBO
dW1iZXIgdmFsdWUgdG8gTlNOdW1iZXI/Ci0gICAgZWxzZSBpZiAodmFsdWUudHlwZSgpID09IEtK
Uzo6TnVtYmVyVHlwZSkgewotICAgICAgICBOdW1iZXIgbiA9IE51bWJlcjo6ZHluYW1pY0Nhc3Qo
dmFsdWUpOwotICAgICAgICByZXN1bHQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpuLnZh
bHVlKCldOworICAgIGVsc2UgaWYgKHZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgIHJlc3Vs
dCA9IFtOU051bWJlciBudW1iZXJXaXRoRG91YmxlOnZhbHVlLT5nZXROdW1iZXIoKV07CiAgICAg
fQogICAgIAotICAgIGVsc2UgaWYgKHZhbHVlLnR5cGUoKSA9PSBLSlM6OkJvb2xlYW5UeXBlKSB7
Ci0gICAgICAgIEtKUzo6Qm9vbGVhbkltcCAqYiA9IHN0YXRpY19jYXN0PEtKUzo6Qm9vbGVhbklt
cCo+KHZhbHVlLmltcCgpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNCb29sZWFuKCkpIHsKKyAg
ICAgICAgQm9vbGVhbkltcCAqYiA9IHN0YXRpY19jYXN0PEJvb2xlYW5JbXAqPih2YWx1ZSk7CiAg
ICAgICAgIHJlc3VsdCA9IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpiLT52YWx1ZSgpXTsKICAg
ICB9CiAgICAgCiAgICAgLy8gQ29udmVydCBKYXZhU2NyaXB0IFVuZGVmaW5lZCB0eXBlcyB0byBX
ZWJVbmRlZmluZWQKLSAgICBlbHNlIGlmICh2YWx1ZS50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRU
eXBlKSB7CisgICAgZWxzZSBpZiAodmFsdWUtPmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgcmVz
dWx0ID0gW1dlYlVuZGVmaW5lZCB1bmRlZmluZWRdOwogICAgIH0KICAgICAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNj
cmlwdE9iamVjdFByaXZhdGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUg
LXIxLjcgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRl
LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0
ZS5oCTEyIEZlYiAyMDA1IDAwOjU4OjEzIC0wMDAwCTEuNworKysgSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgJOCBBdWcgMjAwNSAwMTowMDo0MiAt
MDAwMApAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3ZhbHVlLmg+
CiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2JqZWN0IChQcml2YXRlKQotKyAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihLSlM6OlZhbHVlKXZhbHVlIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6
KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVjdXRpb25Db250ZXh0
IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilleGVj
dXRpb25Db250ZXh0OworKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihLSlM6OlZhbHVl
SW1wICopdmFsdWUgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDooY29uc3QgS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdCAqKW9yaWdpbkV4ZWN1dGlvbkNvbnRleHQgZXhlY3V0aW9uQ29udGV4dDooY29u
c3QgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqKWV4ZWN1dGlvbkNvbnRleHQ7CiAtIF9pbml0
OwogLSBfaW5pdFdpdGhPYmplY3RJbXA6KEtKUzo6T2JqZWN0SW1wICopaW1wIG9yaWdpbkV4ZWN1
dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKilvcmlnaW5FeGVj
dXRpb25Db250ZXh0IGV4ZWN1dGlvbkNvbnRleHQ6KGNvbnN0IEtKUzo6QmluZGluZ3M6OlJvb3RP
YmplY3QgKilleGVjdXRpb25Db250ZXh0IDsKIC0gKHZvaWQpX2luaXRpYWxpemVXaXRoT2JqZWN0
SW1wOihLSlM6Ok9iamVjdEltcCAqKWltcCBvcmlnaW5FeGVjdXRpb25Db250ZXh0Oihjb25zdCBL
SlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICopb3JpZ2luRXhlY3V0aW9uQ29udGV4dCBleGVjdXRp
b25Db250ZXh0Oihjb25zdCBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICopZXhlY3V0aW9uQ29u
dGV4dCA7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2Jq
Yy9vYmpjX2NsYXNzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC1wIC11IC1yMS4z
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5oCi0tLSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xhc3MuaAkxIE9jdCAyMDA0IDAwOjI0OjM5IC0wMDAw
CTEuMworKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLmgJOCBBdWcg
MjAwNSAwMTowMDo0MiAtMDAwMApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCBGaWVsZCAqZmllbGROYW1lZChjb25zdCBjaGFyICpuYW1lLCBJbnN0YW5jZSAqaW5z
dGFuY2UpIGNvbnN0OwogCi0gICAgdmlydHVhbCBWYWx1ZSBmYWxsYmFja09iamVjdChFeGVjU3Rh
dGUgKmV4ZWMsIEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpmYWxsYmFja09iamVjdChFeGVjU3RhdGUgKmV4
ZWMsIEluc3RhbmNlICppbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsK
ICAgICAKICAgICB2aXJ0dWFsIENvbnN0cnVjdG9yICpjb25zdHJ1Y3RvckF0KGxvbmcgaSkgY29u
c3QgewogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29i
amMvb2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2NsYXNzLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjkKZGlmZiAtcCAtdSAtcjEuOSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfY2xh
c3MubW0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19jbGFzcy5tbQk0IEF1
ZyAyMDA1IDAwOjQwOjIwIC0wMDAwCTEuOQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2Jq
Yy9vYmpjX2NsYXNzLm1tCTggQXVnIDIwMDUgMDE6MDA6NDMgLTAwMDAKQEAgLTMwLDcgKzMwLDgg
QEAKICNpbmNsdWRlIDxvYmpjX3V0aWxpdHkuaD4KICNpbmNsdWRlIDxXZWJTY3JpcHRPYmplY3Qu
aD4KIAotdXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CituYW1lc3BhY2UgS0pTIHsKK25h
bWVzcGFjZSBCaW5kaW5ncyB7CiAKIHZvaWQgT2JqY0NsYXNzOjpfY29tbW9uRGVsZXRlKCkgewog
ICAgIENGUmVsZWFzZSAoX2ZpZWxkcyk7CkBAIC0yMzIsNyArMjMzLDEwIEBAIEZpZWxkICpPYmpj
Q2xhc3M6OmZpZWxkTmFtZWQoY29uc3QgY2hhciAKICAgICByZXR1cm4gYUZpZWxkOwogfQogCi1L
SlM6OlZhbHVlIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QgKEV4ZWNTdGF0ZSAqZXhlYywgSW5z
dGFuY2UgKmluc3RhbmNlLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCitWYWx1ZUlt
cCAqT2JqY0NsYXNzOjpmYWxsYmFja09iamVjdCAoRXhlY1N0YXRlICpleGVjLCBJbnN0YW5jZSAq
aW5zdGFuY2UsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
T2JqZWN0IChuZXcgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKHN0YXRpY19jYXN0PE9iamNJbnN0YW5j
ZSo+KGluc3RhbmNlKSwgcHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIG5ldyBPYmpjRmFsbGJh
Y2tPYmplY3RJbXAoc3RhdGljX2Nhc3Q8T2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpLCBwcm9wZXJ0
eU5hbWUpOworfQorCit9CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29i
amNfaW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NgpkaWZmIC1wIC11IC1yMS42IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0
YW5jZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UuaAkx
OSBKYW4gMjAwNSAwMjozNDoyMSAtMDAwMAkxLjYKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L29iamMvb2JqY19pbnN0YW5jZS5oCTggQXVnIDIwMDUgMDE6MDA6NDMgLTAwMDAKQEAgLTUzLDI0
ICs1MywyNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCk7CiAgICAgdmlydHVh
bCB2b2lkIGVuZCgpOwogICAgIAotICAgIHZpcnR1YWwgVmFsdWUgdmFsdWVPZigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgVmFsdWUgZGVmYXVsdFZhbHVlIChUeXBlIGhpbnQpIGNvbnN0OworICAgIHZp
cnR1YWwgVmFsdWVJbXAgKnZhbHVlT2YoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpk
ZWZhdWx0VmFsdWUgKFR5cGUgaGludCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGludm9r
ZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRob2QsIGNvbnN0
IExpc3QgJmFyZ3MpOwotICAgIHZpcnR1YWwgVmFsdWUgaW52b2tlRGVmYXVsdE1ldGhvZCAoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpp
bnZva2VNZXRob2QgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9kTGlzdCAmbWV0aG9kLCBj
b25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICppbnZva2VEZWZhdWx0TWV0
aG9kIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogCi0gICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlT2ZGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBGaWVsZCAqYUZpZWxk
LCBjb25zdCBWYWx1ZSAmYVZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVP
ZkZpZWxkIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQsIFZhbHVlSW1wICph
VmFsdWUpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NldFZhbHVlT2ZVbmRlZmlu
ZWRGaWVsZCAoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkIChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBjb25zdCBWYWx1ZSAm
YVZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkIChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBWYWx1ZUltcCAqYVZhbHVl
KTsKICAgICAKLSAgICB2aXJ0dWFsIFZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZkZpZWxk
IChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQpIGNvbnN0OwotICAgIHZpcnR1
YWwgVmFsdWUgZ2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5LCBUeXBlIGhpbnQpIGNvbnN0OworICAgIHZpcnR1YWwgVmFs
dWVJbXAgKk9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZkZpZWxkIChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEZpZWxkICphRmllbGQpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmdldFZhbHVl
T2ZVbmRlZmluZWRGaWVsZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eSwgVHlwZSBoaW50KSBjb25zdDsKIAogICAgIE9iamVjdFN0cnVjdFB0ciBnZXRPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBfaW5zdGFuY2U7IH0KICAgICAKLSAgICBWYWx1ZSBzdHJpbmdWYWx1
ZSgpIGNvbnN0OwotICAgIFZhbHVlIG51bWJlclZhbHVlKCkgY29uc3Q7Ci0gICAgVmFsdWUgYm9v
bGVhblZhbHVlKCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKnN0cmluZ1ZhbHVlKCkgY29uc3Q7Cisg
ICAgVmFsdWVJbXAgKm51bWJlclZhbHVlKCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmJvb2xlYW5W
YWx1ZSgpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICAgICBPYmplY3RTdHJ1Y3RQdHIgX2luc3Rh
bmNlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9v
YmpjL29iamNfaW5zdGFuY2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAt
dSAtcjEuMTIgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLm1tCi0t
LSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UubW0JMTkgSmFuIDIw
MDUgMDI6MzQ6MjEgLTAwMDAJMS4xMgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9v
YmpjX2luc3RhbmNlLm1tCTggQXVnIDIwMDUgMDE6MDA6NDMgLTAwMDAKQEAgLTEyMiw5ICsxMjIs
OSBAQCBCaW5kaW5nczo6Q2xhc3MgKk9iamNJbnN0YW5jZTo6Z2V0Q2xhc3MoCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEJpbmRpbmdzOjpDbGFzcyo+KF9jbGFzcyk7CiB9CiAKLVZhbHVlIE9iamNJ
bnN0YW5jZTo6aW52b2tlTWV0aG9kIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTWV0aG9k
TGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpPYmpjSW5zdGFu
Y2U6Omludm9rZU1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBNZXRob2RMaXN0ICZtZXRo
b2RMaXN0LCBjb25zdCBMaXN0ICZhcmdzKQogewotICAgIFZhbHVlIHJlc3VsdFZhbHVlOworICAg
IFZhbHVlSW1wICpyZXN1bHRWYWx1ZTsKIAogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgaXMg
bm90IGFsbG93ZWQgaW4gT2JqZWN0aXZlQy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAgIC8vIG5h
bWUgbWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCkBAIC0yMjEsNyArMjIxLDcgQEAgTlNf
RFVSSU5HCiAgICAgLy8gdHlwZS4KICAgICBhc3NlcnQgKG9iamNWYWx1ZVR5cGUgIT0gT2JqY0lu
dmFsaWRUeXBlKTsKICAgICAKLSAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1ZSBhbmQgY29udmVy
dCBpdCB0byBhIEtKUzo6VmFsdWUuICBMZW5ndGgKKyAgICAvLyBHZXQgdGhlIHJldHVybiB2YWx1
ZSBhbmQgY29udmVydCBpdCB0byBhIEphdmFTY3JpcHQgdmFsdWUuIExlbmd0aAogICAgIC8vIG9m
IHJldHVybiB2YWx1ZSB3aWxsIG5ldmVyIGV4Y2VlZCB0aGUgc2l6ZSBvZiBsYXJnZXN0IHNjYWxh
cgogICAgIC8vIG9yIGEgcG9pbnRlci4KICAgICBjaGFyIGJ1ZmZlclsxMDI0XTsKQEAgLTI0NCw5
ICsyNDQsOSBAQCBOU19FTkRIQU5ETEVSCiAgICAgcmV0dXJuIHJlc3VsdFZhbHVlOwogfQogCi1W
YWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QgKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk9iamNJbnN0YW5jZTo6aW52b2tlRGVm
YXVsdE1ldGhvZCAoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQogewotICAgIFZh
bHVlIHJlc3VsdFZhbHVlOworICAgIFZhbHVlSW1wICpyZXN1bHRWYWx1ZTsKICAgICAKIE5TX0RV
UklORwogCkBAIC0yODEsOSArMjgxLDkgQEAgTlNfRFVSSU5HCiAgICAgY29uc3QgY2hhciAqdHlw
ZSA9IFtzaWduYXR1cmUgbWV0aG9kUmV0dXJuVHlwZV07CiAgICAgT2JqY1ZhbHVlVHlwZSBvYmpj
VmFsdWVUeXBlID0gb2JqY1ZhbHVlVHlwZUZvclR5cGUgKHR5cGUpOwogICAgIAotICAgIC8vIEdl
dCB0aGUgcmV0dXJuIHZhbHVlIGFuZCBjb252ZXJ0IGl0IHRvIGEgS0pTOjpWYWx1ZS4gIExlbmd0
aAorICAgIC8vIEdldCB0aGUgcmV0dXJuIHZhbHVlIGFuZCBjb252ZXJ0IGl0IHRvIGEgSmF2YVNj
cmlwdCB2YWx1ZS4gTGVuZ3RoCiAgICAgLy8gb2YgcmV0dXJuIHZhbHVlIHdpbGwgbmV2ZXIgZXhj
ZWVkIHRoZSBzaXplIG9mIGEgcG9pbnRlciwgc28gd2UncmUKLSAgICAvLyBPSyB3ZSAzMiBoZXJl
LgorICAgIC8vIE9LIHdpdGggMzIgaGVyZS4KICAgICBjaGFyIGJ1ZmZlclszMl07CiAgICAgW2lu
dm9jYXRpb24gZ2V0UmV0dXJuVmFsdWU6YnVmZmVyXTsKICAgICByZXN1bHRWYWx1ZSA9IGNvbnZl
cnRPYmpjVmFsdWVUb1ZhbHVlIChleGVjLCBidWZmZXIsIG9iamNWYWx1ZVR5cGUpOwpAQCAtMjk3
LDcgKzI5Nyw3IEBAIE5TX0VOREhBTkRMRVIKICAgICByZXR1cm4gcmVzdWx0VmFsdWU7CiB9CiAK
LXZvaWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mRmllbGQgKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBGaWVsZCAqYUZpZWxkLCBjb25zdCBLSlM6OlZhbHVlICZhVmFsdWUpIGNvbnN0Cit2
b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZkZpZWxkIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IEZpZWxkICphRmllbGQsIFZhbHVlSW1wICphVmFsdWUpIGNvbnN0CiB7CiAgICAgYUZpZWxkLT5z
ZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIHRoaXMsIGFWYWx1ZSk7CiB9CkBAIC0zMTIsNyArMzEy
LDcgQEAgYm9vbCBPYmpjSW5zdGFuY2U6OnN1cHBvcnRzU2V0VmFsdWVPZlVuZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVs
ZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHks
IGNvbnN0IEtKUzo6VmFsdWUgJmFWYWx1ZSkKK3ZvaWQgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9m
VW5kZWZpbmVkRmllbGQgKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHksIFZhbHVlSW1wICphVmFsdWUpCiB7CiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0
KCk7CiAgICAgCkBAIC0zMzUsMTMgKzMzNSwxMyBAQCB2b2lkIE9iamNJbnN0YW5jZTo6c2V0VmFs
dWVPZlVuZGVmaW5lZEZpCiAgICAgfQogfQogCi1WYWx1ZSBPYmpjSW5zdGFuY2U6OmdldFZhbHVl
T2ZGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQpIGNvbnN0
IHsgIAorVmFsdWVJbXAgKk9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZkZpZWxkIChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEZpZWxkICphRmllbGQpIGNvbnN0IHsgIAogICAgIHJldHVybiBhRmllbGQt
PnZhbHVlRnJvbUluc3RhbmNlIChleGVjLCB0aGlzKTsKIH0KIAotS0pTOjpWYWx1ZSBPYmpjSW5z
dGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHksIEtKUzo6VHlwZSBoaW50KSBjb25zdAorVmFs
dWVJbXAgKk9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkIChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5LCBUeXBlIGhpbnQpIGNvbnN0CiB7Ci0g
ICAgVmFsdWUgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgVmFsdWVJbXAgKnZvbGF0aWxlIHJl
c3VsdCA9IFVuZGVmaW5lZCgpOwogICAgIAogICAgIGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVj
dCgpOwogICAgIApAQCAtMzY3LDE4ICszNjcsMTggQEAgS0pTOjpWYWx1ZSBPYmpjSW5zdGFuY2U6
OmdldFZhbHVlT2ZVbmRlZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUtKUzo6VmFsdWUgT2Jq
Y0luc3RhbmNlOjpkZWZhdWx0VmFsdWUgKEtKUzo6VHlwZSBoaW50KSBjb25zdAorVmFsdWVJbXAg
Kk9iamNJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlIChUeXBlIGhpbnQpIGNvbnN0CiB7Ci0gICAgaWYg
KGhpbnQgPT0gS0pTOjpTdHJpbmdUeXBlKSB7CisgICAgaWYgKGhpbnQgPT0gU3RyaW5nVHlwZSkg
ewogICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUoKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoaGlu
dCA9PSBLSlM6Ok51bWJlclR5cGUpIHsKKyAgICBlbHNlIGlmIChoaW50ID09IE51bWJlclR5cGUp
IHsKICAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKGhp
bnQgPT0gS0pTOjpCb29sZWFuVHlwZSkgeworICAgIGVsc2UgaWYgKGhpbnQgPT0gQm9vbGVhblR5
cGUpIHsKICAgICAgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZSgpOwogICAgIH0KLSAgICBlbHNlIGlm
IChoaW50ID09IEtKUzo6VW5zcGVjaWZpZWRUeXBlKSB7CisgICAgZWxzZSBpZiAoaGludCA9PSBV
bnNwZWNpZmllZFR5cGUpIHsKICAgICAgICAgaWYgKFtfaW5zdGFuY2UgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSkgewogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7CiAg
ICAgICAgIH0KQEAgLTM5MywyNiArMzkzLDI0IEBAIEtKUzo6VmFsdWUgT2JqY0luc3RhbmNlOjpk
ZWZhdWx0VmFsdWUgKEsKICAgICByZXR1cm4gdmFsdWVPZigpOwogfQogCi1LSlM6OlZhbHVlIE9i
amNJbnN0YW5jZTo6c3RyaW5nVmFsdWUoKSBjb25zdAorVmFsdWVJbXAgKk9iamNJbnN0YW5jZTo6
c3RyaW5nVmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBjb252ZXJ0TlNTdHJpbmdUb1N0cmlu
ZyAoW2dldE9iamVjdCgpIGRlc2NyaXB0aW9uXSk7CiB9CiAKLUtKUzo6VmFsdWUgT2JqY0luc3Rh
bmNlOjpudW1iZXJWYWx1ZSgpIGNvbnN0CitWYWx1ZUltcCAqT2JqY0luc3RhbmNlOjpudW1iZXJW
YWx1ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6ICBJbXBsZW1lbnQgc29tZXRoaW5nIHNlbnNp
YmxlCi0gICAgS0pTOjpOdW1iZXIgdigwKTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4ganNO
dW1iZXIoMCk7CiB9CiAKLUtKUzo6VmFsdWUgT2JqY0luc3RhbmNlOjpib29sZWFuVmFsdWUoKSBj
b25zdAorVmFsdWVJbXAgKk9iamNJbnN0YW5jZTo6Ym9vbGVhblZhbHVlKCkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogIEltcGxlbWVudCBzb21ldGhpbmcgc2Vuc2libGUKLSAgICBLSlM6OkJvb2xl
YW4gdigoYm9vbCkwKTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4ganNCb29sZWFuKGZhbHNl
KTsKIH0KIAotS0pTOjpWYWx1ZSBPYmpjSW5zdGFuY2U6OnZhbHVlT2YoKSBjb25zdCAKK1ZhbHVl
SW1wICpPYmpjSW5zdGFuY2U6OnZhbHVlT2YoKSBjb25zdCAKIHsKICAgICByZXR1cm4gc3RyaW5n
VmFsdWUoKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50
aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL29iamMvb2JqY19ydW50aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAt
cCAtdSAtcjEuMTIgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAk3IEF1ZyAyMDA1
IDA2OjE3OjM0IC0wMDAwCTEuMTIKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y19ydW50aW1lLmgJOCBBdWcgMjAwNSAwMTowMDo0MyAtMDAwMApAQCAtMzQsNyArMzQsNiBAQAog
CiBuYW1lc3BhY2UgS0pTCiB7Ci1jbGFzcyBWYWx1ZTsKIAogbmFtZXNwYWNlIEJpbmRpbmdzCiB7
CkBAIC04NCw4ICs4Myw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH07
CiAgICAgICAgIAotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25z
dCBJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IEtKUzo6VmFsdWUgJmFWYWx1ZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZVRvSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsIFZh
bHVlSW1wICphVmFsdWUpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciAqbmFt
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZSgpIGNvbnN0OwpAQCAtMTQ3
LDQxICsxNDYsNDEgQEAgcHVibGljOgogCiAgICAgT2JqY0FycmF5ICZvcGVyYXRvcj0oY29uc3Qg
T2JqY0FycmF5ICZvdGhlcik7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlQXQoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3QgS0pTOjpWYWx1ZSAm
YVZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEtKUzo6VmFsdWUgdmFsdWVBdChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCwgVmFsdWVJbXAg
KmFWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdmFsdWVBdChFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TGVuZ3RoKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB+T2JqY0FycmF5KCk7CiAK
ICAgICBPYmplY3RTdHJ1Y3RQdHIgZ2V0T2JqY0FycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5
OyB9CiAKLSAgICBzdGF0aWMgS0pTOjpWYWx1ZSBjb252ZXJ0T2JqY0FycmF5VG9BcnJheSAoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFN0cnVjdFB0ciBhbk9iamVjdCk7CisgICAgc3RhdGlj
IFZhbHVlSW1wICpjb252ZXJ0T2JqY0FycmF5VG9BcnJheSAoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RTdHJ1Y3RQdHIgYW5PYmplY3QpOwogCiBwcml2YXRlOgogICAgIE9iamVjdFN0cnVjdFB0ciBf
YXJyYXk7CiB9OwogCi1jbGFzcyBPYmpjRmFsbGJhY2tPYmplY3RJbXAgOiBwdWJsaWMgS0pTOjpP
YmplY3RJbXAgeworY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIDogcHVibGljIE9iamVjdElt
cCB7CiBwdWJsaWM6CiAgICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKE9iamVjdEltcCAqcHJvdG8p
OwogICAgICAgICAKLSAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoT2JqY0luc3RhbmNlICppLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKKyAgICBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXAoT2JqY0luc3RhbmNlICppLCBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7CiAK
ICAgICBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgICAg
ICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogCiAgICAg
dmlydHVhbCBib29sIGNhblB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKTsKIAogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGRl
ZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGludCkgY29uc3Q7CisgICAgdmlydHVh
bCBWYWx1ZUltcCAqZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25z
dDsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHRv
Qm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwpAQCAtMTkwLDcgKzE4OSw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiAgICAgT2JqY0luc3RhbmNl
ICpfaW5zdGFuY2U7Ci0gICAgS0pTOjpJZGVudGlmaWVyIF9pdGVtOworICAgIElkZW50aWZpZXIg
X2l0ZW07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwpJbmRleDogSmF2YVNjcmlwdENv
cmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXAgLXUgLXIxLjE4IEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9v
YmpjL29iamNfcnVudGltZS5tbQk3IEF1ZyAyMDA1IDA2OjE3OjM0IC0wMDAwCTEuMTgKKysrIEph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLm1tCTggQXVnIDIwMDUgMDE6
MDA6NDMgLTAwMDAKQEAgLTEwMiw5ICsxMDIsOSBAQCBSdW50aW1lVHlwZSBPYmpjRmllbGQ6OnR5
cGUoKSBjb25zdCAKICAgICByZXR1cm4gIiI7CiB9CiAKLVZhbHVlIE9iamNGaWVsZDo6dmFsdWVG
cm9tSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5j
ZSkgY29uc3QKK1ZhbHVlSW1wICpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdAogewotICAgIFZhbHVlIGFW
YWx1ZTsKKyAgICBWYWx1ZUltcCAqYVZhbHVlOwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0
aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAg
ICBpZCBvYmpjVmFsdWUgPSBuaWw7CiAKQEAgLTExNSw3ICsxMTUsNyBAQCBWYWx1ZSBPYmpjRmll
bGQ6OnZhbHVlRnJvbUluc3RhbmNlKEtKUzo6CiAgICAgICAgIAogICAgIE5TX0hBTkRMRVIKICAg
ICAgICAgCi0gICAgICAgIFZhbHVlIGV4Y2VwdGlvblZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVj
LCBHZW5lcmFsRXJyb3IsIFtbbG9jYWxFeGNlcHRpb24gcmVhc29uXSBsb3NzeUNTdHJpbmddKTsK
KyAgICAgICAgVmFsdWVJbXAgKmV4Y2VwdGlvblZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVjLCBH
ZW5lcmFsRXJyb3IsIFtbbG9jYWxFeGNlcHRpb24gcmVhc29uXSBsb3NzeUNTdHJpbmddKTsKICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgCiAgICAg
TlNfRU5ESEFORExFUgpAQCAtMTI4LDExICsxMjgsMTEgQEAgVmFsdWUgT2JqY0ZpZWxkOjp2YWx1
ZUZyb21JbnN0YW5jZShLSlM6OgogICAgIHJldHVybiBhVmFsdWU7CiB9CiAKLXN0YXRpYyBpZCBj
b252ZXJ0VmFsdWVUb09iamNPYmplY3QgKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSkKK3N0YXRpYyBpZCBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QgKEV4ZWNT
dGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVlKQogewogICAgIGNvbnN0IEJpbmRpbmdzOjpSb290
T2JqZWN0ICpyb290ID0gcm9vdEZvckludGVycHJldGVyKGV4ZWMtPmludGVycHJldGVyKCkpOwog
ICAgIGlmICghcm9vdCkgewotICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCAqbmV3Um9vdCA9
IG5ldyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KDApOworICAgICAgICBCaW5kaW5nczo6Um9v
dE9iamVjdCAqbmV3Um9vdCA9IG5ldyBCaW5kaW5nczo6Um9vdE9iamVjdCgwKTsKICAgICAgICAg
bmV3Um9vdC0+c2V0SW50ZXJwcmV0ZXIgKGV4ZWMtPmludGVycHJldGVyKCkpOwogICAgICAgICBy
b290ID0gbmV3Um9vdDsKICAgICB9CkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIGlkIGNvbnZl
cnRWYWx1ZVRvT2JqY09iamVjdCAoS0pTOgogfQogCiAKLXZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1
ZVRvSW5zdGFuY2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5j
ZSwgY29uc3QgS0pTOjpWYWx1ZSAmYVZhbHVlKSBjb25zdAordm9pZCBPYmpjRmllbGQ6OnNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSwg
VmFsdWVJbXAgKmFWYWx1ZSkgY29uc3QKIHsKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGlj
X2Nhc3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAgICAg
aWQgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QoZXhlYywgYVZhbHVlKTsKQEAgLTE1
Miw3ICsxNTIsNyBAQCB2b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEtKUzo6CiAK
ICAgICBOU19IQU5ETEVSCiAgICAgICAgIAotICAgICAgICBWYWx1ZSBhVmFsdWUgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgW1tsb2NhbEV4Y2VwdGlvbiByZWFzb25dIGxvc3N5
Q1N0cmluZ10pOworICAgICAgICBWYWx1ZUltcCAqYVZhbHVlID0gRXJyb3I6OmNyZWF0ZShleGVj
LCBHZW5lcmFsRXJyb3IsIFtbbG9jYWxFeGNlcHRpb24gcmVhc29uXSBsb3NzeUNTdHJpbmddKTsK
ICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGFWYWx1ZSk7CiAgICAgICAgIAogICAgIE5TX0VO
REhBTkRMRVIKQEAgLTE4NiwxNiArMTg2LDE2IEBAIE9iamNBcnJheSAmT2JqY0FycmF5OjpvcGVy
YXRvcj0oY29uc3QgT2IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQgT2JqY0FycmF5Ojpz
ZXRWYWx1ZUF0KEtKUzo6RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0
IEtKUzo6VmFsdWUgJmFWYWx1ZSkgY29uc3QKK3ZvaWQgT2JqY0FycmF5OjpzZXRWYWx1ZUF0KEV4
ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBWYWx1ZUltcCAqYVZhbHVlKSBjb25z
dAogewogICAgIGlmICghW19hcnJheSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc2Vy
dE9iamVjdDphdEluZGV4OildKSB7Ci0gICAgICAgIE9iamVjdCBlcnJvciA9IEVycm9yOjpjcmVh
dGUoZXhlYywgVHlwZUVycm9yLCAiQXJyYXkgaXMgbm90IG11dGFibGUuIik7CisgICAgICAgIE9i
amVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgIkFycmF5IGlz
IG5vdCBtdXRhYmxlLiIpOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGluZGV4ID4gW19hcnJheSBjb3VudF0pIHsK
LSAgICAgICAgT2JqZWN0IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAi
SW5kZXggZXhjZWVkcyBhcnJheSBzaXplLiIpOworICAgICAgICBPYmplY3RJbXAgKmVycm9yID0g
RXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAiSW5kZXggZXhjZWVkcyBhcnJheSBzaXpl
LiIpOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjEwLDMyICsyMTAsMzIgQEAgTlNfRFVSSU5HCiAKIE5TX0hBTkRMRVIKICAg
ICAKLSAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwg
Ik9iamVjdGl2ZUMgZXhjZXB0aW9uLiIpOworICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVjdGl2ZUMgZXhjZXB0aW9uLiIpOwogICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAgICAgCiBOU19FTkRIQU5ETEVSCiB9CiAKIAot
S0pTOjpWYWx1ZSBPYmpjQXJyYXk6OnZhbHVlQXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHVuc2ln
bmVkIGludCBpbmRleCkgY29uc3QKK1ZhbHVlSW1wICpPYmpjQXJyYXk6OnZhbHVlQXQoRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgT2JqZWN0U3RydWN0
UHRyIG9iaiA9IDA7Ci0gICAgT2JqZWN0IGVycm9yOwotICAgIHZvbGF0aWxlIGJvb2wgaGF2ZUVy
cm9yID0gZmFsc2U7Ci0gICAgCiAgICAgaWYgKGluZGV4ID4gW19hcnJheSBjb3VudF0pIHsKLSAg
ICAgICAgT2JqZWN0IGVycm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAiSW5k
ZXggZXhjZWVkcyBhcnJheSBzaXplLiIpOworICAgICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLCAiSW5kZXggZXhjZWVkcyBhcnJheSBzaXplLiIp
OwogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgICByZXR1cm4gZXJy
b3I7CiAgICAgfQogICAgIAorICAgIE9iamVjdFN0cnVjdFB0ciBvYmogPSAwOworICAgIE9iamVj
dEltcCAqIHZvbGF0aWxlIGVycm9yOworICAgIHZvbGF0aWxlIGJvb2wgaGF2ZUVycm9yID0gZmFs
c2U7CisKIE5TX0RVUklORwogCiAgICAgb2JqID0gW19hcnJheSBvYmplY3RBdEluZGV4OmluZGV4
XTsKICAgICAKIE5TX0hBTkRMRVIKICAgICAKLSAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk9iamVjdGl2ZUMgZXhjZXB0aW9uLiIpOworICAgIGVy
cm9yID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsICJPYmplY3RpdmVDIGV4Y2Vw
dGlvbi4iKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgIGhhdmVFcnJvciA9
IHRydWU7CiAgICAgCkBAIC0yNzUsNyArMjc1LDcgQEAgYm9vbCBPYmpjRmFsbGJhY2tPYmplY3RJ
bXA6OmdldE93blByb3BlcgogfQogCiB2b2lkIE9iamNGYWxsYmFja09iamVjdEltcDo6cHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAg
ICAgICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQorICAgICAgICAgICAgICAgICBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogfQogCkBAIC0zMDUsMTEgKzMwNSwxMSBAQCBi
b29sIE9iamNGYWxsYmFja09iamVjdEltcDo6aW1wbGVtZW50c0NhCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBWYWx1ZSByZXN1bHQgPSBVbmRlZmlu
ZWQoKTsKKyAgICBWYWx1ZUltcCAqcmVzdWx0ID0gVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgUnVu
dGltZU9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KHRoaXNP
YmouaW1wKCkpOworICAgIFJ1bnRpbWVPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PFJ1bnRp
bWVPYmplY3RJbXAqPih0aGlzT2JqKTsKICAgICBpZiAoaW1wKSB7CiAgICAgICAgIEluc3RhbmNl
ICppbnN0YW5jZSA9IGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOwogICAgICAgICAKQEAgLTM0
MCw3ICszNDAsNyBAQCBib29sIE9iamNGYWxsYmFja09iamVjdEltcDo6ZGVsZXRlUHJvcGVyCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1
bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGludCkgY29uc3QKK1ZhbHVlSW1wICpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgaGlu
dCkgY29uc3QKIHsKICAgICByZXR1cm4gX2luc3RhbmNlLT5nZXRWYWx1ZU9mVW5kZWZpbmVkRmll
bGQoZXhlYywgX2l0ZW0sIGhpbnQpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
b2JqYy9vYmpjX3V0aWxpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40CmRpZmYgLXAgLXUgLXIxLjQgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpj
X3V0aWxpdHkuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHku
aAkxMiBGZWIgMjAwNSAwMDo1ODoxMyAtMDAwMAkxLjQKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL29iamMvb2JqY191dGlsaXR5LmgJOCBBdWcgMjAwNSAwMTowMDo0MyAtMDAwMApAQCAtNjgs
MTQgKzY4LDE0IEBAIHR5cGVkZWYgZW51bSB7CiAKIGNsYXNzIFJvb3RPYmplY3Q7CiAKLU9iamNW
YWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSAoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IEtKUzo6VmFsdWUgJnZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpOwotVmFsdWUgY29udmVydE5T
U3RyaW5nVG9TdHJpbmcoTlNTdHJpbmcgKm5zc3RyaW5nKTsKLVZhbHVlIGNvbnZlcnRPYmpjVmFs
dWVUb1ZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgdm9pZCAqYnVmZmVyLCBPYmpjVmFsdWVU
eXBlIHR5cGUpOwotT2JqY1ZhbHVlVHlwZSBvYmpjVmFsdWVUeXBlRm9yVHlwZSAoY29uc3QgY2hh
ciAqdHlwZSk7CitPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0YXRlICpl
eGVjLCBWYWx1ZUltcCAqdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSk7CitWYWx1ZUltcCAqY29u
dmVydE5TU3RyaW5nVG9TdHJpbmcoTlNTdHJpbmcgKm5zc3RyaW5nKTsKK1ZhbHVlSW1wICpjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIHZvaWQgKmJ1ZmZlciwgT2JqY1Zh
bHVlVHlwZSB0eXBlKTsKK09iamNWYWx1ZVR5cGUgb2JqY1ZhbHVlVHlwZUZvclR5cGUoY29uc3Qg
Y2hhciAqdHlwZSk7CiAKIHZvaWQgSlNNZXRob2ROYW1lVG9PYmpDTWV0aG9kTmFtZShjb25zdCBj
aGFyICpuYW1lLCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKIAotdm9pZCAqY3Jl
YXRlT2JqY0luc3RhbmNlRm9yVmFsdWUgKGNvbnN0IE9iamVjdCAmdmFsdWUsIGNvbnN0IFJvb3RP
YmplY3QgKm9yaWdpbiwgY29uc3QgUm9vdE9iamVjdCAqY3VycmVudCk7Cit2b2lkICpjcmVhdGVP
YmpjSW5zdGFuY2VGb3JWYWx1ZShPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBSb290T2JqZWN0ICpv
cmlnaW4sIGNvbnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpOwogCiB9IC8vIG5hbWVzcGFjZSBCaW5k
aW5ncwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfdXRpbGl0eS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
b2JqYy9vYmpjX3V0aWxpdHkubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtcCAt
dSAtcjEuMTggSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW0KLS0t
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY191dGlsaXR5Lm1tCTI5IEFwciAyMDA1
IDAwOjIyOjU1IC0wMDAwCTEuMTgKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2Jq
Y191dGlsaXR5Lm1tCTggQXVnIDIwMDUgMDE6MDA6NDQgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CiAgICAgICAgIG1vdmVUbyRfICAgICAgICAg
ICAgICAgIG1vdmVUbyQkJF8KICAgICBAcmVzdWx0IFJldHVybnMgdGhlIG5hbWUgdG8gYmUgdXNl
ZCB0byByZXByZXNlbnQgdGhlIHNwZWNpZmljZWQgc2VsZWN0b3IgaW4gdGhlCiAqLwotdm9pZCBL
SlM6OkJpbmRpbmdzOjpKU01ldGhvZE5hbWVUb09iakNNZXRob2ROYW1lKGNvbnN0IGNoYXIgKm5h
bWUsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbikKK3ZvaWQgQmluZGluZ3M6OkpTTWV0
aG9kTmFtZVRvT2JqQ01ldGhvZE5hbWUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqYnVmZmVyLCB1
bnNpZ25lZCBpbnQgbGVuKQogewogICAgIGNvbnN0IGNoYXIgKm5wID0gbmFtZTsKICAgICBjaGFy
ICpicDsKQEAgLTg3LDIyICs4NywyMiBAQCB2b2lkIEtKUzo6QmluZGluZ3M6OkpTTWV0aG9kTmFt
ZVRvT2JqQ01lCiAgICAgW10sIG90aGVyICAgICAgIGV4Y2VwdGlvbgogCiAqLwotT2JqY1ZhbHVl
IEtKUzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlIChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIE9iamNWYWx1ZVR5cGUgdHlwZSkKK09iamNW
YWx1ZSBCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywg
VmFsdWVJbXAgKnZhbHVlLCBPYmpjVmFsdWVUeXBlIHR5cGUpCiB7CiAgICAgT2JqY1ZhbHVlIHJl
c3VsdDsKICAgICBkb3VibGUgZCA9IDA7Ci0gICAKLSAgICBpZiAodmFsdWUudHlwZSgpID09IE51
bWJlclR5cGUgfHwgdmFsdWUudHlwZSgpID09IFN0cmluZ1R5cGUgfHwgdmFsdWUudHlwZSgpID09
IEJvb2xlYW5UeXBlKQotCWQgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKworICAgIGlmICh2YWx1
ZS0+aXNOdW1iZXIoKSB8fCB2YWx1ZS0+aXNTdHJpbmcoKSB8fCB2YWx1ZS0+aXNCb29sZWFuKCkp
CisJZCA9IHZhbHVlLT50b051bWJlcihleGVjKTsKIAkKICAgICBzd2l0Y2ggKHR5cGUpewogICAg
ICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7Ci0JICAgIEtKUzo6SW50ZXJwcmV0ZXIgKm9yaWdp
bkludGVycHJldGVyID0gZXhlYy0+aW50ZXJwcmV0ZXIoKTsKKwkgICAgSW50ZXJwcmV0ZXIgKm9y
aWdpbkludGVycHJldGVyID0gZXhlYy0+aW50ZXJwcmV0ZXIoKTsKICAgICAgICAgICAgIGNvbnN0
IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW5FeGVjdXRpb25Db250ZXh0ID0gcm9vdEZvcklu
dGVycHJldGVyKG9yaWdpbkludGVycHJldGVyKTsKIAotCSAgICBLSlM6OkludGVycHJldGVyICpp
bnRlcnByZXRlciA9IDA7CisJICAgIEludGVycHJldGVyICppbnRlcnByZXRlciA9IDA7CiAJICAg
IGlmIChvcmlnaW5JbnRlcnByZXRlci0+aXNHbG9iYWxPYmplY3QodmFsdWUpKSB7Ci0JCWludGVy
cHJldGVyID0gb3JpZ2luSW50ZXJwcmV0ZXItPmludGVycHJldGVyRm9yR2xvYmFsT2JqZWN0ICh2
YWx1ZS5pbXAoKSk7CisJCWludGVycHJldGVyID0gb3JpZ2luSW50ZXJwcmV0ZXItPmludGVycHJl
dGVyRm9yR2xvYmFsT2JqZWN0ICh2YWx1ZSk7CiAJICAgIH0KIAogCSAgICBpZiAoIWludGVycHJl
dGVyKQpAQCAtMTEwLDcgKzExMCw3IEBAIE9iamNWYWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0
VmFsdWVUb08KIAkJCiAgICAgICAgICAgICBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqZXhl
Y3V0aW9uQ29udGV4dCA9IHJvb3RGb3JJbnRlcnByZXRlcihpbnRlcnByZXRlcik7CiAgICAgICAg
ICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBCaW5kaW5nczo6
Um9vdE9iamVjdCAqbmV3RXhlY3V0aW9uQ29udGV4dCA9IG5ldyBLSlM6OkJpbmRpbmdzOjpSb290
T2JqZWN0KDApOworICAgICAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0ICpuZXdFeGVj
dXRpb25Db250ZXh0ID0gbmV3IEJpbmRpbmdzOjpSb290T2JqZWN0KDApOwogICAgICAgICAgICAg
ICAgIG5ld0V4ZWN1dGlvbkNvbnRleHQtPnNldEludGVycHJldGVyIChpbnRlcnByZXRlcik7CiAg
ICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IG5ld0V4ZWN1dGlvbkNvbnRleHQ7CiAg
ICAgICAgICAgICB9CkBAIC0xNjQsMTQgKzE2NCwxNCBAQCBPYmpjVmFsdWUgS0pTOjpCaW5kaW5n
czo6Y29udmVydFZhbHVlVG9PCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmFsdWUgS0pTOjpC
aW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcoTlNTdHJpbmcgKm5zc3RyaW5nKQorVmFs
dWVJbXAgKkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhOU1N0cmluZyAqbnNzdHJp
bmcpCiB7CiAgICAgdW5pY2hhciAqY2hhcnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtu
c3N0cmluZyBsZW5ndGhdOwogICAgIGNoYXJzID0gKHVuaWNoYXIgKiltYWxsb2Moc2l6ZW9mKHVu
aWNoYXIpKmxlbmd0aCk7CiAgICAgW25zc3RyaW5nIGdldENoYXJhY3RlcnM6Y2hhcnNdOwotICAg
IFVTdHJpbmcgdSgoY29uc3QgS0pTOjpVQ2hhciopY2hhcnMsIGxlbmd0aCk7Ci0gICAgVmFsdWUg
YVZhbHVlID0gU3RyaW5nICh1KTsKKyAgICBVU3RyaW5nIHUoKGNvbnN0IFVDaGFyKiljaGFycywg
bGVuZ3RoKTsKKyAgICBWYWx1ZUltcCAqYVZhbHVlID0gU3RyaW5nICh1KTsKICAgICBmcmVlKCh2
b2lkICopY2hhcnMpOwogICAgIHJldHVybiBhVmFsdWU7CiB9CkBAIC0xOTIsOSArMTkyLDkgQEAg
VmFsdWUgS0pTOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdAogICAgIG90aGVyICAgICAg
ICAgICBzaG91bGQgbm90IGhhcHBlbgogCiAqLwotVmFsdWUgS0pTOjpCaW5kaW5nczo6Y29udmVy
dE9iamNWYWx1ZVRvVmFsdWUgKEtKUzo6RXhlY1N0YXRlICpleGVjLCB2b2lkICpidWZmZXIsIE9i
amNWYWx1ZVR5cGUgdHlwZSkKK1ZhbHVlSW1wICpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRv
VmFsdWUgKEV4ZWNTdGF0ZSAqZXhlYywgdm9pZCAqYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUp
CiB7Ci0gICAgVmFsdWUgYVZhbHVlOworICAgIFZhbHVlSW1wICphVmFsdWUgPSBOVUxMOwogCiAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6CkBAIC0yMjQs
MTEgKzIyNCwxMSBAQCBWYWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9WCiAg
ICAgICAgICAgICAgICAgICAgIGFWYWx1ZSA9IE51bWJlcihbKm9iaiBkb3VibGVWYWx1ZV0pOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChbKm9iaiBpc0tpbmRP
ZkNsYXNzOltOU0FycmF5IGNsYXNzXV0pIHsKLSAgICAgICAgICAgICAgICAgICAgYVZhbHVlID0g
T2JqZWN0KG5ldyBSdW50aW1lQXJyYXlJbXAoZXhlYywgbmV3IE9iamNBcnJheSAoKm9iaikpKTsK
KyAgICAgICAgICAgICAgICAgICAgYVZhbHVlID0gbmV3IFJ1bnRpbWVBcnJheUltcChleGVjLCBu
ZXcgT2JqY0FycmF5ICgqb2JqKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKFsqb2JqIGlzS2luZE9mQ2xhc3M6W1dlYlNjcmlwdE9iamVjdCBjbGFzc11dKSB7
CiAgICAgICAgICAgICAgICAgICAgIFdlYlNjcmlwdE9iamVjdCAqanNvYmplY3QgPSAoV2ViU2Ny
aXB0T2JqZWN0ICopKm9iajsKLSAgICAgICAgICAgICAgICAgICAgYVZhbHVlID0gT2JqZWN0KFtq
c29iamVjdCBfaW1wXSk7CisgICAgICAgICAgICAgICAgICAgIGFWYWx1ZSA9IFtqc29iamVjdCBf
aW1wXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKm9iaiA9
PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCBWYWx1ZSBLSlM6OkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9WCiB9CiAK
IAotT2JqY1ZhbHVlVHlwZSBLSlM6OkJpbmRpbmdzOjpvYmpjVmFsdWVUeXBlRm9yVHlwZSAoY29u
c3QgY2hhciAqdHlwZSkKK09iamNWYWx1ZVR5cGUgQmluZGluZ3M6Om9iamNWYWx1ZVR5cGVGb3JU
eXBlIChjb25zdCBjaGFyICp0eXBlKQogewogICAgIGludCB0eXBlTGVuZ3RoID0gc3RybGVuKHR5
cGUpOwogICAgIE9iamNWYWx1ZVR5cGUgb2JqY1ZhbHVlVHlwZSA9IE9iamNJbnZhbGlkVHlwZTsK
QEAgLTMzMiwxMiArMzMyLDEyIEBAIE9iamNWYWx1ZVR5cGUgS0pTOjpCaW5kaW5nczo6b2JqY1Zh
bHVlVHkKIH0KIAogCi12b2lkICpLSlM6OkJpbmRpbmdzOjpjcmVhdGVPYmpjSW5zdGFuY2VGb3JW
YWx1ZSAoY29uc3QgT2JqZWN0ICZ2YWx1ZSwgY29uc3QgUm9vdE9iamVjdCAqb3JpZ2luLCBjb25z
dCBSb290T2JqZWN0ICpjdXJyZW50KQordm9pZCAqQmluZGluZ3M6OmNyZWF0ZU9iamNJbnN0YW5j
ZUZvclZhbHVlIChPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBSb290T2JqZWN0ICpvcmlnaW4sIGNv
bnN0IFJvb3RPYmplY3QgKmN1cnJlbnQpCiB7Ci0gICAgaWYgKHZhbHVlLnR5cGUoKSAhPSBPYmpl
Y3RUeXBlKQorICAgIGlmICghdmFsdWUtPmlzT2JqZWN0KCkpCiAJcmV0dXJuIDA7CiAKLSAgICBP
YmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlLmltcCgpKTsKKyAg
ICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlKTsKICAgICAK
ICAgICByZXR1cm4gW1tbV2ViU2NyaXB0T2JqZWN0IGFsbG9jXSBfaW5pdFdpdGhPYmplY3RJbXA6
aW1wIG9yaWdpbkV4ZWN1dGlvbkNvbnRleHQ6b3JpZ2luIGV4ZWN1dGlvbkNvbnRleHQ6Y3VycmVu
dF0gYXV0b3JlbGVhc2VdOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9h
cnJheV9pbnN0YW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIx
LjE1IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfaW5zdGFuY2UuaAk3IEF1ZyAyMDA1IDA2OjE3OjM0IC0wMDAwCTEuMTUKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oCTggQXVnIDIwMDUgMDE6MDA6NDQg
LTAwMDAKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5v
bmUpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgdmlydHVhbCBSZWZlcmVuY2VMaXN0
IHByb3BMaXN0KEV4ZWNTdGF0ZSAqZXhlYywgYm9vbCByZWN1cnNpdmUpOwpAQCAtNDksMTAgKzQ5
LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHVuc2lnbmVkIGdldExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGxlbmd0aDsgfQogICAgIAogICAgIHZvaWQgc29ydChFeGVjU3RhdGUgKmV4ZWMpOwot
ICAgIHZvaWQgc29ydChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmY29tcGFyZUZ1bmN0aW9uKTsK
KyAgICB2b2lkIHNvcnQoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKmNvbXBhcmVGdW5jdGlv
bik7CiAgICAgCiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIFZhbHVlIGxlbmd0aEdldHRlcihFeGVj
U3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBWYWx1ZUltcCAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBu
ZXdMZW5ndGgsIEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvYXJyYXlfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDgK
ZGlmZiAtcCAtdSAtcjEuNDggSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAKLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCTcgQXVnIDIwMDUgMDY6MTc6MzUg
LTAwMDAJMS40OAorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJOCBBdWcg
MjAwNSAwMTowMDo0NiAtMDAwMApAQCAtMjAsMTQgKzIwLDE2IEBACiAgKgogICovCiAKLSNpbmNs
dWRlICJ2YWx1ZS5oIgotI2luY2x1ZGUgIm9iamVjdC5oIgotI2luY2x1ZGUgInR5cGVzLmgiCi0j
aW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJvcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiYXJyYXlfb2JqZWN0LmgiCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogI2luY2x1ZGUgImVy
cm9yX29iamVjdC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiaW50ZXJwcmV0
ZXIuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJvcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgInZh
bHVlLmgiCiAKICNpbmNsdWRlICJhcnJheV9vYmplY3QubHV0LmgiCiAKQEAgLTYxLDcgKzYzLDcg
QEAgQXJyYXlJbnN0YW5jZUltcDo6QXJyYXlJbnN0YW5jZUltcChPYmplYwogICBMaXN0SXRlcmF0
b3IgaXQgPSBsaXN0LmJlZ2luKCk7CiAgIHVuc2lnbmVkIGwgPSBsZW5ndGg7CiAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsOyArK2kpIHsKLSAgICBzdG9yYWdlW2ldID0gKGl0KyspLmltcCgp
OworICAgIHN0b3JhZ2VbaV0gPSBpdCsrOwogICB9CiB9CiAKQEAgLTcwLDcgKzcyLDcgQEAgQXJy
YXlJbnN0YW5jZUltcDo6fkFycmF5SW5zdGFuY2VJbXAoKQogICBmcmVlKHN0b3JhZ2UpOwogfQog
Ci1WYWx1ZSBBcnJheUluc3RhbmNlSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K1ZhbHVlSW1wICpBcnJheUluc3RhbmNlSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgcmV0dXJuIE51bWJlcihzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlSW1wICo+KHNs
b3Quc2xvdEJhc2UoKSktPmxlbmd0aCk7CiB9CkBAIC04OSw5ICs5MSw4IEBAIGJvb2wgQXJyYXlJ
bnN0YW5jZUltcDo6Z2V0T3duUHJvcGVydHlTbG8KICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoaW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgICBWYWx1ZUltcCAqdiA9IHN0b3JhZ2Vb
aW5kZXhdOwotICAgICAgaWYgKCF2IHx8IHYgPT0gVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmlu
ZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIAorICAgICAgaWYgKCF2IHx8IHYtPmlz
VW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAKICAgICAgIHNsb3Quc2V0
VmFsdWVTbG90KHRoaXMsICZzdG9yYWdlW2luZGV4XSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xMDYsOSArMTA3LDggQEAgYm9vbCBBcnJheUluc3RhbmNlSW1wOjpnZXRPd25Qcm9w
ZXJ0eVNsbwogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGluZGV4IDwgc3RvcmFnZUxlbmd0aCkg
ewogICAgIFZhbHVlSW1wICp2ID0gc3RvcmFnZVtpbmRleF07Ci0gICAgaWYgKCF2IHx8IHYgPT0g
VW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpCisgICAgaWYgKCF2IHx8IHYtPmlzVW5kZWZp
bmVkKCkpCiAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgc2xvdC5zZXRWYWx1ZVNsb3Qo
dGhpcywgJnN0b3JhZ2VbaW5kZXhdKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpAQCAtMTE3LDEw
ICsxMTcsMTAgQEAgYm9vbCBBcnJheUluc3RhbmNlSW1wOjpnZXRPd25Qcm9wZXJ0eVNsbwogfQog
CiAvLyBTcGVjaWFsIGltcGxlbWVudGF0aW9uIG9mIFtbUHV0XV0gLSBzZWUgRUNNQSAxNS40LjUu
MQotdm9pZCBBcnJheUluc3RhbmNlSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2b2lk
IEFycmF5SW5zdGFuY2VJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUpIHsKLSAgICBzZXRMZW5ndGgodmFsdWUudG9V
SW50MzIoZXhlYyksIGV4ZWMpOworICAgIHNldExlbmd0aCh2YWx1ZS0+dG9VSW50MzIoZXhlYyks
IGV4ZWMpOwogICAgIHJldHVybjsKICAgfQogICAKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIEFy
cmF5SW5zdGFuY2VJbXA6OnB1dChFeGVjU3RhdGUgKmV4CiAgIE9iamVjdEltcDo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwogfQogCi12b2lkIEFycmF5SW5zdGFuY2VJbXA6
OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKQordm9pZCBBcnJheUluc3RhbmNlSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCB1
bnNpZ25lZCBpbmRleCwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgaWYgKGluZGV4
IDwgc3BhcnNlQXJyYXlDdXRvZmYgJiYgaW5kZXggPj0gc3RvcmFnZUxlbmd0aCkgewogICAgIHJl
c2l6ZVN0b3JhZ2UoaW5kZXggKyAxKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIEFycmF5SW5z
dGFuY2VJbXA6OnB1dChFeGVjU3RhdGUgKmV4CiAgIH0KIAogICBpZiAoaW5kZXggPCBzdG9yYWdl
TGVuZ3RoKSB7Ci0gICAgc3RvcmFnZVtpbmRleF0gPSB2YWx1ZS5pbXAoKTsKKyAgICBzdG9yYWdl
W2luZGV4XSA9IHZhbHVlOwogICAgIHJldHVybjsKICAgfQogICAKQEAgLTE4OSw3ICsxODksNyBA
QCBSZWZlcmVuY2VMaXN0IEFycmF5SW5zdGFuY2VJbXA6OnByb3BMaXN0CiAgIFJlZmVyZW5jZUxp
c3QgcHJvcGVydGllcyA9IE9iamVjdEltcDo6cHJvcExpc3QoZXhlYyxyZWN1cnNpdmUpOwogCiAg
IC8vIGF2b2lkIGZldGNoaW5nIHRoaXMgZXZlcnkgdGltZSB0aHJvdWdoIHRoZSBsb29wCi0gIFZh
bHVlSW1wICp1bmRlZmluZWQgPSBVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVmaW5lZDsKKyAgVmFs
dWVJbXAgKnVuZGVmaW5lZCA9IGpzVW5kZWZpbmVkKCk7CiAKICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0b3JhZ2VMZW5ndGg7ICsraSkgewogICAgIFZhbHVlSW1wICppbXAgPSBzdG9yYWdl
W2ldOwpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgQXJyYXlJbnN0YW5jZUltcDo6c2V0TGVuZ3Ro
KHVuc2lnbmUKICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgIFJlZmVyZW5jZUxpc3Qg
c3BhcnNlUHJvcGVydGllczsKICAgICAKLSAgICBfcHJvcC5hZGRTcGFyc2VBcnJheVByb3BlcnRp
ZXNUb1JlZmVyZW5jZUxpc3Qoc3BhcnNlUHJvcGVydGllcywgT2JqZWN0KHRoaXMpKTsKKyAgICBf
cHJvcC5hZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3Qoc3BhcnNlUHJvcGVy
dGllcywgdGhpcyk7CiAgICAgCiAgICAgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yIGl0ID0gc3BhcnNl
UHJvcGVydGllcy5iZWdpbigpOwogICAgIHdoaWxlIChpdCAhPSBzcGFyc2VQcm9wZXJ0aWVzLmVu
ZCgpKSB7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ0Zv
clFTb3J0KGNvbnN0CiAgICAgRXhlY1N0YXRlICpleGVjID0gZXhlY0ZvckNvbXBhcmVCeVN0cmlu
Z0ZvclFTb3J0OwogICAgIFZhbHVlSW1wICp2YSA9ICooVmFsdWVJbXAgKiopYTsKICAgICBWYWx1
ZUltcCAqdmIgPSAqKFZhbHVlSW1wICoqKWI7Ci0gICAgaWYgKHZhLT5kaXNwYXRjaFR5cGUoKSA9
PSBVbmRlZmluZWRUeXBlKSB7Ci0gICAgICAgIHJldHVybiB2Yi0+ZGlzcGF0Y2hUeXBlKCkgPT0g
VW5kZWZpbmVkVHlwZSA/IDAgOiAxOworICAgIGlmICh2YS0+aXNVbmRlZmluZWQoKSkgeworICAg
ICAgICByZXR1cm4gdmItPmlzVW5kZWZpbmVkKCkgPyAwIDogMTsKICAgICB9Ci0gICAgaWYgKHZi
LT5kaXNwYXRjaFR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisgICAgaWYgKHZiLT5pc1VuZGVm
aW5lZCgpKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgcmV0dXJuIGNvbXBhcmUo
dmEtPmRpc3BhdGNoVG9TdHJpbmcoZXhlYyksIHZiLT5kaXNwYXRjaFRvU3RyaW5nKGV4ZWMpKTsK
KyAgICByZXR1cm4gY29tcGFyZSh2YS0+dG9TdHJpbmcoZXhlYyksIHZiLT50b1N0cmluZyhleGVj
KSk7CiB9CiAKIHZvaWQgQXJyYXlJbnN0YW5jZUltcDo6c29ydChFeGVjU3RhdGUgKmV4ZWMpCkBA
IC0yOTYsNyArMjk2LDcgQEAgc3RydWN0IENvbXBhcmVXaXRoQ29tcGFyZUZ1bmN0aW9uQXJndW1l
bgogICAgIEV4ZWNTdGF0ZSAqZXhlYzsKICAgICBPYmplY3RJbXAgKmNvbXBhcmVGdW5jdGlvbjsK
ICAgICBMaXN0IGFyZ3VtZW50czsKLSAgICBPYmplY3QgZ2xvYmFsT2JqZWN0OworICAgIE9iamVj
dEltcCAqZ2xvYmFsT2JqZWN0OwogfTsKIAogc3RhdGljIENvbXBhcmVXaXRoQ29tcGFyZUZ1bmN0
aW9uQXJndW1lbnRzICpjb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3VtZW50czsKQEAgLTMw
NywxMCArMzA3LDEwIEBAIHN0YXRpYyBpbnQgY29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Gb3IK
IAogICAgIFZhbHVlSW1wICp2YSA9ICooVmFsdWVJbXAgKiopYTsKICAgICBWYWx1ZUltcCAqdmIg
PSAqKFZhbHVlSW1wICoqKWI7Ci0gICAgaWYgKHZhLT5kaXNwYXRjaFR5cGUoKSA9PSBVbmRlZmlu
ZWRUeXBlKSB7Ci0gICAgICAgIHJldHVybiB2Yi0+ZGlzcGF0Y2hUeXBlKCkgPT0gVW5kZWZpbmVk
VHlwZSA/IDAgOiAxOworICAgIGlmICh2YS0+aXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXR1
cm4gdmItPmlzVW5kZWZpbmVkKCkgPyAwIDogMTsKICAgICB9Ci0gICAgaWYgKHZiLT5kaXNwYXRj
aFR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisgICAgaWYgKHZiLT5pc1VuZGVmaW5lZCgpKSB7
CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTMxOCwxNSArMzE4LDE1IEBAIHN0YXRp
YyBpbnQgY29tcGFyZVdpdGhDb21wYXJlRnVuY3Rpb25Gb3IKICAgICBhcmdzLT5hcmd1bWVudHMu
YXBwZW5kKHZhKTsKICAgICBhcmdzLT5hcmd1bWVudHMuYXBwZW5kKHZiKTsKICAgICBkb3VibGUg
Y29tcGFyZVJlc3VsdCA9IGFyZ3MtPmNvbXBhcmVGdW5jdGlvbi0+Y2FsbAotICAgICAgICAoYXJn
cy0+ZXhlYywgYXJncy0+Z2xvYmFsT2JqZWN0LCBhcmdzLT5hcmd1bWVudHMpLnRvTnVtYmVyKGFy
Z3MtPmV4ZWMpOworICAgICAgICAoYXJncy0+ZXhlYywgYXJncy0+Z2xvYmFsT2JqZWN0LCBhcmdz
LT5hcmd1bWVudHMpLT50b051bWJlcihhcmdzLT5leGVjKTsKICAgICByZXR1cm4gY29tcGFyZVJl
c3VsdCA8IDAgPyAtMSA6IGNvbXBhcmVSZXN1bHQgPiAwID8gMSA6IDA7CiB9CiAKLXZvaWQgQXJy
YXlJbnN0YW5jZUltcDo6c29ydChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmY29tcGFyZUZ1bmN0
aW9uKQordm9pZCBBcnJheUluc3RhbmNlSW1wOjpzb3J0KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICpjb21wYXJlRnVuY3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCA9IHB1c2hVbmRlZmluZWRPYmplY3RzVG9FbmQoZXhlYyk7CiAgICAgCi0gICAgQ29tcGFy
ZVdpdGhDb21wYXJlRnVuY3Rpb25Bcmd1bWVudHMgYXJncyhleGVjLCBjb21wYXJlRnVuY3Rpb24u
aW1wKCkpOworICAgIENvbXBhcmVXaXRoQ29tcGFyZUZ1bmN0aW9uQXJndW1lbnRzIGFyZ3MoZXhl
YywgY29tcGFyZUZ1bmN0aW9uKTsKICAgICBjb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3Vt
ZW50cyA9ICZhcmdzOwogICAgIHFzb3J0KHN0b3JhZ2UsIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCwgc2l6ZW9mKFZhbHVlSW1wICopLCBjb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkZvclFT
b3J0KTsKICAgICBjb21wYXJlV2l0aENvbXBhcmVGdW5jdGlvbkFyZ3VtZW50cyA9IDA7CkBAIC0z
MzQsNyArMzM0LDcgQEAgdm9pZCBBcnJheUluc3RhbmNlSW1wOjpzb3J0KEV4ZWNTdGF0ZSAqZQog
CiB1bnNpZ25lZCBBcnJheUluc3RhbmNlSW1wOjpwdXNoVW5kZWZpbmVkT2JqZWN0c1RvRW5kKEV4
ZWNTdGF0ZSAqZXhlYykKIHsKLSAgICBWYWx1ZUltcCAqdW5kZWZpbmVkID0gVW5kZWZpbmVkSW1w
OjpzdGF0aWNVbmRlZmluZWQ7CisgICAgVmFsdWVJbXAgKnVuZGVmaW5lZCA9IGpzVW5kZWZpbmVk
KCk7CiAKICAgICB1bnNpZ25lZCBvID0gMDsKICAgICAKQEAgLTM0OCw3ICszNDgsNyBAQCB1bnNp
Z25lZCBBcnJheUluc3RhbmNlSW1wOjpwdXNoVW5kZWZpbmVkCiAgICAgfQogICAgIAogICAgIFJl
ZmVyZW5jZUxpc3Qgc3BhcnNlUHJvcGVydGllczsKLSAgICBfcHJvcC5hZGRTcGFyc2VBcnJheVBy
b3BlcnRpZXNUb1JlZmVyZW5jZUxpc3Qoc3BhcnNlUHJvcGVydGllcywgT2JqZWN0KHRoaXMpKTsK
KyAgICBfcHJvcC5hZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3Qoc3BhcnNl
UHJvcGVydGllcywgdGhpcyk7CiAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gbyArIHNwYXJzZVBy
b3BlcnRpZXMubGVuZ3RoKCk7CiAKICAgICBpZiAobmV3TGVuZ3RoID4gc3RvcmFnZUxlbmd0aCkg
ewpAQCAtMzU4LDcgKzM1OCw3IEBAIHVuc2lnbmVkIEFycmF5SW5zdGFuY2VJbXA6OnB1c2hVbmRl
ZmluZWQKICAgICBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgaXQgPSBzcGFyc2VQcm9wZXJ0aWVzLmJl
Z2luKCk7CiAgICAgd2hpbGUgKGl0ICE9IHNwYXJzZVByb3BlcnRpZXMuZW5kKCkpIHsKICAgICAg
IFJlZmVyZW5jZSByZWYgPSBpdCsrOwotICAgICAgc3RvcmFnZVtvXSA9IHJlZi5nZXRWYWx1ZShl
eGVjKS5pbXAoKTsKKyAgICAgIHN0b3JhZ2Vbb10gPSByZWYuZ2V0VmFsdWUoZXhlYyk7CiAgICAg
ICBPYmplY3RJbXA6OmRlbGV0ZVByb3BlcnR5KGV4ZWMsIHJlZi5nZXRQcm9wZXJ0eU5hbWUoZXhl
YykpOwogICAgICAgbysrOwogICAgIH0KQEAgLTM5OCw3ICszOTgsNiBAQCBBcnJheVByb3RvdHlw
ZUltcDo6QXJyYXlQcm90b3R5cGVJbXAoRXhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0UHJvdG90eXBlSW1wICpvYmpQcm90bykKICAgOiBBcnJheUluc3RhbmNl
SW1wKG9ialByb3RvLCAwKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBzZXRJbnRlcm5h
bFZhbHVlKE51bGwoKSk7CiB9CiAKQEAgLTQxMSwxMCArNDEwLDkgQEAgYm9vbCBBcnJheVByb3Rv
dHlwZUltcDo6Z2V0T3duUHJvcGVydHlTbAogCiBBcnJheVByb3RvRnVuY0ltcDo6QXJyYXlQcm90
b0Z1bmNJbXAoRXhlY1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGxlbikKICAgOiBJbnRlcm5hbEZ1
bmN0aW9uSW1wKAotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpLmltcCgpKQor
ICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpKQogICAgICksIGlkKGkpCiB7Ci0g
IFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSxOdW1i
ZXIobGVuKSxEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIApAQCAtNDI0LDE5ICs0
MjIsMTggQEAgYm9vbCBBcnJheVByb3RvRnVuY0ltcDo6aW1wbGVtZW50c0NhbGwoKQogfQogCiAv
LyBFQ01BIDE1LjQuNAotVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQXJyYXlQ
cm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdGhp
c09iai5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUpLnRvVUludDMyKGV4ZWMpOwotICBPYmpl
Y3RJbXAgKnRoaXNJbXAgPSB0aGlzT2JqLmltcCgpOworICB1bnNpZ25lZCBsZW5ndGggPSB0aGlz
T2JqLT5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUpLT50b1VJbnQzMihleGVjKTsKIAotICBW
YWx1ZSByZXN1bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQ7CiAgIAogICBzd2l0Y2ggKGlkKSB7CiAg
IGNhc2UgVG9Mb2NhbGVTdHJpbmc6CiAgIGNhc2UgVG9TdHJpbmc6CiAKLSAgICBpZiAoIXRoaXNP
YmouaW5oZXJpdHMoJkFycmF5SW5zdGFuY2VJbXA6OmluZm8pKSB7Ci0gICAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmQXJyYXlJbnN0YW5jZUltcDo6aW5mbykpIHsKKyAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKICAgICAgIHJldHVybiBlcnI7CiAgICAgfQpAQCAtNDQ2LDI0ICs0NDMsMjIgQEAgVmFs
dWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgIFVTdHJpbmcgc2VwYXJh
dG9yID0gIiwiOwogICAgIFVTdHJpbmcgc3RyID0gIiI7CiAKLSAgICBpZiAoYXJnc1swXS50eXBl
KCkgIT0gVW5kZWZpbmVkVHlwZSkKLSAgICAgIHNlcGFyYXRvciA9IGFyZ3NbMF0udG9TdHJpbmco
ZXhlYyk7CisgICAgaWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKQorICAgICAgc2VwYXJhdG9y
ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7
IGsgPCBsZW5ndGg7IGsrKykgewogICAgICAgaWYgKGsgPj0gMSkKICAgICAgICAgc3RyICs9IHNl
cGFyYXRvcjsKICAgICAgIAotICAgICAgVmFsdWUgZWxlbWVudCA9IHRoaXNPYmouZ2V0KGV4ZWMs
IGspOwotICAgICAgaWYgKGVsZW1lbnQudHlwZSgpID09IFVuZGVmaW5lZFR5cGUgfHwgZWxlbWVu
dC50eXBlKCkgPT0gTnVsbFR5cGUpCisgICAgICBWYWx1ZUltcCAqZWxlbWVudCA9IHRoaXNPYmot
PmdldChleGVjLCBrKTsKKyAgICAgIGlmIChlbGVtZW50LT5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgYm9vbCBmYWxsYmFjayA9IGZhbHNlOwogICAgICAg
aWYgKGlkID09IFRvTG9jYWxlU3RyaW5nKSB7Ci0gICAgICAgIE9iamVjdCBvID0gZWxlbWVudC50
b09iamVjdChleGVjKTsKLSAgICAgICAgT2JqZWN0IGNvbnZlcnNpb25GdW5jdGlvbiA9Ci0gICAg
ICAgICAgT2JqZWN0OjpkeW5hbWljQ2FzdChvLmdldChleGVjLCB0b0xvY2FsZVN0cmluZ1Byb3Bl
cnR5TmFtZSkpOwotICAgICAgICBpZiAoY29udmVyc2lvbkZ1bmN0aW9uLmlzVmFsaWQoKSAmJgot
ICAgICAgICAgICAgY29udmVyc2lvbkZ1bmN0aW9uLmltcGxlbWVudHNDYWxsKCkpIHsKLSAgICAg
ICAgICBzdHIgKz0gY29udmVyc2lvbkZ1bmN0aW9uLmNhbGwoZXhlYywgbywgTGlzdCgpKS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgT2JqZWN0SW1wICpvID0gZWxlbWVudC0+dG9PYmplY3QoZXhl
Yyk7CisgICAgICAgIFZhbHVlSW1wICpjb252ZXJzaW9uRnVuY3Rpb24gPSBvLT5nZXQoZXhlYywg
dG9Mb2NhbGVTdHJpbmdQcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoY29udmVyc2lvbkZ1bmN0
aW9uLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihjb252ZXJzaW9uRnVu
Y3Rpb24pLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAgICAgc3RyICs9IHN0YXRpY19jYXN0
PE9iamVjdEltcCAqPihjb252ZXJzaW9uRnVuY3Rpb24pLT5jYWxsKGV4ZWMsIG8sIExpc3QoKSkt
PnRvU3RyaW5nKGV4ZWMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIC8vIHRyeSB0b1N0
cmluZygpIGZhbGxiYWNrCiAgICAgICAgICAgZmFsbGJhY2sgPSB0cnVlOwpAQCAtNDcxLDIzICs0
NjYsMTkgQEAgVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgICAg
fQogCiAgICAgICBpZiAoaWQgPT0gVG9TdHJpbmcgfHwgaWQgPT0gSm9pbiB8fCBmYWxsYmFjaykg
ewotICAgICAgICBpZiAoZWxlbWVudC50eXBlKCkgPT0gT2JqZWN0VHlwZSkgewotICAgICAgICAg
IE9iamVjdCBvID0gT2JqZWN0OjpkeW5hbWljQ2FzdChlbGVtZW50KTsKLSAgICAgICAgICBPYmpl
Y3QgY29udmVyc2lvbkZ1bmN0aW9uID0KLSAgICAgICAgICAgIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
by5nZXQoZXhlYywgdG9TdHJpbmdQcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICBpZiAoY29udmVy
c2lvbkZ1bmN0aW9uLmlzVmFsaWQoKSAmJgotICAgICAgICAgICAgICBjb252ZXJzaW9uRnVuY3Rp
b24uaW1wbGVtZW50c0NhbGwoKSkgewotICAgICAgICAgICAgc3RyICs9IGNvbnZlcnNpb25GdW5j
dGlvbi5jYWxsKGV4ZWMsIG8sIExpc3QoKSkudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGlmIChl
bGVtZW50LT5pc09iamVjdCgpKSB7CisgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KGVsZW1lbnQpOworICAgICAgICAgIFZhbHVlSW1wICpjb252ZXJzaW9u
RnVuY3Rpb24gPSBvLT5nZXQoZXhlYywgdG9TdHJpbmdQcm9wZXJ0eU5hbWUpOworICAgICAgICAg
IGlmIChjb252ZXJzaW9uRnVuY3Rpb24tPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KGNvbnZlcnNpb25GdW5jdGlvbiktPmltcGxlbWVudHNDYWxsKCkpIHsKKyAgICAgICAg
ICAgIHN0ciArPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oY29udmVyc2lvbkZ1bmN0aW9uKS0+
Y2FsbChleGVjLCBvLCBMaXN0KCkpLT50b1N0cmluZyhleGVjKTsKICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgVVN0cmluZyBtc2cgPSAiQ2FuJ3QgY29udmVydCAiICsgby5jbGFzc05h
bWUoKSArCi0gICAgICAgICAgICAgICIgb2JqZWN0IHRvIHN0cmluZyI7Ci0gICAgICAgICAgICBP
YmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCi0gICAgICAgICAg
ICAgICAgbXNnLmNzdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIFVTdHJpbmcgbXNnID0g
IkNhbid0IGNvbnZlcnQgIiArIG8tPmNsYXNzTmFtZSgpICsgIiBvYmplY3QgdG8gc3RyaW5nIjsK
KyAgICAgICAgICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdl
RXJyb3IsIG1zZy5jc3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzdHIgKz0gZWxlbWVudC50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgICBzdHIgKz0gZWxlbWVudC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIH0KICAg
ICAgIH0KIApAQCAtNDk4LDU0ICs0ODksNTQgQEAgVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNh
bGwoRXhlY1N0YXRlIAogICAgIGJyZWFrOwogICB9CiAgIGNhc2UgQ29uY2F0OiB7Ci0gICAgT2Jq
ZWN0IGFyciA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCkt
PmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsKKyAgICBPYmpl
Y3RJbXAgKmFyciA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpKTsK
ICAgICBpbnQgbiA9IDA7Ci0gICAgVmFsdWUgY3VyQXJnID0gdGhpc09iajsKLSAgICBPYmplY3Qg
Y3VyT2JqID0gT2JqZWN0OjpkeW5hbWljQ2FzdCh0aGlzT2JqKTsKKyAgICBWYWx1ZUltcCAqY3Vy
QXJnID0gdGhpc09iajsKKyAgICBPYmplY3RJbXAgKmN1ck9iaiA9IHN0YXRpY19jYXN0PE9iamVj
dEltcCAqPih0aGlzT2JqKTsKICAgICBMaXN0SXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7CiAg
ICAgZm9yICg7OykgewotICAgICAgaWYgKGN1ckFyZy50eXBlKCkgPT0gT2JqZWN0VHlwZSAmJgot
ICAgICAgICAgIGN1ck9iai5pbmhlcml0cygmQXJyYXlJbnN0YW5jZUltcDo6aW5mbykpIHsKKyAg
ICAgIGlmIChjdXJBcmctPmlzT2JqZWN0KCkgJiYKKyAgICAgICAgICBjdXJPYmotPmluaGVyaXRz
KCZBcnJheUluc3RhbmNlSW1wOjppbmZvKSkgewogICAgICAgICB1bnNpZ25lZCBpbnQgayA9IDA7
CiAgICAgICAgIC8vIE9sZGVyIHZlcnNpb25zIHRyaWVkIHRvIG9wdGltaXplIG91dCBnZXR0aW5n
IHRoZSBsZW5ndGggb2YgdGhpc09iagogICAgICAgICAvLyBieSBjaGVja2luZyBmb3IgbiAhPSAw
LCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgaWYgdGhpc09iaiBpcyBhbiBlbXB0eSBhcnJheS4KLSAg
ICAgICAgbGVuZ3RoID0gY3VyT2JqLmdldChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSkudG9VSW50
MzIoZXhlYyk7CisgICAgICAgIGxlbmd0aCA9IGN1ck9iai0+Z2V0KGV4ZWMsbGVuZ3RoUHJvcGVy
dHlOYW1lKS0+dG9VSW50MzIoZXhlYyk7CiAgICAgICAgIHdoaWxlIChrIDwgbGVuZ3RoKSB7Ci0g
ICAgICAgICAgVmFsdWUgdjsKLSAgICAgICAgICBpZiAoY3VyT2JqLmltcCgpLT5nZXRQcm9wZXJ0
eShleGVjLCBrLCB2KSkKLSAgICAgICAgICAgIGFyci5wdXQoZXhlYywgbiwgdik7CisgICAgICAg
ICAgVmFsdWVJbXAgKnY7CisgICAgICAgICAgaWYgKGN1ck9iai0+Z2V0UHJvcGVydHkoZXhlYywg
aywgdikpCisgICAgICAgICAgICBhcnItPnB1dChleGVjLCBuLCB2KTsKICAgICAgICAgICBuKys7
CiAgICAgICAgICAgaysrOwogICAgICAgICB9CiAgICAgICB9IGVsc2UgewotICAgICAgICBhcnIu
cHV0KGV4ZWMsIG4sIGN1ckFyZyk7CisgICAgICAgIGFyci0+cHV0KGV4ZWMsIG4sIGN1ckFyZyk7
CiAgICAgICAgIG4rKzsKICAgICAgIH0KICAgICAgIGlmIChpdCA9PSBhcmdzLmVuZCgpKQogICAg
ICAgICBicmVhazsKICAgICAgIGN1ckFyZyA9ICppdDsKLSAgICAgIGN1ck9iaiA9IE9iamVjdDo6
ZHluYW1pY0Nhc3QoaXQrKyk7IC8vIG1heSBiZSAwCisgICAgICBjdXJPYmogPSBzdGF0aWNfY2Fz
dDxPYmplY3RJbXAgKj4oaXQrKyk7IC8vIG1heSBiZSAwCiAgICAgfQotICAgIGFyci5wdXQoZXhl
YyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihuKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsK
KyAgICBhcnItPnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKG4pLCBEb250RW51
bSB8IERvbnREZWxldGUpOwogCiAgICAgcmVzdWx0ID0gYXJyOwogICAgIGJyZWFrOwogICB9CiAg
IGNhc2UgUG9wOnsKICAgICBpZiAobGVuZ3RoID09IDApIHsKLSAgICAgIHRoaXNPYmoucHV0KGV4
ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGxlbmd0aCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSk7CisgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1i
ZXIobGVuZ3RoKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAgICAgIHJlc3VsdCA9IFVuZGVm
aW5lZCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgPSB0aGlzT2JqLmdldChleGVjLCBs
ZW5ndGggLSAxKTsKLSAgICAgIHRoaXNPYmoucHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVyKGxlbmd0aCAtIDEpLCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgcmVzdWx0
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOworICAgICAgdGhpc09iai0+cHV0KGV4
ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGxlbmd0aCAtIDEpLCBEb250RW51bSB8IERv
bnREZWxldGUpOwogICAgIH0KICAgICBicmVhazsKICAgfQogICBjYXNlIFB1c2g6IHsKICAgICBm
b3IgKGludCBuID0gMDsgbiA8IGFyZ3Muc2l6ZSgpOyBuKyspCi0gICAgICB0aGlzT2JqLnB1dChl
eGVjLCBsZW5ndGggKyBuLCBhcmdzW25dKTsKKyAgICAgIHRoaXNPYmotPnB1dChleGVjLCBsZW5n
dGggKyBuLCBhcmdzW25dKTsKICAgICBsZW5ndGggKz0gYXJncy5zaXplKCk7Ci0gICAgdGhpc09i
ai5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGgpLCBEb250RW51bSB8
IERvbnREZWxldGUpOworICAgIHRoaXNPYmotPnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVyKGxlbmd0aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgcmVzdWx0ID0gTnVt
YmVyKGxlbmd0aCk7CiAgICAgYnJlYWs7CiAgIH0KQEAgLTU1NSwzOSArNTQ2LDM5IEBAIFZhbHVl
IEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKIAogICAgIGZvciAodW5zaWduZWQg
aW50IGsgPSAwOyBrIDwgbWlkZGxlOyBrKyspIHsKICAgICAgIHVuc2lnbmVkIGxrMSA9IGxlbmd0
aCAtIGsgLSAxOwotICAgICAgVmFsdWUgb2JqOwotICAgICAgVmFsdWUgb2JqMjsKLSAgICAgIGJv
b2wgaGFzMiA9IHRoaXNJbXAtPmdldFByb3BlcnR5KGV4ZWMsIGxrMSwgb2JqMik7Ci0gICAgICBi
b29sIGhhczEgPSB0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrLCBvYmopOworICAgICAgVmFs
dWVJbXAgKm9iajsKKyAgICAgIFZhbHVlSW1wICpvYmoyOworICAgICAgYm9vbCBoYXMyID0gdGhp
c09iai0+Z2V0UHJvcGVydHkoZXhlYywgbGsxLCBvYmoyKTsKKyAgICAgIGJvb2wgaGFzMSA9IHRo
aXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGssIG9iaik7CiAKICAgICAgIGlmIChoYXMyKSAKLSAg
ICAgICAgdGhpc09iai5wdXQoZXhlYywgaywgb2JqMik7CisgICAgICAgIHRoaXNPYmotPnB1dChl
eGVjLCBrLCBvYmoyKTsKICAgICAgIGVsc2UKLSAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0
eShleGVjLCBrKTsKKyAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgayk7CiAK
ICAgICAgIGlmIChoYXMxKQotICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBsazEsIG9iaik7Cisg
ICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBsazEsIG9iaik7CiAgICAgICBlbHNlCi0gICAgICAg
IHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgbGsxKTsKKyAgICAgICAgdGhpc09iai0+ZGVs
ZXRlUHJvcGVydHkoZXhlYywgbGsxKTsKICAgICB9CiAgICAgcmVzdWx0ID0gdGhpc09iajsKICAg
ICBicmVhazsKICAgfQogICBjYXNlIFNoaWZ0OiB7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7Ci0g
ICAgICB0aGlzT2JqLnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGgp
LCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0
aFByb3BlcnR5TmFtZSwgTnVtYmVyKGxlbmd0aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAg
ICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0g
dGhpc09iai5nZXQoZXhlYywgMCk7CisgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZXhlYywg
MCk7CiAgICAgICBmb3IodW5zaWduZWQgaW50IGsgPSAxOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAg
ICAgICAgVmFsdWUgb2JqOwotICAgICAgICBpZiAodGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywg
aywgb2JqKSkKLSAgICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBrLTEsIG9iaik7CisgICAgICAg
IFZhbHVlSW1wICpvYmo7CisgICAgICAgIGlmICh0aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBr
LCBvYmopKQorICAgICAgICAgIHRoaXNPYmotPnB1dChleGVjLCBrLTEsIG9iaik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICB0aGlzT2JqLmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGstMSk7CisgICAg
ICAgICAgdGhpc09iai0+ZGVsZXRlUHJvcGVydHkoZXhlYywgay0xKTsKICAgICAgIH0KLSAgICAg
IHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgbGVuZ3RoIC0gMSk7Ci0gICAgICB0aGlzT2Jq
LnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGggLSAxKSwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKKyAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGxl
bmd0aCAtIDEpOworICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVyKGxlbmd0aCAtIDEpLCBEb250RW51bSB8IERvbnREZWxldGUpOwogICAgIH0KICAgICBi
cmVhazsKICAgfQpAQCAtNTk1LDExICs1ODYsMTEgQEAgVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6
OmNhbGwoRXhlY1N0YXRlIAogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2Rv
Y3MvbWFudWFscy9qcy9jbGllbnQvanNyZWYvYXJyYXkuaHRtIzExOTM3MTMgb3IgMTUuNC40LjEw
CiAKICAgICAvLyBXZSByZXR1cm4gYSBuZXcgYXJyYXkKLSAgICBPYmplY3QgcmVzT2JqID0gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5
KCkuY29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOworICAgIE9iamVjdEltcCAqcmVzT2Jq
ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5i
dWlsdGluQXJyYXkoKS0+Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOwogICAgIHJlc3Vs
dCA9IHJlc09iajsKICAgICBkb3VibGUgYmVnaW4gPSAwOwotICAgIGlmIChhcmdzWzBdLnR5cGUo
KSAhPSBVbmRlZmluZWRUeXBlKSB7Ci0gICAgICAgIGJlZ2luID0gYXJnc1swXS50b0ludGVnZXIo
ZXhlYyk7CisgICAgaWYgKCFhcmdzWzBdLT5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGJlZ2lu
ID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgICAgICBpZiAoYmVnaW4gPj0gMCkgeyAv
LyBmYWxzZSBmb3IgTmFOCiAgICAgICAgICAgICBpZiAoYmVnaW4gPiBsZW5ndGgpCiAgICAgICAg
ICAgICAgICAgYmVnaW4gPSBsZW5ndGg7CkBAIC02MTAsOCArNjAxLDggQEAgVmFsdWUgQXJyYXlQ
cm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgICB9CiAgICAgfQogICAgIGRvdWJs
ZSBlbmQgPSBsZW5ndGg7Ci0gICAgaWYgKGFyZ3NbMV0udHlwZSgpICE9IFVuZGVmaW5lZFR5cGUp
IHsKLSAgICAgIGVuZCA9IGFyZ3NbMV0udG9JbnRlZ2VyKGV4ZWMpOworICAgIGlmICghYXJnc1sx
XS0+aXNVbmRlZmluZWQoKSkgeworICAgICAgZW5kID0gYXJnc1sxXS0+dG9JbnRlZ2VyKGV4ZWMp
OwogICAgICAgaWYgKGVuZCA8IDApIHsgLy8gZmFsc2UgZm9yIE5hTgogICAgICAgICBlbmQgKz0g
bGVuZ3RoOwogICAgICAgICBpZiAoZW5kIDwgMCkKQEAgLTYyNywzOSArNjE4LDM4IEBAIFZhbHVl
IEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICBpbnQgYiA9IHN0YXRpY19j
YXN0PGludD4oYmVnaW4pOwogICAgIGludCBlID0gc3RhdGljX2Nhc3Q8aW50PihlbmQpOwogICAg
IGZvcihpbnQgayA9IGI7IGsgPCBlOyBrKyssIG4rKykgewotICAgICAgVmFsdWUgb2JqOwotICAg
ICAgaWYgKHRoaXNJbXAtPmdldFByb3BlcnR5KGV4ZWMsIGssIG9iaikpCi0gICAgICAgIHJlc09i
ai5wdXQoZXhlYywgbiwgb2JqKTsKKyAgICAgIFZhbHVlSW1wICpvYmo7CisgICAgICBpZiAodGhp
c09iai0+Z2V0UHJvcGVydHkoZXhlYywgaywgb2JqKSkKKyAgICAgICAgcmVzT2JqLT5wdXQoZXhl
Yywgbiwgb2JqKTsKICAgICB9Ci0gICAgcmVzT2JqLnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5h
bWUsIE51bWJlcihuKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICByZXNPYmotPnB1dChl
eGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihuKSwgRG9udEVudW0gfCBEb250RGVsZXRl
KTsKICAgICBicmVhazsKICAgfQogICBjYXNlIFNvcnQ6ewogI2lmIDAKICAgICBwcmludGYoIktK
UyBBcnJheTo6U29ydCBsZW5ndGg9JWRcbiIsIGxlbmd0aCk7CiAgICAgZm9yICggdW5zaWduZWQg
aW50IGkgPSAwIDsgaTxsZW5ndGggOyArK2kgKQotICAgICAgcHJpbnRmKCJLSlMgQXJyYXk6OlNv
cnQ6ICVkOiAlc1xuIiwgaSwgdGhpc09iai5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYykuYXNj
aWkoKSApOworICAgICAgcHJpbnRmKCJLSlMgQXJyYXk6OlNvcnQ6ICVkOiAlc1xuIiwgaSwgdGhp
c09iai0+Z2V0KGV4ZWMsIGkpLT50b1N0cmluZyhleGVjKS5hc2NpaSgpICk7CiAjZW5kaWYKLSAg
ICBPYmplY3Qgc29ydEZ1bmN0aW9uOwotICAgIGJvb2wgdXNlU29ydEZ1bmN0aW9uID0gKGFyZ3Nb
MF0udHlwZSgpICE9IFVuZGVmaW5lZFR5cGUpOwotICAgIGlmICh1c2VTb3J0RnVuY3Rpb24pCisg
ICAgT2JqZWN0SW1wICpzb3J0RnVuY3Rpb24gPSBOVUxMOworICAgIGlmICghYXJnc1swXS0+aXNV
bmRlZmluZWQoKSkKICAgICAgIHsKLSAgICAgICAgc29ydEZ1bmN0aW9uID0gYXJnc1swXS50b09i
amVjdChleGVjKTsKLSAgICAgICAgaWYgKCFzb3J0RnVuY3Rpb24uaW1wbGVtZW50c0NhbGwoKSkK
LSAgICAgICAgICB1c2VTb3J0RnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgc29ydEZ1bmN0aW9u
ID0gYXJnc1swXS0+dG9PYmplY3QoZXhlYyk7CisgICAgICAgIGlmICghc29ydEZ1bmN0aW9uLT5p
bXBsZW1lbnRzQ2FsbCgpKQorICAgICAgICAgIHNvcnRGdW5jdGlvbiA9IE5VTEw7CiAgICAgICB9
CiAgICAgCi0gICAgaWYgKHRoaXNJbXAtPmNsYXNzSW5mbygpID09ICZBcnJheUluc3RhbmNlSW1w
OjppbmZvKSB7Ci0gICAgICBpZiAodXNlU29ydEZ1bmN0aW9uKQotICAgICAgICAoKEFycmF5SW5z
dGFuY2VJbXAgKil0aGlzSW1wKS0+c29ydChleGVjLCBzb3J0RnVuY3Rpb24pOworICAgIGlmICh0
aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmQXJyYXlJbnN0YW5jZUltcDo6aW5mbykgeworICAgICAg
aWYgKHNvcnRGdW5jdGlvbikKKyAgICAgICAgKChBcnJheUluc3RhbmNlSW1wICopdGhpc09iaikt
PnNvcnQoZXhlYywgc29ydEZ1bmN0aW9uKTsKICAgICAgIGVsc2UKLSAgICAgICAgKChBcnJheUlu
c3RhbmNlSW1wICopdGhpc0ltcCktPnNvcnQoZXhlYyk7CisgICAgICAgICgoQXJyYXlJbnN0YW5j
ZUltcCAqKXRoaXNPYmopLT5zb3J0KGV4ZWMpOwogICAgICAgcmVzdWx0ID0gdGhpc09iajsKICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChsZW5ndGggPT0gMCkgewotICAgICAgdGhpc09i
ai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoMCksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSk7CisgICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBO
dW1iZXIoMCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgICByZXN1bHQgPSB0aGlzT2Jq
OwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjY4LDI0ICs2NTgsMjQgQEAgVmFsdWUgQXJyYXlQ
cm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgIC8vIG9yIHF1aWNrc29ydCwgYW5kIG11
Y2ggbGVzcyBzd2FwcGluZyB0aGFuIGJ1YmJsZXNvcnQvaW5zZXJ0aW9uc29ydC4KICAgICBmb3Ig
KCB1bnNpZ25lZCBpbnQgaSA9IDAgOyBpPGxlbmd0aC0xIDsgKytpICkKICAgICAgIHsKLSAgICAg
ICAgVmFsdWUgaU9iaiA9IHRoaXNPYmouZ2V0KGV4ZWMsaSk7CisgICAgICAgIFZhbHVlSW1wICpp
T2JqID0gdGhpc09iai0+Z2V0KGV4ZWMsaSk7CiAgICAgICAgIHVuc2lnbmVkIGludCB0aGVtaW4g
PSBpOwotICAgICAgICBWYWx1ZSBtaW5PYmogPSBpT2JqOworICAgICAgICBWYWx1ZUltcCAqbWlu
T2JqID0gaU9iajsKICAgICAgICAgZm9yICggdW5zaWduZWQgaW50IGogPSBpKzEgOyBqPGxlbmd0
aCA7ICsraiApCiAgICAgICAgICAgewotICAgICAgICAgICAgVmFsdWUgak9iaiA9IHRoaXNPYmou
Z2V0KGV4ZWMsaik7CisgICAgICAgICAgICBWYWx1ZUltcCAqak9iaiA9IHRoaXNPYmotPmdldChl
eGVjLGopOwogICAgICAgICAgICAgZG91YmxlIGNtcDsKLSAgICAgICAgICAgIGlmIChqT2JqLnR5
cGUoKSA9PSBVbmRlZmluZWRUeXBlKSB7CisgICAgICAgICAgICBpZiAoak9iai0+aXNVbmRlZmlu
ZWQoKSkgewogICAgICAgICAgICAgICBjbXAgPSAxOyAvLyBkb24ndCBjaGVjayBtaW5PYmogYmVj
YXVzZSB0aGVyZSdzIG5vIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSA9PSAoMCkgZnJvbSA+ICgxKQot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtaW5PYmoudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobWluT2JqLT5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAg
ICAgICAgIGNtcCA9IC0xOwotICAgICAgICAgICAgfSBlbHNlIGlmICh1c2VTb3J0RnVuY3Rpb24p
IHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc29ydEZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgTGlzdCBsOwogICAgICAgICAgICAgICAgIGwuYXBwZW5kKGpPYmopOwogICAgICAgICAgICAg
ICAgIGwuYXBwZW5kKG1pbk9iaik7Ci0gICAgICAgICAgICAgICAgY21wID0gc29ydEZ1bmN0aW9u
LmNhbGwoZXhlYywgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLCBs
KS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBjbXAgPSBzb3J0RnVuY3Rpb24tPmNh
bGwoZXhlYywgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLCBsKS0+
dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBjbXAg
PSAoak9iai50b1N0cmluZyhleGVjKSA8IG1pbk9iai50b1N0cmluZyhleGVjKSkgPyAtMSA6IDE7
CisgICAgICAgICAgICAgIGNtcCA9IChqT2JqLT50b1N0cmluZyhleGVjKSA8IG1pbk9iai0+dG9T
dHJpbmcoZXhlYykpID8gLTEgOiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCBj
bXAgPCAwICkKICAgICAgICAgICAgICAgewpAQCAtNjk3LDM2ICs2ODcsMzYgQEAgVmFsdWUgQXJy
YXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgICBpZiAoIHRoZW1pbiA+IGkg
KQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8vcHJpbnRmKCJLSlMgQXJyYXk6OlNvcnQ6IHN3
YXBwaW5nICVkIGFuZCAlZFxuIiwgaSwgdGhlbWluICk7Ci0gICAgICAgICAgICB0aGlzT2JqLnB1
dCggZXhlYywgaSwgbWluT2JqICk7Ci0gICAgICAgICAgICB0aGlzT2JqLnB1dCggZXhlYywgdGhl
bWluLCBpT2JqICk7CisgICAgICAgICAgICB0aGlzT2JqLT5wdXQoIGV4ZWMsIGksIG1pbk9iaiAp
OworICAgICAgICAgICAgdGhpc09iai0+cHV0KCBleGVjLCB0aGVtaW4sIGlPYmogKTsKICAgICAg
ICAgICB9CiAgICAgICB9CiAjaWYgMAogICAgIHByaW50ZigiS0pTIEFycmF5OjpTb3J0IC0tIFJl
c3VsdGluZyBhcnJheTpcbiIpOwogICAgIGZvciAoIHVuc2lnbmVkIGludCBpID0gMCA7IGk8bGVu
Z3RoIDsgKytpICkKLSAgICAgIHByaW50ZigiS0pTIEFycmF5OjpTb3J0OiAlZDogJXNcbiIsIGks
IHRoaXNPYmouZ2V0KGV4ZWMsIGkpLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkgKTsKKyAgICAgIHBy
aW50ZigiS0pTIEFycmF5OjpTb3J0OiAlZDogJXNcbiIsIGksIHRoaXNPYmotPmdldChleGVjLCBp
KS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSApOwogI2VuZGlmCiAgICAgcmVzdWx0ID0gdGhpc09i
ajsKICAgICBicmVhazsKICAgfQogICBjYXNlIFNwbGljZTogewogICAgIC8vIDE1LjQuNC4xMiAt
IG9oIGJveSB0aGlzIGlzIGh1Z2UKLSAgICBPYmplY3QgcmVzT2JqID0gT2JqZWN0OjpkeW5hbWlj
Q2FzdChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCkuY29uc3RydWN0
KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOworICAgIE9iamVjdEltcCAqcmVzT2JqID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXko
KS0+Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOwogICAgIHJlc3VsdCA9IHJlc09iajsK
LSAgICBpbnQgYmVnaW4gPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworICAgIGludCBiZWdpbiA9
IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogICAgIGlmICggYmVnaW4gPCAwICkKICAgICAgIGJl
Z2luID0gbWF4SW50KCBiZWdpbiArIGxlbmd0aCwgMCApOwogICAgIGVsc2UKICAgICAgIGJlZ2lu
ID0gbWluSW50KCBiZWdpbiwgbGVuZ3RoICk7Ci0gICAgdW5zaWduZWQgaW50IGRlbGV0ZUNvdW50
ID0gbWluSW50KCBtYXhJbnQoIGFyZ3NbMV0udG9VSW50MzIoZXhlYyksIDAgKSwgbGVuZ3RoIC0g
YmVnaW4gKTsKKyAgICB1bnNpZ25lZCBpbnQgZGVsZXRlQ291bnQgPSBtaW5JbnQoIG1heEludCgg
YXJnc1sxXS0+dG9VSW50MzIoZXhlYyksIDAgKSwgbGVuZ3RoIC0gYmVnaW4gKTsKIAogICAgIC8v
cHJpbnRmKCAiU3BsaWNpbmcgZnJvbSAlZCwgZGVsZXRlQ291bnQ9JWQgXG4iLCBiZWdpbiwgZGVs
ZXRlQ291bnQgKTsKICAgICBmb3IodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgZGVsZXRlQ291bnQ7
IGsrKykgewotICAgICAgVmFsdWUgb2JqOwotICAgICAgaWYgKHRoaXNJbXAtPmdldFByb3BlcnR5
KGV4ZWMsIGsrYmVnaW4sIG9iaikpCi0gICAgICAgIHJlc09iai5wdXQoZXhlYywgaywgb2JqKTsK
KyAgICAgIFZhbHVlSW1wICpvYmo7CisgICAgICBpZiAodGhpc09iai0+Z2V0UHJvcGVydHkoZXhl
YywgaytiZWdpbiwgb2JqKSkKKyAgICAgICAgcmVzT2JqLT5wdXQoZXhlYywgaywgb2JqKTsKICAg
ICB9Ci0gICAgcmVzT2JqLnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihkZWxl
dGVDb3VudCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisgICAgcmVzT2JqLT5wdXQoZXhlYywg
bGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoZGVsZXRlQ291bnQpLCBEb250RW51bSB8IERvbnRE
ZWxldGUpOwogCiAgICAgdW5zaWduZWQgaW50IGFkZGl0aW9uYWxBcmdzID0gbWF4SW50KCBhcmdz
LnNpemUoKSAtIDIsIDAgKTsKICAgICBpZiAoIGFkZGl0aW9uYWxBcmdzICE9IGRlbGV0ZUNvdW50
ICkKQEAgLTczNSw0OCArNzI1LDQ4IEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4
ZWNTdGF0ZSAKICAgICAgIHsKICAgICAgICAgZm9yICggdW5zaWduZWQgaW50IGsgPSBiZWdpbjsg
ayA8IGxlbmd0aCAtIGRlbGV0ZUNvdW50OyArK2sgKQogICAgICAgICB7Ci0gICAgICAgICAgVmFs
dWUgb2JqOwotICAgICAgICAgIGlmICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrK2RlbGV0
ZUNvdW50LCBvYmopKQotICAgICAgICAgICAgdGhpc09iai5wdXQoZXhlYywgaythZGRpdGlvbmFs
QXJncywgb2JqKTsKKyAgICAgICAgICBWYWx1ZUltcCAqb2JqOworICAgICAgICAgIGlmICh0aGlz
T2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrK2RlbGV0ZUNvdW50LCBvYmopKQorICAgICAgICAgICAg
dGhpc09iai0+cHV0KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MsIG9iaik7CiAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShleGVjLCBrK2FkZGl0aW9uYWxB
cmdzKTsKKyAgICAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsrYWRkaXRp
b25hbEFyZ3MpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gbGVu
Z3RoIDsgayA+IGxlbmd0aCAtIGRlbGV0ZUNvdW50ICsgYWRkaXRpb25hbEFyZ3M7IC0tayApCi0g
ICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShleGVjLCBrLTEpOworICAgICAgICAgIHRo
aXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGstMSk7CiAgICAgICB9CiAgICAgICBlbHNlCiAg
ICAgICB7CiAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gbGVuZ3RoIC0gZGVsZXRlQ291
bnQ7IChpbnQpayA+IGJlZ2luOyAtLWsgKQogICAgICAgICB7Ci0gICAgICAgICAgVmFsdWUgb2Jq
OwotICAgICAgICAgIGlmICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrICsgZGVsZXRlQ291
bnQgLSAxLCBvYmopKQotICAgICAgICAgICAgdGhpc09iai5wdXQoZXhlYywgayArIGFkZGl0aW9u
YWxBcmdzIC0gMSwgb2JqKTsKKyAgICAgICAgICBWYWx1ZUltcCAqb2JqOworICAgICAgICAgIGlm
ICh0aGlzT2JqLT5nZXRQcm9wZXJ0eShleGVjLCBrICsgZGVsZXRlQ291bnQgLSAxLCBvYmopKQor
ICAgICAgICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsgKyBhZGRpdGlvbmFsQXJncyAtIDEsIG9i
aik7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShl
eGVjLCBrK2FkZGl0aW9uYWxBcmdzLTEpOworICAgICAgICAgICAgdGhpc09iai0+ZGVsZXRlUHJv
cGVydHkoZXhlYywgaythZGRpdGlvbmFsQXJncy0xKTsKICAgICAgICAgfQogICAgICAgfQogICAg
IH0KICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCBhZGRpdGlvbmFsQXJnczsgKytr
ICkKICAgICB7Ci0gICAgICB0aGlzT2JqLnB1dChleGVjLCBrK2JlZ2luLCBhcmdzW2srMl0pOwor
ICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGsrYmVnaW4sIGFyZ3NbaysyXSk7CiAgICAgfQotICAg
IHRoaXNPYmoucHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGxlbmd0aCAtIGRl
bGV0ZUNvdW50ICsgYWRkaXRpb25hbEFyZ3MpLCBEb250RW51bSB8IERvbnREZWxldGUpOworICAg
IHRoaXNPYmotPnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihsZW5ndGggLSBk
ZWxldGVDb3VudCArIGFkZGl0aW9uYWxBcmdzKSwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKICAg
ICBicmVhazsKICAgfQogICBjYXNlIFVuU2hpZnQ6IHsgLy8gMTUuNC40LjEzCiAgICAgdW5zaWdu
ZWQgaW50IG5yQXJncyA9IGFyZ3Muc2l6ZSgpOwogICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0g
bGVuZ3RoOyBrID4gMDsgLS1rICkKICAgICB7Ci0gICAgICBWYWx1ZSBvYmo7Ci0gICAgICBpZiAo
dGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgayAtIDEsIG9iaikpCi0gICAgICAgIHRoaXNPYmou
cHV0KGV4ZWMsIGsrbnJBcmdzLTEsIG9iaik7CisgICAgICBWYWx1ZUltcCAqb2JqOworICAgICAg
aWYgKHRoaXNPYmotPmdldFByb3BlcnR5KGV4ZWMsIGsgLSAxLCBvYmopKQorICAgICAgICB0aGlz
T2JqLT5wdXQoZXhlYywgaytuckFyZ3MtMSwgb2JqKTsKICAgICAgIGVsc2UKLSAgICAgICAgdGhp
c09iai5kZWxldGVQcm9wZXJ0eShleGVjLCBrK25yQXJncy0xKTsKKyAgICAgICAgdGhpc09iai0+
ZGVsZXRlUHJvcGVydHkoZXhlYywgaytuckFyZ3MtMSk7CiAgICAgfQogICAgIGZvciAoIHVuc2ln
bmVkIGludCBrID0gMDsgayA8IG5yQXJnczsgKytrICkKLSAgICAgIHRoaXNPYmoucHV0KGV4ZWMs
IGssIGFyZ3Nba10pOworICAgICAgdGhpc09iai0+cHV0KGV4ZWMsIGssIGFyZ3Nba10pOwogICAg
IHJlc3VsdCA9IE51bWJlcihsZW5ndGggKyBuckFyZ3MpOwotICAgIHRoaXNPYmoucHV0KGV4ZWMs
IGxlbmd0aFByb3BlcnR5TmFtZSwgcmVzdWx0LCBEb250RW51bSB8IERvbnREZWxldGUpOworICAg
IHRoaXNPYmotPnB1dChleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUsIHJlc3VsdCwgRG9udEVudW0g
fCBEb250RGVsZXRlKTsKICAgICBicmVhazsKICAgfQogICBjYXNlIEV2ZXJ5OgpAQCAtNzg3LDE1
ICs3NzcsMTUgQEAgVmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAg
IC8vaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2Ny
aXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJheTpmb3JFYWNoCiAgICAgLy9odHRwOi8vZGV2
ZWxvcGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVy
ZW5jZTpPYmplY3RzOkFycmF5OnNvbWUKICAgICAKLSAgICBPYmplY3QgZWFjaEZ1bmN0aW9uID0g
YXJnc1swXS50b09iamVjdChleGVjKTsKKyAgICBPYmplY3RJbXAgKmVhY2hGdW5jdGlvbiA9IGFy
Z3NbMF0tPnRvT2JqZWN0KGV4ZWMpOwogICAgIAotICAgIGlmICghZWFjaEZ1bmN0aW9uLmltcGxl
bWVudHNDYWxsKCkpIHsKLSAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKKyAgICBpZiAoIWVhY2hGdW5jdGlvbi0+aW1wbGVtZW50c0NhbGwoKSkgeworICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAgICAg
Ci0gICAgT2JqZWN0IGFwcGx5VGhpcyA9IGFyZ3NbMV0uaW1wKCktPmlzVW5kZWZpbmVkT3JOdWxs
KCkgPyBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkgOiAgYXJnc1sx
XS50b09iamVjdChleGVjKTsKKyAgICBPYmplY3RJbXAgKmFwcGx5VGhpcyA9IGFyZ3NbMV0tPmlz
VW5kZWZpbmVkT3JOdWxsKCkgPyBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2Jq
ZWN0KCkgOiAgYXJnc1sxXS0+dG9PYmplY3QoZXhlYyk7CiAgICAgCiAgICAgaWYgKGlkID09IFNv
bWUgfHwgaWQgPT0gRXZlcnkpCiAgICAgICByZXN1bHQgPSBCb29sZWFuKGlkID09IEV2ZXJ5KTsK
QEAgLTgwNiwxMSArNzk2LDExIEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNT
dGF0ZSAKICAgICAgIAogICAgICAgTGlzdCBlYWNoQXJndW1lbnRzOwogICAgICAgCi0gICAgICBl
YWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqLmdldChleGVjLCBrKSk7CisgICAgICBlYWNoQXJn
dW1lbnRzLmFwcGVuZCh0aGlzT2JqLT5nZXQoZXhlYywgaykpOwogICAgICAgZWFjaEFyZ3VtZW50
cy5hcHBlbmQoTnVtYmVyKGspKTsKICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmop
OwogICAgICAgCi0gICAgICBib29sIHByZWRpY2F0ZVJlc3VsdCA9IGVhY2hGdW5jdGlvbi5jYWxs
KGV4ZWMsIGFwcGx5VGhpcywgZWFjaEFyZ3VtZW50cykudG9Cb29sZWFuKGV4ZWMpOworICAgICAg
Ym9vbCBwcmVkaWNhdGVSZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGwoZXhlYywgYXBwbHlUaGlz
LCBlYWNoQXJndW1lbnRzKS0+dG9Cb29sZWFuKGV4ZWMpOwogICAgICAgCiAgICAgICBpZiAoaWQg
PT0gRXZlcnkgJiYgIXByZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICByZXN1bHQgPSBCb29sZWFu
KGZhbHNlKTsKQEAgLTgyNiw2ICs4MTYsNyBAQCBWYWx1ZSBBcnJheVByb3RvRnVuY0ltcDo6Y2Fs
bChFeGVjU3RhdGUgCiAgICAgCiAgIGRlZmF1bHQ6CiAgICAgYXNzZXJ0KDApOworICAgIHJlc3Vs
dCA9IDA7CiAgICAgYnJlYWs7CiAgIH0KICAgcmV0dXJuIHJlc3VsdDsKQEAgLTgzOCw5ICs4Mjks
OCBAQCBBcnJheU9iamVjdEltcDo6QXJyYXlPYmplY3RJbXAoRXhlY1N0YXRlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVJbXAgKmFycmF5UHJvdG8pCiAgIDog
SW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7
CiAgIC8vIEVDTUEgMTUuNC4zLjEgQXJyYXkucHJvdG90eXBlCi0gIHB1dChleGVjLHByb3RvdHlw
ZVByb3BlcnR5TmFtZSwgT2JqZWN0KGFycmF5UHJvdG8pLCBEb250RW51bXxEb250RGVsZXRlfFJl
YWRPbmx5KTsKKyAgcHV0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlOYW1lLCBhcnJheVByb3RvLCBE
b250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZv
ciBjb25zdHJ1Y3RvcgogICBwdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcigxKSwg
UmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CkBAIC04NTIsMjEgKzg0MiwyMSBAQCBib29s
IEFycmF5T2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0CiB9CiAKIC8vIEVDTUEgMTUuNC4y
Ci1PYmplY3QgQXJyYXlPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IExpc3QgJmFyZ3MpCitPYmplY3RJbXAgKkFycmF5T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQogewogICAvLyBhIHNpbmdsZSBudW1lcmljIGFy
Z3VtZW50IGRlbm90ZXMgdGhlIGFycmF5IHNpemUgKCEpCi0gIGlmIChhcmdzLnNpemUoKSA9PSAx
ICYmIGFyZ3NbMF0udHlwZSgpID09IE51bWJlclR5cGUpIHsKLSAgICB1aW50MzJfdCBuID0gYXJn
c1swXS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAobiAhPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
KSB7Ci0gICAgICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3Is
ICJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwor
ICBpZiAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLT5pc051bWJlcigpKSB7CisgICAgdWlu
dDMyX3QgbiA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOworICAgIGlmIChuICE9IGFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpKSB7CisgICAgICBPYmplY3RJbXAgKmVycm9yID0gRXJyb3I6OmNyZWF0
ZShleGVjLCBSYW5nZUVycm9yLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9z
aXRpdmUgaW50ZWdlci4iKTsKICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnJvcik7CiAgICAg
ICByZXR1cm4gZXJyb3I7CiAgICAgfQotICAgIHJldHVybiBPYmplY3QobmV3IEFycmF5SW5zdGFu
Y2VJbXAoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheVByb3RvdHlwZSgp
LmltcCgpLCBuKSk7CisgICAgcmV0dXJuIG5ldyBBcnJheUluc3RhbmNlSW1wKGV4ZWMtPmxleGlj
YWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXlQcm90b3R5cGUoKSwgbik7CiAgIH0KIAogICAv
LyBvdGhlcndpc2UgdGhlIGFycmF5IGlzIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBp
biBpdAotICByZXR1cm4gT2JqZWN0KG5ldyBBcnJheUluc3RhbmNlSW1wKGV4ZWMtPmxleGljYWxJ
bnRlcnByZXRlcigpLT5idWlsdGluQXJyYXlQcm90b3R5cGUoKS5pbXAoKSwgYXJncykpOworICBy
ZXR1cm4gbmV3IEFycmF5SW5zdGFuY2VJbXAoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1
aWx0aW5BcnJheVByb3RvdHlwZSgpLCBhcmdzKTsKIH0KIAogYm9vbCBBcnJheU9iamVjdEltcDo6
aW1wbGVtZW50c0NhbGwoKSBjb25zdApAQCAtODc1LDcgKzg2NSw3IEBAIGJvb2wgQXJyYXlPYmpl
Y3RJbXA6OmltcGxlbWVudHNDYWxsKCkgY28KIH0KIAogLy8gRUNNQSAxNS42LjEKLVZhbHVlIEFy
cmF5T2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRoaXNPYmoqLywg
Y29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpBcnJheU9iamVjdEltcDo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZh
cmdzKQogewogICAvLyBlcXVpdmFsZW50IHRvICduZXcgQXJyYXkoLi4uLiknCiAgIHJldHVybiBj
b25zdHJ1Y3QoZXhlYyxhcmdzKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Fy
cmF5X29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2FycmF5X29iamVjdC5oCTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xNQorKysgSmF2YVNj
cmlwdENvcmUva2pzL2FycmF5X29iamVjdC5oCTggQXVnIDIwMDUgMDE6MDA6NDYgLTAwMDAKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJyYXlQcm90b0Z1bmNJbXAoRXhl
Y1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGxlbik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVt
ZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJ
bXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKTsKIAogICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcs
IENvbmNhdCwgSm9pbiwgUG9wLCBQdXNoLAogICAgICAgICAgIFJldmVyc2UsIFNoaWZ0LCBTbGlj
ZSwgU29ydCwgU3BsaWNlLCBVblNoaWZ0LCAKQEAgLTU3LDkgKzU3LDkgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5cGVJbXAgKmFycmF5UHJvdG8pOwog
CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsK
KyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAK
ICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBKYXZhU2NyaXB0
Q29yZS9ranMvYm9vbF9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYm9vbF9vYmpl
Y3QuY3BwCTE0IEp1bCAyMDA1IDE4OjI3OjAxIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9ib29sX29iamVjdC5jcHAJOCBBdWcgMjAwNSAwMTowMDo0NiAtMDAwMApAQCAtNTAsNyAr
NTAsNiBAQCBCb29sZWFuUHJvdG90eXBlSW1wOjpCb29sZWFuUHJvdG90eXBlSW1wCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpm
dW5jUHJvdG8pCiAgIDogQm9vbGVhbkluc3RhbmNlSW1wKG9iamVjdFByb3RvKQogewotICBWYWx1
ZSBwcm90ZWN0KHRoaXMpOwogICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRl
ciBieSBJbnRlcnByZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoKQogCiAgIHB1dERpcmVjdCh0b1N0
cmluZ1Byb3BlcnR5TmFtZSwgbmV3IEJvb2xlYW5Qcm90b0Z1bmNJbXAoZXhlYyxmdW5jUHJvdG8s
Qm9vbGVhblByb3RvRnVuY0ltcDo6VG9TdHJpbmcsMCksIERvbnRFbnVtKTsKQEAgLTY1LDcgKzY0
LDYgQEAgQm9vbGVhblByb3RvRnVuY0ltcDo6Qm9vbGVhblByb3RvRnVuY0ltcAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVu
Y1Byb3RvLCBpbnQgaSwgaW50IGxlbikKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90
byksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dERpcmVjdChsZW5ndGhQ
cm9wZXJ0eU5hbWUsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9CiAKQEAg
LTc3LDIzICs3NSwyMyBAQCBib29sIEJvb2xlYW5Qcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxs
CiAKIAogLy8gRUNNQSAxNS42LjQuMiArIDE1LjYuNC4zCi1WYWx1ZSBCb29sZWFuUHJvdG9GdW5j
SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYv
KmFyZ3MqLykKK1ZhbHVlSW1wICpCb29sZWFuUHJvdG9GdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmLyphcmdzKi8p
CiB7CiAgIC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24uICJ0aGlzIiBoYXMgdG8gYmUgYSBCb29sZWFu
IG9iamVjdAotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5jZUltcDo6aW5m
bykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Cisg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5jZUltcDo6aW5mbykpIHsKKyAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KIAogICAvLyBleGVj
dXRlICJ0b1N0cmluZygpIiBvciAidmFsdWVPZigpIiwgcmVzcGVjdGl2ZWx5CiAKLSAgVmFsdWUg
diA9IHRoaXNPYmouaW50ZXJuYWxWYWx1ZSgpOwotICBhc3NlcnQoIXYuaXNOdWxsKCkpOworICBW
YWx1ZUltcCAqdiA9IHRoaXNPYmotPmludGVybmFsVmFsdWUoKTsKKyAgYXNzZXJ0KHYpOwogCiAg
IGlmIChpZCA9PSBUb1N0cmluZykKLSAgICByZXR1cm4gU3RyaW5nKHYudG9TdHJpbmcoZXhlYykp
OwotICByZXR1cm4gQm9vbGVhbih2LnRvQm9vbGVhbihleGVjKSk7IC8qIFRPRE86IG9wdGltaXpl
IGZvciBib29sIGNhc2UgKi8KKyAgICByZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsK
KyAgcmV0dXJuIEJvb2xlYW4odi0+dG9Cb29sZWFuKGV4ZWMpKTsgLyogVE9ETzogb3B0aW1pemUg
Zm9yIGJvb2wgY2FzZSAqLwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Qm9vbGVhbk9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAzLDEx
ICsxMDEsMTAgQEAgQm9vbGVhbk9iamVjdEltcDo6Qm9vbGVhbk9iamVjdEltcChFeGVjUwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlSW1wICpib29s
ZWFuUHJvdG8pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVl
IHByb3RlY3QodGhpcyk7CiAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIGJvb2xl
YW5Qcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKICAgLy8gbm8uIG9mIGFy
Z3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwg
TnVtYmVySW1wOjpvbmUoKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERp
cmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGpzT25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9u
dEVudW0pOwogfQogCiAKQEAgLTExNywxNyArMTE0LDE3IEBAIGJvb2wgQm9vbGVhbk9iamVjdElt
cDo6aW1wbGVtZW50c0NvbnN0cnUKIH0KIAogLy8gRUNNQSAxNS42LjIKLU9iamVjdCBCb29sZWFu
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQor
T2JqZWN0SW1wICpCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICBPYmplY3Qgb2JqKG5ldyBCb29sZWFuSW5zdGFuY2VJbXAo
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkuaW1w
KCkpKTsKKyAgT2JqZWN0SW1wICpvYmoobmV3IEJvb2xlYW5JbnN0YW5jZUltcChleGVjLT5sZXhp
Y2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKSkpOwogCi0gIEJvb2xl
YW4gYjsKKyAgYm9vbCBiOwogICBpZiAoYXJncy5zaXplKCkgPiAwKQotICAgIGIgPSBhcmdzLmJl
Z2luKCktPmRpc3BhdGNoVG9Cb29sZWFuKGV4ZWMpOworICAgIGIgPSBhcmdzLmJlZ2luKCktPnRv
Qm9vbGVhbihleGVjKTsKICAgZWxzZQotICAgIGIgPSBCb29sZWFuKGZhbHNlKTsKKyAgICBiID0g
ZmFsc2U7CiAKLSAgb2JqLnNldEludGVybmFsVmFsdWUoYik7CisgIG9iai0+c2V0SW50ZXJuYWxW
YWx1ZShqc0Jvb2xlYW4oYikpOwogCiAgIHJldHVybiBvYmo7CiB9CkBAIC0xMzgsMTEgKzEzNSwx
MSBAQCBib29sIEJvb2xlYW5PYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkgCiB9CiAKIC8vIEVD
TUEgMTUuNi4xCi1WYWx1ZSBCb29sZWFuT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpCb29sZWFu
T2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0
aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIGlmIChhcmdzLmlzRW1wdHkoKSkKICAg
ICByZXR1cm4gQm9vbGVhbihmYWxzZSk7CiAgIGVsc2UKLSAgICByZXR1cm4gQm9vbGVhbihhcmdz
WzBdLnRvQm9vbGVhbihleGVjKSk7IC8qIFRPRE86IG9wdGltaXplIGZvciBib29sIGNhc2UgKi8K
KyAgICByZXR1cm4gQm9vbGVhbihhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykpOyAvKiBUT0RPOiBv
cHRpbWl6ZSBmb3IgYm9vbCBjYXNlICovCiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9i
b29sX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvYm9vbF9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUg
LXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9ib29sX29iamVjdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAxIC0wMDAwCTEuNQorKysgSmF2
YVNjcmlwdENvcmUva2pzL2Jvb2xfb2JqZWN0LmgJOCBBdWcgMjAwNSAwMTowMDo0NiAtMDAwMApA
QCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGludCBpLCBpbnQgbGVuKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUg
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7
CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAgZW51bSB7IFRvU3Ry
aW5nLCBWYWx1ZU9mIH07CiAgIHByaXZhdGU6CkBAIC03OSwxMCArNzksMTAgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlSW1wICpib29sZWFu
UHJvdG8pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0
ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKTsKICAgfTsKIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvY29sbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC1w
IC11IC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMSBBdWcgMjAwNSAwNTowMjoxMiAtMDAwMAkxLjQwCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjQ2IC0w
MDAwCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBDb2xsZWN0b3I6Om1hcmtTdGFja09iamVjdHND
b25zZXJ2YQogICAgICAgfQogICAgICAgCiAgICAgICBpZiAoZ29vZCAmJiAoKENvbGxlY3RvckNl
bGwgKil4KS0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVlICE9IDApIHsKLQlWYWx1ZUltcCAqaW1wID0g
KFZhbHVlSW1wICopeDsKKwlBbGxvY2F0ZWRWYWx1ZUltcCAqaW1wID0gKEFsbG9jYXRlZFZhbHVl
SW1wICopeDsKIAlpZiAoIWltcC0+bWFya2VkKCkpCiAJICBpbXAtPm1hcmsoKTsKICAgICAgIH0K
QEAgLTM3MCwxNCArMzcwLDE0IEBAIGJvb2wgQ29sbGVjdG9yOjpjb2xsZWN0KCkKICAgICAgIH0K
IAogICAgICAgQ29sbGVjdG9yQ2VsbCAqY2VsbCA9IGN1ckJsb2NrLT5jZWxscyArIGk7Ci0gICAg
ICBWYWx1ZUltcCAqaW1wID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZUltcCAqPihjZWxsKTsKKyAg
ICAgIEFsbG9jYXRlZFZhbHVlSW1wICppbXAgPSByZWludGVycHJldF9jYXN0PEFsbG9jYXRlZFZh
bHVlSW1wICo+KGNlbGwpOwogCiAgICAgICBpZiAoY2VsbC0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVl
ICE9IDApIHsKLQlpZiAoIWltcC0+X21hcmtlZCkKKwlpZiAoIWltcC0+bV9tYXJrZWQpCiAJewot
CSAgLy9mcHJpbnRmKHN0ZGVyciwgIkNvbGxlY3Rvcjo6ZGVsZXRpbmcgVmFsdWVJbXAgJXAgKCVz
KVxuIiwgaW1wLCBjbGFzc05hbWUoaW1wKSk7CisJICAvL2ZwcmludGYoc3RkZXJyLCAiQ29sbGVj
dG9yOjpkZWxldGluZyBBbGxvY2F0ZWRWYWx1ZUltcCAlcCAoJXMpXG4iLCBpbXAsIGNsYXNzTmFt
ZShpbXApKTsKIAkgIC8vIGVtdWxhdGUgZGVzdHJ1Y3RpbmcgcGFydCBvZiAnb3BlcmF0b3IgZGVs
ZXRlKCknCi0JICBpbXAtPn5WYWx1ZUltcCgpOworCSAgaW1wLT5+QWxsb2NhdGVkVmFsdWVJbXAo
KTsKIAkgIGN1ckJsb2NrLT51c2VkQ2VsbHMtLTsKIAkgIG51bUxpdmVPYmplY3RzLS07CiAJICBk
ZWxldGVkID0gdHJ1ZTsKQEAgLTM4OCw3ICszODgsNyBAQCBib29sIENvbGxlY3Rvcjo6Y29sbGVj
dCgpCiAJICBjdXJCbG9jay0+ZnJlZUxpc3QgPSBjZWxsOwogCiAJfSBlbHNlIHsKLQkgIGltcC0+
X21hcmtlZCA9IGZhbHNlOworCSAgaW1wLT5tX21hcmtlZCA9IGZhbHNlOwogCX0KICAgICAgIH0g
ZWxzZSB7CiAJbWluaW11bUNlbGxzVG9Qcm9jZXNzKys7CkBAIC00MjIsMTAgKzQyMiwxMCBAQCBi
b29sIENvbGxlY3Rvcjo6Y29sbGVjdCgpCiAgIAogICBpbnQgY2VsbCA9IDA7CiAgIHdoaWxlIChj
ZWxsIDwgaGVhcC51c2VkT3ZlcnNpemVDZWxscykgewotICAgIFZhbHVlSW1wICppbXAgPSAoVmFs
dWVJbXAgKiloZWFwLm92ZXJzaXplQ2VsbHNbY2VsbF07CisgICAgQWxsb2NhdGVkVmFsdWVJbXAg
KmltcCA9IChBbGxvY2F0ZWRWYWx1ZUltcCAqKWhlYXAub3ZlcnNpemVDZWxsc1tjZWxsXTsKICAg
ICAKLSAgICBpZiAoIWltcC0+X21hcmtlZCkgewotICAgICAgaW1wLT5+VmFsdWVJbXAoKTsKKyAg
ICBpZiAoIWltcC0+bV9tYXJrZWQpIHsKKyAgICAgIGltcC0+fkFsbG9jYXRlZFZhbHVlSW1wKCk7
CiAjaWYgREVCVUdfQ09MTEVDVE9SCiAgICAgICBoZWFwLm92ZXJzaXplQ2VsbHNbY2VsbF0tPnUu
ZnJlZUNlbGwuemVyb0lmRnJlZSA9IDA7CiAjZWxzZQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIGJvb2wg
Q29sbGVjdG9yOjpjb2xsZWN0KCkKICAgICAgIH0KIAogICAgIH0gZWxzZSB7Ci0gICAgICBpbXAt
Pl9tYXJrZWQgPSBmYWxzZTsKKyAgICAgIGltcC0+bV9tYXJrZWQgPSBmYWxzZTsKICAgICAgIGNl
bGwrKzsKICAgICB9CiAgIH0KQEAgLTUwOCw3ICs1MDgsNyBAQCBpbnQgQ29sbGVjdG9yOjpudW1S
ZWZlcmVuY2VkT2JqZWN0cygpCiBzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NOYW1lKFZhbHVlSW1w
ICp2YWwpCiB7CiAgIGNvbnN0IGNoYXIgKm5hbWUgPSAiPz8/IjsKLSAgc3dpdGNoICh2YWwtPmRp
c3BhdGNoVHlwZSgpKSB7CisgIHN3aXRjaCAodmFsLT50eXBlKCkpIHsKICAgICBjYXNlIFVuc3Bl
Y2lmaWVkVHlwZToKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVW5kZWZpbmVkVHlwZToKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9jb21wbGV0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9jb21wbGV0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAgSmF2YVNjcmlwdENvcmUva2pzL2NvbXBsZXRpb24u
aAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbXBsZXRpb24uaAkxNCBKdWwgMjAwNSAxODoyNzow
MSAtMDAwMAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29tcGxldGlvbi5oCTggQXVnIDIw
MDUgMDE6MDA6NDYgLTAwMDAKQEAgLTQ3LDE3ICs0NywxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICovCiAgIGNsYXNzIENvbXBsZXRpb24gewogICBwdWJsaWM6Ci0gICAgQ29tcGxldGlvbihDb21w
bFR5cGUgYyA9IE5vcm1hbCwgY29uc3QgVmFsdWUmIHYgPSBWYWx1ZSgpLAotICAgICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciAmdCA9IElkZW50aWZpZXI6Om51bGwoKSkKKyAgICBDb21wbGV0
aW9uKENvbXBsVHlwZSBjID0gTm9ybWFsLCBWYWx1ZUltcCAqdiA9IE5VTEwsIGNvbnN0IElkZW50
aWZpZXIgJnQgPSBJZGVudGlmaWVyOjpudWxsKCkpCiAgICAgICAgIDogY29tcChjKSwgdmFsKHYp
LCB0YXIodCkgeyB9CiAKICAgICBDb21wbFR5cGUgY29tcGxUeXBlKCkgY29uc3QgeyByZXR1cm4g
Y29tcDsgfQotICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CisgICAgVmFs
dWVJbXAgKnZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CiAgICAgSWRlbnRpZmllciB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiB0YXI7IH0KLSAgICBib29sIGlzVmFsdWVDb21wbGV0aW9uKCkg
Y29uc3QgeyByZXR1cm4gIXZhbC5pc051bGwoKTsgfQorICAgIGJvb2wgaXNWYWx1ZUNvbXBsZXRp
b24oKSBjb25zdCB7IHJldHVybiB2YWw7IH0KICAgcHJpdmF0ZToKICAgICBDb21wbFR5cGUgY29t
cDsKLSAgICBWYWx1ZSB2YWw7CisgICAgVmFsdWVJbXAgKnZhbDsKICAgICBJZGVudGlmaWVyIHRh
cjsKICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2NvbnRleHQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9ranMv
Y29udGV4dC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29udGV4dC5oCTE0IEp1bCAyMDA1IDE4
OjI3OjAxIC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9jb250ZXh0LmgJOCBBdWcg
MjAwNSAwMTowMDo0NiAtMDAwMApAQCAtMzUsMjEgKzM1LDIxIEBAIG5hbWVzcGFjZSBLSlMgIHsK
ICAgICovCiAgIGNsYXNzIENvbnRleHRJbXAgewogICBwdWJsaWM6Ci0gICAgQ29udGV4dEltcChP
YmplY3QgJmdsb2IsIEludGVycHJldGVySW1wICosIE9iamVjdCAmdGhpc1YsIENvZGVUeXBlIHR5
cGUgPSBHbG9iYWxDb2RlLAorICAgIENvbnRleHRJbXAoT2JqZWN0SW1wICpnbG9iLCBJbnRlcnBy
ZXRlckltcCAqLCBPYmplY3RJbXAgKnRoaXNWLCBDb2RlVHlwZSB0eXBlID0gR2xvYmFsQ29kZSwK
ICAgICAgICAgICAgICAgIENvbnRleHRJbXAgKmNhbGxpbmdDb250ZXh0ID0gMCwgRnVuY3Rpb25J
bXAgKmZ1bmN0aWlvbiA9IDAsIGNvbnN0IExpc3QgKmFyZ3MgPSAwKTsKICAgICB+Q29udGV4dElt
cCgpOwogCiAgICAgY29uc3QgU2NvcGVDaGFpbiAmc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJu
IHNjb3BlOyB9CiAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJldHVybiBtX2NvZGVUeXBlOyB9
Ci0gICAgT2JqZWN0IHZhcmlhYmxlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdmFyaWFibGU7IH0K
LSAgICB2b2lkIHNldFZhcmlhYmxlT2JqZWN0KGNvbnN0IE9iamVjdCAmdikgeyB2YXJpYWJsZSA9
IHY7IH0KLSAgICBPYmplY3QgdGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1ZhbDsgfQor
ICAgIE9iamVjdEltcCAqdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IHJldHVybiB2YXJpYWJsZTsg
fQorICAgIHZvaWQgc2V0VmFyaWFibGVPYmplY3QoT2JqZWN0SW1wICp2KSB7IHZhcmlhYmxlID0g
djsgfQorICAgIE9iamVjdEltcCAqdGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gdGhpc1ZhbDsg
fQogICAgIENvbnRleHRJbXAgKmNhbGxpbmdDb250ZXh0KCkgeyByZXR1cm4gX2NhbGxpbmdDb250
ZXh0OyB9Ci0gICAgT2JqZWN0SW1wICphY3RpdmF0aW9uT2JqZWN0KCkgeyByZXR1cm4gYWN0aXZh
dGlvbi5pbXAoKTsgfQorICAgIE9iamVjdEltcCAqYWN0aXZhdGlvbk9iamVjdCgpIHsgcmV0dXJu
IGFjdGl2YXRpb247IH0KICAgICBGdW5jdGlvbkltcCAqZnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBfZnVuY3Rpb247IH0KICAgICBjb25zdCBMaXN0ICphcmd1bWVudHMoKSBjb25zdCB7IHJldHVy
biBfYXJndW1lbnRzOyB9CiAKLSAgICB2b2lkIHB1c2hTY29wZShjb25zdCBPYmplY3QgJnMpIHsg
c2NvcGUucHVzaChzLmltcCgpKTsgfQorICAgIHZvaWQgcHVzaFNjb3BlKE9iamVjdEltcCAqcykg
eyBzY29wZS5wdXNoKHMpOyB9CiAgICAgdm9pZCBwb3BTY29wZSgpIHsgc2NvcGUucG9wKCk7IH0K
ICAgICBMYWJlbFN0YWNrICpzZWVuTGFiZWxzKCkgeyByZXR1cm4gJmxzOyB9CiAgICAgCkBAIC02
MywxMSArNjMsMTEgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgIC8vIGJlY2F1c2UgQ29udGV4dElt
cCBpcyBhbHdheXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywKICAgICAvLyB0aGVyZSBpcyBubyBu
ZWVkIHRvIHByb3RlY3QgdmFyaW91cyBwb2ludGVycyBmcm9tIGNvbnNlcnZhdGl2ZQogICAgIC8v
IEdDIHNpbmNlIHRoZXkgd2lsbCBiZSBjYXVnaHQgYnkgdGhlIGNvbnNlcnZhdGl2ZSBzd2VlcCBh
bnl3YXkhCi0gICAgT2JqZWN0IGFjdGl2YXRpb247CisgICAgT2JqZWN0SW1wICphY3RpdmF0aW9u
OwogICAgIAogICAgIFNjb3BlQ2hhaW4gc2NvcGU7Ci0gICAgT2JqZWN0IHZhcmlhYmxlOwotICAg
IE9iamVjdCB0aGlzVmFsOworICAgIE9iamVjdEltcCAqdmFyaWFibGU7CisgICAgT2JqZWN0SW1w
ICp0aGlzVmFsOwogCiAgICAgTGFiZWxTdGFjayBsczsKICAgICBDb2RlVHlwZSBtX2NvZGVUeXBl
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC1wIC11IC1yMS40OCBKYXZhU2NyaXB0Q29yZS9r
anMvZGF0ZV9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3Bw
CTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS40OAorKysgSmF2YVNjcmlwdENvcmUva2pzL2Rh
dGVfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjQ3IC0wMDAwCkBAIC0yNjksMTIgKzI2OSwx
MiBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRMb2NhbGVEYXRlKEtKUzo6RXhlCiAgICAgVVN0cmlu
ZwlhcmcxU3RyaW5nOwogICAgIGJvb2wJdXNlQ3VzdG9tRm9ybWF0ID0gZmFsc2U7CiAgICAgVVN0
cmluZwljdXN0b21Gb3JtYXRTdHJpbmc7Ci0gICAgYXJnMFN0cmluZyA9IGFyZ3NbMF0udG9TdHJp
bmcoZXhlYyk7CisgICAgYXJnMFN0cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAg
IGlmICgoYXJnMFN0cmluZyA9PSAiY3VzdG9tIikgJiYgKGFyZ0NvdW50ID49IDIpKSB7CiAJdXNl
Q3VzdG9tRm9ybWF0ID0gdHJ1ZTsKLQljdXN0b21Gb3JtYXRTdHJpbmcgPSBhcmdzWzFdLnRvU3Ry
aW5nKGV4ZWMpOworCWN1c3RvbUZvcm1hdFN0cmluZyA9IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
OwogICAgIH0gZWxzZSBpZiAoaW5jbHVkZURhdGUgJiYgaW5jbHVkZVRpbWUgJiYgKGFyZ0NvdW50
ID49IDIpKSB7Ci0JYXJnMVN0cmluZyA9IGFyZ3NbMV0udG9TdHJpbmcoZXhlYyk7CisJYXJnMVN0
cmluZyA9IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpOwogCWRhdGVTdHlsZSA9IHN0eWxlRnJvbUFy
Z1N0cmluZyhhcmcwU3RyaW5nLGRhdGVTdHlsZSk7CiAJdGltZVN0eWxlID0gc3R5bGVGcm9tQXJn
U3RyaW5nKGFyZzFTdHJpbmcsdGltZVN0eWxlKTsKICAgICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRl
ICYmIChhcmdDb3VudCA+PSAxKSkgewpAQCAtMzA4LDcgKzMwOCw3IEBAIHN0YXRpYyBVU3RyaW5n
IGZvcm1hdExvY2FsZURhdGUoS0pTOjpFeGUKIAogI2VuZGlmIC8vIEFQUExFX0NIQU5HRVMKIAot
dXNpbmcgbmFtZXNwYWNlIEtKUzsKK25hbWVzcGFjZSBLSlMgewogCiBzdGF0aWMgaW50IGRheShk
b3VibGUgdCkKIHsKQEAgLTM5OSwxNyArMzk5LDE3IEBAIHN0YXRpYyBkb3VibGUgdGltZUZyb21B
cmdzKEV4ZWNTdGF0ZSAqZXgKICAgICAvLyBob3VycwogICAgIGlmIChtYXhBcmdzID49IDQgJiYg
aWR4IDwgbnVtQXJncykgewogICAgICAgICB0LT50bV9ob3VyID0gMDsKLSAgICAgICAgcmVzdWx0
ID0gYXJnc1tpZHgrK10udG9JbnQzMihleGVjKSAqIG1zUGVySG91cjsKKyAgICAgICAgcmVzdWx0
ID0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYykgKiBtc1BlckhvdXI7CiAgICAgfQogICAgIC8v
IG1pbnV0ZXMKICAgICBpZiAobWF4QXJncyA+PSAzICYmIGlkeCA8IG51bUFyZ3MpIHsKICAgICAg
ICAgdC0+dG1fbWluID0gMDsKLSAgICAgICAgcmVzdWx0ICs9IGFyZ3NbaWR4KytdLnRvSW50MzIo
ZXhlYykgKiBtc1Blck1pbnV0ZTsKKyAgICAgICAgcmVzdWx0ICs9IGFyZ3NbaWR4KytdLT50b0lu
dDMyKGV4ZWMpICogbXNQZXJNaW51dGU7CiAgICAgfQogICAgIC8vIHNlY29uZHMKICAgICBpZiAo
bWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MpIHsKICAgICAgICAgdC0+dG1fc2VjID0gMDsK
LSAgICAgICAgcmVzdWx0ICs9IGFyZ3NbaWR4KytdLnRvSW50MzIoZXhlYykgKiBtc1BlclNlY29u
ZDsKKyAgICAgICAgcmVzdWx0ICs9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMpICogbXNQZXJT
ZWNvbmQ7CiAgICAgfQogICAgIC8vIHJlYWQgbXMgZnJvbSBhcmdzIGlmIHByZXNlbnQgb3IgYWRk
IHRoZSBvbGQgdmFsdWUKICAgICByZXN1bHQgKz0gaWR4IDwgbnVtQXJncyA/IHJvdW5kVmFsdWUo
ZXhlYywgYXJnc1tpZHhdKSA6IG1zOwpAQCAtNDg1LDggKzQ4NSw3IEBAIERhdGVQcm90b3R5cGVJ
bXA6OkRhdGVQcm90b3R5cGVJbXAoRXhlY1MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0UHJvdG90eXBlSW1wICpvYmplY3RQcm90bykKICAgOiBEYXRlSW5zdGFuY2VJ
bXAob2JqZWN0UHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7Ci0gIHNldEludGVybmFs
VmFsdWUoTnVtYmVySW1wOjpjcmVhdGUoTmFOKSk7CisgIHNldEludGVybmFsVmFsdWUoanNOYU4o
KSk7CiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBEYXRl
T2JqZWN0SW1wIGhhcyBiZWVuIGJ1aWx0CiB9CiAKQEAgLTQ5OSwxMSArNDk4LDEwIEBAIGJvb2wg
RGF0ZVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHlTbG8KIAogRGF0ZVByb3RvRnVuY0ltcDo6
RGF0ZVByb3RvRnVuY0ltcChFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKQogICA6IElu
dGVybmFsRnVuY3Rpb25JbXAoCi0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Qcm90b3R5cGVJbXAq
PihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCku
aW1wKCkpCisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Qcm90b3R5cGVJbXAqPihleGVjLT5sZXhp
Y2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkpCiAgICAgKSwgaWQo
YWJzKGkpKSwgdXRjKGk8MCkKICAgLy8gV2UgdXNlIGEgbmVnYXRpdmUgSUQgdG8gZGVub3RlIHRo
ZSAiVVRDIiB2YXJpYW50LgogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3Qo
bGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwog
fQogCkBAIC01MTIsMjEgKzUxMCwyMSBAQCBib29sIERhdGVQcm90b0Z1bmNJbXA6OmltcGxlbWVu
dHNDYWxsKCkgCiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1ZSBEYXRlUHJvdG9GdW5jSW1wOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQor
VmFsdWVJbXAgKkRhdGVQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogICBpZiAoKGlkID09
IFRvU3RyaW5nIHx8IGlkID09IFZhbHVlT2YgfHwgaWQgPT0gR2V0VGltZSB8fCBpZCA9PSBTZXRU
aW1lKSAmJgotICAgICAgIXRoaXNPYmouaW5oZXJpdHMoJkRhdGVJbnN0YW5jZUltcDo6aW5mbykp
IHsKKyAgICAgICF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlSW1wOjppbmZvKSkgewog
ICAgIC8vIG5vbi1nZW5lcmljIGZ1bmN0aW9uIGNhbGxlZCBvbiBub24tZGF0ZSBvYmplY3QKIAog
ICAgIC8vIFRvU3RyaW5nIGFuZCBWYWx1ZU9mIGFyZSBnZW5lcmljIGFjY29yZGluZyB0byB0aGUg
c3BlYywgYnV0IHRoZSBtb3ppbGxhCiAgICAgLy8gdGVzdHMgc3VnZ2VzdCBvdGhlcndpc2UuLi4K
LSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9CiAKIAotICBWYWx1ZSByZXN1
bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQgPSBOVUxMOwogICBVU3RyaW5nIHM7CiAjaWYgIUFQUExF
X0NIQU5HRVMKICAgY29uc3QgaW50IGJ1ZnNpemU9MTAwOwpAQCAtNTM1LDggKzUzMyw4IEBAIFZh
bHVlIERhdGVQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICoKICAgaWYgKCFvbGRsb2NhbGUu
Y19zdHIoKSkKICAgICBvbGRsb2NhbGUgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKICNlbmRp
ZgotICBWYWx1ZSB2ID0gdGhpc09iai5pbnRlcm5hbFZhbHVlKCk7Ci0gIGRvdWJsZSBtaWxsaSA9
IHYudG9OdW1iZXIoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gdGhpc09iai0+aW50ZXJuYWxWYWx1
ZSgpOworICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgCiAgIGlmIChpc05h
TihtaWxsaSkpIHsKICAgICBzd2l0Y2ggKGlkKSB7CkBAIC01NjEsNyArNTU5LDcgQEAgVmFsdWUg
RGF0ZVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKgogICAgICAgY2FzZSBHZXRTZWNvbmRz
OgogICAgICAgY2FzZSBHZXRNaWxsaVNlY29uZHM6CiAgICAgICBjYXNlIEdldFRpbWV6b25lT2Zm
c2V0OgotICAgICAgICByZXR1cm4gTnVtYmVyKE5hTik7CisgICAgICAgIHJldHVybiBqc05hTigp
OwogICAgIH0KICAgfQogICAKQEAgLTcwNyw3ICs3MDUsNyBAQCBWYWx1ZSBEYXRlUHJvdG9GdW5j
SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqCiAgIGNhc2UgU2V0VGltZToKICAgICBtaWxsaSA9IHJvdW5k
VmFsdWUoZXhlYywgYXJnc1swXSk7CiAgICAgcmVzdWx0ID0gTnVtYmVyKG1pbGxpKTsKLSAgICB0
aGlzT2JqLnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICB0aGlzT2JqLT5zZXRJbnRlcm5h
bFZhbHVlKHJlc3VsdCk7CiAgICAgYnJlYWs7CiAgIGNhc2UgU2V0TWlsbGlTZWNvbmRzOgogICAg
IG1zID0gcm91bmRWYWx1ZShleGVjLCBhcmdzWzBdKTsKQEAgLTcyMywyMiArNzIxLDIyIEBAIFZh
bHVlIERhdGVQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICoKICAgICBicmVhazsKICAgY2Fz
ZSBTZXREYXRlOgogICAgICAgdC0+dG1fbWRheSA9IDA7Ci0gICAgICBtcyArPSBhcmdzWzBdLnRv
SW50MzIoZXhlYykgKiBtc1BlckRheTsKKyAgICAgIG1zICs9IGFyZ3NbMF0tPnRvSW50MzIoZXhl
YykgKiBtc1BlckRheTsKICAgICAgIGJyZWFrOwogICBjYXNlIFNldE1vbnRoOgotICAgIHQtPnRt
X21vbiA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAgICB0LT50bV9tb24gPSBhcmdzWzBdLT50
b0ludDMyKGV4ZWMpOwogICAgIGlmIChhcmdzLnNpemUoKSA+PSAyKQotICAgICAgdC0+dG1fbWRh
eSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIHQtPnRtX21kYXkgPSBhcmdzWzFdLT50
b0ludDMyKGV4ZWMpOwogICAgIGJyZWFrOwogICBjYXNlIFNldEZ1bGxZZWFyOgotICAgIHQtPnRt
X3llYXIgPSBhcmdzWzBdLnRvSW50MzIoZXhlYykgLSAxOTAwOworICAgIHQtPnRtX3llYXIgPSBh
cmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMDsKICAgICBpZiAoYXJncy5zaXplKCkgPj0gMikK
LSAgICAgIHQtPnRtX21vbiA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIHQtPnRtX21v
biA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpCi0g
ICAgICB0LT50bV9tZGF5ID0gYXJnc1syXS50b0ludDMyKGV4ZWMpOworICAgICAgdC0+dG1fbWRh
eSA9IGFyZ3NbMl0tPnRvSW50MzIoZXhlYyk7CiAgICAgYnJlYWs7CiAgIGNhc2UgU2V0WWVhcjoK
LSAgICB0LT50bV95ZWFyID0gYXJnc1swXS50b0ludDMyKGV4ZWMpID49IDE5MDAgPyBhcmdzWzBd
LnRvSW50MzIoZXhlYykgLSAxOTAwIDogYXJnc1swXS50b0ludDMyKGV4ZWMpOworICAgIHQtPnRt
X3llYXIgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpID49IDE5MDAgPyBhcmdzWzBdLT50b0ludDMy
KGV4ZWMpIC0gMTkwMCA6IGFyZ3NbMF0tPnRvSW50MzIoZXhlYyk7CiAgICAgYnJlYWs7CiAgIH0K
IApAQCAtNzQ2LDcgKzc0NCw3IEBAIFZhbHVlIERhdGVQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0
YXRlICoKICAgICAgIGlkID09IFNldE1pbnV0ZXMgfHwgaWQgPT0gU2V0SG91cnMgfHwgaWQgPT0g
U2V0RGF0ZSB8fAogICAgICAgaWQgPT0gU2V0TW9udGggfHwgaWQgPT0gU2V0RnVsbFllYXIgKSB7
CiAgICAgcmVzdWx0ID0gTnVtYmVyKG1ha2VUaW1lKHQsIG1zLCB1dGMpKTsKLSAgICB0aGlzT2Jq
LnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICB0aGlzT2JqLT5zZXRJbnRlcm5hbFZhbHVl
KHJlc3VsdCk7CiAgIH0KICAgCiAgIHJldHVybiByZXN1bHQ7CkBAIC03NjEsOCArNzU5LDYgQEAg
RGF0ZU9iamVjdEltcDo6RGF0ZU9iamVjdEltcChFeGVjU3RhdGUgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEYXRlUHJvdG90eXBlSW1wICpkYXRlUHJvdG8pCiAgIDogSW50ZXJuYWxG
dW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7Ci0gIAogICAv
LyBFQ01BIDE1LjkuNC4xIERhdGUucHJvdG90eXBlCiAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9w
ZXJ0eU5hbWUsIGRhdGVQcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiAKQEAg
LTc4MSw3ICs3NzcsNyBAQCBib29sIERhdGVPYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3Qo
CiB9CiAKIC8vIEVDTUEgMTUuOS4zCi1PYmplY3QgRGF0ZU9iamVjdEltcDo6Y29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKK09iamVjdEltcCAqRGF0ZU9iamVjdElt
cDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgaW50
IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIApAQCAtODA3LDM4ICs4MDMsMzcgQEAgT2JqZWN0IERh
dGVPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdAogI2VuZGlmCiAgICAgdmFsdWUgPSB1dGM7
CiAgIH0gZWxzZSBpZiAobnVtQXJncyA9PSAxKSB7Ci0gICAgICBpZiAoYXJnc1swXS50eXBlKCkg
PT0gU3RyaW5nVHlwZSkKLSAgICAgICAgICB2YWx1ZSA9IHBhcnNlRGF0ZShhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgIGlmIChhcmdzWzBdLT5pc1N0cmluZygpKQorICAgICAgICAgIHZh
bHVlID0gcGFyc2VEYXRlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgIGVsc2UKLSAg
ICAgICAgICB2YWx1ZSA9IGFyZ3NbMF0udG9QcmltaXRpdmUoZXhlYykudG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLT50b1ByaW1pdGl2ZShleGVjKS0+dG9OdW1iZXIo
ZXhlYyk7CiAgIH0gZWxzZSB7CiAgICAgc3RydWN0IHRtIHQ7CiAgICAgbWVtc2V0KCZ0LCAwLCBz
aXplb2YodCkpOwotICAgIGlmIChpc05hTihhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKQotICAgICAg
ICB8fCBpc05hTihhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKQotICAgICAgICB8fCAobnVtQXJncyA+
PSAzICYmIGlzTmFOKGFyZ3NbMl0udG9OdW1iZXIoZXhlYykpKQotICAgICAgICB8fCAobnVtQXJn
cyA+PSA0ICYmIGlzTmFOKGFyZ3NbM10udG9OdW1iZXIoZXhlYykpKQotICAgICAgICB8fCAobnVt
QXJncyA+PSA1ICYmIGlzTmFOKGFyZ3NbNF0udG9OdW1iZXIoZXhlYykpKQotICAgICAgICB8fCAo
bnVtQXJncyA+PSA2ICYmIGlzTmFOKGFyZ3NbNV0udG9OdW1iZXIoZXhlYykpKQotICAgICAgICB8
fCAobnVtQXJncyA+PSA3ICYmIGlzTmFOKGFyZ3NbNl0udG9OdW1iZXIoZXhlYykpKSkgeworICAg
IGlmIChpc05hTihhcmdzWzBdLT50b051bWJlcihleGVjKSkKKyAgICAgICAgfHwgaXNOYU4oYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYykpCisgICAgICAgIHx8IChudW1BcmdzID49IDMgJiYgaXNOYU4o
YXJnc1syXS0+dG9OdW1iZXIoZXhlYykpKQorICAgICAgICB8fCAobnVtQXJncyA+PSA0ICYmIGlz
TmFOKGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAgICAgfHwgKG51bUFyZ3MgPj0gNSAm
JiBpc05hTihhcmdzWzRdLT50b051bWJlcihleGVjKSkpCisgICAgICAgIHx8IChudW1BcmdzID49
IDYgJiYgaXNOYU4oYXJnc1s1XS0+dG9OdW1iZXIoZXhlYykpKQorICAgICAgICB8fCAobnVtQXJn
cyA+PSA3ICYmIGlzTmFOKGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpKSkpIHsKICAgICAgIHZhbHVl
ID0gTmFOOwogICAgIH0gZWxzZSB7Ci0gICAgICBpbnQgeWVhciA9IGFyZ3NbMF0udG9JbnQzMihl
eGVjKTsKKyAgICAgIGludCB5ZWFyID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKICAgICAgIHQu
dG1feWVhciA9ICh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkgPyB5ZWFyIDogeWVhciAtIDE5MDA7
Ci0gICAgICB0LnRtX21vbiA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKLSAgICAgIHQudG1fbWRh
eSA9IChudW1BcmdzID49IDMpID8gYXJnc1syXS50b0ludDMyKGV4ZWMpIDogMTsKLSAgICAgIHQu
dG1faG91ciA9IChudW1BcmdzID49IDQpID8gYXJnc1szXS50b0ludDMyKGV4ZWMpIDogMDsKLSAg
ICAgIHQudG1fbWluID0gKG51bUFyZ3MgPj0gNSkgPyBhcmdzWzRdLnRvSW50MzIoZXhlYykgOiAw
OwotICAgICAgdC50bV9zZWMgPSAobnVtQXJncyA+PSA2KSA/IGFyZ3NbNV0udG9JbnQzMihleGVj
KSA6IDA7CisgICAgICB0LnRtX21vbiA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CisgICAgICB0
LnRtX21kYXkgPSAobnVtQXJncyA+PSAzKSA/IGFyZ3NbMl0tPnRvSW50MzIoZXhlYykgOiAxOwor
ICAgICAgdC50bV9ob3VyID0gKG51bUFyZ3MgPj0gNCkgPyBhcmdzWzNdLT50b0ludDMyKGV4ZWMp
IDogMDsKKyAgICAgIHQudG1fbWluID0gKG51bUFyZ3MgPj0gNSkgPyBhcmdzWzRdLT50b0ludDMy
KGV4ZWMpIDogMDsKKyAgICAgIHQudG1fc2VjID0gKG51bUFyZ3MgPj0gNikgPyBhcmdzWzVdLT50
b0ludDMyKGV4ZWMpIDogMDsKICAgICAgIHQudG1faXNkc3QgPSAtMTsKICAgICAgIGRvdWJsZSBt
cyA9IChudW1BcmdzID49IDcpID8gcm91bmRWYWx1ZShleGVjLCBhcmdzWzZdKSA6IDA7CiAgICAg
ICB2YWx1ZSA9IG1ha2VUaW1lKCZ0LCBtcywgZmFsc2UpOwogICAgIH0KICAgfQogICAKLSAgT2Jq
ZWN0IHByb3RvID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5EYXRlUHJvdG90
eXBlKCk7Ci0gIE9iamVjdCByZXQobmV3IERhdGVJbnN0YW5jZUltcChwcm90by5pbXAoKSkpOwot
ICByZXQuc2V0SW50ZXJuYWxWYWx1ZShOdW1iZXIodGltZUNsaXAodmFsdWUpKSk7CisgIERhdGVJ
bnN0YW5jZUltcCAqcmV0ID0gbmV3IERhdGVJbnN0YW5jZUltcChleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKSk7CisgIHJldC0+c2V0SW50ZXJuYWxWYWx1
ZShOdW1iZXIodGltZUNsaXAodmFsdWUpKSk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTg0OCwx
MSArODQzLDggQEAgYm9vbCBEYXRlT2JqZWN0SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGNvbgogfQog
CiAvLyBFQ01BIDE1LjkuMgotVmFsdWUgRGF0ZU9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKi8q
ZXhlYyovLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKK1ZhbHVl
SW1wICpEYXRlT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKi8qZXhlYyovLCBP
YmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKIHsKLSNpZmRlZiBL
SlNfVkVSQk9TRQotICBmcHJpbnRmKHN0ZGVyciwiRGF0ZU9iamVjdEltcDo6Y2FsbCAtIGN1cnJl
bnQgdGltZVxuIik7Ci0jZW5kaWYKICAgdGltZV90IHQgPSB0aW1lKDBMKTsKICNpZiBBUFBMRV9D
SEFOR0VTCiAgIHN0cnVjdCB0bSAqdG0gPSBsb2NhbHRpbWUoJnQpOwpAQCAtODcxLDcgKzg2Myw2
IEBAIERhdGVPYmplY3RGdW5jSW1wOjpEYXRlT2JqZWN0RnVuY0ltcChFeGUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgaW50IGxlbikKICAgOiBJbnRlcm5hbEZ1
bmN0aW9uSW1wKGZ1bmNQcm90byksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAg
IHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxE
b250RW51bSk7CiB9CiAKQEAgLTg4MSwzMSArODcyLDMxIEBAIGJvb2wgRGF0ZU9iamVjdEZ1bmNJ
bXA6OmltcGxlbWVudHNDYWxsKCkKIH0KIAogLy8gRUNNQSAxNS45LjQuMiAtIDMKLVZhbHVlIERh
dGVPYmplY3RGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRoaXNPYmoq
LywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpEYXRlT2JqZWN0RnVuY0ltcDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAgIGlmIChpZCA9PSBQYXJzZSkgewotICAgIHJldHVybiBOdW1iZXIocGFyc2VE
YXRlKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4gTnVtYmVyKHBhcnNlRGF0
ZShhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogICB9CiAgIGVsc2UgeyAvLyBVVEMKICAgICBz
dHJ1Y3QgdG0gdDsKICAgICBtZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CiAgICAgaW50IG4gPSBh
cmdzLnNpemUoKTsKLSAgICBpZiAoaXNOYU4oYXJnc1swXS50b051bWJlcihleGVjKSkKLSAgICAg
ICAgfHwgaXNOYU4oYXJnc1sxXS50b051bWJlcihleGVjKSkKLSAgICAgICAgfHwgKG4gPj0gMyAm
JiBpc05hTihhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwgKG4gPj0gNCAmJiBp
c05hTihhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwgKG4gPj0gNSAmJiBpc05h
TihhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwgKG4gPj0gNiAmJiBpc05hTihh
cmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSkKLSAgICAgICAgfHwgKG4gPj0gNyAmJiBpc05hTihhcmdz
WzZdLnRvTnVtYmVyKGV4ZWMpKSkpIHsKKyAgICBpZiAoaXNOYU4oYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYykpCisgICAgICAgIHx8IGlzTmFOKGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKQorICAgICAg
ICB8fCAobiA+PSAzICYmIGlzTmFOKGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAgICAg
fHwgKG4gPj0gNCAmJiBpc05hTihhcmdzWzNdLT50b051bWJlcihleGVjKSkpCisgICAgICAgIHx8
IChuID49IDUgJiYgaXNOYU4oYXJnc1s0XS0+dG9OdW1iZXIoZXhlYykpKQorICAgICAgICB8fCAo
biA+PSA2ICYmIGlzTmFOKGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpKSkKKyAgICAgICAgfHwgKG4g
Pj0gNyAmJiBpc05hTihhcmdzWzZdLT50b051bWJlcihleGVjKSkpKSB7CiAgICAgICByZXR1cm4g
TnVtYmVyKE5hTik7CiAgICAgfQotICAgIGludCB5ZWFyID0gYXJnc1swXS50b0ludDMyKGV4ZWMp
OworICAgIGludCB5ZWFyID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKICAgICB0LnRtX3llYXIg
PSAoeWVhciA+PSAwICYmIHllYXIgPD0gOTkpID8geWVhciA6IHllYXIgLSAxOTAwOwotICAgIHQu
dG1fbW9uID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOwotICAgIHQudG1fbWRheSA9IChuID49IDMp
ID8gYXJnc1syXS50b0ludDMyKGV4ZWMpIDogMTsKLSAgICB0LnRtX2hvdXIgPSAobiA+PSA0KSA/
IGFyZ3NbM10udG9JbnQzMihleGVjKSA6IDA7Ci0gICAgdC50bV9taW4gPSAobiA+PSA1KSA/IGFy
Z3NbNF0udG9JbnQzMihleGVjKSA6IDA7Ci0gICAgdC50bV9zZWMgPSAobiA+PSA2KSA/IGFyZ3Nb
NV0udG9JbnQzMihleGVjKSA6IDA7CisgICAgdC50bV9tb24gPSBhcmdzWzFdLT50b0ludDMyKGV4
ZWMpOworICAgIHQudG1fbWRheSA9IChuID49IDMpID8gYXJnc1syXS0+dG9JbnQzMihleGVjKSA6
IDE7CisgICAgdC50bV9ob3VyID0gKG4gPj0gNCkgPyBhcmdzWzNdLT50b0ludDMyKGV4ZWMpIDog
MDsKKyAgICB0LnRtX21pbiA9IChuID49IDUpID8gYXJnc1s0XS0+dG9JbnQzMihleGVjKSA6IDA7
CisgICAgdC50bV9zZWMgPSAobiA+PSA2KSA/IGFyZ3NbNV0tPnRvSW50MzIoZXhlYykgOiAwOwog
ICAgIGRvdWJsZSBtcyA9IChuID49IDcpID8gcm91bmRWYWx1ZShleGVjLCBhcmdzWzZdKSA6IDA7
CiAgICAgcmV0dXJuIE51bWJlcihtYWtlVGltZSgmdCwgbXMsIHRydWUpKTsKICAgfQpAQCAtOTE0
LDcgKzkwNSw3IEBAIFZhbHVlIERhdGVPYmplY3RGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotZG91YmxlIEtKUzo6cGFyc2VEYXRlKGNvbnN0IFVT
dHJpbmcgJnUpCitkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFVTdHJpbmcgJnUpCiB7CiAjaWZkZWYg
S0pTX1ZFUkJPU0UKICAgZnByaW50ZihzdGRlcnIsIktKUzo6cGFyc2VEYXRlICVzXG4iLHUuYXNj
aWkoKSk7CkBAIC0xMDI3LDcgKzEwMTgsNyBAQCBzdGF0aWMgaW50IGZpbmRNb250aChjb25zdCBj
aGFyICptb250aFN0CiAgIHJldHVybiAtMTsKIH0KIAotZG91YmxlIEtKUzo6S1JGQ0RhdGVfcGFy
c2VEYXRlKGNvbnN0IFVTdHJpbmcgJl9kYXRlKQorZG91YmxlIEtSRkNEYXRlX3BhcnNlRGF0ZShj
b25zdCBVU3RyaW5nICZfZGF0ZSkKIHsKICAgICAgLy8gVGhpcyBwYXJzZSBhIGRhdGUgaW4gdGhl
IGZvcm06CiAgICAgIC8vICAgICBUdWVzZGF5LCAwOS1Ob3YtOTkgMjM6MTI6NDAgR01UCkBAIC0x
MzQ0LDcgKzEzMzUsNyBAQCBkb3VibGUgS0pTOjpLUkZDRGF0ZV9wYXJzZURhdGUoY29uc3QgVVN0
CiB9CiAKIAotZG91YmxlIEtKUzo6dGltZUNsaXAoZG91YmxlIHQpCitkb3VibGUgdGltZUNsaXAo
ZG91YmxlIHQpCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh0KSkKICAgICAgICAgcmV0dXJuIE5hTjsK
QEAgLTEzNTMsMyArMTM0NCw1IEBAIGRvdWJsZSBLSlM6OnRpbWVDbGlwKGRvdWJsZSB0KQogICAg
ICAgICByZXR1cm4gTmFOOwogICAgIHJldHVybiBjb3B5c2lnbihmbG9vcihhdCksIHQpOwogfQor
Cit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQgSmF2YVNjcmlwdENvcmUva2pz
L2RhdGVfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCTcgQXVn
IDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xNAorKysgSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2Jq
ZWN0LmgJOCBBdWcgMjAwNSAwMTowMDo0NyAtMDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBEYXRlUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGksIGlu
dCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKIAog
ICAgIENvbXBsZXRpb24gZXhlY3V0ZShjb25zdCBMaXN0ICYpOwpAQCAtOTEsMTIgKzkxLDEyIEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAgICAgICAgRGF0ZVByb3RvdHlwZUltcCAqZGF0
ZVByb3RvKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlz
dCAmYXJncyk7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpOwogCiAgICAgQ29tcGxldGlvbiBleGVjdXRlKGNvbnN0IExpc3QgJik7Ci0gICAgT2Jq
ZWN0IGNvbnN0cnVjdChjb25zdCBMaXN0ICYpOworICAgIE9iamVjdEltcCAqY29uc3RydWN0KGNv
bnN0IExpc3QgJik7CiAgIH07CiAKICAgLyoqCkBAIC0xMTEsNyArMTExLDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGludCBsZW4pOwogCiAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICBlbnVtIHsgUGFyc2UsIFVU
QyB9OwogICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2Vy
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgSmF2YVNjcmlw
dENvcmUva2pzL2RlYnVnZ2VyLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2RlYnVnZ2VyLmNw
cAkyNyBKdWwgMjAwNSAyMzoxMDo0OSAtMDAwMAkxLjUKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9k
ZWJ1Z2dlci5jcHAJOCBBdWcgMjAwNSAwMTowMDo0NyAtMDAwMApAQCAtOTksNyArOTksNyBAQCBi
b29sIERlYnVnZ2VyOjpzb3VyY2VVbnVzZWQoRXhlY1N0YXRlICovCiB9CiAKIGJvb2wgRGVidWdn
ZXI6OmV4Y2VwdGlvbihFeGVjU3RhdGUgKi8qZXhlYyovLCBpbnQgLypzb3VyY2VJZCovLCBpbnQg
LypsaW5lbm8qLywKLSAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgJi8qZXhjZXB0aW9u
T2JqKi8pCisgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICovKmV4Y2VwdGlvbk9i
aiovKQogewogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTExMSwxMyArMTExLDEzIEBAIGJvb2wgRGVi
dWdnZXI6OmF0U3RhdGVtZW50KEV4ZWNTdGF0ZSAqLyoKIH0KIAogYm9vbCBEZWJ1Z2dlcjo6Y2Fs
bEV2ZW50KEV4ZWNTdGF0ZSAqLypleGVjKi8sIGludCAvKnNvdXJjZUlkKi8sIGludCAvKmxpbmVu
byovLAotICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAmLypmdW5jdGlvbiovLCBjb25z
dCBMaXN0ICYvKmFyZ3MqLykKKyAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKi8q
ZnVuY3Rpb24qLywgY29uc3QgTGlzdCAmLyphcmdzKi8pCiB7CiAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIERlYnVnZ2VyOjpyZXR1cm5FdmVudChFeGVjU3RhdGUgKi8qZXhlYyovLCBpbnQgLypz
b3VyY2VJZCovLCBpbnQgLypsaW5lbm8qLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9i
amVjdCAmLypmdW5jdGlvbiovKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1w
ICovKmZ1bmN0aW9uKi8pCiB7CiAgIHJldHVybiB0cnVlOwogfQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL2RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3Jp
cHRDb3JlL2tqcy9kZWJ1Z2dlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAt
dSAtcjEuNSBKYXZhU2NyaXB0Q29yZS9ranMvZGVidWdnZXIuaAotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL2RlYnVnZ2VyLmgJMjcgSnVsIDIwMDUgMjM6MTA6NDkgLTAwMDAJMS41CisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvZGVidWdnZXIuaAk4IEF1ZyAyMDA1IDAxOjAwOjQ4IC0wMDAwCkBAIC0yOCw3
ICsyOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBEZWJ1Z2dlckltcDsKICAgY2xhc3Mg
SW50ZXJwcmV0ZXI7CiAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgY2xhc3MgT2JqZWN0OworICBjbGFz
cyBPYmplY3RJbXA7CiAgIGNsYXNzIFVTdHJpbmc7CiAgIGNsYXNzIExpc3Q7CiAKQEAgLTE0MSw3
ICsxNDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBiZSBhYm9ydGVkCiAgICAgICovCiAg
ICAgdmlydHVhbCBib29sIGV4Y2VwdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGludCBzb3VyY2VJZCwg
aW50IGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCAmZXhjZXB0aW9u
T2JqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uT2Jq
KTsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCB3aGVuIGEgbGluZSBvZiB0aGUgc2NyaXB0IGlz
IHJlYWNoZWQgKGJlZm9yZSBpdCBpcyBleGVjdXRlZCkKQEAgLTE4MSw3ICsxODEsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgKiBiZSBhYm9ydGVkCiAgICAgICovCiAgICAgdmlydHVhbCBib29s
IGNhbGxFdmVudChFeGVjU3RhdGUgKmV4ZWMsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubywKLQkJ
CSAgIE9iamVjdCAmZnVuY3Rpb24sIGNvbnN0IExpc3QgJmFyZ3MpOworCQkJICAgT2JqZWN0SW1w
ICpmdW5jdGlvbiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQg
b24gZWFjaCBmdW5jdGlvbiBleGl0LiBUaGUgZnVuY3Rpb24gYmVpbmcgcmV0dXJuZWQgZnJvbSBp
cyB0aGF0CkBAIC0yMDIsNyArMjAyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogYmUgYWJv
cnRlZAogICAgICAqLwogICAgIHZpcnR1YWwgYm9vbCByZXR1cm5FdmVudChFeGVjU3RhdGUgKmV4
ZWMsIGludCBzb3VyY2VJZCwgaW50IGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT2JqZWN0ICZmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqZnVuY3Rpb24pOwogCiAgIHByaXZhdGU6CiAgICAgRGVidWdnZXJJbXAgKnJlcDsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1yMS4xNiBKYXZhU2NyaXB0Q29yZS9ranMv
ZXJyb3Jfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29iamVjdC5jcHAJ
MTggSnVsIDIwMDUgMTc6NDA6NTQgLTAwMDAJMS4xNgorKysgSmF2YVNjcmlwdENvcmUva2pzL2Vy
cm9yX29iamVjdC5jcHAJOCBBdWcgMjAwNSAwMTowMDo0OCAtMDAwMApAQCAtNDcsNyArNDcsNiBA
QCBFcnJvclByb3RvdHlwZUltcDo6RXJyb3JQcm90b3R5cGVJbXAoRXhlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bykK
ICAgOiBPYmplY3RJbXAob2JqZWN0UHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAg
IHNldEludGVybmFsVmFsdWUoVW5kZWZpbmVkKCkpOwogICAvLyBUaGUgY29uc3RydWN0b3Igd2ls
bCBiZSBhZGRlZCBsYXRlciBpbiBFcnJvck9iamVjdEltcCdzIGNvbnN0cnVjdG9yCiAKQEAgLTYx
LDggKzYwLDcgQEAgRXJyb3JQcm90b3R5cGVJbXA6OkVycm9yUHJvdG90eXBlSW1wKEV4ZQogRXJy
b3JQcm90b0Z1bmNJbXA6OkVycm9yUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rp
b25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQ
cm90bykKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3Bl
cnR5TmFtZSwgTnVtYmVySW1wOjp6ZXJvKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0p
OworICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc1plcm8oKSwgRG9udERlbGV0ZXxS
ZWFkT25seXxEb250RW51bSk7CiB9CiAKIGJvb2wgRXJyb3JQcm90b0Z1bmNJbXA6OmltcGxlbWVu
dHNDYWxsKCkgY29uc3QKQEAgLTcwLDE5ICs2OCwxOSBAQCBib29sIEVycm9yUHJvdG9GdW5jSW1w
OjppbXBsZW1lbnRzQ2FsbCgpCiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1ZSBFcnJvclByb3Rv
RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmLyphcmdzKi8pCitWYWx1ZUltcCAqRXJyb3JQcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYvKmFyZ3Mq
LykKIHsKICAgLy8gdG9TdHJpbmcoKQogICBVU3RyaW5nIHMgPSAiRXJyb3IiOwogCi0gIFZhbHVl
IHYgPSB0aGlzT2JqLmdldChleGVjLCBuYW1lUHJvcGVydHlOYW1lKTsKLSAgaWYgKHYudHlwZSgp
ICE9IFVuZGVmaW5lZFR5cGUpIHsKLSAgICBzID0gdi50b1N0cmluZyhleGVjKTsKKyAgVmFsdWVJ
bXAgKnYgPSB0aGlzT2JqLT5nZXQoZXhlYywgbmFtZVByb3BlcnR5TmFtZSk7CisgIGlmICghdi0+
aXNVbmRlZmluZWQoKSkgeworICAgIHMgPSB2LT50b1N0cmluZyhleGVjKTsKICAgfQogCi0gIHYg
PSB0aGlzT2JqLmdldChleGVjLCBtZXNzYWdlUHJvcGVydHlOYW1lKTsKLSAgaWYgKHYudHlwZSgp
ICE9IFVuZGVmaW5lZFR5cGUpIHsKLSAgICBzICs9ICI6ICIgKyB2LnRvU3RyaW5nKGV4ZWMpOyAv
LyBNb3ppbGxhIGNvbXBhdGlibGUgZm9ybWF0CisgIHYgPSB0aGlzT2JqLT5nZXQoZXhlYywgbWVz
c2FnZVByb3BlcnR5TmFtZSk7CisgIGlmICghdi0+aXNVbmRlZmluZWQoKSkgeworICAgIHMgKz0g
IjogIiArIHYtPnRvU3RyaW5nKGV4ZWMpOyAvLyBNb3ppbGxhIGNvbXBhdGlibGUgZm9ybWF0CiAg
IH0KIAogICByZXR1cm4gU3RyaW5nKHMpOwpAQCAtOTQsMTAgKzkyLDkgQEAgRXJyb3JPYmplY3RJ
bXA6OkVycm9yT2JqZWN0SW1wKEV4ZWNTdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVycm9yUHJvdG90eXBlSW1wICplcnJvclByb3RvKQogICA6IEludGVybmFsRnVuY3Rpb25J
bXAoZnVuY1Byb3RvKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICAvLyBFQ01BIDE1LjEx
LjMuMSBFcnJvci5wcm90b3R5cGUKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwg
ZXJyb3JQcm90bywgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7Ci0gIHB1dERpcmVjdChs
ZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlckltcDo6b25lKCksIERvbnREZWxldGV8UmVhZE9ubHl8
RG9udEVudW0pOworICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBEb250
RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKICAgLy9wdXREaXJlY3QobmFtZVByb3BlcnR5TmFt
ZSwgU3RyaW5nKG4pKTsKIH0KIApAQCAtMTA3LDE1ICsxMDQsMTQgQEAgYm9vbCBFcnJvck9iamVj
dEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdAogfQogCiAvLyBFQ01BIDE1LjkuMwotT2JqZWN0IEVy
cm9yT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdz
KQorT2JqZWN0SW1wICpFcnJvck9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncykKIHsKLSAgT2JqZWN0IHByb3RvID0gT2JqZWN0OjpkeW5hbWljQ2Fz
dChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkVycm9yUHJvdG90eXBlKCkpOwot
ICBPYmplY3RJbXAgKmltcCA9IG5ldyBFcnJvckluc3RhbmNlSW1wKHByb3RvLmltcCgpKTsKLSAg
T2JqZWN0IG9iaihpbXApOworICBPYmplY3RJbXAgKnByb3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRXJyb3JQcm90b3R5cGUo
KSk7CisgIE9iamVjdEltcCAqaW1wID0gbmV3IEVycm9ySW5zdGFuY2VJbXAocHJvdG8pOworICBP
YmplY3RJbXAgKm9iaihpbXApOwogCi0gIGlmICghYXJncy5pc0VtcHR5KCkgJiYgYXJnc1swXS50
eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSkgewotICAgIGltcC0+cHV0RGlyZWN0KG1lc3NhZ2VQcm9w
ZXJ0eU5hbWUsIG5ldyBTdHJpbmdJbXAoYXJnc1swXS50b1N0cmluZyhleGVjKSkpOwotICB9Cisg
IGlmICghYXJnc1swXS0+aXNVbmRlZmluZWQoKSkKKyAgICBpbXAtPnB1dERpcmVjdChtZXNzYWdl
UHJvcGVydHlOYW1lLCBqc1N0cmluZyhhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOwogCiAgIHJl
dHVybiBvYmo7CiB9CkBAIC0xMjYsNyArMTIyLDcgQEAgYm9vbCBFcnJvck9iamVjdEltcDo6aW1w
bGVtZW50c0NhbGwoKSBjbwogfQogCiAvLyBFQ01BIDE1LjkuMgotVmFsdWUgRXJyb3JPYmplY3RJ
bXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0
ICZhcmdzKQorVmFsdWVJbXAgKkVycm9yT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAg
IC8vICJFcnJvcigpIiBnaXZlcyB0aGUgc2FtZXMgcmVzdWx0IGFzICJuZXcgRXJyb3IoKSIKICAg
cmV0dXJuIGNvbnN0cnVjdChleGVjLGFyZ3MpOwpAQCAtMTM4LDEwICsxMzQsOSBAQCBOYXRpdmVF
cnJvclByb3RvdHlwZUltcDo6TmF0aXZlRXJyb3JQcm90CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JUeXBlIGV0LCBVU3RyaW5nIG5hbWUsIFVT
dHJpbmcgbWVzc2FnZSkKICAgOiBPYmplY3RJbXAoZXJyb3JQcm90bykKIHsKLSAgVmFsdWUgcHJv
dGVjdCh0aGlzKTsKICAgZXJyVHlwZSA9IGV0OwotICBwdXREaXJlY3QobmFtZVByb3BlcnR5TmFt
ZSwgbmV3IFN0cmluZ0ltcChuYW1lKSwgMCk7Ci0gIHB1dERpcmVjdChtZXNzYWdlUHJvcGVydHlO
YW1lLCBuZXcgU3RyaW5nSW1wKG1lc3NhZ2UpLCAwKTsKKyAgcHV0RGlyZWN0KG5hbWVQcm9wZXJ0
eU5hbWUsIGpzU3RyaW5nKG5hbWUpLCAwKTsKKyAgcHV0RGlyZWN0KG1lc3NhZ2VQcm9wZXJ0eU5h
bWUsIGpzU3RyaW5nKG1lc3NhZ2UpLCAwKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIE5hdGl2ZUVycm9ySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTE0OSwxMyArMTQ0LDEyIEBAIE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wOjpOYXRpdmVFcnJv
clByb3QKIGNvbnN0IENsYXNzSW5mbyBOYXRpdmVFcnJvckltcDo6aW5mbyA9IHsiRnVuY3Rpb24i
LCAmSW50ZXJuYWxGdW5jdGlvbkltcDo6aW5mbywgMCwgMH07CiAKIE5hdGl2ZUVycm9ySW1wOjpO
YXRpdmVFcnJvckltcChFeGVjU3RhdGUgKmV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5j
UHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT2JqZWN0ICZwcm90
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqcHJvdCkKICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90byksIHByb3RvKDApCiB7Ci0gIFZhbHVlIHByb3Rl
Y3QodGhpcyk7Ci0gIHByb3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4ocHJvdC5pbXAoKSk7
CisgIHByb3RvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4ocHJvdCk7CiAKLSAgcHV0RGlyZWN0
KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVySW1wOjpvbmUoKSwgRG9udERlbGV0ZXxSZWFkT25s
eXxEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CisgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0
eU5hbWUsIGpzT25lKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOyAvLyBFQ01BIDE1
LjExLjcuNQogICBwdXREaXJlY3QocHJvdG90eXBlUHJvcGVydHlOYW1lLCBwcm90bywgRG9udERl
bGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9CiAKQEAgLTE2NCwxMiArMTU4LDEyIEBAIGJvb2wg
TmF0aXZlRXJyb3JJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QKICAgcmV0dXJuIHRydWU7CiB9CiAK
LU9iamVjdCBOYXRpdmVFcnJvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncykKK09iamVjdEltcCAqTmF0aXZlRXJyb3JJbXA6OmNvbnN0cnVjdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIE9iamVjdEltcCAqaW1wID0gbmV3IEVy
cm9ySW5zdGFuY2VJbXAocHJvdG8pOwotICBPYmplY3Qgb2JqKGltcCk7Ci0gIGlmIChhcmdzWzBd
LnR5cGUoKSAhPSBVbmRlZmluZWRUeXBlKQotICAgIGltcC0+cHV0RGlyZWN0KG1lc3NhZ2VQcm9w
ZXJ0eU5hbWUsIG5ldyBTdHJpbmdJbXAoYXJnc1swXS50b1N0cmluZyhleGVjKSkpOworICBPYmpl
Y3RJbXAgKm9iaihpbXApOworICBpZiAoIWFyZ3NbMF0tPmlzVW5kZWZpbmVkKCkpCisgICAgaW1w
LT5wdXREaXJlY3QobWVzc2FnZVByb3BlcnR5TmFtZSwganNTdHJpbmcoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykpKTsKICAgcmV0dXJuIG9iajsKIH0KIApAQCAtMTc4LDcgKzE3Miw3IEBAIGJvb2wg
TmF0aXZlRXJyb3JJbXA6OmltcGxlbWVudHNDYWxsKCkgY28KICAgcmV0dXJuIHRydWU7CiB9CiAK
LVZhbHVlIE5hdGl2ZUVycm9ySW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRo
aXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpOYXRpdmVFcnJvckltcDo6Y2Fs
bEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25z
dCBMaXN0ICZhcmdzKQogewogICByZXR1cm4gY29uc3RydWN0KGV4ZWMsYXJncyk7CiB9CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9lcnJvcl9vYmplY3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL2Vycm9yX29i
amVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgJMTUgSnVsIDIwMDUg
MTY6NTg6NTYgLTAwMDAJMS41CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZXJyb3Jfb2JqZWN0LmgJ
OCBBdWcgMjAwNSAwMTowMDo0OCAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgcHVibGljOgogICAgIEVycm9yUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVu
Y3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90byk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVu
dHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1w
ICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CiAgIH07CiAKICAgY2xhc3MgRXJyb3JPYmplY3RJbXAgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbkltcCB7CkBAIC01NSwxMCArNTUsMTAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgICAgICAgICAgICAgRXJyb3JQcm90b3R5cGVJbXAgKmVycm9yUHJvdG8pOwogCiAg
ICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAg
ICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlz
dCAmYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKICAg
fTsKIAogICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCA6IHB1YmxpYyBPYmplY3RJbXAg
ewpAQCAtNzIsMTIgKzcyLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBOYXRpdmVFcnJv
ckltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAgIE5hdGl2
ZUVycm9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90
bywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBPYmplY3QgJnByb3QpOworICAgICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqcHJvdCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0Nv
bnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1
Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wg
aW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwg
VmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNTEKZGlmZiAtcCAtdSAtcjEuNTEgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9u
LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAk3IEF1ZyAyMDA1IDA2OjE3
OjM1IC0wMDAwCTEuNTEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJOCBBdWcg
MjAwNSAwMTowMDo0OCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBjb25zdCBDbGFzc0luZm8gRnVu
Y3Rpb25JbXA6OmluZm8gPSB7IkZ1CiAKIEZ1bmN0aW9uSW1wOjpGdW5jdGlvbkltcChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJm4pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcCgK
LSAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbElu
dGVycHJldGVyKCktPmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpLmltcCgpKQorICAgICAgc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25Qcm90b3R5cGVJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkpCiAgICAgICApLCBwYXJhbSgwTCksIGlkZW50
KG4pCiB7CiB9CkBAIC03Myw5ICs3Myw5IEBAIGJvb2wgRnVuY3Rpb25JbXA6OmltcGxlbWVudHND
YWxsKCkgY29uc3QKICAgcmV0dXJuIHRydWU7CiB9CiAKLVZhbHVlIEZ1bmN0aW9uSW1wOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgT2JqZWN0ICZnbG9iYWxPYmog
PSBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CisgIE9iamVjdElt
cCAqZ2xvYmFsT2JqID0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgp
OwogCiAgIC8vIGVudGVyIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0CiAgIENvbnRleHRJbXAgY3R4
KGdsb2JhbE9iaiwgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmltcCgpLCB0aGlzT2JqLCBj
b2RlVHlwZSgpLApAQCAtOTcsOCArOTcsNyBAQCBWYWx1ZSBGdW5jdGlvbkltcDo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsCiAgICAgICBsaW5lbm8gPSBzdGF0aWNfY2FzdDxEZWNsYXJlZEZ1bmN0aW9u
SW1wKj4odGhpcyktPmJvZHktPmZpcnN0TGluZSgpOwogICAgIH0KIAotICAgIE9iamVjdCBmdW5j
KHRoaXMpOwotICAgIGJvb2wgY29udCA9IGRiZy0+Y2FsbEV2ZW50KCZuZXdFeGVjLHNpZCxsaW5l
bm8sZnVuYyxhcmdzKTsKKyAgICBib29sIGNvbnQgPSBkYmctPmNhbGxFdmVudCgmbmV3RXhlYyxz
aWQsbGluZW5vLHRoaXMsYXJncyk7CiAgICAgaWYgKCFjb250KSB7CiAgICAgICBkYmctPmltcCgp
LT5hYm9ydCgpOwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTI3LDggKzEyNiw3IEBA
IFZhbHVlIEZ1bmN0aW9uSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywKICAgICBpZiAoY29tcC5j
b21wbFR5cGUoKSA9PSBUaHJvdykKICAgICAgICAgbmV3RXhlYy5zZXRFeGNlcHRpb24oY29tcC52
YWx1ZSgpKTsKIAotICAgIE9iamVjdCBmdW5jKHRoaXMpOwotICAgIGludCBjb250ID0gZGJnLT5y
ZXR1cm5FdmVudCgmbmV3RXhlYyxzaWQsbGluZW5vLGZ1bmMpOworICAgIGludCBjb250ID0gZGJn
LT5yZXR1cm5FdmVudCgmbmV3RXhlYyxzaWQsbGluZW5vLHRoaXMpOwogICAgIGlmICghY29udCkg
ewogICAgICAgZGJnLT5pbXAoKS0+YWJvcnQoKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
QEAgLTE3Miw3ICsxNzAsNyBAQCBVU3RyaW5nIEZ1bmN0aW9uSW1wOjpwYXJhbWV0ZXJTdHJpbmco
KSBjCiAvLyBFQ01BIDEwLjEuM3EKIHZvaWQgRnVuY3Rpb25JbXA6OnByb2Nlc3NQYXJhbWV0ZXJz
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgT2JqZWN0IHZhcmlhYmxl
ID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpOworICBPYmplY3RJbXAg
KnZhcmlhYmxlID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpOwogCiAj
aWZkZWYgS0pTX1ZFUkJPU0UKICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKQEAgLTE4OSwxMCArMTg3LDEwIEBA
IHZvaWQgRnVuY3Rpb25JbXA6OnByb2Nlc3NQYXJhbWV0ZXJzKEV4ZWMKIAlmcHJpbnRmKHN0ZGVy
ciwgInNldHRpbmcgcGFyYW1ldGVyICVzICIsIHAtPm5hbWUuYXNjaWkoKSk7CiAJcHJpbnRJbmZv
KGV4ZWMsInRvIiwgKml0KTsKICNlbmRpZgotCXZhcmlhYmxlLnB1dChleGVjLCBwLT5uYW1lLCAq
aXQpOworCXZhcmlhYmxlLT5wdXQoZXhlYywgcC0+bmFtZSwgKml0KTsKIAlpdCsrOwogICAgICAg
fSBlbHNlCi0JdmFyaWFibGUucHV0KGV4ZWMsIHAtPm5hbWUsIFVuZGVmaW5lZCgpKTsKKwl2YXJp
YWJsZS0+cHV0KGV4ZWMsIHAtPm5hbWUsIFVuZGVmaW5lZCgpKTsKICAgICAgIHAgPSBwLT5uZXh0
OwogICAgIH0KICAgfQpAQCAtMjA4LDcgKzIwNiw3IEBAIHZvaWQgRnVuY3Rpb25JbXA6OnByb2Nl
c3NWYXJEZWNscyhFeGVjU3QKIHsKIH0KIAotVmFsdWUgRnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkZ1bmN0aW9uSW1wOjphcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRnVuY3Rpb25JbXAgKnRoaXNPYmogPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICBDb250ZXh0SW1wICpj
b250ZXh0ID0gZXhlYy0+X2NvbnRleHQ7CkBAIC0yMjEsNyArMjE5LDcgQEAgVmFsdWUgRnVuY3Rp
b25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjUwogICByZXR1cm4gTnVsbCgpOwogfQogCi1WYWx1
ZSBGdW5jdGlvbkltcDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAq
RnVuY3Rpb25JbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBGdW5jdGlv
bkltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wICo+KHNsb3Quc2xvdEJhc2Uo
KSk7CiAgIGNvbnN0IFBhcmFtZXRlciAqcCA9IHRoaXNPYmotPnBhcmFtOwpAQCAtMjUwLDcgKzI0
OCw3IEBAIGJvb2wgRnVuY3Rpb25JbXA6OmdldE93blByb3BlcnR5U2xvdChFeGUKICAgICByZXR1
cm4gSW50ZXJuYWxGdW5jdGlvbkltcDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25JbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQg
YXR0cikKK3ZvaWQgRnVuY3Rpb25JbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5hcmd1bWVudHNJ
ZGVudGlmaWVyKCkgfHwgcHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzA1LDcgKzMwMyw2IEBAIERlY2xhcmVkRnVuY3Rpb25JbXA6OkRlY2xh
cmVkRnVuY3Rpb25JbXAKIAkJCQkJIEZ1bmN0aW9uQm9keU5vZGUgKmIsIGNvbnN0IFNjb3BlQ2hh
aW4gJnNjKQogICA6IEZ1bmN0aW9uSW1wKGV4ZWMsbiksIGJvZHkoYikKIHsKLSAgVmFsdWUgcHJv
dGVjdCh0aGlzKTsKICAgYm9keS0+cmVmKCk7CiAgIHNldFNjb3BlKHNjKTsKIH0KQEAgLTMyMiwy
MSArMzE5LDIxIEBAIGJvb2wgRGVjbGFyZWRGdW5jdGlvbkltcDo6aW1wbGVtZW50c0NvbnMKIH0K
IAogLy8gRUNNQSAxMy4yLjIgW1tDb25zdHJ1Y3RdXQotT2JqZWN0IERlY2xhcmVkRnVuY3Rpb25J
bXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmplY3RJ
bXAgKkRlY2xhcmVkRnVuY3Rpb25JbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0gIE9iamVjdCBwcm90bzsKLSAgVmFsdWUgcCA9IGdldChleGVjLHBy
b3RvdHlwZVByb3BlcnR5TmFtZSk7Ci0gIGlmIChwLnR5cGUoKSA9PSBPYmplY3RUeXBlKQotICAg
IHByb3RvID0gT2JqZWN0KHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHAuaW1wKCkpKTsKKyAgT2Jq
ZWN0SW1wICpwcm90bzsKKyAgVmFsdWVJbXAgKnAgPSBnZXQoZXhlYyxwcm90b3R5cGVQcm9wZXJ0
eU5hbWUpOworICBpZiAocC0+aXNPYmplY3QoKSkKKyAgICBwcm90byA9IHN0YXRpY19jYXN0PE9i
amVjdEltcCo+KHApOwogICBlbHNlCiAgICAgcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwogCi0gIE9iamVjdCBvYmoobmV3IE9iamVj
dEltcChwcm90bykpOworICBPYmplY3RJbXAgKm9iaihuZXcgT2JqZWN0SW1wKHByb3RvKSk7CiAK
LSAgVmFsdWUgcmVzID0gY2FsbChleGVjLG9iaixhcmdzKTsKKyAgVmFsdWVJbXAgKnJlcyA9IGNh
bGwoZXhlYyxvYmosYXJncyk7CiAKLSAgaWYgKHJlcy50eXBlKCkgPT0gT2JqZWN0VHlwZSkKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChyZXMpOworICBpZiAocmVzLT5pc09iamVjdCgp
KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocmVzKTsKICAgZWxzZQogICAg
IHJldHVybiBvYmo7CiB9CkBAIC00MzMsNyArNDMwLDYgQEAgQXJndW1lbnRzSW1wOjpBcmd1bWVu
dHNJbXAoRXhlY1N0YXRlICpleAogX2FjdGl2YXRpb25PYmplY3QoYWN0KSwKIGluZGV4VG9OYW1l
TWFwKGZ1bmMsIGFyZ3MpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dERpcmVjdChj
YWxsZWVQcm9wZXJ0eU5hbWUsIGZ1bmMsIERvbnRFbnVtKTsKICAgcHV0RGlyZWN0KGxlbmd0aFBy
b3BlcnR5TmFtZSwgYXJncy5zaXplKCksIERvbnRFbnVtKTsKICAgCkBAIC00NTMsNyArNDQ5LDcg
QEAgdm9pZCBBcmd1bWVudHNJbXA6Om1hcmsoKSAKICAgICBfYWN0aXZhdGlvbk9iamVjdC0+bWFy
aygpOwogfQogCi1WYWx1ZSBBcmd1bWVudHNJbXA6Om1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitWYWx1ZUltcCAqQXJndW1lbnRzSW1wOjptYXBwZWRJbmRleEdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICBBcmd1bWVudHNJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxB
cmd1bWVudHNJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIHRoaXNPYmotPl9hY3Rp
dmF0aW9uT2JqZWN0LT5nZXQoZXhlYywgdGhpc09iai0+aW5kZXhUb05hbWVNYXBbcHJvcGVydHlO
YW1lXSk7CkBAIC00NjksNyArNDY1LDcgQEAgYm9vbCBBcmd1bWVudHNJbXA6OmdldE93blByb3Bl
cnR5U2xvdChFeAogICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBBcmd1bWVudHNJbXA6OnB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZh
bHVlLCBpbnQgYXR0cikKK3ZvaWQgQXJndW1lbnRzSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
CiB7CiAgIGlmIChpbmRleFRvTmFtZU1hcC5pc01hcHBlZChwcm9wZXJ0eU5hbWUpKSB7CiAgICAg
X2FjdGl2YXRpb25PYmplY3QtPnB1dChleGVjLCBpbmRleFRvTmFtZU1hcFtwcm9wZXJ0eU5hbWVd
LCB2YWx1ZSwgYXR0cik7CkBAIC01MDAsNyArNDk2LDcgQEAgQWN0aXZhdGlvbkltcDo6QWN0aXZh
dGlvbkltcChGdW5jdGlvbkltcAogICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBzdXBwb3J0IGVu
dW1lcmF0aW5nIHRoZSBhcmd1bWVudHMgcHJvcGVydHk/CiB9CiAKLVZhbHVlIEFjdGl2YXRpb25J
bXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkFjdGl2YXRp
b25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBBY3RpdmF0aW9u
SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCAqPihzbG90LnNsb3RCYXNl
KCkpOwogCkBAIC01MDgsNyArNTA0LDcgQEAgVmFsdWUgQWN0aXZhdGlvbkltcDo6YXJndW1lbnRz
R2V0dGVyKEV4ZQogICBpZiAoIXRoaXNPYmotPl9hcmd1bWVudHNPYmplY3QpCiAgICAgdGhpc09i
ai0+Y3JlYXRlQXJndW1lbnRzT2JqZWN0KGV4ZWMpOwogICAKLSAgcmV0dXJuIFZhbHVlKHRoaXNP
YmotPl9hcmd1bWVudHNPYmplY3QpOworICByZXR1cm4gdGhpc09iai0+X2FyZ3VtZW50c09iamVj
dDsKIH0KIAogUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgQWN0aXZhdGlvbkltcDo6Z2V0QXJn
dW1lbnRzR2V0dGVyKCkKQEAgLTU1OCw3ICs1NTQsNiBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OmNy
ZWF0ZUFyZ3VtZW50c09iamVjCiBHbG9iYWxGdW5jSW1wOjpHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0
ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywgaW50IGksIGludCBsZW4p
CiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBw
cm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnRE
ZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC01NzIsOSArNTY3LDkgQEAgYm9vbCBH
bG9iYWxGdW5jSW1wOjppbXBsZW1lbnRzQ2FsbCgpIGNvbgogICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIFZhbHVlIGVuY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNv
bnN0IGNoYXIgKmRvX25vdF9lc2NhcGUpCitzdGF0aWMgVmFsdWVJbXAgKmVuY29kZShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0IGNoYXIgKmRvX25vdF9lc2NhcGUpCiB7
Ci0gIFVTdHJpbmcgciA9ICIiLCBzLCBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOworICBV
U3RyaW5nIHIgPSAiIiwgcywgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgIENTdHJp
bmcgY3N0ciA9IHN0ci5VVEY4U3RyaW5nKCk7CiAgIGNvbnN0IGNoYXIgKnAgPSBjc3RyLmNfc3Ry
KCk7CiAgIGZvciAoaW50IGsgPSAwOyBrIDwgY3N0ci5zaXplKCk7IGsrKywgcCsrKSB7CkBAIC01
OTAsOSArNTg1LDkgQEAgc3RhdGljIFZhbHVlIGVuY29kZShFeGVjU3RhdGUgKmV4ZWMsIGNvbgog
ICByZXR1cm4gU3RyaW5nKHIpOwogfQogCi1zdGF0aWMgVmFsdWUgZGVjb2RlKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmYXJncywgY29uc3QgY2hhciAqZG9fbm90X3VuZXNjYXBlLCBib29s
IHN0cmljdCkKK3N0YXRpYyBWYWx1ZUltcCAqZGVjb2RlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
TGlzdCAmYXJncywgY29uc3QgY2hhciAqZG9fbm90X3VuZXNjYXBlLCBib29sIHN0cmljdCkKIHsK
LSAgVVN0cmluZyBzID0gIiIsIHN0ciA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7CisgIFVTdHJp
bmcgcyA9ICIiLCBzdHIgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKTsKICAgaW50IGsgPSAwLCBs
ZW4gPSBzdHIuc2l6ZSgpOwogICBjb25zdCBVQ2hhciAqZCA9IHN0ci5kYXRhKCk7CiAgIFVDaGFy
IHU7CkBAIC02MzQsNyArNjI5LDcgQEAgc3RhdGljIFZhbHVlIGRlY29kZShFeGVjU3RhdGUgKmV4
ZWMsIGNvbgogICAgICAgfQogICAgICAgaWYgKGNoYXJMZW4gPT0gMCkgewogICAgICAgICBpZiAo
c3RyaWN0KSB7Ci0JICBPYmplY3QgZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9y
KTsKKwkgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFVSSUVycm9yKTsK
ICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyb3IpOwogICAgICAgICAgIHJldHVybiBl
cnJvcjsKICAgICAgICAgfQpAQCAtNzY3LDkgKzc2Miw5IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VG
bG9hdChjb25zdCBVU3RyaW5nICYKICAgICByZXR1cm4gcy50b0RvdWJsZSggdHJ1ZSAvKnRvbGVy
YW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5nICovICk7CiB9CiAKLVZhbHVlIEds
b2JhbEZ1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBj
b25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgVmFsdWUgcmVzOworICBWYWx1ZUltcCAqcmVzID0ganNVbmRlZmluZWQoKTsKIAog
ICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQogICAgICJBQkNERUZHSElKS0xN
Tk9QUVJTVFVWV1hZWiIKQEAgLTc5MiwxMSArNzg3LDExIEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6
OmNhbGwoRXhlY1N0YXRlICpleGUKIAogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBFdmFsOiB7
IC8vIGV2YWwoKQotICAgICAgVmFsdWUgeCA9IGFyZ3NbMF07Ci0gICAgICBpZiAoeC50eXBlKCkg
IT0gU3RyaW5nVHlwZSkKKyAgICAgIFZhbHVlSW1wICp4ID0gYXJnc1swXTsKKyAgICAgIGlmICgh
eC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHg7CiAgICAgICBlbHNlIHsKLSAgICAgICAg
VVN0cmluZyBzID0geC50b1N0cmluZyhleGVjKTsKKyAgICAgICAgVVN0cmluZyBzID0geC0+dG9T
dHJpbmcoZXhlYyk7CiAgICAgICAgIAogICAgICAgICBpbnQgc2lkOwogICAgICAgICBpbnQgZXJy
TGluZTsKQEAgLTgxMiw4ICs4MDcsOCBAQCBWYWx1ZSBHbG9iYWxGdW5jSW1wOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlCiAKICAgICAgICAgLy8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEgc3ludGF4IG9j
Y3VycmVkCiAgICAgICAgIGlmICghcHJvZ05vZGUpIHsKLSAgICAgICAgICBPYmplY3QgZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLGVyck1zZy5hc2NpaSgpLGVyckxpbmUpOwot
ICAgICAgICAgIGVyci5wdXQoZXhlYywic2lkIixOdW1iZXIoc2lkKSk7CisgICAgICAgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IsZXJyTXNnLmFzY2lp
KCksZXJyTGluZSk7CisgICAgICAgICAgZXJyLT5wdXQoZXhlYywic2lkIixOdW1iZXIoc2lkKSk7
CiAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgcmV0dXJuIGVy
cjsKICAgICAgICAgfQpAQCAtODIxLDcgKzgxNiw3IEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6OmNh
bGwoRXhlY1N0YXRlICpleGUKICAgICAgICAgcHJvZ05vZGUtPnJlZigpOwogICAgICAgICAKICAg
ICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKLSAgICAgICAgT2JqZWN0IHRo
aXNWYWwoT2JqZWN0OjpkeW5hbWljQ2FzdChleGVjLT5jb250ZXh0KCkudGhpc1ZhbHVlKCkpKTsK
KyAgICAgICAgT2JqZWN0SW1wICp0aGlzVmFsID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4
ZWMtPmNvbnRleHQoKS50aGlzVmFsdWUoKSk7CiAgICAgICAgIENvbnRleHRJbXAgY3R4KGV4ZWMt
PmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmltcCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzVmFsLApAQCAtODUxLDE2ICs4NDYsMTYgQEAgVmFsdWUgR2xvYmFsRnVuY0lt
cDo6Y2FsbChFeGVjU3RhdGUgKmV4ZQogICAgICAgYnJlYWs7CiAgICAgfQogICBjYXNlIFBhcnNl
SW50OgotICAgIHJlcyA9IE51bWJlcihwYXJzZUludChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLCBh
cmdzWzFdLnRvSW50MzIoZXhlYykpKTsKKyAgICByZXMgPSBOdW1iZXIocGFyc2VJbnQoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKICAgICBicmVhazsK
ICAgY2FzZSBQYXJzZUZsb2F0OgotICAgIHJlcyA9IE51bWJlcihwYXJzZUZsb2F0KGFyZ3NbMF0u
dG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXMgPSBOdW1iZXIocGFyc2VGbG9hdChhcmdzWzBdLT50
b1N0cmluZyhleGVjKSkpOwogICAgIGJyZWFrOwogICBjYXNlIElzTmFOOgotICAgIHJlcyA9IEJv
b2xlYW4oaXNOYU4oYXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgIHJlcyA9IEJvb2xlYW4o
aXNOYU4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKICAgICBicmVhazsKICAgY2FzZSBJc0Zp
bml0ZTogewotICAgIGRvdWJsZSBuID0gYXJnc1swXS50b051bWJlcihleGVjKTsKKyAgICBkb3Vi
bGUgbiA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgIHJlcyA9IEJvb2xlYW4oIWlzTmFO
KG4pICYmICFpc0luZihuKSk7CiAgICAgYnJlYWs7CiAgIH0KQEAgLTg3OCw3ICs4NzMsNyBAQCBW
YWx1ZSBHbG9iYWxGdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAgICAgYnJlYWs7CiAgIGNh
c2UgRXNjYXBlOgogICAgIHsKLSAgICAgIFVTdHJpbmcgciA9ICIiLCBzLCBzdHIgPSBhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgVVN0cmluZyByID0gIiIsIHMsIHN0ciA9IGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpOwogICAgICAgY29uc3QgVUNoYXIgKmMgPSBzdHIuZGF0YSgpOwogICAg
ICAgZm9yIChpbnQgayA9IDA7IGsgPCBzdHIuc2l6ZSgpOyBrKyssIGMrKykgewogICAgICAgICBp
bnQgdSA9IGMtPnVjOwpAQCAtOTAwLDcgKzg5NSw3IEBAIFZhbHVlIEdsb2JhbEZ1bmNJbXA6OmNh
bGwoRXhlY1N0YXRlICpleGUKICAgICB9CiAgIGNhc2UgVW5Fc2NhcGU6CiAgICAgewotICAgICAg
VVN0cmluZyBzID0gIiIsIHN0ciA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7CisgICAgICBVU3Ry
aW5nIHMgPSAiIiwgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICBpbnQgayA9
IDAsIGxlbiA9IHN0ci5zaXplKCk7CiAgICAgICB3aGlsZSAoayA8IGxlbikgewogICAgICAgICBj
b25zdCBVQ2hhciAqYyA9IHN0ci5kYXRhKCkgKyBrOwpAQCAtOTI3LDcgKzkyMiw3IEBAIFZhbHVl
IEdsb2JhbEZ1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICpleGUKICAgICB9CiAjaWZuZGVmIE5ERUJV
RwogICBjYXNlIEtKU1ByaW50OgotICAgIHB1dHMoYXJnc1swXS50b1N0cmluZyhleGVjKS5hc2Np
aSgpKTsKKyAgICBwdXRzKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICAgIGJy
ZWFrOwogI2VuZGlmCiAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC1wIC11IC1yMS4yOSBKYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJNyBB
dWcgMjAwNSAwNjoxNzozNSAtMDAwMAkxLjI5CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rp
b24uaAk4IEF1ZyAyMDA1IDAxOjAwOjQ5IC0wMDAwCkBAIC00MywxMSArNDMsMTEgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgdmlydHVhbCB+RnVuY3Rpb25JbXAoKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIgJiwgUHJv
cGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9
IE5vbmUpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHND
YWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CiAKICAgICB2b2lkIGFkZFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyICZu
KTsKICAgICBJZGVudGlmaWVyIGdldFBhcmFtZXRlck5hbWUoaW50IGluZGV4KTsKQEAgLTY1LDgg
KzY1LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSWRlbnRpZmllciBpZGVudDsKIAogICBwcml2
YXRlOgotICAgIHN0YXRpYyBWYWx1ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0
IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIFZhbHVlIGxl
bmd0aEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUg
KiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
VmFsdWVJbXAgKmxlbmd0aEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciAmLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHZvaWQgcHJvY2Vzc1BhcmFtZXRlcnMoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICYpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVj
bHMoRXhlY1N0YXRlICpleGVjKTsKQEAgLTc5LDcgKzc5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgfkRlY2xhcmVkRnVuY3Rpb25JbXAoKTsKIAogICAgIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0OwotICAgIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICZhcmdzKTsKKyAgICBPYmplY3RJbXAgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IExpc3QgJmFyZ3MpOwogCiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0
YXRlICpleGVjKTsKICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZ1bmN0
aW9uQ29kZTsgfQpAQCAtMTEyLDEzICsxMTIsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJn
dW1lbnRzSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25JbXAgKmZ1bmMsIGNvbnN0IExpc3Qg
JmFyZ3MsIEFjdGl2YXRpb25JbXAgKmFjdCk7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyICYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICBwcml2YXRl
OgotICAgIHN0YXRpYyBWYWx1ZSBtYXBwZWRJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMg
VmFsdWVJbXAgKm1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgQWN0aXZhdGlvbkltcCAq
X2FjdGl2YXRpb25PYmplY3Q7IAogICAgIG11dGFibGUgSW5kZXhUb05hbWVNYXAgaW5kZXhUb05h
bWVNYXA7CkBAIC0xMzgsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVy
KCk7Ci0gICAgc3RhdGljIFZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMg
VmFsdWVJbXAgKmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50
c09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIAogICAgIEZ1bmN0aW9uSW1wICpf
ZnVuY3Rpb247CkBAIC0xNTAsNyArMTQ5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoK
ICAgICBHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAg
KmZ1bmNQcm90bywgaW50IGksIGludCBsZW4pOwogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRz
Q2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAq
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpOwogICAgIHZpcnR1YWwgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25zdDsKICAg
ICBlbnVtIHsgRXZhbCwgUGFyc2VJbnQsIFBhcnNlRmxvYXQsIElzTmFOLCBJc0Zpbml0ZSwgRXNj
YXBlLCBVbkVzY2FwZSwKICAgICAgICAgICAgRGVjb2RlVVJJLCBEZWNvZGVVUklDb21wb25lbnQs
IEVuY29kZVVSSSwgRW5jb2RlVVJJQ29tcG9uZW50CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
ZnVuY3Rpb25fb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjYKZGlmZiAtcCAtdSAtcjEuMjYgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5j
cHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuY3BwCTI3IEp1bCAyMDA1
IDIzOjEwOjQ5IC0wMDAwCTEuMjYKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmpl
Y3QuY3BwCTggQXVnIDIwMDUgMDE6MDA6NDkgLTAwMDAKQEAgLTQwLDggKzQwLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIEZ1bmN0aW9uUHJvdG90eXBlSW1wOjpGdW5jdGlvblByb3RvdHlwZUlt
cChFeGVjU3RhdGUgKmV4ZWMpCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcCgwKQogewotICBWYWx1
ZSBwcm90ZWN0KHRoaXMpOwotICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCAgIE51bWJl
ckltcDo6emVybygpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGxl
bmd0aFByb3BlcnR5TmFtZSwgICBqc1plcm8oKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7
CiAgIHB1dERpcmVjdCh0b1N0cmluZ1Byb3BlcnR5TmFtZSwgbmV3IEZ1bmN0aW9uUHJvdG9GdW5j
SW1wKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG9GdW5jSW1wOjpUb1N0cmluZywgMCksIERvbnRF
bnVtKTsKICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIgYXBwbHlQcm9wZXJ0eU5hbWUoImFwcGx5
Iik7CiAgIHB1dERpcmVjdChhcHBseVByb3BlcnR5TmFtZSwgICAgbmV3IEZ1bmN0aW9uUHJvdG9G
dW5jSW1wKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG9GdW5jSW1wOjpBcHBseSwgICAgMiksIERv
bnRFbnVtKTsKQEAgLTU5LDcgKzU4LDcgQEAgYm9vbCBGdW5jdGlvblByb3RvdHlwZUltcDo6aW1w
bGVtZW50c0NhbAogfQogCiAvLyBFQ01BIDE1LjMuNAotVmFsdWUgRnVuY3Rpb25Qcm90b3R5cGVJ
bXA6OmNhbGwoRXhlY1N0YXRlICovKmV4ZWMqLywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3Qg
TGlzdCAmLyphcmdzKi8pCitWYWx1ZUltcCAqRnVuY3Rpb25Qcm90b3R5cGVJbXA6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqLypleGVjKi8sIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0
IExpc3QgJi8qYXJncyovKQogewogICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC03MCw3ICs2
OSw2IEBAIEZ1bmN0aW9uUHJvdG9GdW5jSW1wOjpGdW5jdGlvblByb3RvRnVuY0kKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1
bmNQcm90bywgaW50IGksIGludCBsZW4pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJv
dG8pLCBpZChpKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3Ro
UHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBA
IC04MCwyOSArNzgsMjkgQEAgYm9vbCBGdW5jdGlvblByb3RvRnVuY0ltcDo6aW1wbGVtZW50c0Nh
bAogICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWUgRnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1
ZUltcCAqRnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBWYWx1ZSByZXN1
bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQgPSBOVUxMOwogCiAgIHN3aXRjaCAoaWQpIHsKICAgY2Fz
ZSBUb1N0cmluZzogewogICAgIC8vICMjIyBhbHNvIG1ha2UgdGhpcyB3b3JrIGZvciBpbnRlcm5h
bCBmdW5jdGlvbnMKLSAgICBpZiAodGhpc09iai5pc051bGwoKSB8fCAhdGhpc09iai5pbmhlcml0
cygmSW50ZXJuYWxGdW5jdGlvbkltcDo6aW5mbykpIHsKKyAgICBpZiAoIXRoaXNPYmogfHwgIXRo
aXNPYmotPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uSW1wOjppbmZvKSkgewogI2lmbmRlZiBO
REVCVUcKICAgICAgIGZwcmludGYoc3RkZXJyLCJhdHRlbXB0ZWQgdG9TdHJpbmcoKSBjYWxsIG9u
IG51bGwgb3Igbm9uLWZ1bmN0aW9uIG9iamVjdFxuIik7CiAjZW5kaWYKLSAgICAgIE9iamVjdCBl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGlmICh0aGlzT2JqLmluaGVy
aXRzKCZEZWNsYXJlZEZ1bmN0aW9uSW1wOjppbmZvKSkgeworICAgIGlmICh0aGlzT2JqLT5pbmhl
cml0cygmRGVjbGFyZWRGdW5jdGlvbkltcDo6aW5mbykpIHsKICAgICAgICBEZWNsYXJlZEZ1bmN0
aW9uSW1wICpmaSA9IHN0YXRpY19jYXN0PERlY2xhcmVkRnVuY3Rpb25JbXAqPgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNPYmouaW1wKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHRoaXNPYmopOwogICAgICAgIHJldHVybiBTdHJpbmcoImZ1bmN0
aW9uICIgKyBmaS0+bmFtZSgpLnVzdHJpbmcoKSArICIoIiArCiAgICAgICAgICBmaS0+cGFyYW1l
dGVyU3RyaW5nKCkgKyAiKSAiICsgZmktPmJvZHktPnRvU3RyaW5nKCkpOwotICAgIH0gZWxzZSBp
ZiAodGhpc09iai5pbmhlcml0cygmRnVuY3Rpb25JbXA6OmluZm8pICYmCi0gICAgICAgICFzdGF0
aWNfY2FzdDxGdW5jdGlvbkltcCo+KHRoaXNPYmouaW1wKCkpLT5uYW1lKCkuaXNOdWxsKCkpIHsK
LSAgICAgIHJlc3VsdCA9IFN0cmluZygiZnVuY3Rpb24gIiArIHN0YXRpY19jYXN0PEZ1bmN0aW9u
SW1wKj4odGhpc09iai5pbXAoKSktPm5hbWUoKS51c3RyaW5nKCkgKyAiKCkiKTsKKyAgICB9IGVs
c2UgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZGdW5jdGlvbkltcDo6aW5mbykgJiYKKyAgICAgICAg
IXN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4odGhpc09iaiktPm5hbWUoKS5pc051bGwoKSkgewor
ICAgICAgcmVzdWx0ID0gU3RyaW5nKCJmdW5jdGlvbiAiICsgc3RhdGljX2Nhc3Q8RnVuY3Rpb25J
bXAqPih0aGlzT2JqKS0+bmFtZSgpLnVzdHJpbmcoKSArICIoKSIpOwogICAgIH0KICAgICBlbHNl
IHsKICAgICAgIHJlc3VsdCA9IFN0cmluZygiKEludGVybmFsIEZ1bmN0aW9uKSIpOwpAQCAtMTEw
LDU5ICsxMDgsNTkgQEAgVmFsdWUgRnVuY3Rpb25Qcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YQog
ICAgIH0KICAgICBicmVhazsKICAgY2FzZSBBcHBseTogewotICAgIFZhbHVlIHRoaXNBcmcgPSBh
cmdzWzBdOwotICAgIFZhbHVlIGFyZ0FycmF5ID0gYXJnc1sxXTsKLSAgICBPYmplY3QgZnVuYyA9
IHRoaXNPYmo7CisgICAgVmFsdWVJbXAgKnRoaXNBcmcgPSBhcmdzWzBdOworICAgIFZhbHVlSW1w
ICphcmdBcnJheSA9IGFyZ3NbMV07CisgICAgT2JqZWN0SW1wICpmdW5jID0gdGhpc09iajsKIAot
ICAgIGlmICghZnVuYy5pbXBsZW1lbnRzQ2FsbCgpKSB7Ci0gICAgICBPYmplY3QgZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2Fs
bCgpKSB7CisgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJy
b3IpOwogICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICByZXR1cm4gZXJyOwog
ICAgIH0KIAotICAgIE9iamVjdCBhcHBseVRoaXM7Ci0gICAgaWYgKHRoaXNBcmcuaXNBKE51bGxU
eXBlKSB8fCB0aGlzQXJnLmlzQShVbmRlZmluZWRUeXBlKSkKKyAgICBPYmplY3RJbXAgKmFwcGx5
VGhpczsKKyAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgIGFwcGx5
VGhpcyA9IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKTsKICAgICBl
bHNlCi0gICAgICBhcHBseVRoaXMgPSB0aGlzQXJnLnRvT2JqZWN0KGV4ZWMpOworICAgICAgYXBw
bHlUaGlzID0gdGhpc0FyZy0+dG9PYmplY3QoZXhlYyk7CiAKICAgICBMaXN0IGFwcGx5QXJnczsK
LSAgICBpZiAoIWFyZ0FycmF5LmlzQShOdWxsVHlwZSkgJiYgIWFyZ0FycmF5LmlzQShVbmRlZmlu
ZWRUeXBlKSkgewotICAgICAgaWYgKGFyZ0FycmF5LmlzQShPYmplY3RUeXBlKSAmJgotICAgICAg
ICAgICAoT2JqZWN0OjpkeW5hbWljQ2FzdChhcmdBcnJheSkuaW5oZXJpdHMoJkFycmF5SW5zdGFu
Y2VJbXA6OmluZm8pIHx8Ci0gICAgICAgICAgICBPYmplY3Q6OmR5bmFtaWNDYXN0KGFyZ0FycmF5
KS5pbmhlcml0cygmQXJndW1lbnRzSW1wOjppbmZvKSkpIHsKKyAgICBpZiAoIWFyZ0FycmF5LT5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICBpZiAoYXJnQXJyYXktPmlzT2JqZWN0KCkgJiYK
KyAgICAgICAgICAgKHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihhcmdBcnJheSktPmluaGVyaXRz
KCZBcnJheUluc3RhbmNlSW1wOjppbmZvKSB8fAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KGFyZ0FycmF5KS0+aW5oZXJpdHMoJkFyZ3VtZW50c0ltcDo6aW5mbykpKSB7CiAK
LSAgICAgICAgT2JqZWN0IGFyZ0FycmF5T2JqID0gT2JqZWN0OjpkeW5hbWljQ2FzdChhcmdBcnJh
eSk7Ci0gICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBhcmdBcnJheU9iai5nZXQoZXhlYyxs
ZW5ndGhQcm9wZXJ0eU5hbWUpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBPYmplY3RJbXAgKmFy
Z0FycmF5T2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGFyZ0FycmF5KTsKKyAgICAgICAg
dW5zaWduZWQgaW50IGxlbmd0aCA9IGFyZ0FycmF5T2JqLT5nZXQoZXhlYyxsZW5ndGhQcm9wZXJ0
eU5hbWUpLT50b1VJbnQzMihleGVjKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgICBhcHBseUFyZ3MuYXBwZW5kKGFyZ0FycmF5T2Jq
LmdldChleGVjLGkpKTsKKyAgICAgICAgICBhcHBseUFyZ3MuYXBwZW5kKGFyZ0FycmF5T2JqLT5n
ZXQoZXhlYyxpKSk7CiAgICAgICB9CiAgICAgICBlbHNlIHsKLSAgICAgICAgT2JqZWN0IGVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgICAgICBleGVjLT5zZXRFeGNlcHRp
b24oZXJyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgIH0KICAgICB9Ci0gICAgcmVzdWx0
ID0gZnVuYy5jYWxsKGV4ZWMsYXBwbHlUaGlzLGFwcGx5QXJncyk7CisgICAgcmVzdWx0ID0gZnVu
Yy0+Y2FsbChleGVjLGFwcGx5VGhpcyxhcHBseUFyZ3MpOwogICAgIH0KICAgICBicmVhazsKICAg
Y2FzZSBDYWxsOiB7Ci0gICAgVmFsdWUgdGhpc0FyZyA9IGFyZ3NbMF07Ci0gICAgT2JqZWN0IGZ1
bmMgPSB0aGlzT2JqOworICAgIFZhbHVlSW1wICp0aGlzQXJnID0gYXJnc1swXTsKKyAgICBPYmpl
Y3RJbXAgKmZ1bmMgPSB0aGlzT2JqOwogCi0gICAgaWYgKCFmdW5jLmltcGxlbWVudHNDYWxsKCkp
IHsKLSAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAg
ICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpIHsKKyAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgT2JqZWN0IGNhbGxUaGlzOwot
ICAgIGlmICh0aGlzQXJnLmlzQShOdWxsVHlwZSkgfHwgdGhpc0FyZy5pc0EoVW5kZWZpbmVkVHlw
ZSkpCisgICAgT2JqZWN0SW1wICpjYWxsVGhpczsKKyAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgIGNhbGxUaGlzID0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkt
Pmdsb2JhbE9iamVjdCgpOwogICAgIGVsc2UKLSAgICAgIGNhbGxUaGlzID0gdGhpc0FyZy50b09i
amVjdChleGVjKTsKKyAgICAgIGNhbGxUaGlzID0gdGhpc0FyZy0+dG9PYmplY3QoZXhlYyk7CiAK
LSAgICByZXN1bHQgPSBmdW5jLmNhbGwoZXhlYyxjYWxsVGhpcyxhcmdzLmNvcHlUYWlsKCkpOwor
ICAgIHJlc3VsdCA9IGZ1bmMtPmNhbGwoZXhlYyxjYWxsVGhpcyxhcmdzLmNvcHlUYWlsKCkpOwog
ICAgIH0KICAgICBicmVhazsKICAgfQpAQCAtMTc1LDExICsxNzMsMTAgQEAgVmFsdWUgRnVuY3Rp
b25Qcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YQogRnVuY3Rpb25PYmplY3RJbXA6OkZ1bmN0aW9u
T2JqZWN0SW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90
bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVj
dCh0aGlzKTsKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwgZnVuY1Byb3RvLCBE
b250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZv
ciBjb25zdHJ1Y3RvcgotICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXJJbXA6
Om9uZSgpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGxlbmd0
aFByb3BlcnR5TmFtZSwganNPbmUoKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9
CiAKIEZ1bmN0aW9uT2JqZWN0SW1wOjp+RnVuY3Rpb25PYmplY3RJbXAoKQpAQCAtMTkyLDcgKzE4
OSw3IEBAIGJvb2wgRnVuY3Rpb25PYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHIKIH0KIAogLy8g
RUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9yCi1PYmplY3QgRnVuY3Rpb25PYmpl
Y3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0
IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpCitPYmplY3RJbXAgKkZ1bmN0aW9u
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBj
b25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKQogewogICBVU3RyaW5nIHAo
IiIpOwogICBVU3RyaW5nIGJvZHk7CkBAIC0yMDAsMTIgKzE5NywxMiBAQCBPYmplY3QgRnVuY3Rp
b25PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjCiAgIGlmIChhcmdzU2l6ZSA9PSAwKSB7CiAgICAg
Ym9keSA9ICIiOwogICB9IGVsc2UgaWYgKGFyZ3NTaXplID09IDEpIHsKLSAgICBib2R5ID0gYXJn
c1swXS50b1N0cmluZyhleGVjKTsKKyAgICBib2R5ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7
CiAgIH0gZWxzZSB7Ci0gICAgcCA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7CisgICAgcCA9IGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAgIGZvciAoaW50IGsgPSAxOyBrIDwgYXJnc1NpemUg
LSAxOyBrKyspCi0gICAgICBwICs9ICIsIiArIGFyZ3Nba10udG9TdHJpbmcoZXhlYyk7Ci0gICAg
Ym9keSA9IGFyZ3NbYXJnc1NpemUtMV0udG9TdHJpbmcoZXhlYyk7CisgICAgICBwICs9ICIsIiAr
IGFyZ3Nba10tPnRvU3RyaW5nKGV4ZWMpOworICAgIGJvZHkgPSBhcmdzW2FyZ3NTaXplLTFdLT50
b1N0cmluZyhleGVjKTsKICAgfQogCiAgIC8vIHBhcnNlIHRoZSBzb3VyY2UgY29kZQpAQCAtMjIx
LDEzICsyMTgsMTMgQEAgT2JqZWN0IEZ1bmN0aW9uT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlYwog
ICAgIGJvb2wgY29udCA9IGRiZy0+c291cmNlUGFyc2VkKGV4ZWMsc2lkLFVTdHJpbmcoKSxib2R5
LGVyckxpbmUpOwogICAgIGlmICghY29udCkgewogICAgICAgZGJnLT5pbXAoKS0+YWJvcnQoKTsK
LSAgICAgIHJldHVybiBPYmplY3QobmV3IE9iamVjdEltcCgpKTsKKyAgICAgIHJldHVybiBuZXcg
T2JqZWN0SW1wKCk7CiAgICAgfQogICB9CiAKICAgLy8gbm8gcHJvZ3JhbSBub2RlID09IHN5bnRh
eCBlcnJvciAtIHRocm93IGEgc3ludGF4IGVycm9yCiAgIGlmICghcHJvZ05vZGUpIHsKLSAgICBP
YmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLGVyck1zZy5hc2NpaSgp
LGVyckxpbmUpOworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRh
eEVycm9yLGVyck1zZy5hc2NpaSgpLGVyckxpbmUpOwogICAgIC8vIHdlIGNhbid0IHJldHVybiBh
IENvbXBsZXRpb24oVGhyb3cpIGhlcmUsIHNvIGp1c3Qgc2V0IHRoZSBleGNlcHRpb24KICAgICAv
LyBhbmQgcmV0dXJuIGl0CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CkBAIC0yMzUsMTIg
KzIzMiwxMSBAQCBPYmplY3QgRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjCiAgIH0K
IAogICBTY29wZUNoYWluIHNjb3BlQ2hhaW47Ci0gIHNjb3BlQ2hhaW4ucHVzaChleGVjLT5keW5h
bWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCkpOworICBzY29wZUNoYWluLnB1
c2goZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpKTsKICAgRnVuY3Rp
b25Cb2R5Tm9kZSAqYm9keU5vZGUgPSBwcm9nTm9kZTsKIAogICBGdW5jdGlvbkltcCAqZmltcCA9
IG5ldyBEZWNsYXJlZEZ1bmN0aW9uSW1wKGV4ZWMsIElkZW50aWZpZXI6Om51bGwoKSwgYm9keU5v
ZGUsCiAJCQkJCSAgICAgIHNjb3BlQ2hhaW4pOwotICBPYmplY3QgcmV0KGZpbXApOyAvLyBwcm90
ZWN0IGZyb20gR0MKIAogICAvLyBwYXJzZSBwYXJhbWV0ZXIgbGlzdC4gdGhyb3cgc3ludGF4IGVy
cm9yIG9uIGlsbGVnYWwgaWRlbnRpZmllcnMKICAgaW50IGxlbiA9IHAuc2l6ZSgpOwpAQCAtMjcx
LDcgKzI2Nyw3IEBAIE9iamVjdCBGdW5jdGlvbk9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWMKIAkg
ICAgICBjb250aW51ZTsKIAkgIH0gLy8gZWxzZSBlcnJvcgogICAgICAgfQotICAgICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvciwKKyAgICAgIE9iamVjdEltcCAq
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLAogCQkJCSBJMThOX05PT1AoIlN5
bnRheCBlcnJvciBpbiBwYXJhbWV0ZXIgbGlzdCIpLAogCQkJCSAtMSk7CiAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKQEAgLTI4MCwxNSArMjc2LDE1IEBAIE9iamVjdCBGdW5jdGlvbk9i
amVjdEltcDo6Y29uc3RydWN0KEV4ZWMKIAogICBMaXN0IGNvbnNBcmdzOwogCi0gIE9iamVjdCBv
YmpDb25zID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKTsKLSAg
T2JqZWN0IHByb3RvdHlwZSA9IG9iakNvbnMuY29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7
Ci0gIHByb3RvdHlwZS5wdXQoZXhlYywgY29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIFZhbHVlKGZp
bXApLCBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKKyAgT2JqZWN0SW1wICpvYmpDb25z
ID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKTsKKyAgT2JqZWN0
SW1wICpwcm90b3R5cGUgPSBvYmpDb25zLT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKTsK
KyAgcHJvdG90eXBlLT5wdXQoZXhlYywgY29uc3RydWN0b3JQcm9wZXJ0eU5hbWUsIGZpbXAsIERv
bnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogICBmaW1wLT5wdXQoZXhlYywgcHJvdG90eXBl
UHJvcGVydHlOYW1lLCBwcm90b3R5cGUsIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwot
ICByZXR1cm4gcmV0OworICByZXR1cm4gZmltcDsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1
bmN0aW9uIENvbnN0cnVjdG9yCi1PYmplY3QgRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmplY3RJbXAgKkZ1bmN0aW9uT2Jq
ZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKQogewog
ICByZXR1cm4gRnVuY3Rpb25PYmplY3RJbXA6OmNvbnN0cnVjdChleGVjLCBhcmdzLCBVU3RyaW5n
KCksIDApOwogfQpAQCAtMzAwLDcgKzI5Niw3IEBAIGJvb2wgRnVuY3Rpb25PYmplY3RJbXA6Omlt
cGxlbWVudHNDYWxsKCkKIH0KIAogLy8gRUNNQSAxNS4zLjEgVGhlIEZ1bmN0aW9uIENvbnN0cnVj
dG9yIENhbGxlZCBhcyBhIEZ1bmN0aW9uCi1WYWx1ZSBGdW5jdGlvbk9iamVjdEltcDo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqRnVuY3Rpb25PYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgcmV0dXJu
IGNvbnN0cnVjdChleGVjLGFyZ3MpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0
aW9uX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvZnVuY3Rpb25fb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1w
IC11IC1yMS41IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbl9vYmplY3QuaAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAyIC0wMDAw
CTEuNQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uX29iamVjdC5oCTggQXVnIDIwMDUg
MDE6MDA6NDkgLTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmly
dHVhbCB+RnVuY3Rpb25Qcm90b3R5cGVJbXAoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1l
bnRzQ2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUlt
cCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpOwogICB9OwogCiAgIC8qKgpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpm
dW5jUHJvdG8sIGludCBpLCBpbnQgbGVuKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRz
Q2FsbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAq
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpOwogCiAgICAgZW51bSB7IFRvU3RyaW5nLCBBcHBseSwgQ2FsbCB9OwogICBw
cml2YXRlOgpAQCAtNzMsMTAgKzczLDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
fkZ1bmN0aW9uT2JqZWN0SW1wKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0
cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIpOwotICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGlu
dCBsaW5lTnVtYmVyKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHND
YWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CiAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYg
LXAgLXUgLXIxLjYwIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAKLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkxLjYwCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCTggQXVnIDIwMDUgMDE6MDA6NTAgLTAw
MDAKQEAgLTUzLDExICs1MywxMCBAQAogCiBleHRlcm4gaW50IGtqc3l5cGFyc2UoKTsKIAotdXNp
bmcgbmFtZXNwYWNlIEtKUzsKK25hbWVzcGFjZSBLSlMgewogCiAjaWYgIUFQUExFX0NIQU5HRVMK
IAotbmFtZXNwYWNlIEtKUyB7CiAjaWZkZWYgV09SRFNfQklHRU5ESUFOCiAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgTmFOX0J5dGVzW10gPSB7IDB4N2YsIDB4ZjgsIDAsIDAsIDAsIDAsIDAsIDAgfTsK
ICAgY29uc3QgdW5zaWduZWQgY2hhciBJbmZfQnl0ZXNbXSA9IHsgMHg3ZiwgMHhmMCwgMCwgMCwg
MCwgMCwgMCwgMCB9OwpAQCAtNzEsNyArNzAsNiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjb25z
dCBkb3VibGUgTmFOID0gKihjb25zdCBkb3VibGUqKSBOYU5fQnl0ZXM7CiAgIGNvbnN0IGRvdWJs
ZSBJbmYgPSAqKGNvbnN0IGRvdWJsZSopIEluZl9CeXRlczsKLX07CiAKICNlbmRpZiAvLyBBUFBM
RV9DSEFOR0VTCiAKQEAgLTEwNywxMSArMTA1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHVubG9j
a0ludGVycHJldGVyKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVuZGVm
aW5lZEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVW5kZWZpbmVkSW1w
ICpVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVmaW5lZCA9IDA7Ci0KLVZhbHVlIFVuZGVmaW5lZElt
cDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICovKmV4ZWMqLywgVHlwZSkgY29uc3QKK1ZhbHVlSW1w
ICpVbmRlZmluZWRJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqLypleGVjKi8sIFR5cGUpIGNv
bnN0CiB7Ci0gIHJldHVybiBWYWx1ZSgoVmFsdWVJbXAqKXRoaXMpOworICByZXR1cm4gY29uc3Rf
Y2FzdDxVbmRlZmluZWRJbXAgKj4odGhpcyk7CiB9CiAKIGJvb2wgVW5kZWZpbmVkSW1wOjp0b0Jv
b2xlYW4oRXhlY1N0YXRlICovKmV4ZWMqLykgY29uc3QKQEAgLTEyOSwyMCArMTI1LDE4IEBAIFVT
dHJpbmcgVW5kZWZpbmVkSW1wOjp0b1N0cmluZyhFeGVjU3RhdGUKICAgcmV0dXJuICJ1bmRlZmlu
ZWQiOwogfQogCi1PYmplY3QgVW5kZWZpbmVkSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0CitPYmplY3RJbXAgKlVuZGVmaW5lZEltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVj
KSBjb25zdAogewotICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3Is
IEkxOE5fTk9PUCgiVW5kZWZpbmVkIHZhbHVlIikpOworICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1AoIlVuZGVmaW5lZCB2YWx1ZSIpKTsK
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgIHJldHVybiBlcnI7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdWxsSW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLU51bGxJbXAgKk51bGxJbXA6OnN0YXRpY051bGwgPSAwOwotCi1W
YWx1ZSBOdWxsSW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKi8qZXhlYyovLCBUeXBlKSBjb25z
dAorVmFsdWVJbXAgKk51bGxJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqLypleGVjKi8sIFR5
cGUpIGNvbnN0CiB7Ci0gIHJldHVybiBWYWx1ZSgoVmFsdWVJbXAqKXRoaXMpOworICByZXR1cm4g
Y29uc3RfY2FzdDxOdWxsSW1wICo+KHRoaXMpOwogfQogCiBib29sIE51bGxJbXA6OnRvQm9vbGVh
bihFeGVjU3RhdGUgKi8qZXhlYyovKSBjb25zdApAQCAtMTYwLDIxICsxNTQsMTggQEAgVVN0cmlu
ZyBOdWxsSW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKi8qZQogICByZXR1cm4gIm51bGwiOwogfQog
Ci1PYmplY3QgTnVsbEltcDo6dG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAorT2JqZWN0
SW1wICpOdWxsSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgSTE4Tl9OT09QKCJOdWxsIHZh
bHVlIikpOworICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9y
LCBJMThOX05PT1AoIk51bGwgdmFsdWUiKSk7CiAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwog
ICByZXR1cm4gZXJyOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQm9v
bGVhbkltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Cb29sZWFuSW1w
KiBCb29sZWFuSW1wOjpzdGF0aWNUcnVlID0gMDsKLUJvb2xlYW5JbXAqIEJvb2xlYW5JbXA6OnN0
YXRpY0ZhbHNlID0gMDsKLQotVmFsdWUgQm9vbGVhbkltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRl
ICovKmV4ZWMqLywgVHlwZSkgY29uc3QKK1ZhbHVlSW1wICpCb29sZWFuSW1wOjp0b1ByaW1pdGl2
ZShFeGVjU3RhdGUgKi8qZXhlYyovLCBUeXBlKSBjb25zdAogewotICByZXR1cm4gVmFsdWUoKFZh
bHVlSW1wKil0aGlzKTsKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8Qm9vbGVhbkltcCAqPih0aGlzKTsK
IH0KIAogYm9vbCBCb29sZWFuSW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICovKmV4ZWMqLykgY29u
c3QKQEAgLTE5MiwxOCArMTgzLDE4IEBAIFVTdHJpbmcgQm9vbGVhbkltcDo6dG9TdHJpbmcoRXhl
Y1N0YXRlICoKICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7CiB9CiAKLU9iamVjdCBC
b29sZWFuSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitPYmplY3RJbXAgKkJv
b2xlYW5JbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKICAgTGlzdCBhcmdz
OwogICBhcmdzLmFwcGVuZChjb25zdF9jYXN0PEJvb2xlYW5JbXAqPih0aGlzKSk7Ci0gIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGlu
Qm9vbGVhbigpLmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PE9i
amVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkJvb2xlYW4oKS0+
Y29uc3RydWN0KGV4ZWMsYXJncykpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gU3RyaW5nSW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1W
YWx1ZSBTdHJpbmdJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqLypleGVjKi8sIFR5cGUpIGNv
bnN0CitWYWx1ZUltcCAqU3RyaW5nSW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKi8qZXhlYyov
LCBUeXBlKSBjb25zdAogewotICByZXR1cm4gVmFsdWUoKFZhbHVlSW1wKil0aGlzKTsKKyAgcmV0
dXJuIGNvbnN0X2Nhc3Q8U3RyaW5nSW1wICo+KHRoaXMpOwogfQogCiBib29sIFN0cmluZ0ltcDo6
dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqLypleGVjKi8pIGNvbnN0CkBAIC0yMjEsMzYgKzIxMiwxOCBA
QCBVU3RyaW5nIFN0cmluZ0ltcDo6dG9TdHJpbmcoRXhlY1N0YXRlICovCiAgIHJldHVybiB2YWw7
CiB9CiAKLU9iamVjdCBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QK
K09iamVjdEltcCAqU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7
CiAgIExpc3QgYXJnczsKICAgYXJncy5hcHBlbmQoY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0aGlz
KSk7Ci0gIHJldHVybiBPYmplY3Qoc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGlj
YWxJbnRlcnByZXRlcigpLT5idWlsdGluU3RyaW5nKCkuY29uc3RydWN0KGV4ZWMsIGFyZ3MpLmlt
cCgpKSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZXhlYy0+bGV4aWNhbElu
dGVycHJldGVyKCktPmJ1aWx0aW5TdHJpbmcoKS0+Y29uc3RydWN0KGV4ZWMsIGFyZ3MpKTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlckltcCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTnVtYmVySW1wICpOdW1iZXJJbXA6OnN0YXRp
Y05hTjsKLQotVmFsdWVJbXAgKk51bWJlckltcDo6Y3JlYXRlKGludCBpKQotewotICAgIGlmIChT
aW1wbGVOdW1iZXI6OmZpdHMoaSkpCi0gICAgICAgIHJldHVybiBTaW1wbGVOdW1iZXI6Om1ha2Uo
aSk7Ci0gICAgcmV0dXJuIG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci19
Ci0KLVZhbHVlSW1wICpOdW1iZXJJbXA6OmNyZWF0ZShkb3VibGUgZCkKK1ZhbHVlSW1wICpOdW1i
ZXJJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqLCBUeXBlKSBjb25zdAogewotICAgIGlmIChT
aW1wbGVOdW1iZXI6OmZpdHMoZCkpCi0gICAgICAgIHJldHVybiBTaW1wbGVOdW1iZXI6Om1ha2Uo
KGludClkKTsKLSAgICBpZiAoaXNOYU4oZCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNOYU47Ci0g
ICAgcmV0dXJuIG5ldyBOdW1iZXJJbXAoZCk7Ci19Ci0KLVZhbHVlIE51bWJlckltcDo6dG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICosIFR5cGUpIGNvbnN0Ci17Ci0gIHJldHVybiBOdW1iZXIoKE51bWJl
ckltcCopdGhpcyk7CisgIHJldHVybiBjb25zdF9jYXN0PE51bWJlckltcCAqPih0aGlzKTsKIH0K
IAogYm9vbCBOdW1iZXJJbXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QKQEAgLTI3MCwx
NiArMjQzLDE2IEBAIFVTdHJpbmcgTnVtYmVySW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKikKICAg
cmV0dXJuIFVTdHJpbmc6OmZyb20odmFsKTsKIH0KIAotT2JqZWN0IE51bWJlckltcDo6dG9PYmpl
Y3QoRXhlY1N0YXRlICpleGVjKSBjb25zdAorT2JqZWN0SW1wICpOdW1iZXJJbXA6OnRvT2JqZWN0
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsKICAgTGlzdCBhcmdzOwogICBhcmdzLmFwcGVuZChj
b25zdF9jYXN0PE51bWJlckltcCo+KHRoaXMpKTsKLSAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5OdW1iZXIoKS5jb25zdHJ1Y3Qo
ZXhlYyxhcmdzKSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZXhlYy0+bGV4
aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5OdW1iZXIoKS0+Y29uc3RydWN0KGV4ZWMsYXJncykp
OwogfQogCi1ib29sIE51bWJlckltcDo6dG9VSW50MzIodW5zaWduZWQmIHVpbnQzMikgY29uc3QK
K2Jvb2wgTnVtYmVySW1wOjpnZXRVSW50MzIodWludDMyX3QmIHVpbnQzMikgY29uc3QKIHsKLSAg
dWludDMyID0gKHVuc2lnbmVkKXZhbDsKKyAgdWludDMyID0gKHVpbnQzMl90KXZhbDsKICAgcmV0
dXJuIChkb3VibGUpdWludDMyID09IHZhbDsKIH0KIApAQCAtMzE1LDcgKzI4OCw3IEBAIExhYmVs
U3RhY2sgJkxhYmVsU3RhY2s6Om9wZXJhdG9yPShjb25zdCAKIAogYm9vbCBMYWJlbFN0YWNrOjpw
dXNoKGNvbnN0IElkZW50aWZpZXIgJmlkKQogewotICBpZiAoaWQuaXNFbXB0eSgpIHx8IGNvbnRh
aW5zKGlkKSkKKyAgaWYgKGNvbnRhaW5zKGlkKSkKICAgICByZXR1cm4gZmFsc2U7CiAKICAgU3Rh
Y2tFbGVtICpuZXd0b3MgPSBuZXcgU3RhY2tFbGVtOwpAQCAtMzY1LDcgKzMzOCw3IEBAIHZvaWQg
TGFiZWxTdGFjazo6Y2xlYXIoKQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENv
bnRleHRJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAx
MC4yCi1Db250ZXh0SW1wOjpDb250ZXh0SW1wKE9iamVjdCAmZ2xvYiwgSW50ZXJwcmV0ZXJJbXAg
KmludGVycHJldGVyLCBPYmplY3QgJnRoaXNWLCBDb2RlVHlwZSB0eXBlLAorQ29udGV4dEltcDo6
Q29udGV4dEltcChPYmplY3RJbXAgKmdsb2IsIEludGVycHJldGVySW1wICppbnRlcnByZXRlciwg
T2JqZWN0SW1wICp0aGlzViwgQ29kZVR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
Q29udGV4dEltcCAqY2FsbGluZ0NvbiwgRnVuY3Rpb25JbXAgKmZ1bmMsIGNvbnN0IExpc3QgKmFy
Z3MpCiAgICAgOiBfaW50ZXJwcmV0ZXIoaW50ZXJwcmV0ZXIpLCBfZnVuY3Rpb24oZnVuYyksIF9h
cmd1bWVudHMoYXJncykKIHsKQEAgLTM3NCwxMCArMzQ3LDEwIEBAIENvbnRleHRJbXA6OkNvbnRl
eHRJbXAoT2JqZWN0ICZnbG9iLCBJbnQKIAogICAvLyBjcmVhdGUgYW5kIGluaXRpYWxpemUgYWN0
aXZhdGlvbiBvYmplY3QgKEVDTUEgMTAuMS42KQogICBpZiAodHlwZSA9PSBGdW5jdGlvbkNvZGUg
fHwgdHlwZSA9PSBBbm9ueW1vdXNDb2RlICkgewotICAgIGFjdGl2YXRpb24gPSBPYmplY3QobmV3
IEFjdGl2YXRpb25JbXAoZnVuYywgKmFyZ3MpKTsKKyAgICBhY3RpdmF0aW9uID0gbmV3IEFjdGl2
YXRpb25JbXAoZnVuYywgKmFyZ3MpOwogICAgIHZhcmlhYmxlID0gYWN0aXZhdGlvbjsKICAgfSBl
bHNlIHsKLSAgICBhY3RpdmF0aW9uID0gT2JqZWN0KCk7CisgICAgYWN0aXZhdGlvbiA9IE5VTEw7
CiAgICAgdmFyaWFibGUgPSBnbG9iOwogICB9CiAKQEAgLTM5MiwxOCArMzY1LDE4IEBAIENvbnRl
eHRJbXA6OkNvbnRleHRJbXAoT2JqZWN0ICZnbG9iLCBJbnQKICAgICAgIH0gLy8gZWxzZSBzYW1l
IGFzIEdsb2JhbENvZGUKICAgICBjYXNlIEdsb2JhbENvZGU6CiAgICAgICBzY29wZS5jbGVhcigp
OwotICAgICAgc2NvcGUucHVzaChnbG9iLmltcCgpKTsKLSAgICAgIHRoaXNWYWwgPSBPYmplY3Qo
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oZ2xvYi5pbXAoKSkpOworICAgICAgc2NvcGUucHVzaChn
bG9iKTsKKyAgICAgIHRoaXNWYWwgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihnbG9iKTsKICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgogICAgIGNhc2UgQW5vbnltb3VzQ29k
ZToKICAgICAgIGlmICh0eXBlID09IEZ1bmN0aW9uQ29kZSkgewogCXNjb3BlID0gZnVuYy0+c2Nv
cGUoKTsKLQlzY29wZS5wdXNoKGFjdGl2YXRpb24uaW1wKCkpOworCXNjb3BlLnB1c2goYWN0aXZh
dGlvbik7CiAgICAgICB9IGVsc2UgewogCXNjb3BlLmNsZWFyKCk7Ci0Jc2NvcGUucHVzaChnbG9i
LmltcCgpKTsKLQlzY29wZS5wdXNoKGFjdGl2YXRpb24uaW1wKCkpOworCXNjb3BlLnB1c2goZ2xv
Yik7CisJc2NvcGUucHVzaChhY3RpdmF0aW9uKTsKICAgICAgIH0KICAgICAgIHZhcmlhYmxlID0g
YWN0aXZhdGlvbjsgLy8gVE9ETzogRG9udERlbGV0ZSA/IChFQ01BIDEwLjIuMykKICAgICAgIHRo
aXNWYWwgPSB0aGlzVjsKQEAgLTQ3OCwyNyArNDUxLDE3IEBAIEludGVycHJldGVySW1wKiBJbnRl
cnByZXRlckltcDo6c19ob29rID0KIAogdm9pZCBJbnRlcnByZXRlckltcDo6Z2xvYmFsSW5pdCgp
CiB7Ci0gIC8vZnByaW50Ziggc3RkZXJyLCAiSW50ZXJwcmV0ZXJJbXA6Omdsb2JhbEluaXQoKVxu
IiApOwotICBVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVmaW5lZCA9IG5ldyBVbmRlZmluZWRJbXAo
KTsKLSAgTnVsbEltcDo6c3RhdGljTnVsbCA9IG5ldyBOdWxsSW1wKCk7Ci0gIEJvb2xlYW5JbXA6
OnN0YXRpY1RydWUgPSBuZXcgQm9vbGVhbkltcCh0cnVlKTsKLSAgQm9vbGVhbkltcDo6c3RhdGlj
RmFsc2UgPSBuZXcgQm9vbGVhbkltcChmYWxzZSk7Ci0gIE51bWJlckltcDo6c3RhdGljTmFOID0g
bmV3IE51bWJlckltcChOYU4pOworICAgIENvbnN0YW50VmFsdWVzOjppbml0KCk7CiB9CiAKIHZv
aWQgSW50ZXJwcmV0ZXJJbXA6Omdsb2JhbENsZWFyKCkKIHsKLSAgLy9mcHJpbnRmKCBzdGRlcnIs
ICJJbnRlcnByZXRlckltcDo6Z2xvYmFsQ2xlYXIoKVxuIiApOwotICBVbmRlZmluZWRJbXA6OnN0
YXRpY1VuZGVmaW5lZCA9IDA7Ci0gIE51bGxJbXA6OnN0YXRpY051bGwgPSAwOwotICBCb29sZWFu
SW1wOjpzdGF0aWNUcnVlID0gMDsKLSAgQm9vbGVhbkltcDo6c3RhdGljRmFsc2UgPSAwOwotICBO
dW1iZXJJbXA6OnN0YXRpY05hTiA9IDA7CisgICAgQ29uc3RhbnRWYWx1ZXM6OmNsZWFyKCk7CiB9
CiAKLUludGVycHJldGVySW1wOjpJbnRlcnByZXRlckltcChJbnRlcnByZXRlciAqaW50ZXJwLCBj
b25zdCBPYmplY3QgJmdsb2IpCi0gIDogZ2xvYkV4ZWMoaW50ZXJwLCAwKQotICAsIF9jb250ZXh0
KDApCitJbnRlcnByZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoSW50ZXJwcmV0ZXIgKmludGVycCwg
T2JqZWN0SW1wICpnbG9iKQorICAgIDogZ2xvYkV4ZWMoaW50ZXJwLCAwKQorICAgICwgX2NvbnRl
eHQoMCkKIHsKICAgLy8gYWRkIHRoaXMgaW50ZXJwcmV0ZXIgdG8gdGhlIGdsb2JhbCBjaGFpbgog
ICAvLyBhcyBhIHJvb3Qgc2V0IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24KQEAgLTUxNSw3ICs0Nzgs
NyBAQCBJbnRlcnByZXRlckltcDo6SW50ZXJwcmV0ZXJJbXAoSW50ZXJwcmV0CiAgICAgZ2xvYmFs
SW5pdCgpOwogICB9CiAKLSAgSW50ZXJwcmV0ZXJNYXA6OnNldEludGVycHJldGVyRm9yR2xvYmFs
T2JqZWN0KHRoaXMsIGdsb2IuaW1wKCkpOworICBJbnRlcnByZXRlck1hcDo6c2V0SW50ZXJwcmV0
ZXJGb3JHbG9iYWxPYmplY3QodGhpcywgZ2xvYik7CiAKICAgZ2xvYmFsID0gZ2xvYjsKICAgZGJn
ID0gMDsKQEAgLTU1MCw4MSArNTEzLDc1IEBAIHZvaWQgSW50ZXJwcmV0ZXJJbXA6OnVubG9jaygp
CiAgIC8vIENvbnRydWN0b3IgcHJvdG90eXBlIG9iamVjdHMgKE9iamVjdC5wcm90b3R5cGUsIEFy
cmF5LnByb3RvdHlwZSBldGMpCiAKICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90byA9
IG5ldyBGdW5jdGlvblByb3RvdHlwZUltcCgmZ2xvYkV4ZWMpOwotICBiX0Z1bmN0aW9uUHJvdG90
eXBlID0gT2JqZWN0KGZ1bmNQcm90byk7CisgIGJfRnVuY3Rpb25Qcm90b3R5cGUgPSBmdW5jUHJv
dG87CiAgIE9iamVjdFByb3RvdHlwZUltcCAqb2JqUHJvdG8gPSBuZXcgT2JqZWN0UHJvdG90eXBl
SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvKTsKLSAgYl9PYmplY3RQcm90b3R5cGUgPSBPYmplY3Qo
b2JqUHJvdG8pOworICBiX09iamVjdFByb3RvdHlwZSA9IG9ialByb3RvOwogICBmdW5jUHJvdG8t
PnNldFByb3RvdHlwZShiX09iamVjdFByb3RvdHlwZSk7CiAKICAgQXJyYXlQcm90b3R5cGVJbXAg
KmFycmF5UHJvdG8gPSBuZXcgQXJyYXlQcm90b3R5cGVJbXAoJmdsb2JFeGVjLCBvYmpQcm90byk7
Ci0gIGJfQXJyYXlQcm90b3R5cGUgPSBPYmplY3QoYXJyYXlQcm90byk7CisgIGJfQXJyYXlQcm90
b3R5cGUgPSBhcnJheVByb3RvOwogICBTdHJpbmdQcm90b3R5cGVJbXAgKnN0cmluZ1Byb3RvID0g
bmV3IFN0cmluZ1Byb3RvdHlwZUltcCgmZ2xvYkV4ZWMsIG9ialByb3RvKTsKLSAgYl9TdHJpbmdQ
cm90b3R5cGUgPSBPYmplY3Qoc3RyaW5nUHJvdG8pOworICBiX1N0cmluZ1Byb3RvdHlwZSA9IHN0
cmluZ1Byb3RvOwogICBCb29sZWFuUHJvdG90eXBlSW1wICpib29sZWFuUHJvdG8gPSBuZXcgQm9v
bGVhblByb3RvdHlwZUltcCgmZ2xvYkV4ZWMsIG9ialByb3RvLCBmdW5jUHJvdG8pOwotICBiX0Jv
b2xlYW5Qcm90b3R5cGUgPSBPYmplY3QoYm9vbGVhblByb3RvKTsKKyAgYl9Cb29sZWFuUHJvdG90
eXBlID0gYm9vbGVhblByb3RvOwogICBOdW1iZXJQcm90b3R5cGVJbXAgKm51bWJlclByb3RvID0g
bmV3IE51bWJlclByb3RvdHlwZUltcCgmZ2xvYkV4ZWMsIG9ialByb3RvLCBmdW5jUHJvdG8pOwot
ICBiX051bWJlclByb3RvdHlwZSA9IE9iamVjdChudW1iZXJQcm90byk7CisgIGJfTnVtYmVyUHJv
dG90eXBlID0gbnVtYmVyUHJvdG87CiAgIERhdGVQcm90b3R5cGVJbXAgKmRhdGVQcm90byA9IG5l
dyBEYXRlUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgb2JqUHJvdG8pOwotICBiX0RhdGVQcm90b3R5
cGUgPSBPYmplY3QoZGF0ZVByb3RvKTsKKyAgYl9EYXRlUHJvdG90eXBlID0gZGF0ZVByb3RvOwog
ICBSZWdFeHBQcm90b3R5cGVJbXAgKnJlZ2V4cFByb3RvID0gbmV3IFJlZ0V4cFByb3RvdHlwZUlt
cCgmZ2xvYkV4ZWMsIG9ialByb3RvLCBmdW5jUHJvdG8pOwotICBiX1JlZ0V4cFByb3RvdHlwZSA9
IE9iamVjdChyZWdleHBQcm90byk7CisgIGJfUmVnRXhwUHJvdG90eXBlID0gcmVnZXhwUHJvdG87
CiAgIEVycm9yUHJvdG90eXBlSW1wICplcnJvclByb3RvID0gbmV3IEVycm9yUHJvdG90eXBlSW1w
KCZnbG9iRXhlYywgb2JqUHJvdG8sIGZ1bmNQcm90byk7Ci0gIGJfRXJyb3JQcm90b3R5cGUgPSBP
YmplY3QoZXJyb3JQcm90byk7CisgIGJfRXJyb3JQcm90b3R5cGUgPSBlcnJvclByb3RvOwogCi0g
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGdsb2JhbC5pbXAoKSktPnNldFByb3RvdHlwZShiX09i
amVjdFByb3RvdHlwZSk7CisgIHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGdsb2JhbCktPnNldFBy
b3RvdHlwZShiX09iamVjdFByb3RvdHlwZSk7CiAKICAgLy8gQ29uc3RydWN0b3JzIChPYmplY3Qs
IEFycmF5LCBldGMuKQotICBiX09iamVjdCA9IE9iamVjdChuZXcgT2JqZWN0T2JqZWN0SW1wKCZn
bG9iRXhlYywgb2JqUHJvdG8sIGZ1bmNQcm90bykpOwotICBiX0Z1bmN0aW9uID0gT2JqZWN0KG5l
dyBGdW5jdGlvbk9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bykpOwotICBiX0FycmF5ID0g
T2JqZWN0KG5ldyBBcnJheU9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYXJyYXlQcm90
bykpOwotICBiX1N0cmluZyA9IE9iamVjdChuZXcgU3RyaW5nT2JqZWN0SW1wKCZnbG9iRXhlYywg
ZnVuY1Byb3RvLCBzdHJpbmdQcm90bykpOwotICBiX0Jvb2xlYW4gPSBPYmplY3QobmV3IEJvb2xl
YW5PYmplY3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJvb2xlYW5Qcm90bykpOwotICBiX051
bWJlciA9IE9iamVjdChuZXcgTnVtYmVyT2JqZWN0SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBu
dW1iZXJQcm90bykpOwotICBiX0RhdGUgPSBPYmplY3QobmV3IERhdGVPYmplY3RJbXAoJmdsb2JF
eGVjLCBmdW5jUHJvdG8sIGRhdGVQcm90bykpOwotICBiX1JlZ0V4cCA9IE9iamVjdChuZXcgUmVn
RXhwT2JqZWN0SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCByZWdleHBQcm90bykpOwotICBiX0Vy
cm9yID0gT2JqZWN0KG5ldyBFcnJvck9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgZXJy
b3JQcm90bykpOworICBiX09iamVjdCA9IG5ldyBPYmplY3RPYmplY3RJbXAoJmdsb2JFeGVjLCBv
YmpQcm90bywgZnVuY1Byb3RvKTsKKyAgYl9GdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk9iamVjdElt
cCgmZ2xvYkV4ZWMsIGZ1bmNQcm90byk7CisgIGJfQXJyYXkgPSBuZXcgQXJyYXlPYmplY3RJbXAo
Jmdsb2JFeGVjLCBmdW5jUHJvdG8sIGFycmF5UHJvdG8pOworICBiX1N0cmluZyA9IG5ldyBTdHJp
bmdPYmplY3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIHN0cmluZ1Byb3RvKTsKKyAgYl9Cb29s
ZWFuID0gbmV3IEJvb2xlYW5PYmplY3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJvb2xlYW5Q
cm90byk7CisgIGJfTnVtYmVyID0gbmV3IE51bWJlck9iamVjdEltcCgmZ2xvYkV4ZWMsIGZ1bmNQ
cm90bywgbnVtYmVyUHJvdG8pOworICBiX0RhdGUgPSBuZXcgRGF0ZU9iamVjdEltcCgmZ2xvYkV4
ZWMsIGZ1bmNQcm90bywgZGF0ZVByb3RvKTsKKyAgYl9SZWdFeHAgPSBuZXcgUmVnRXhwT2JqZWN0
SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCByZWdleHBQcm90byk7CisgIGJfRXJyb3IgPSBuZXcg
RXJyb3JPYmplY3RJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGVycm9yUHJvdG8pOwogCiAgIC8v
IEVycm9yIG9iamVjdCBwcm90b3R5cGVzCi0gIGJfZXZhbEVycm9yUHJvdG90eXBlID0gT2JqZWN0
KG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCgmZ2xvYkV4ZWMsIGVycm9yUHJvdG8sIEV2YWxF
cnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJFdmFsRXJyb3IiLCAiRXZhbEVycm9yIikpOwotICBiX3JhbmdlRXJyb3JQcm90
b3R5cGUgPSBPYmplY3QobmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgZXJy
b3JQcm90bywgUmFuZ2VFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJSYW5nZUVycm9yIiwgIlJhbmdlRXJyb3IiKSk7Ci0g
IGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGUgPSBPYmplY3QobmV3IE5hdGl2ZUVycm9yUHJvdG90
eXBlSW1wKCZnbG9iRXhlYywgZXJyb3JQcm90bywgUmVmZXJlbmNlRXJyb3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmZXJl
bmNlRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiKSk7Ci0gIGJfc3ludGF4RXJyb3JQcm90b3R5cGUg
PSBPYmplY3QobmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgZXJyb3JQcm90
bywgU3ludGF4RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiU3ludGF4RXJyb3IiLCAiU3ludGF4RXJyb3IiKSk7Ci0gIGJf
dHlwZUVycm9yUHJvdG90eXBlID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCgm
Z2xvYkV4ZWMsIGVycm9yUHJvdG8sIFR5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlRXJyb3IiLCAiVHlwZUVy
cm9yIikpOwotICBiX3VyaUVycm9yUHJvdG90eXBlID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvclBy
b3RvdHlwZUltcCgmZ2xvYkV4ZWMsIGVycm9yUHJvdG8sIFVSSUVycm9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSSUVycm9y
IiwgIlVSSUVycm9yIikpOworICBiX2V2YWxFcnJvclByb3RvdHlwZSA9IG5ldyBOYXRpdmVFcnJv
clByb3RvdHlwZUltcCgmZ2xvYkV4ZWMsIGVycm9yUHJvdG8sIEV2YWxFcnJvciwgIkV2YWxFcnJv
ciIsICJFdmFsRXJyb3IiKTsKKyAgYl9yYW5nZUVycm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVy
cm9yUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgZXJyb3JQcm90bywgUmFuZ2VFcnJvciwgIlJhbmdl
RXJyb3IiLCAiUmFuZ2VFcnJvciIpOworICBiX3JlZmVyZW5jZUVycm9yUHJvdG90eXBlID0gbmV3
IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgZXJyb3JQcm90bywgUmVmZXJlbmNl
RXJyb3IsICJSZWZlcmVuY2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIpOworICBiX3N5bnRheEVy
cm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlSW1wKCZnbG9iRXhlYywgZXJy
b3JQcm90bywgU3ludGF4RXJyb3IsICJTeW50YXhFcnJvciIsICJTeW50YXhFcnJvciIpOworICBi
X3R5cGVFcnJvclByb3RvdHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCgmZ2xvYkV4
ZWMsIGVycm9yUHJvdG8sIFR5cGVFcnJvciwgIlR5cGVFcnJvciIsICJUeXBlRXJyb3IiKTsKKyAg
Yl91cmlFcnJvclByb3RvdHlwZSA9IG5ldyBOYXRpdmVFcnJvclByb3RvdHlwZUltcCgmZ2xvYkV4
ZWMsIGVycm9yUHJvdG8sIFVSSUVycm9yLCAiVVJJRXJyb3IiLCAiVVJJRXJyb3IiKTsKIAogICAv
LyBFcnJvciBvYmplY3RzCi0gIGJfZXZhbEVycm9yID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvcklt
cCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYl9ldmFsRXJyb3JQcm90b3R5cGUpKTsKLSAgYl9yYW5n
ZUVycm9yID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvckltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywg
Yl9yYW5nZUVycm9yUHJvdG90eXBlKSk7Ci0gIGJfcmVmZXJlbmNlRXJyb3IgPSBPYmplY3QobmV3
IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBiX3JlZmVyZW5jZUVycm9yUHJv
dG90eXBlKSk7Ci0gIGJfc3ludGF4RXJyb3IgPSBPYmplY3QobmV3IE5hdGl2ZUVycm9ySW1wKCZn
bG9iRXhlYywgZnVuY1Byb3RvLCBiX3N5bnRheEVycm9yUHJvdG90eXBlKSk7Ci0gIGJfdHlwZUVy
cm9yID0gT2JqZWN0KG5ldyBOYXRpdmVFcnJvckltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYl90
eXBlRXJyb3JQcm90b3R5cGUpKTsKLSAgYl91cmlFcnJvciA9IE9iamVjdChuZXcgTmF0aXZlRXJy
b3JJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJfdXJpRXJyb3JQcm90b3R5cGUpKTsKKyAgYl9l
dmFsRXJyb3IgPSBuZXcgTmF0aXZlRXJyb3JJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIGJfZXZh
bEVycm9yUHJvdG90eXBlKTsKKyAgYl9yYW5nZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKCZn
bG9iRXhlYywgZnVuY1Byb3RvLCBiX3JhbmdlRXJyb3JQcm90b3R5cGUpOworICBiX3JlZmVyZW5j
ZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBiX3JlZmVy
ZW5jZUVycm9yUHJvdG90eXBlKTsKKyAgYl9zeW50YXhFcnJvciA9IG5ldyBOYXRpdmVFcnJvcklt
cCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgYl9zeW50YXhFcnJvclByb3RvdHlwZSk7CisgIGJfdHlw
ZUVycm9yID0gbmV3IE5hdGl2ZUVycm9ySW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBiX3R5cGVF
cnJvclByb3RvdHlwZSk7CisgIGJfdXJpRXJyb3IgPSBuZXcgTmF0aXZlRXJyb3JJbXAoJmdsb2JF
eGVjLCBmdW5jUHJvdG8sIGJfdXJpRXJyb3JQcm90b3R5cGUpOwogCiAgIC8vIEVDTUEgMTUuMy40
LjEKICAgZnVuY1Byb3RvLT5wdXQoJmdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX0Z1bmN0aW9u
LCBEb250RW51bSk7CiAKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJPYmplY3QiLCBiX09iamVj
dCwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIkZ1bmN0aW9uIiwgYl9GdW5j
dGlvbiwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIkFycmF5IiwgYl9BcnJh
eSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIkJvb2xlYW4iLCBiX0Jvb2xl
YW4sIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJTdHJpbmciLCBiX1N0cmlu
ZywgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIk51bWJlciIsIGJfTnVtYmVy
LCBEb250RW51bSk7Ci0gIGdsb2JhbC5wdXQoJmdsb2JFeGVjLCAiRGF0ZSIsIGJfRGF0ZSwgRG9u
dEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIlJlZ0V4cCIsIGJfUmVnRXhwLCBEb250
RW51bSk7Ci0gIGdsb2JhbC5wdXQoJmdsb2JFeGVjLCAiRXJyb3IiLCBiX0Vycm9yLCBEb250RW51
bSk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIk9iamVjdCIsIGJfT2JqZWN0LCBEb250RW51
bSk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIkZ1bmN0aW9uIiwgYl9GdW5jdGlvbiwgRG9u
dEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJBcnJheSIsIGJfQXJyYXksIERvbnRF
bnVtKTsKKyAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiQm9vbGVhbiIsIGJfQm9vbGVhbiwgRG9u
dEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJTdHJpbmciLCBiX1N0cmluZywgRG9u
dEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJOdW1iZXIiLCBiX051bWJlciwgRG9u
dEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJEYXRlIiwgYl9EYXRlLCBEb250RW51
bSk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIlJlZ0V4cCIsIGJfUmVnRXhwLCBEb250RW51
bSk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIkVycm9yIiwgYl9FcnJvciwgRG9udEVudW0p
OwogICAvLyBVc2luZyBJbnRlcm5hbCBmb3IgdGhvc2UgdG8gaGF2ZSBzb21ldGhpbmcgIT0gMAog
ICAvLyAoc2VlIGtqc193aW5kb3cpLiBNYXliZSBEb250RW51bSB3b3VsZCBiZSBvayB0b28gPwot
ICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIkV2YWxFcnJvciIsYl9ldmFsRXJyb3IsIEludGVybmFs
KTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJSYW5nZUVycm9yIixiX3JhbmdlRXJyb3IsIElu
dGVybmFsKTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJSZWZlcmVuY2VFcnJvciIsYl9yZWZl
cmVuY2VFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgIlN5bnRheEVy
cm9yIixiX3N5bnRheEVycm9yLCBJbnRlcm5hbCk7Ci0gIGdsb2JhbC5wdXQoJmdsb2JFeGVjLCAi
VHlwZUVycm9yIixiX3R5cGVFcnJvciwgSW50ZXJuYWwpOwotICBnbG9iYWwucHV0KCZnbG9iRXhl
YywgIlVSSUVycm9yIixiX3VyaUVycm9yLCBJbnRlcm5hbCk7CisgIGdsb2JhbC0+cHV0KCZnbG9i
RXhlYywgIkV2YWxFcnJvciIsYl9ldmFsRXJyb3IsIEludGVybmFsKTsKKyAgZ2xvYmFsLT5wdXQo
Jmdsb2JFeGVjLCAiUmFuZ2VFcnJvciIsYl9yYW5nZUVycm9yLCBJbnRlcm5hbCk7CisgIGdsb2Jh
bC0+cHV0KCZnbG9iRXhlYywgIlJlZmVyZW5jZUVycm9yIixiX3JlZmVyZW5jZUVycm9yLCBJbnRl
cm5hbCk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIlN5bnRheEVycm9yIixiX3N5bnRheEVy
cm9yLCBJbnRlcm5hbCk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIlR5cGVFcnJvciIsYl90
eXBlRXJyb3IsIEludGVybmFsKTsKKyAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiVVJJRXJyb3Ii
LGJfdXJpRXJyb3IsIEludGVybmFsKTsKIAogICAvLyBTZXQgdGhlICJjb25zdHJ1Y3RvciIgcHJv
cGVydHkgb2YgYWxsIGJ1aWx0aW4gY29uc3RydWN0b3JzCiAgIG9ialByb3RvLT5wdXQoJmdsb2JF
eGVjLCAiY29uc3RydWN0b3IiLCBiX09iamVjdCwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwpAQCAtNjM2LDM2ICs1OTMsMzYgQEAgdm9pZCBJbnRlcnByZXRlckltcDo6dW5sb2Nr
KCkKICAgZGF0ZVByb3RvLT5wdXQoJmdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX0RhdGUsIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgcmVnZXhwUHJvdG8tPnB1dCgmZ2xv
YkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfUmVnRXhwLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CiAgIGVycm9yUHJvdG8tPnB1dCgmZ2xvYkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJf
RXJyb3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl9ldmFsRXJyb3JQ
cm90b3R5cGUucHV0KCZnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl9ldmFsRXJyb3IsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl9yYW5nZUVycm9yUHJvdG90eXBlLnB1
dCgmZ2xvYkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfcmFuZ2VFcnJvciwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOwotICBiX3JlZmVyZW5jZUVycm9yUHJvdG90eXBlLnB1dCgmZ2xv
YkV4ZWMsICJjb25zdHJ1Y3RvciIsIGJfcmVmZXJlbmNlRXJyb3IsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKLSAgYl9zeW50YXhFcnJvclByb3RvdHlwZS5wdXQoJmdsb2JFeGVj
LCAiY29uc3RydWN0b3IiLCBiX3N5bnRheEVycm9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7Ci0gIGJfdHlwZUVycm9yUHJvdG90eXBlLnB1dCgmZ2xvYkV4ZWMsICJjb25zdHJ1
Y3RvciIsIGJfdHlwZUVycm9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0g
IGJfdXJpRXJyb3JQcm90b3R5cGUucHV0KCZnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl91cmlF
cnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICBiX2V2YWxFcnJvclBy
b3RvdHlwZS0+cHV0KCZnbG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl9ldmFsRXJyb3IsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgYl9yYW5nZUVycm9yUHJvdG90eXBlLT5w
dXQoJmdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBiX3JhbmdlRXJyb3IsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgYl9yZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+cHV0KCZn
bG9iRXhlYywgImNvbnN0cnVjdG9yIiwgYl9yZWZlcmVuY2VFcnJvciwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworICBiX3N5bnRheEVycm9yUHJvdG90eXBlLT5wdXQoJmdsb2JF
eGVjLCAiY29uc3RydWN0b3IiLCBiX3N5bnRheEVycm9yLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7CisgIGJfdHlwZUVycm9yUHJvdG90eXBlLT5wdXQoJmdsb2JFeGVjLCAiY29u
c3RydWN0b3IiLCBiX3R5cGVFcnJvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICBiX3VyaUVycm9yUHJvdG90eXBlLT5wdXQoJmdsb2JFeGVjLCAiY29uc3RydWN0b3IiLCBi
X3VyaUVycm9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgLy8gYnVp
bHQtaW4gdmFsdWVzCi0gIGdsb2JhbC5wdXQoJmdsb2JFeGVjLCAiTmFOIiwgICAgICAgIE51bWJl
cihOYU4pLCBEb250RW51bXxEb250RGVsZXRlKTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJJ
bmZpbml0eSIsICAgTnVtYmVyKEluZiksIERvbnRFbnVtfERvbnREZWxldGUpOwotICBnbG9iYWwu
cHV0KCZnbG9iRXhlYywgInVuZGVmaW5lZCIsICBVbmRlZmluZWQoKSwgRG9udEVudW18RG9udERl
bGV0ZSk7CisgIGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgIk5hTiIsICAgICAgICBqc05hTigpLCBE
b250RW51bXxEb250RGVsZXRlKTsKKyAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiSW5maW5pdHki
LCAgIE51bWJlcihJbmYpLCBEb250RW51bXxEb250RGVsZXRlKTsKKyAgZ2xvYmFsLT5wdXQoJmds
b2JFeGVjLCAidW5kZWZpbmVkIiwgIFVuZGVmaW5lZCgpLCBEb250RW51bXxEb250RGVsZXRlKTsK
IAogICAvLyBidWlsdC1pbiBmdW5jdGlvbnMKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJldmFs
IiwgICAgICAgT2JqZWN0KG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBH
bG9iYWxGdW5jSW1wOjpFdmFsLCAxKSksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4
ZWMsICJwYXJzZUludCIsICAgT2JqZWN0KG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVu
Y1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpQYXJzZUludCwgMikpLCBEb250RW51bSk7Ci0gIGdsb2Jh
bC5wdXQoJmdsb2JFeGVjLCAicGFyc2VGbG9hdCIsIE9iamVjdChuZXcgR2xvYmFsRnVuY0ltcCgm
Z2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6UGFyc2VGbG9hdCwgMSkpLCBEb250
RW51bSk7Ci0gIGdsb2JhbC5wdXQoJmdsb2JFeGVjLCAiaXNOYU4iLCAgICAgIE9iamVjdChuZXcg
R2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6SXNOYU4s
IDEpKSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgImlzRmluaXRlIiwgICBP
YmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJ
bXA6OklzRmluaXRlLCAxKSksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJl
c2NhcGUiLCAgICAgT2JqZWN0KG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVuY1Byb3Rv
LCBHbG9iYWxGdW5jSW1wOjpFc2NhcGUsIDEpKSwgRG9udEVudW0pOwotICBnbG9iYWwucHV0KCZn
bG9iRXhlYywgInVuZXNjYXBlIiwgICBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVj
LCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OlVuRXNjYXBlLCAxKSksIERvbnRFbnVtKTsKLSAg
Z2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJkZWNvZGVVUkkiLCAgT2JqZWN0KG5ldyBHbG9iYWxGdW5j
SW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpEZWNvZGVVUkksIDEpKSwg
RG9udEVudW0pOwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgImRlY29kZVVSSUNvbXBvbmVudCIs
IE9iamVjdChuZXcgR2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVu
Y0ltcDo6RGVjb2RlVVJJQ29tcG9uZW50LCAxKSksIERvbnRFbnVtKTsKLSAgZ2xvYmFsLnB1dCgm
Z2xvYkV4ZWMsICJlbmNvZGVVUkkiLCAgT2JqZWN0KG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhl
YywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpFbmNvZGVVUkksIDEpKSwgRG9udEVudW0pOwot
ICBnbG9iYWwucHV0KCZnbG9iRXhlYywgImVuY29kZVVSSUNvbXBvbmVudCIsIE9iamVjdChuZXcg
R2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6RW5jb2Rl
VVJJQ29tcG9uZW50LCAxKSksIERvbnRFbnVtKTsKKyAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAi
ZXZhbCIsICAgICAgIG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVuY1Byb3RvLCBHbG9i
YWxGdW5jSW1wOjpFdmFsLCAxKSwgRG9udEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMs
ICJwYXJzZUludCIsICAgbmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEds
b2JhbEZ1bmNJbXA6OlBhcnNlSW50LCAyKSwgRG9udEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xv
YkV4ZWMsICJwYXJzZUZsb2F0IiwgbmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJv
dG8sIEdsb2JhbEZ1bmNJbXA6OlBhcnNlRmxvYXQsIDEpLCBEb250RW51bSk7CisgIGdsb2JhbC0+
cHV0KCZnbG9iRXhlYywgImlzTmFOIiwgICAgICBuZXcgR2xvYmFsRnVuY0ltcCgmZ2xvYkV4ZWMs
IGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6SXNOYU4sIDEpLCBEb250RW51bSk7CisgIGdsb2Jh
bC0+cHV0KCZnbG9iRXhlYywgImlzRmluaXRlIiwgICBuZXcgR2xvYmFsRnVuY0ltcCgmZ2xvYkV4
ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6SXNGaW5pdGUsIDEpLCBEb250RW51bSk7Cisg
IGdsb2JhbC0+cHV0KCZnbG9iRXhlYywgImVzY2FwZSIsICAgICBuZXcgR2xvYmFsRnVuY0ltcCgm
Z2xvYkV4ZWMsIGZ1bmNQcm90bywgR2xvYmFsRnVuY0ltcDo6RXNjYXBlLCAxKSwgRG9udEVudW0p
OworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJ1bmVzY2FwZSIsICAgbmV3IEdsb2JhbEZ1bmNJ
bXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OlVuRXNjYXBlLCAxKSwgRG9u
dEVudW0pOworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJkZWNvZGVVUkkiLCAgbmV3IEdsb2Jh
bEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJbXA6OkRlY29kZVVSSSwg
MSksIERvbnRFbnVtKTsKKyAgZ2xvYmFsLT5wdXQoJmdsb2JFeGVjLCAiZGVjb2RlVVJJQ29tcG9u
ZW50IiwgbmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8sIEdsb2JhbEZ1bmNJ
bXA6OkRlY29kZVVSSUNvbXBvbmVudCwgMSksIERvbnRFbnVtKTsKKyAgZ2xvYmFsLT5wdXQoJmds
b2JFeGVjLCAiZW5jb2RlVVJJIiwgIG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVuY1By
b3RvLCBHbG9iYWxGdW5jSW1wOjpFbmNvZGVVUkksIDEpLCBEb250RW51bSk7CisgIGdsb2JhbC0+
cHV0KCZnbG9iRXhlYywgImVuY29kZVVSSUNvbXBvbmVudCIsIG5ldyBHbG9iYWxGdW5jSW1wKCZn
bG9iRXhlYywgZnVuY1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpFbmNvZGVVUklDb21wb25lbnQsIDEp
LCBEb250RW51bSk7CiAjaWZuZGVmIE5ERUJVRwotICBnbG9iYWwucHV0KCZnbG9iRXhlYywgImtq
c3ByaW50IiwgICBPYmplY3QobmV3IEdsb2JhbEZ1bmNJbXAoJmdsb2JFeGVjLCBmdW5jUHJvdG8s
IEdsb2JhbEZ1bmNJbXA6OktKU1ByaW50LCAxKSksIERvbnRFbnVtKTsKKyAgZ2xvYmFsLT5wdXQo
Jmdsb2JFeGVjLCAia2pzcHJpbnQiLCAgIG5ldyBHbG9iYWxGdW5jSW1wKCZnbG9iRXhlYywgZnVu
Y1Byb3RvLCBHbG9iYWxGdW5jSW1wOjpLSlNQcmludCwgMSksIERvbnRFbnVtKTsKICNlbmRpZgog
CiAgIC8vIGJ1aWx0LWluIG9iamVjdHMKLSAgZ2xvYmFsLnB1dCgmZ2xvYkV4ZWMsICJNYXRoIiwg
T2JqZWN0KG5ldyBNYXRoT2JqZWN0SW1wKCZnbG9iRXhlYywgb2JqUHJvdG8pKSwgRG9udEVudW0p
OworICBnbG9iYWwtPnB1dCgmZ2xvYkV4ZWMsICJNYXRoIiwgbmV3IE1hdGhPYmplY3RJbXAoJmds
b2JFeGVjLCBvYmpQcm90byksIERvbnRFbnVtKTsKIH0KIAogSW50ZXJwcmV0ZXJJbXA6On5JbnRl
cnByZXRlckltcCgpCkBAIC02OTEsNyArNjQ4LDcgQEAgdm9pZCBJbnRlcnByZXRlckltcDo6Y2xl
YXIoKQogICAgIHNfaG9vayA9IDBMOwogICAgIGdsb2JhbENsZWFyKCk7CiAgIH0KLSAgSW50ZXJw
cmV0ZXJNYXA6OnJlbW92ZUludGVycHJldGVyRm9yR2xvYmFsT2JqZWN0KGdsb2JhbC5pbXAoKSk7
CisgIEludGVycHJldGVyTWFwOjpyZW1vdmVJbnRlcnByZXRlckZvckdsb2JhbE9iamVjdChnbG9i
YWwpOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwogICB1bmxvY2tJbnRlcnByZXRlcigpOwpAQCAtNzAw
LDIxICs2NTcsNyBAQCB2b2lkIEludGVycHJldGVySW1wOjpjbGVhcigpCiAKIHZvaWQgSW50ZXJw
cmV0ZXJJbXA6Om1hcmsoKQogewotICAvL2lmIChleFZhbCAmJiAhZXhWYWwtPm1hcmtlZCgpKQot
ICAvLyAgZXhWYWwtPm1hcmsoKTsKLSAgLy9pZiAocmV0VmFsICYmICFyZXRWYWwtPm1hcmtlZCgp
KQotICAvLyAgcmV0VmFsLT5tYXJrKCk7Ci0gIGlmIChVbmRlZmluZWRJbXA6OnN0YXRpY1VuZGVm
aW5lZCAmJiAhVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQtPm1hcmtlZCgpKQotICAgIFVu
ZGVmaW5lZEltcDo6c3RhdGljVW5kZWZpbmVkLT5tYXJrKCk7Ci0gIGlmIChOdWxsSW1wOjpzdGF0
aWNOdWxsICYmICFOdWxsSW1wOjpzdGF0aWNOdWxsLT5tYXJrZWQoKSkKLSAgICBOdWxsSW1wOjpz
dGF0aWNOdWxsLT5tYXJrKCk7Ci0gIGlmIChOdW1iZXJJbXA6OnN0YXRpY05hTiAmJiAhTnVtYmVy
SW1wOjpzdGF0aWNOYU4tPm1hcmtlZCgpKQotICAgIE51bWJlckltcDo6c3RhdGljTmFOLT5tYXJr
KCk7Ci0gIGlmIChCb29sZWFuSW1wOjpzdGF0aWNUcnVlICYmICFCb29sZWFuSW1wOjpzdGF0aWNU
cnVlLT5tYXJrZWQoKSkKLSAgICBCb29sZWFuSW1wOjpzdGF0aWNUcnVlLT5tYXJrKCk7Ci0gIGlm
IChCb29sZWFuSW1wOjpzdGF0aWNGYWxzZSAmJiAhQm9vbGVhbkltcDo6c3RhdGljRmFsc2UtPm1h
cmtlZCgpKQotICAgIEJvb2xlYW5JbXA6OnN0YXRpY0ZhbHNlLT5tYXJrKCk7Ci0gIC8vZnByaW50
Ziggc3RkZXJyLCAiSW50ZXJwcmV0ZXJJbXA6Om1hcmsgdGhpcz0lcCBnbG9iYWwuaW1wKCk9JXBc
biIsIHRoaXMsIGdsb2JhbC5pbXAoKSApOworICBDb25zdGFudFZhbHVlczo6bWFyaygpOwogICBp
ZiAobV9pbnRlcnByZXRlcikKICAgICBtX2ludGVycHJldGVyLT5tYXJrKCk7CiAgIGlmIChfY29u
dGV4dCkKQEAgLTczNSw3ICs2NzgsNyBAQCBib29sIEludGVycHJldGVySW1wOjpjaGVja1N5bnRh
eChjb25zdCBVCiAgIHJldHVybiBvazsKIH0KIAotQ29tcGxldGlvbiBJbnRlcnByZXRlckltcDo6
ZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgY29uc3QgVmFsdWUgJnRoaXNWLCBjb25zdCBV
U3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCitDb21wbGV0aW9uIElu
dGVycHJldGVySW1wOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1ZUltcCAqdGhp
c1YsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcikKIHsK
ICNpZiBBUFBMRV9DSEFOR0VTCiAgIGxvY2tJbnRlcnByZXRlcigpOwpAQCAtNzczLDggKzcxNiw4
IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXJJbXA6OmV2YWx1YXRlKGNvbnMKICAgCiAgIC8vIG5v
IHByb2dyYW0gbm9kZSBtZWFucyBhIHN5bnRheCBlcnJvciBvY2N1cnJlZAogICBpZiAoIXByb2dO
b2RlKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoJmdsb2JFeGVjLCBTeW50YXhF
cnJvciwgZXJyTXNnLmFzY2lpKCksIGVyckxpbmUsIC0xLCAmc291cmNlVVJMKTsKLSAgICBlcnIu
cHV0KCZnbG9iRXhlYywgInNpZCIsIE51bWJlcihzaWQpKTsKKyAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoJmdsb2JFeGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLmFzY2lpKCksIGVy
ckxpbmUsIC0xLCAmc291cmNlVVJMKTsKKyAgICBlcnItPnB1dCgmZ2xvYkV4ZWMsICJzaWQiLCBO
dW1iZXIoc2lkKSk7CiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIHVubG9ja0ludGVycHJldGVyKCk7
CiAjZW5kaWYKQEAgLTc4NiwyMSArNzI5LDIxIEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXJJbXA6
OmV2YWx1YXRlKGNvbnMKICAgcmVjdXJzaW9uKys7CiAgIHByb2dOb2RlLT5yZWYoKTsKIAotICBP
YmplY3QgJmdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdCgpOwotICBPYmplY3QgdGhpc09iaiA9IGds
b2JhbE9iamVjdCgpOworICBPYmplY3RJbXAgKmdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdCgpOwor
ICBPYmplY3RJbXAgKnRoaXNPYmogPSBnbG9iYWxPYmplY3QoKTsKIAotICBpZiAoIXRoaXNWLmlz
TnVsbCgpKSB7CisgIGlmICh0aGlzVikgewogICAgIC8vICJ0aGlzIiBtdXN0IGJlIGFuIG9iamVj
dC4uLiB1c2Ugc2FtZSBydWxlcyBhcyBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkoKQotICAgIGlm
ICh0aGlzVi5pc0EoTnVsbFR5cGUpIHx8IHRoaXNWLmlzQShVbmRlZmluZWRUeXBlKSkKKyAgICBp
ZiAodGhpc1YtPmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICB0aGlzT2JqID0gZ2xvYmFsT2Jq
ZWN0KCk7CiAgICAgZWxzZSB7Ci0gICAgICB0aGlzT2JqID0gdGhpc1YudG9PYmplY3QoJmdsb2JF
eGVjKTsKKyAgICAgIHRoaXNPYmogPSB0aGlzVi0+dG9PYmplY3QoJmdsb2JFeGVjKTsKICAgICB9
CiAgIH0KIAogICBDb21wbGV0aW9uIHJlczsKICAgaWYgKGdsb2JFeGVjLmhhZEV4Y2VwdGlvbigp
KSB7Ci0gICAgLy8gdGhlIHRoaXNBcmcudG9PYmplY3QoKSBjb252ZXJzaW9uIGFib3ZlIG1pZ2h0
IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiAtIGlmIHNvLAorICAgIC8vIHRoZSB0aGlzQXJnLT50
b09iamVjdCgpIGNvbnZlcnNpb24gYWJvdmUgbWlnaHQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9u
IC0gaWYgc28sCiAgICAgLy8gcHJvcGFnYXRlIGl0IGJhY2sKICAgICByZXMgPSBDb21wbGV0aW9u
KFRocm93LCBnbG9iRXhlYy5leGNlcHRpb24oKSk7CiAgIH0KQEAgLTkyNCwzMyArODY3LDMyIEBA
IGJvb2wgSW50ZXJuYWxGdW5jdGlvbkltcDo6aW1wbGVtZW50c0hhc0kKICAgcmV0dXJuIHRydWU7
CiB9CiAKLUJvb2xlYW4gSW50ZXJuYWxGdW5jdGlvbkltcDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpCitib29sIEludGVybmFsRnVuY3Rpb25JbXA6Omhh
c0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnZhbHVlKQogewotICBpZiAodmFs
dWUudHlwZSgpICE9IE9iamVjdFR5cGUpCi0gICAgcmV0dXJuIEJvb2xlYW4oZmFsc2UpOworICBp
ZiAoIXZhbHVlLT5pc09iamVjdCgpKQorICAgIHJldHVybiBmYWxzZTsKIAotICBWYWx1ZSBwcm90
ID0gZ2V0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlOYW1lKTsKLSAgaWYgKHByb3QudHlwZSgpICE9
IE9iamVjdFR5cGUgJiYgcHJvdC50eXBlKCkgIT0gTnVsbFR5cGUpIHsKLSAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsICJJbnZhbGlkIHByb3RvdHlwZSBlbmNv
dW50ZXJlZCAiCisgIFZhbHVlSW1wICpwcm90ID0gZ2V0KGV4ZWMscHJvdG90eXBlUHJvcGVydHlO
YW1lKTsKKyAgaWYgKCFwcm90LT5pc09iamVjdCgpICYmICFwcm90LT5pc051bGwoKSkgeworICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IsICJJbnZhbGlk
IHByb3RvdHlwZSBlbmNvdW50ZXJlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImluIGluc3RhbmNlb2Ygb3BlcmF0aW9uLiIpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwotICAgIHJldHVybiBCb29sZWFuKGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAot
ICBPYmplY3QgdiA9IE9iamVjdChzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZS5pbXAoKSkp
OwotICB3aGlsZSAoKHYgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KHYucHJvdG90eXBlKCkpKS5pbXAo
KSkgewotICAgIGlmICh2LmltcCgpID09IHByb3QuaW1wKCkpCi0gICAgICByZXR1cm4gQm9vbGVh
bih0cnVlKTsKKyAgT2JqZWN0SW1wICp2ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHZhbHVl
KTsKKyAgd2hpbGUgKCh2ID0gdi0+cHJvdG90eXBlKCktPmdldE9iamVjdCgpKSkgeworICAgIGlm
ICh2ID09IHByb3QpCisgICAgICByZXR1cm4gdHJ1ZTsKICAgfQotICByZXR1cm4gQm9vbGVhbihm
YWxzZSk7CisgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIGdsb2JhbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
ZG91YmxlIEtKUzo6cm91bmRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZ2KQor
ZG91YmxlIHJvdW5kVmFsdWUoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdikKIHsKLSAgTnVt
YmVyIG4gPSB2LnRvTnVtYmVyKGV4ZWMpOwotICBkb3VibGUgZCA9IG4udmFsdWUoKTsKKyAgZG91
YmxlIGQgPSB2LT50b051bWJlcihleGVjKTsKICAgZG91YmxlIGFkID0gZmFicyhkKTsKICAgaWYg
KGFkID09IDAgfHwgaXNOYU4oZCkgfHwgaXNJbmYoZCkpCiAgICAgcmV0dXJuIGQ7CkBAIC05NTks
MTUgKzkwMSwxNSBAQCBkb3VibGUgS0pTOjpyb3VuZFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgCiAK
ICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8c3RkaW8uaD4KLXZvaWQgS0pTOjpwcmludEluZm8o
RXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBjb25zdCBWYWx1ZSAmbywgaW50IGxpbmVu
bykKK3ZvaWQgcHJpbnRJbmZvKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgY2hhciAqcywgVmFsdWVJ
bXAgKm8sIGludCBsaW5lbm8pCiB7Ci0gIGlmIChvLmlzTnVsbCgpKQorICBpZiAoIW8pCiAgICAg
ZnByaW50ZihzdGRlcnIsICJLSlM6ICVzOiAobnVsbCkiLCBzKTsKICAgZWxzZSB7Ci0gICAgVmFs
dWUgdiA9IG87CisgICAgVmFsdWVJbXAgKnYgPSBvOwogCiAgICAgVVN0cmluZyBuYW1lOwotICAg
IHN3aXRjaCAoIHYudHlwZSgpICkgeworICAgIHN3aXRjaCAodi0+dHlwZSgpKSB7CiAgICAgY2Fz
ZSBVbnNwZWNpZmllZFR5cGU6CiAgICAgICBuYW1lID0gIlVuc3BlY2lmaWVkIjsKICAgICAgIGJy
ZWFrOwpAQCAtOTg3LDE5ICs5MjksMTkgQEAgdm9pZCBLSlM6OnByaW50SW5mbyhFeGVjU3RhdGUg
KmV4ZWMsIGNvbgogICAgICAgbmFtZSA9ICJOdW1iZXIiOwogICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBPYmplY3RUeXBlOgotICAgICAgbmFtZSA9IE9iamVjdDo6ZHluYW1pY0Nhc3QodikuY2xhc3NO
YW1lKCk7CisgICAgICBuYW1lID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHYpLT5jbGFzc05h
bWUoKTsKICAgICAgIGlmIChuYW1lLmlzTnVsbCgpKQogICAgICAgICBuYW1lID0gIih1bmtub3du
IGNsYXNzKSI7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgVVN0cmluZyB2U3RyaW5nID0gdi50
b1N0cmluZyhleGVjKTsKKyAgICBVU3RyaW5nIHZTdHJpbmcgPSB2LT50b1N0cmluZyhleGVjKTsK
ICAgICBpZiAoIHZTdHJpbmcuc2l6ZSgpID4gNTAgKQogICAgICAgdlN0cmluZyA9IHZTdHJpbmcu
c3Vic3RyKCAwLCA1MCApICsgIi4uLiI7CiAgICAgLy8gQ2FuJ3QgdXNlIHR3byBVU3RyaW5nOjph
c2NpaSgpIGluIHRoZSBzYW1lIGZwcmludGYgY2FsbAogICAgIENTdHJpbmcgdGVtcFN0cmluZygg
dlN0cmluZy5jc3RyaW5nKCkgKTsKIAogICAgIGZwcmludGYoc3RkZXJyLCAiS0pTOiAlczogJXMg
OiAlcyAoJXApIiwKLSAgICAgICAgICAgIHMsIHRlbXBTdHJpbmcuY19zdHIoKSwgbmFtZS5hc2Np
aSgpLCAodm9pZCopdi5pbXAoKSk7CisgICAgICAgICAgICBzLCB0ZW1wU3RyaW5nLmNfc3RyKCks
IG5hbWUuYXNjaWkoKSwgKHZvaWQqKXYpOwogCiAgICAgaWYgKGxpbmVubyA+PSAwKQogICAgICAg
ZnByaW50ZihzdGRlcnIsICIsIGxpbmUgJWRcbiIsbGluZW5vKTsKQEAgLTEwMDgsMyArOTUwLDUg
QEAgdm9pZCBLSlM6OnByaW50SW5mbyhFeGVjU3RhdGUgKmV4ZWMsIGNvbgogICB9CiB9CiAjZW5k
aWYKKworfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUgLXIxLjMxIEphdmFTY3JpcHRDb3JlL2tqcy9p
bnRlcm5hbC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAk3IEF1ZyAyMDA1IDA2
OjE3OjM1IC0wMDAwCTEuMzEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCTggQXVn
IDIwMDUgMDE6MDA6NTAgLTAwMDAKQEAgLTIyLDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRl
ZiBfSU5URVJOQUxfSF8KLSNkZWZpbmUgX0lOVEVSTkFMX0hfCisjaWZuZGVmIElOVEVSTkFMX0gK
KyNkZWZpbmUgSU5URVJOQUxfSAogCiAjaW5jbHVkZSAidXN0cmluZy5oIgogI2luY2x1ZGUgInZh
bHVlLmgiCkBAIC0zNyw5ICszNyw2IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi0gIHN0YXRpYyBj
b25zdCBkb3VibGUgRDE2ID0gNjU1MzYuMDsKLSAgc3RhdGljIGNvbnN0IGRvdWJsZSBEMzIgPSA0
Mjk0OTY3Mjk2LjA7Ci0KICAgY2xhc3MgUHJvZ3JhbU5vZGU7CiAgIGNsYXNzIEZ1bmN0aW9uQm9k
eU5vZGU7CiAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlSW1wOwpAQCAtNTAsMTE1ICs0Nyw5MCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWl0
aXZlIGltcGxzCiAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gIGNsYXNzIFVuZGVmaW5lZElt
cCA6IHB1YmxpYyBWYWx1ZUltcCB7CisgIGNsYXNzIFVuZGVmaW5lZEltcCA6IHB1YmxpYyBBbGxv
Y2F0ZWRWYWx1ZUltcCB7CiAgIHB1YmxpYzoKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBVbmRlZmluZWRUeXBlOyB9CiAKLSAgICBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4
ZWMsIFR5cGUgcHJlZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBWYWx1ZUlt
cCAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lm
aWVkVHlwZSkgY29uc3Q7CiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25z
dDsKICAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3Ry
aW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0KLSAgICBzdGF0aWMgVW5kZWZpbmVkSW1wICpzdGF0
aWNVbmRlZmluZWQ7CisgICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwogICB9OwogCi0gIGlubGluZSBVbmRlZmluZWQ6OlVuZGVmaW5lZChVbmRlZmluZWRJbXAg
KmltcCkgOiBWYWx1ZShpbXApIHsgfQotCi0gIGNsYXNzIE51bGxJbXAgOiBwdWJsaWMgVmFsdWVJ
bXAgeworICBjbGFzcyBOdWxsSW1wIDogcHVibGljIEFsbG9jYXRlZFZhbHVlSW1wIHsKICAgcHVi
bGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIE51bGxUeXBlOyB9CiAKLSAgICBW
YWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkID0gVW5zcGVj
aWZpZWRUeXBlKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpl
eGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CiAgICAgYm9vbCB0
b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBkb3VibGUgdG9OdW1iZXIoRXhl
Y1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhl
YykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgTnVsbEltcCAqc3RhdGljTnVsbDsKKyAgICBPYmplY3RJbXAgKnRvT2JqZWN0
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgIH07CiAKLSAgaW5saW5lIE51bGw6Ok51bGwoTnVs
bEltcCAqaW1wKSA6IFZhbHVlKGltcCkgeyB9Ci0KLSAgY2xhc3MgQm9vbGVhbkltcCA6IHB1Ymxp
YyBWYWx1ZUltcCB7CisgIGNsYXNzIEJvb2xlYW5JbXAgOiBwdWJsaWMgQWxsb2NhdGVkVmFsdWVJ
bXAgewogICBwdWJsaWM6CiAgICAgQm9vbGVhbkltcChib29sIHYgPSBmYWxzZSkgOiB2YWwodikg
eyB9CiAgICAgYm9vbCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZhbDsgfQogCiAgICAgVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gQm9vbGVhblR5cGU7IH0KIAotICAgIFZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmllZFR5cGUpIGNv
bnN0OworICAgIFZhbHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJl
ZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKICAgICBib29sIHRvQm9vbGVhbihFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0OwogICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAg
ICBPYmplY3QgdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBPYmplY3RJbXAg
KnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAKLSAgICBzdGF0aWMgQm9vbGVhbklt
cCAqc3RhdGljVHJ1ZTsKLSAgICBzdGF0aWMgQm9vbGVhbkltcCAqc3RhdGljRmFsc2U7CiAgIHBy
aXZhdGU6CiAgICAgYm9vbCB2YWw7CiAgIH07CiAgIAotICBpbmxpbmUgQm9vbGVhbjo6Qm9vbGVh
bihCb29sZWFuSW1wICppbXApIDogVmFsdWUoaW1wKSB7IH0KLQotICBjbGFzcyBTdHJpbmdJbXAg
OiBwdWJsaWMgVmFsdWVJbXAgeworICBjbGFzcyBTdHJpbmdJbXAgOiBwdWJsaWMgQWxsb2NhdGVk
VmFsdWVJbXAgewogICBwdWJsaWM6CiAgICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcmIHYpIDog
dmFsKHYpIHsgfQogICAgIFVTdHJpbmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWw7IH0KIAog
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1R5cGU7IH0KIAotICAgIFZhbHVl
IHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmll
ZFR5cGUpIGNvbnN0OworICAgIFZhbHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMs
IFR5cGUgcHJlZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKICAgICBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OwogICAgIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBj
b25zdDsKLSAgICBPYmplY3QgdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBP
YmplY3RJbXAgKnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAKICAgcHJpdmF0ZToK
ICAgICBVU3RyaW5nIHZhbDsKICAgfTsKIAotICBpbmxpbmUgU3RyaW5nOjpTdHJpbmcoU3RyaW5n
SW1wICppbXApIDogVmFsdWUoaW1wKSB7IH0KLQotICBjbGFzcyBOdW1iZXJJbXAgOiBwdWJsaWMg
VmFsdWVJbXAgewotICAgIGZyaWVuZCBjbGFzcyBWYWx1ZTsKLSAgICBmcmllbmQgY2xhc3MgTnVt
YmVyOworICBjbGFzcyBOdW1iZXJJbXAgOiBwdWJsaWMgQWxsb2NhdGVkVmFsdWVJbXAgeworICAg
IGZyaWVuZCBjbGFzcyBDb25zdGFudFZhbHVlczsKICAgICBmcmllbmQgY2xhc3MgSW50ZXJwcmV0
ZXJJbXA7Ci0gICAgZnJpZW5kIFZhbHVlSW1wICpudW1iZXIoaW50KTsKLSAgICBmcmllbmQgVmFs
dWVJbXAgKm51bWJlcih1bnNpZ25lZCk7Ci0gICAgZnJpZW5kIFZhbHVlSW1wICpudW1iZXIobG9u
Zyk7Ci0gICAgZnJpZW5kIFZhbHVlSW1wICpudW1iZXIodW5zaWduZWQgbG9uZyk7Ci0gICAgZnJp
ZW5kIFZhbHVlSW1wICpudW1iZXIoZG91YmxlKTsKLSAgICBmcmllbmQgVmFsdWVJbXAgKm51bWJl
cihkb3VibGUsIGJvb2wpOworICAgIGZyaWVuZCBWYWx1ZUltcCAqanNOdW1iZXIoaW50KTsKKyAg
ICBmcmllbmQgVmFsdWVJbXAgKmpzTnVtYmVyKHVuc2lnbmVkKTsKKyAgICBmcmllbmQgVmFsdWVJ
bXAgKmpzTnVtYmVyKGxvbmcpOworICAgIGZyaWVuZCBWYWx1ZUltcCAqanNOdW1iZXIodW5zaWdu
ZWQgbG9uZyk7CisgICAgZnJpZW5kIFZhbHVlSW1wICpqc051bWJlcihkb3VibGUpOworICAgIGZy
aWVuZCBWYWx1ZUltcCAqanNOdW1iZXIoZG91YmxlLCBib29sKTsKICAgcHVibGljOgotICAgIHN0
YXRpYyBWYWx1ZUltcCAqY3JlYXRlKGludCk7Ci0gICAgc3RhdGljIFZhbHVlSW1wICpjcmVhdGUo
ZG91YmxlKTsKLSAgICBzdGF0aWMgVmFsdWVJbXAgKnplcm8oKSB7IHJldHVybiBTaW1wbGVOdW1i
ZXI6Om1ha2UoMCk7IH0KLSAgICBzdGF0aWMgVmFsdWVJbXAgKm9uZSgpIHsgcmV0dXJuIFNpbXBs
ZU51bWJlcjo6bWFrZSgxKTsgfQotICAgIHN0YXRpYyBWYWx1ZUltcCAqdHdvKCkgeyByZXR1cm4g
U2ltcGxlTnVtYmVyOjptYWtlKDIpOyB9Ci0gICAgCiAgICAgZG91YmxlIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gdmFsOyB9CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBOdW1iZXJU
eXBlOyB9CiAKLSAgICBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJl
ZmVycmVkID0gVW5zcGVjaWZpZWRUeXBlKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqdG9QcmltaXRp
dmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29u
c3Q7CiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBkb3Vi
bGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7Ci0KLSAgICBzdGF0aWMgTnVtYmVySW1wICpzdGF0aWNOYU47CisgICAgT2Jq
ZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAg
ICAgTnVtYmVySW1wKGRvdWJsZSB2KSA6IHZhbCh2KSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB0
b1VJbnQzMih1bnNpZ25lZCYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRVSW50MzIodWlu
dDMyX3QmKSBjb25zdDsKIAogICAgIGRvdWJsZSB2YWw7CiAgIH07CiAKLSAgaW5saW5lIE51bWJl
cjo6TnVtYmVyKE51bWJlckltcCAqaW1wKSA6IFZhbHVlKGltcCkgeyB9Ci0KICAgLyoqCiAgICAq
IEBzaG9ydCBUaGUgImxhYmVsIHNldCIgaW4gRWNtYS0yNjIgc3BlYwogICAgKi8KQEAgLTIwNiw3
ICsxNzgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogCiAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nICYgZXZhbHVhdGVpb24KKyAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2luZyAmIGV2YWx1YXRpb24KICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgZW51bSBDb2RlVHlwZSB7IEdsb2JhbENvZGUsCkBAIC0y
NzUsNyArMjQ3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIHZvaWQgZ2xvYmFsSW5p
dCgpOwogICAgIHN0YXRpYyB2b2lkIGdsb2JhbENsZWFyKCk7CiAKLSAgICBJbnRlcnByZXRlcklt
cChJbnRlcnByZXRlciAqaW50ZXJwLCBjb25zdCBPYmplY3QgJmdsb2IpOworICAgIEludGVycHJl
dGVySW1wKEludGVycHJldGVyICppbnRlcnAsIE9iamVjdEltcCAqZ2xvYik7CiAgICAgfkludGVy
cHJldGVySW1wKCk7CiAKICAgICBQcm90ZWN0ZWRPYmplY3QgJmdsb2JhbE9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UHJvdGVjdGVkT2JqZWN0ICY+KGdsb2JhbCk7IH0KQEAgLTI5
MCw0MyArMjYyLDQzIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgRXhlY1N0YXRlICpnbG9iYWxF
eGVjKCkgeyByZXR1cm4gJmdsb2JFeGVjOyB9CiAgICAgYm9vbCBjaGVja1N5bnRheChjb25zdCBV
U3RyaW5nICZjb2RlKTsKLSAgICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcgJmNv
ZGUsIGNvbnN0IFZhbHVlICZ0aGlzViwgY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcg
JmNvZGUsIFZhbHVlSW1wICp0aGlzViwgY29uc3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3Rh
cnRpbmdMaW5lTnVtYmVyKTsKICAgICBEZWJ1Z2dlciAqZGVidWdnZXIoKSBjb25zdCB7IHJldHVy
biBkYmc7IH0KICAgICB2b2lkIHNldERlYnVnZ2VyKERlYnVnZ2VyICpkKSB7IGRiZyA9IGQ7IH0K
IAotICAgIE9iamVjdCBidWlsdGluT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gYl9PYmplY3Q7IH0K
LSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gYl9GdW5jdGlvbjsg
fQotICAgIE9iamVjdCBidWlsdGluQXJyYXkoKSBjb25zdCB7IHJldHVybiBiX0FycmF5OyB9Ci0g
ICAgT2JqZWN0IGJ1aWx0aW5Cb29sZWFuKCkgY29uc3QgeyByZXR1cm4gYl9Cb29sZWFuOyB9Ci0g
ICAgT2JqZWN0IGJ1aWx0aW5TdHJpbmcoKSBjb25zdCB7IHJldHVybiBiX1N0cmluZzsgfQotICAg
IE9iamVjdCBidWlsdGluTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXI7IH0KLSAgICBP
YmplY3QgYnVpbHRpbkRhdGUoKSBjb25zdCB7IHJldHVybiBiX0RhdGU7IH0KLSAgICBPYmplY3Qg
YnVpbHRpblJlZ0V4cCgpIGNvbnN0IHsgcmV0dXJuIGJfUmVnRXhwOyB9Ci0gICAgT2JqZWN0IGJ1
aWx0aW5FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3I7IH0KLQotICAgIE9iamVjdCBidWls
dGluT2JqZWN0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9PYmplY3RQcm90b3R5cGU7IH0K
LSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0aW9uUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9G
dW5jdGlvblByb3RvdHlwZTsgfQotICAgIE9iamVjdCBidWlsdGluQXJyYXlQcm90b3R5cGUoKSBj
b25zdCB7IHJldHVybiBiX0FycmF5UHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5Cb29s
ZWFuUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9Cb29sZWFuUHJvdG90eXBlOyB9Ci0gICAg
T2JqZWN0IGJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX1N0cmluZ1By
b3RvdHlwZTsgfQotICAgIE9iamVjdCBidWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gYl9OdW1iZXJQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRpbkRhdGVQcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBiX0RhdGVQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRp
blJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfUmVnRXhwUHJvdG90eXBlOyB9Ci0g
ICAgT2JqZWN0IGJ1aWx0aW5FcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3JQ
cm90b3R5cGU7IH0KLQotICAgIE9iamVjdCBidWlsdGluRXZhbEVycm9yKCkgY29uc3QgeyByZXR1
cm4gYl9ldmFsRXJyb3I7IH0KLSAgICBPYmplY3QgYnVpbHRpblJhbmdlRXJyb3IoKSBjb25zdCB7
IHJldHVybiBiX3JhbmdlRXJyb3I7IH0KLSAgICBPYmplY3QgYnVpbHRpblJlZmVyZW5jZUVycm9y
KCkgY29uc3QgeyByZXR1cm4gYl9yZWZlcmVuY2VFcnJvcjsgfQotICAgIE9iamVjdCBidWlsdGlu
U3ludGF4RXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3N5bnRheEVycm9yOyB9Ci0gICAgT2JqZWN0
IGJ1aWx0aW5UeXBlRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3R5cGVFcnJvcjsgfQotICAgIE9i
amVjdCBidWlsdGluVVJJRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3VyaUVycm9yOyB9Ci0KLSAg
ICBPYmplY3QgYnVpbHRpbkV2YWxFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfZXZh
bEVycm9yUHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1aWx0aW5SYW5nZUVycm9yUHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gYl9yYW5nZUVycm9yUHJvdG90eXBlOyB9Ci0gICAgT2JqZWN0IGJ1
aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfcmVmZXJlbmNl
RXJyb3JQcm90b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRpblN5bnRheEVycm9yUHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gYl9zeW50YXhFcnJvclByb3RvdHlwZTsgfQotICAgIE9iamVjdCBi
dWlsdGluVHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl90eXBlRXJyb3JQcm90
b3R5cGU7IH0KLSAgICBPYmplY3QgYnVpbHRpblVSSUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyBy
ZXR1cm4gYl91cmlFcnJvclByb3RvdHlwZTsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpbk9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIGJfT2JqZWN0OyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluRnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBiX0Z1bmN0aW9uOyB9CisgICAgT2JqZWN0SW1wICpidWls
dGluQXJyYXkoKSBjb25zdCB7IHJldHVybiBiX0FycmF5OyB9CisgICAgT2JqZWN0SW1wICpidWls
dGluQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIGJfQm9vbGVhbjsgfQorICAgIE9iamVjdEltcCAq
YnVpbHRpblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGJfU3RyaW5nOyB9CisgICAgT2JqZWN0SW1w
ICpidWlsdGluTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXI7IH0KKyAgICBPYmplY3RJ
bXAgKmJ1aWx0aW5EYXRlKCkgY29uc3QgeyByZXR1cm4gYl9EYXRlOyB9CisgICAgT2JqZWN0SW1w
ICpidWlsdGluUmVnRXhwKCkgY29uc3QgeyByZXR1cm4gYl9SZWdFeHA7IH0KKyAgICBPYmplY3RJ
bXAgKmJ1aWx0aW5FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3I7IH0KKworICAgIE9iamVj
dEltcCAqYnVpbHRpbk9iamVjdFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfT2JqZWN0UHJv
dG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBiX0Z1bmN0aW9uUHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGlu
QXJyYXlQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX0FycmF5UHJvdG90eXBlOyB9CisgICAg
T2JqZWN0SW1wICpidWlsdGluQm9vbGVhblByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfQm9v
bGVhblByb3RvdHlwZTsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpblN0cmluZ1Byb3RvdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGJfU3RyaW5nUHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWls
dGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9OdW1iZXJQcm90b3R5cGU7IH0K
KyAgICBPYmplY3RJbXAgKmJ1aWx0aW5EYXRlUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl9E
YXRlUHJvdG90eXBlOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVnRXhwUHJvdG90eXBlKCkg
Y29uc3QgeyByZXR1cm4gYl9SZWdFeHBQcm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0
aW5FcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfRXJyb3JQcm90b3R5cGU7IH0KKwor
ICAgIE9iamVjdEltcCAqYnVpbHRpbkV2YWxFcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfZXZhbEVy
cm9yOyB9CisgICAgT2JqZWN0SW1wICpidWlsdGluUmFuZ2VFcnJvcigpIGNvbnN0IHsgcmV0dXJu
IGJfcmFuZ2VFcnJvcjsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpblJlZmVyZW5jZUVycm9yKCkg
Y29uc3QgeyByZXR1cm4gYl9yZWZlcmVuY2VFcnJvcjsgfQorICAgIE9iamVjdEltcCAqYnVpbHRp
blN5bnRheEVycm9yKCkgY29uc3QgeyByZXR1cm4gYl9zeW50YXhFcnJvcjsgfQorICAgIE9iamVj
dEltcCAqYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0IHsgcmV0dXJuIGJfdHlwZUVycm9yOyB9Cisg
ICAgT2JqZWN0SW1wICpidWlsdGluVVJJRXJyb3IoKSBjb25zdCB7IHJldHVybiBiX3VyaUVycm9y
OyB9CisKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FdmFsRXJyb3JQcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBiX2V2YWxFcnJvclByb3RvdHlwZTsgfQorICAgIE9iamVjdEltcCAqYnVpbHRpblJh
bmdlRXJyb3JQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBiX3JhbmdlRXJyb3JQcm90b3R5cGU7
IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGJfcmVmZXJlbmNlRXJyb3JQcm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1
aWx0aW5TeW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGJfc3ludGF4RXJyb3JQ
cm90b3R5cGU7IH0KKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5UeXBlRXJyb3JQcm90b3R5cGUoKSBj
b25zdCB7IHJldHVybiBiX3R5cGVFcnJvclByb3RvdHlwZTsgfQorICAgIE9iamVjdEltcCAqYnVp
bHRpblVSSUVycm9yUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gYl91cmlFcnJvclByb3RvdHlw
ZTsgfQogCiAgICAgdm9pZCBzZXRDb21wYXRNb2RlKEludGVycHJldGVyOjpDb21wYXRNb2RlIG1v
ZGUpIHsgbV9jb21wYXRNb2RlID0gbW9kZTsgfQogICAgIEludGVycHJldGVyOjpDb21wYXRNb2Rl
IGNvbXBhdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBhdE1vZGU7IH0KQEAgLTQyMiwyMCAr
Mzk0LDE5IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgSW50ZXJuYWxGdW5jdGlv
bkltcChGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKTsKICAgICBib29sIGltcGxlbWVu
dHNIYXNJbnN0YW5jZSgpIGNvbnN0OwotICAgIEJvb2xlYW4gaGFzSW5zdGFuY2UoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpOworICAgIGJvb2wgaGFzSW5zdGFuY2UoRXhlY1N0
YXRlICpleGVjLCBWYWx1ZUltcCAqdmFsdWUpOwogCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogICB9OwogCiAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgdG9JbnRl
Z2VyLCB0b0ludDMyLCB0b1VJbnQzMiBhbmQgdG9VSW50MTYKLSAgZG91YmxlIHJvdW5kVmFsdWUo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdik7CisgIGRvdWJsZSByb3VuZFZhbHVlKEV4
ZWNTdGF0ZSAqLCBWYWx1ZUltcCAqKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgdm9pZCBwcmludElu
Zm8oRXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFyICpzLCBjb25zdCBWYWx1ZSAmbywgaW50IGxp
bmVubyA9IC0xKTsKKyAgdm9pZCBwcmludEluZm8oRXhlY1N0YXRlICpleGVjLCBjb25zdCBjaGFy
ICpzLCBWYWx1ZUltcCAqLCBpbnQgbGluZW5vID0gLTEpOwogI2VuZGlmCiAKIH0gLy8gbmFtZXNw
YWNlCiAKLQotI2VuZGlmIC8vICBfSU5URVJOQUxfSF8KKyNlbmRpZiAvLyAgSU5URVJOQUxfSApJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC1wIC11IC1yMS4yOCBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJwcmV0ZXIuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCTcg
QXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4yOAorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
cHJldGVyLmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjUwIC0wMDAwCkBAIC01MCwxMiArNTAsMTIgQEAg
Y29uc3QgU2NvcGVDaGFpbiAmQ29udGV4dDo6c2NvcGVDaGFpbigpIAogICByZXR1cm4gcmVwLT5z
Y29wZUNoYWluKCk7CiB9CiAKLU9iamVjdCBDb250ZXh0Ojp2YXJpYWJsZU9iamVjdCgpIGNvbnN0
CitPYmplY3RJbXAgKkNvbnRleHQ6OnZhcmlhYmxlT2JqZWN0KCkgY29uc3QKIHsKICAgcmV0dXJu
IHJlcC0+dmFyaWFibGVPYmplY3QoKTsKIH0KIAotT2JqZWN0IENvbnRleHQ6OnRoaXNWYWx1ZSgp
IGNvbnN0CitPYmplY3RJbXAgKkNvbnRleHQ6OnRoaXNWYWx1ZSgpIGNvbnN0CiB7CiAgIHJldHVy
biByZXAtPnRoaXNWYWx1ZSgpOwogfQpAQCAtNjcsMTIgKzY3LDEyIEBAIGNvbnN0IENvbnRleHQg
Q29udGV4dDo6Y2FsbGluZ0NvbnRleHQoKSAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEludGVycHJldGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SW50ZXJwcmV0ZXI6OkludGVycHJldGVyKGNvbnN0IE9iamVjdCAmZ2xvYmFsKSAKK0ludGVycHJl
dGVyOjpJbnRlcnByZXRlcihPYmplY3RJbXAgKmdsb2JhbCkgCiAgIDogcmVwKDApCiAgICwgbV9h
cmd1bWVudHNQcm9wZXJ0eU5hbWUoJmFyZ3VtZW50c1Byb3BlcnR5TmFtZSkKICAgLCBtX3NwZWNp
YWxQcm90b3R5cGVQcm9wZXJ0eU5hbWUoJnNwZWNpYWxQcm90b3R5cGVQcm9wZXJ0eU5hbWUpCiB7
Ci0gIHJlcCA9IG5ldyBJbnRlcnByZXRlckltcCh0aGlzLGdsb2JhbCk7CisgIHJlcCA9IG5ldyBJ
bnRlcnByZXRlckltcCh0aGlzLCBnbG9iYWwpOwogfQogCiBJbnRlcnByZXRlcjo6SW50ZXJwcmV0
ZXIoKQpAQCAtODAsOCArODAsNyBAQCBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogICAsIG1f
YXJndW1lbnRzUHJvcGVydHlOYW1lKCZhcmd1bWVudHNQcm9wZXJ0eU5hbWUpCiAgICwgbV9zcGVj
aWFsUHJvdG90eXBlUHJvcGVydHlOYW1lKCZzcGVjaWFsUHJvdG90eXBlUHJvcGVydHlOYW1lKQog
ewotICBPYmplY3QgZ2xvYmFsKG5ldyBPYmplY3RJbXAoKSk7Ci0gIHJlcCA9IG5ldyBJbnRlcnBy
ZXRlckltcCh0aGlzLGdsb2JhbCk7CisgIHJlcCA9IG5ldyBJbnRlcnByZXRlckltcCh0aGlzLCBu
ZXcgT2JqZWN0SW1wKTsKIH0KIAogSW50ZXJwcmV0ZXI6On5JbnRlcnByZXRlcigpCkBAIC04OSw3
ICs4OCw3IEBAIEludGVycHJldGVyOjp+SW50ZXJwcmV0ZXIoKQogICBkZWxldGUgcmVwOwogfQog
Ci1PYmplY3QgJkludGVycHJldGVyOjpnbG9iYWxPYmplY3QoKSBjb25zdAorT2JqZWN0SW1wICpJ
bnRlcnByZXRlcjo6Z2xvYmFsT2JqZWN0KCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+Z2xvYmFs
T2JqZWN0KCk7CiB9CkBAIC0xMjQsMTIgKzEyMywxMiBAQCBib29sIEludGVycHJldGVyOjpjaGVj
a1N5bnRheChjb25zdCBVU3RyCiAgIHJldHVybiByZXAtPmNoZWNrU3ludGF4KGNvZGUpOwogfQog
Ci1Db21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVU3RyaW5nICZjb2RlLCBj
b25zdCBWYWx1ZSAmdGhpc1YsIGNvbnN0IFVTdHJpbmcgJikKK0NvbXBsZXRpb24gSW50ZXJwcmV0
ZXI6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcgJmNvZGUsIFZhbHVlSW1wICp0aGlzViwgY29uc3Qg
VVN0cmluZyAmKQogewogICByZXR1cm4gZXZhbHVhdGUoVVN0cmluZygpLCAwLCBjb2RlLCB0aGlz
Vik7CiB9CiAKLUNvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFVTdHJpbmcg
JnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVVN0cmluZyAmY29kZSwg
Y29uc3QgVmFsdWUgJnRoaXNWKQorQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29u
c3QgVVN0cmluZyAmc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3Ry
aW5nICZjb2RlLCBWYWx1ZUltcCAqdGhpc1YpCiB7CiAgIENvbXBsZXRpb24gY29tcCA9IHJlcC0+
ZXZhbHVhdGUoY29kZSx0aGlzViwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCkBA
IC0xMzgsNyArMTM3LDcgQEAgQ29tcGxldGlvbiBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29uc3Qg
VQogICAgIGxvY2soKTsKICAgICBFeGVjU3RhdGUgKmV4ZWMgPSByZXAtPmdsb2JhbEV4ZWMoKTsK
ICAgICBjaGFyICpmID0gc3RyZHVwKHNvdXJjZVVSTC5hc2NpaSgpKTsKLSAgICBjb25zdCBjaGFy
ICptZXNzYWdlID0gY29tcC52YWx1ZSgpLnRvT2JqZWN0KGV4ZWMpLnRvU3RyaW5nKGV4ZWMpLmFz
Y2lpKCk7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IGNvbXAudmFsdWUoKS0+dG9PYmplY3Qo
ZXhlYyktPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCk7CiAgICAgcHJpbnRmKCJbJWRdICVzOiVzXG4i
LCBnZXRwaWQoKSwgZiwgbWVzc2FnZSk7CiAKICAgICBmcmVlKGYpOwpAQCAtMTQ5LDE1MiArMTQ4
LDE1MiBAQCBDb21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVCiAgIHJldHVy
biBjb21wOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5PYmplY3QoKSBjb25zdAor
T2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbk9iamVjdCgpIGNvbnN0CiB7CiAgIHJldHVy
biByZXAtPmJ1aWx0aW5PYmplY3QoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGlu
RnVuY3Rpb24oKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkZ1bmN0aW9u
KCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkZ1bmN0aW9uKCk7CiB9CiAKLU9iamVj
dCBJbnRlcnByZXRlcjo6YnVpbHRpbkFycmF5KCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0
ZXI6OmJ1aWx0aW5BcnJheSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5BcnJheSgp
OwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuKCkgY29uc3QKK09iamVj
dEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuKCkgY29uc3QKIHsKICAgcmV0dXJuIHJl
cC0+YnVpbHRpbkJvb2xlYW4oKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluU3Ry
aW5nKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5TdHJpbmcoKSBjb25z
dAogewogICByZXR1cm4gcmVwLT5idWlsdGluU3RyaW5nKCk7CiB9CiAKLU9iamVjdCBJbnRlcnBy
ZXRlcjo6YnVpbHRpbk51bWJlcigpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWls
dGluTnVtYmVyKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbk51bWJlcigpOwogfQog
Ci1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlKCkgY29uc3QKK09iamVjdEltcCAqSW50
ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkRh
dGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmVnRXhwKCkgY29uc3QKK09i
amVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWdFeHAoKSBjb25zdAogewogICByZXR1cm4g
cmVwLT5idWlsdGluUmVnRXhwKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpbkVy
cm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5FcnJvcigpIGNvbnN0
CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5FcnJvcigpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0
ZXI6OmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRl
cjo6YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluRnVu
Y3Rpb25Qcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkZ1
bmN0aW9uUHJvdG90eXBlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkZ1bmN0aW9u
UHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpbkFycmF5UHJvdG90
eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5BcnJheVByb3RvdHlw
ZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5BcnJheVByb3RvdHlwZSgpOwogfQog
Ci1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29uc3QKK09i
amVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5Cb29sZWFuUHJvdG90eXBlKCkgY29uc3QKIHsK
ICAgcmV0dXJuIHJlcC0+YnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IElu
dGVycHJldGVyOjpidWlsdGluU3RyaW5nUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50
ZXJwcmV0ZXI6OmJ1aWx0aW5TdHJpbmdQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1cm4gcmVw
LT5idWlsdGluU3RyaW5nUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVp
bHRpbk51bWJlclByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWls
dGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbk51bWJl
clByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlUHJvdG90
eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5EYXRlUHJvdG90eXBl
KCkgY29uc3QKIHsKICAgcmV0dXJuIHJlcC0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKTsKIH0KIAot
T2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmVnRXhwUHJvdG90eXBlKCkgY29uc3QKK09iamVj
dEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWdFeHBQcm90b3R5cGUoKSBjb25zdAogewogICBy
ZXR1cm4gcmVwLT5idWlsdGluUmVnRXhwUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnBy
ZXRlcjo6YnVpbHRpbkVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0
ZXI6OmJ1aWx0aW5FcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0
aW5FcnJvclByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5FdmFs
RXJyb3IoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkV2YWxFcnJvcigp
IGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5FdmFsRXJyb3IoKTsKIH0KIAotT2JqZWN0
IEludGVycHJldGVyOjpidWlsdGluUmFuZ2VFcnJvcigpIGNvbnN0CitPYmplY3RJbXAgKkludGVy
cHJldGVyOjpidWlsdGluUmFuZ2VFcnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0
aW5SYW5nZUVycm9yKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblJlZmVyZW5j
ZUVycm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWZlcmVuY2VF
cnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5SZWZlcmVuY2VFcnJvcigpOwog
fQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5TeW50YXhFcnJvcigpIGNvbnN0CitPYmpl
Y3RJbXAgKkludGVycHJldGVyOjpidWlsdGluU3ludGF4RXJyb3IoKSBjb25zdAogewogICByZXR1
cm4gcmVwLT5idWlsdGluU3ludGF4RXJyb3IoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpi
dWlsdGluVHlwZUVycm9yKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5U
eXBlRXJyb3IoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWlsdGluVHlwZUVycm9yKCk7CiB9
CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblVSSUVycm9yKCkgY29uc3QKK09iamVjdElt
cCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5VUklFcnJvcigpIGNvbnN0CiB7CiAgIHJldHVybiByZXAt
PmJ1aWx0aW5VUklFcnJvcigpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5FdmFs
RXJyb3JQcm90b3R5cGUoKSBjb25zdAorT2JqZWN0SW1wICpJbnRlcnByZXRlcjo6YnVpbHRpbkV2
YWxFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5FdmFsRXJy
b3JQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGluUmFuZ2VFcnJv
clByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWlsdGluUmFuZ2VF
cnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5SYW5nZUVycm9y
UHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblJlZmVyZW5jZUVy
cm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5SZWZl
cmVuY2VFcnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5SZWZl
cmVuY2VFcnJvclByb3RvdHlwZSgpOwogfQogCi1PYmplY3QgSW50ZXJwcmV0ZXI6OmJ1aWx0aW5T
eW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0CitPYmplY3RJbXAgKkludGVycHJldGVyOjpidWls
dGluU3ludGF4RXJyb3JQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWlsdGlu
U3ludGF4RXJyb3JQcm90b3R5cGUoKTsKIH0KIAotT2JqZWN0IEludGVycHJldGVyOjpidWlsdGlu
VHlwZUVycm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0
aW5UeXBlRXJyb3JQcm90b3R5cGUoKSBjb25zdAogewogICByZXR1cm4gcmVwLT5idWlsdGluVHlw
ZUVycm9yUHJvdG90eXBlKCk7CiB9CiAKLU9iamVjdCBJbnRlcnByZXRlcjo6YnVpbHRpblVSSUVy
cm9yUHJvdG90eXBlKCkgY29uc3QKK09iamVjdEltcCAqSW50ZXJwcmV0ZXI6OmJ1aWx0aW5VUklF
cnJvclByb3RvdHlwZSgpIGNvbnN0CiB7CiAgIHJldHVybiByZXAtPmJ1aWx0aW5VUklFcnJvclBy
b3RvdHlwZSgpOwogfQpAQCAtMzM3LDcgKzMzNiw3IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OnNldFNo
b3VsZFByaW50RXhjZXB0aW8KIH0KIAogCi12b2lkICpJbnRlcnByZXRlcjo6Y3JlYXRlTGFuZ3Vh
Z2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIGludCBsYW5ndWFnZSwgY29uc3Qg
T2JqZWN0ICZ2YWx1ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3Qg
QmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJlbnQpCit2b2lkICpJbnRlcnByZXRlcjo6Y3JlYXRl
TGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGxhbmd1YWdlLCBP
YmplY3RJbXAgKnZhbHVlLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25z
dCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVudCkKIHsKICAgICByZXR1cm4gQmluZGluZ3M6
Okluc3RhbmNlOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKGV4ZWMsIChCaW5kaW5n
czo6SW5zdGFuY2U6OkJpbmRpbmdMYW5ndWFnZSlsYW5ndWFnZSwgdmFsdWUsIG9yaWdpbiwgY3Vy
cmVudCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtcjEuMjYgSmF2YVNjcmlwdENv
cmUva2pzL2ludGVycHJldGVyLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5o
CTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4yNgorKysgSmF2YVNjcmlwdENvcmUva2pzL2lu
dGVycHJldGVyLmgJOCBBdWcgMjAwNSAwMTowMDo1MCAtMDAwMApAQCAtMjUsNyArMjUsNiBAQAog
I2lmbmRlZiBfS0pTX0lOVEVSUFJFVEVSX0hfCiAjZGVmaW5lIF9LSlNfSU5URVJQUkVURVJfSF8K
IAotI2luY2x1ZGUgIm9iamVjdF93cmFwcGVyLmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKICNpbmNs
dWRlICJ0eXBlcy5oIgogCkBAIC0zNCw2ICszMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFz
cyBDb250ZXh0SW1wOwogICBjbGFzcyBJbnRlcnByZXRlckltcDsKICAgY2xhc3MgUnVudGltZU1l
dGhvZEltcDsKKyAgY2xhc3MgU2NvcGVDaGFpbjsKIAogICBuYW1lc3BhY2UgQmluZGluZ3Mgewog
ICAgIGNsYXNzIFJvb3RPYmplY3Q7CkBAIC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAqCiAgICAgICogQHJldHVybiBUaGUgZXhlY3V0aW9uIGNvbnRleHQncyB2YXJpYWJsZSBv
YmplY3QKICAgICAgKi8KLSAgICBPYmplY3QgdmFyaWFibGVPYmplY3QoKSBjb25zdDsKKyAgICBP
YmplY3RJbXAgKnZhcmlhYmxlT2JqZWN0KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1
cm5zIHRoZSAidGhpcyIgdmFsdWUgZm9yIHRoZSBleGVjdXRpb24gY29udGV4dC4gVGhpcyBpcyB0
aGUgdmFsdWUKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICoKICAgICAg
KiBAcmV0dXJuIFRoZSBleGVjdXRpb24gY29udGV4dCdzICJ0aGlzIiB2YWx1ZQogICAgICAqLwot
ICAgIE9iamVjdCB0aGlzVmFsdWUoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKnRoaXNWYWx1ZSgp
IGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29udGV4dCBmcm9tIHdoaWNo
IHRoZSBjdXJyZW50IGNvbnRleHQgd2FzIGludm9rZWQuIEZvcgpAQCAtMTUyLDcgKzE1Miw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAqCiAgICAgICogQHBhcmFtIGdsb2JhbCBUaGUgb2JqZWN0
IHRvIHVzZSBhcyB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgdGhpcyBpbnRlcnByZXRlcgogICAgICAq
LwotICAgIEludGVycHJldGVyKGNvbnN0IE9iamVjdCAmZ2xvYmFsKTsKKyAgICBJbnRlcnByZXRl
cihPYmplY3RJbXAgKmdsb2JhbCk7CiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBpbnRl
cnByZXRlci4gQSBnbG9iYWwgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBhbmQKICAgICAgKiBpbml0
aWFsaXplZCB3aXRoIHRoZSBzdGFuZGFyZCBnbG9iYWwgcHJvcGVydGllcy4KQEAgLTE2NCw3ICsx
NjQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgdGhhdCBp
cyB1c2VkIGFzIHRoZSBnbG9iYWwgb2JqZWN0IGR1cmluZyBhbGwgc2NyaXB0CiAgICAgICogZXhl
Y3V0aW9uIHBlcmZvcm1lZCBieSB0aGlzIGludGVycHJldGVyCiAgICAgICovCi0gICAgT2JqZWN0
ICZnbG9iYWxPYmplY3QoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmdsb2JhbE9iamVjdCgpIGNv
bnN0OwogCiAgICAgdm9pZCBpbml0R2xvYmFsT2JqZWN0KCk7CiAKQEAgLTIwOCwxMCArMjA4LDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgZWl0aGVy
IGJlIE51bGwoKSBvciBhbiBPYmplY3QuCiAgICAgICogQHJldHVybiBBIGNvbXBsZXRpb24gb2Jq
ZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24uCiAgICAgICovCi0g
ICAgQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcgJmNvZGUsIGNvbnN0IFZhbHVlICZ0aGlzViA9
IFZhbHVlKCkpOworICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmc291cmNl
VVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVU3RyaW5nICZjb2RlLCBWYWx1ZUlt
cCAqdGhpc1YgPSBOVUxMKTsKIAogCS8vIE92ZXJsb2FkIG9mIGV2YWx1YXRlIHRvIGtlZXAgSmF2
YVNjcmlwdEdsdWUgYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlLgotCUNvbXBsZXRp
b24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgY29uc3QgVmFsdWUgJnRoaXNWID0gVmFs
dWUoKSwgY29uc3QgVVN0cmluZyAmc291cmNlRmlsZW5hbWUgPSBVU3RyaW5nKCkpOworCUNvbXBs
ZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyAmY29kZSwgVmFsdWVJbXAgKnRoaXNWID0gTlVM
TCwgY29uc3QgVVN0cmluZyAmc291cmNlRmlsZW5hbWUgPSBVU3RyaW5nKCkpOwogCiAgICAgLyoq
CiAgICAgICogQGludGVybmFsCkBAIC0yMjksMTA5ICsyMjksMTA5IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgYnVpbHRpbiAiT2JqZWN0IiBvYmplY3QKICAg
ICAgKi8KLSAgICBPYmplY3QgYnVpbHRpbk9iamVjdCgpIGNvbnN0OworICAgIE9iamVjdEltcCAq
YnVpbHRpbk9iamVjdCgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVp
bHRpbiAiRnVuY3Rpb24iIG9iamVjdC4KICAgICAgKi8KLSAgICBPYmplY3QgYnVpbHRpbkZ1bmN0
aW9uKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluRnVuY3Rpb24oKSBjb25zdDsKIAog
ICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIkFycmF5IiBvYmplY3QuCiAgICAg
ICovCi0gICAgT2JqZWN0IGJ1aWx0aW5BcnJheSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVp
bHRpbkFycmF5KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGlu
ICJCb29sZWFuIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5Cb29sZWFuKCkg
Y29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluQm9vbGVhbigpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiU3RyaW5nIiBvYmplY3QuCiAgICAgICovCi0g
ICAgT2JqZWN0IGJ1aWx0aW5TdHJpbmcoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5T
dHJpbmcoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIk51
bWJlciIgb2JqZWN0LgogICAgICAqLwotICAgIE9iamVjdCBidWlsdGluTnVtYmVyKCkgY29uc3Q7
CisgICAgT2JqZWN0SW1wICpidWlsdGluTnVtYmVyKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAg
KiBSZXR1cm5zIHRoZSBidWlsdGluICJEYXRlIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0
IGJ1aWx0aW5EYXRlKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluRGF0ZSgpIGNvbnN0
OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiUmVnRXhwIiBvYmplY3Qu
CiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5SZWdFeHAoKSBjb25zdDsKKyAgICBPYmplY3RJ
bXAgKmJ1aWx0aW5SZWdFeHAoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhl
IGJ1aWx0aW4gIkVycm9yIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5FcnJv
cigpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkVycm9yKCkgY29uc3Q7CiAKICAgICAv
KioKICAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGluICJPYmplY3QucHJvdG90eXBlIiBvYmplY3Qu
CiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdDsKKyAg
ICBPYmplY3RJbXAgKmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgog
ICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gIkZ1bmN0aW9uLnByb3RvdHlwZSIgb2JqZWN0Lgog
ICAgICAqLwotICAgIE9iamVjdCBidWlsdGluRnVuY3Rpb25Qcm90b3R5cGUoKSBjb25zdDsKKyAg
ICBPYmplY3RJbXAgKmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiQXJyYXkucHJvdG90eXBlIiBvYmplY3QuCiAg
ICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5BcnJheVByb3RvdHlwZSgpIGNvbnN0OworICAgIE9i
amVjdEltcCAqYnVpbHRpbkFycmF5UHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAg
KiBSZXR1cm5zIHRoZSBidWlsdGluICJCb29sZWFuLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAq
LwotICAgIE9iamVjdCBidWlsdGluQm9vbGVhblByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVj
dEltcCAqYnVpbHRpbkJvb2xlYW5Qcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAq
IFJldHVybnMgdGhlIGJ1aWx0aW4gIlN0cmluZy5wcm90b3R5cGUiIG9iamVjdC4KICAgICAgKi8K
LSAgICBPYmplY3QgYnVpbHRpblN0cmluZ1Byb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdElt
cCAqYnVpbHRpblN0cmluZ1Byb3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0
dXJucyB0aGUgYnVpbHRpbiAiTnVtYmVyLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAqLwotICAg
IE9iamVjdCBidWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpi
dWlsdGluTnVtYmVyUHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5z
IHRoZSBidWlsdGluICJEYXRlLnByb3RvdHlwZSIgb2JqZWN0LgogICAgICAqLwotICAgIE9iamVj
dCBidWlsdGluRGF0ZVByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkRh
dGVQcm90b3R5cGUoKSBjb25zdDsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGJ1aWx0
aW4gIlJlZ0V4cC5wcm90b3R5cGUiIG9iamVjdC4KICAgICAgKi8KLSAgICBPYmplY3QgYnVpbHRp
blJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpblJlZ0V4cFBy
b3RvdHlwZSgpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAi
RXJyb3IucHJvdG90eXBlIiBvYmplY3QuCiAgICAgICovCi0gICAgT2JqZWN0IGJ1aWx0aW5FcnJv
clByb3RvdHlwZSgpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpbkVycm9yUHJvdG90eXBl
KCkgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiAiRXJyb3Ii
IGdsb2JhbCBwcm9wZXJ0eQogICAgICAqLwotICAgIE9iamVjdCBidWlsdGluRXZhbEVycm9yKCkg
Y29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SYW5nZUVycm9yKCkgY29uc3Q7Ci0gICAgT2JqZWN0
IGJ1aWx0aW5SZWZlcmVuY2VFcnJvcigpIGNvbnN0OwotICAgIE9iamVjdCBidWlsdGluU3ludGF4
RXJyb3IoKSBjb25zdDsKLSAgICBPYmplY3QgYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0OwotICAg
IE9iamVjdCBidWlsdGluVVJJRXJyb3IoKSBjb25zdDsKLQotICAgIE9iamVjdCBidWlsdGluRXZh
bEVycm9yUHJvdG90eXBlKCkgY29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SYW5nZUVycm9yUHJv
dG90eXBlKCkgY29uc3Q7Ci0gICAgT2JqZWN0IGJ1aWx0aW5SZWZlcmVuY2VFcnJvclByb3RvdHlw
ZSgpIGNvbnN0OwotICAgIE9iamVjdCBidWlsdGluU3ludGF4RXJyb3JQcm90b3R5cGUoKSBjb25z
dDsKLSAgICBPYmplY3QgYnVpbHRpblR5cGVFcnJvclByb3RvdHlwZSgpIGNvbnN0OwotICAgIE9i
amVjdCBidWlsdGluVVJJRXJyb3JQcm90b3R5cGUoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1
aWx0aW5FdmFsRXJyb3IoKSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SYW5nZUVycm9y
KCkgY29uc3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVmZXJlbmNlRXJyb3IoKSBjb25zdDsK
KyAgICBPYmplY3RJbXAgKmJ1aWx0aW5TeW50YXhFcnJvcigpIGNvbnN0OworICAgIE9iamVjdElt
cCAqYnVpbHRpblR5cGVFcnJvcigpIGNvbnN0OworICAgIE9iamVjdEltcCAqYnVpbHRpblVSSUVy
cm9yKCkgY29uc3Q7CisKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5FdmFsRXJyb3JQcm90b3R5cGUo
KSBjb25zdDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5SYW5nZUVycm9yUHJvdG90eXBlKCkgY29u
c3Q7CisgICAgT2JqZWN0SW1wICpidWlsdGluUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUoKSBjb25z
dDsKKyAgICBPYmplY3RJbXAgKmJ1aWx0aW5TeW50YXhFcnJvclByb3RvdHlwZSgpIGNvbnN0Owor
ICAgIE9iamVjdEltcCAqYnVpbHRpblR5cGVFcnJvclByb3RvdHlwZSgpIGNvbnN0OworICAgIE9i
amVjdEltcCAqYnVpbHRpblVSSUVycm9yUHJvdG90eXBlKCkgY29uc3Q7CiAKICAgICBlbnVtIENv
bXBhdE1vZGUgeyBOYXRpdmVNb2RlLCBJRUNvbXBhdCwgTmV0c2NhcGVDb21wYXQgfTsKICAgICAv
KioKQEAgLTM4MCw3ICszODAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBpcyB1c2VkIHRv
IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgdGhlIFdpbmRvdyBvYmplY3Qgc28gd2UgY2FuIHBl
cmZvcm0KICAgICAgKiBzZWN1cml0eSBjaGVja3MuCiAgICAgICovCi0gICAgdmlydHVhbCBib29s
IGlzR2xvYmFsT2JqZWN0KGNvbnN0IFZhbHVlICZ2KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc0dsb2JhbE9iamVjdChWYWx1ZUltcCAqdikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAKICAgICAvKiogCiAgICAgICogRmluZCB0aGUgaW50ZXJwcmV0ZXIgZm9yIGEgcGFydGlj
dWxhciBnbG9iYWwgb2JqZWN0LiAgVGhpcyBzaG91bGQgcmVhbGx5CkBAIC0zOTksNyArMzk5LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGlzU2FmZVNjcmlw
dCAoY29uc3QgSW50ZXJwcmV0ZXIgKnRhcmdldCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAg
IHZpcnR1YWwgdm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUg
KmV4ZWMsIGludCBsYW5ndWFnZSwgY29uc3QgT2JqZWN0ICZ2YWx1ZSwgY29uc3QgQmluZGluZ3M6
OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJlbnQp
OworICAgIHZpcnR1YWwgdm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVj
U3RhdGUgKmV4ZWMsIGludCBsYW5ndWFnZSwgT2JqZWN0SW1wICp2YWx1ZSwgY29uc3QgQmluZGlu
Z3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJl
bnQpOwogI2VuZGlmCiAKICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBhdm9pZCBhY2Nl
c3NpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZm9yIHRoZXNlIGlkZW50aWZpZXJzIGluCkBAIC00
NzAsMTcgKzQ3MCwxNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKi8KICAgICBDb250ZXh0IGNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBfY29udGV4dDsgfQogCi0gICAgdm9pZCBzZXRFeGNlcHRp
b24oY29uc3QgVmFsdWUgJmUpIHsgX2V4Y2VwdGlvbiA9IGU7IH0KLSAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkgeyBfZXhjZXB0aW9uID0gVmFsdWUoKTsgfQotICAgIFZhbHVlIGV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb247IH0KLSAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNv
bnN0IHsgcmV0dXJuICFfZXhjZXB0aW9uLmlzTnVsbCgpOyB9CisgICAgdm9pZCBzZXRFeGNlcHRp
b24oVmFsdWVJbXAgKmUpIHsgX2V4Y2VwdGlvbiA9IGU7IH0KKyAgICB2b2lkIGNsZWFyRXhjZXB0
aW9uKCkgeyBfZXhjZXB0aW9uID0gTlVMTDsgfQorICAgIFZhbHVlSW1wICpleGNlcHRpb24oKSBj
b25zdCB7IHJldHVybiBfZXhjZXB0aW9uOyB9CisgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25z
dCB7IHJldHVybiBfZXhjZXB0aW9uOyB9CiAKICAgcHJpdmF0ZToKICAgICBFeGVjU3RhdGUoSW50
ZXJwcmV0ZXIgKmludGVycCwgQ29udGV4dEltcCAqY29uKQotICAgICAgICA6IF9pbnRlcnByZXRl
cihpbnRlcnApLCBfY29udGV4dChjb24pIHsgfQorICAgICAgICA6IF9pbnRlcnByZXRlcihpbnRl
cnApLCBfY29udGV4dChjb24pLCBfZXhjZXB0aW9uKE5VTEwpIHsgfQogICAgIEludGVycHJldGVy
ICpfaW50ZXJwcmV0ZXI7CiAgICAgQ29udGV4dEltcCAqX2NvbnRleHQ7Ci0gICAgVmFsdWUgX2V4
Y2VwdGlvbjsKKyAgICBWYWx1ZUltcCAqX2V4Y2VwdGlvbjsKICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAot
LS0gSmF2YVNjcmlwdENvcmUva2pzL2xpc3QuY3BwCTE0IEp1bCAyMDA1IDE4OjI3OjAyIC0wMDAw
CTEuMTMKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9saXN0LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjUx
IC0wMDAwCkBAIC0yMzMsMTEgKzIzMywxMSBAQCB2b2lkIExpc3Q6OnJlbGVhc2UoKQogICAgIGRl
YWxsb2NhdGVMaXN0SW1wKGltcCk7CiB9CiAKLVZhbHVlSW1wICpMaXN0OjppbXBBdChpbnQgaSkg
Y29uc3QKK1ZhbHVlSW1wICpMaXN0OjphdChpbnQgaSkgY29uc3QKIHsKICAgICBMaXN0SW1wICpp
bXAgPSBzdGF0aWNfY2FzdDxMaXN0SW1wICo+KF9pbXBCYXNlKTsKICAgICBpZiAoKHVuc2lnbmVk
KWkgPj0gKHVuc2lnbmVkKWltcC0+c2l6ZSkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZEltcDo6
c3RhdGljVW5kZWZpbmVkOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAo
aSA8IGlubGluZVZhbHVlc1NpemUpCiAgICAgICAgIHJldHVybiBpbXAtPnZhbHVlc1tpXTsKICAg
ICByZXR1cm4gaW1wLT5vdmVyZmxvd1tpIC0gaW5saW5lVmFsdWVzU2l6ZV07CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9ranMvbGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtcCAt
dSAtcjEuOSBKYXZhU2NyaXB0Q29yZS9ranMvbGlzdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
bGlzdC5oCTE0IEp1bCAyMDA1IDE4OjI3OjAyIC0wMDAwCTEuOQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2xpc3QuaAk4IEF1ZyAyMDA1IDAxOjAwOjUxIC0wMDAwCkBAIC02Miw3ICs2Miw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gdmFsIFBvaW50ZXIg
dG8gb2JqZWN0LgogICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgVmFsdWUm
IHZhbCkgeyBhcHBlbmQodmFsLmltcCgpKTsgfQogICAgICAgICB2b2lkIGFwcGVuZChWYWx1ZUlt
cCAqdmFsKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJv
bSB0aGUgbGlzdC4KQEAgLTEwNCwxMyArMTAzLDExIEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICAgKiBAcmV0dXJuIFJldHVybiB0aGUgZWxlbWVudCBhdCBwb3NpdGlvbiBpLiBLSlM6OlVuZGVm
aW5lZCBpZiB0aGUKICAgICAgICAgICogaW5kZXggaXMgb3V0IG9mIHJhbmdlLgogICAgICAgICAg
Ki8KLSAgICAgICAgVmFsdWUgYXQoaW50IGkpIGNvbnN0IHsgcmV0dXJuIFZhbHVlKGltcEF0KGkp
KTsgfQorICAgICAgICBWYWx1ZUltcCAqYXQoaW50IGkpIGNvbnN0OwogICAgICAgICAvKioKICAg
ICAgICAgICogRXF1aXZhbGVudCB0byBhdC4KICAgICAgICAgICovCi0gICAgICAgIFZhbHVlIG9w
ZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIFZhbHVlKGltcEF0KGkpKTsgfQotICAgICAg
ICAKLSAgICAgICAgVmFsdWVJbXAgKmltcEF0KGludCBpKSBjb25zdDsKKyAgICAgICAgVmFsdWVJ
bXAgKm9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgCiAgICAg
ICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0YXRpYyBpbnN0YW5j
ZSBvZiBhbiBlbXB0eSBsaXN0LiBVc2VmdWwgaWYgYQpAQCAtMTQ2LDI1ICsxNDMsMjUgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgICAqIERlcmVmZXJlbmNlIHRoZSBpdGVyYXRvci4KICAgICAg
ICAgICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgdGhlIGl0ZXJhdG9yIG9wZXJh
dGVzIG9uLgogICAgICAgICAgKi8KLSAgICAgICAgVmFsdWVJbXAgKm9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBfbGlzdC0+aW1wQXQoX2kpOyB9Ci0gICAgICAgIFZhbHVlIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIFZhbHVlKF9saXN0LT5pbXBBdChfaSkpOyB9CisgICAgICAgIFZhbHVl
SW1wICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX2xpc3QtPmF0KF9pKTsgfQorICAgICAg
ICBWYWx1ZUltcCAqb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX2xpc3QtPmF0KF9pKTsgfQog
ICAgICAgICAvKioKICAgICAgICAgICogUHJlZml4IGluY3JlbWVudCBvcGVyYXRvci4KICAgICAg
ICAgICogQHJldHVybiBUaGUgZWxlbWVudCBhZnRlciB0aGUgaW5jcmVtZW50LgogICAgICAgICAg
Ki8KLSAgICAgICAgVmFsdWUgb3BlcmF0b3IrKygpIHsgcmV0dXJuIFZhbHVlKF9saXN0LT5pbXBB
dCgrK19pKSk7IH0KKyAgICAgICAgVmFsdWVJbXAgKm9wZXJhdG9yKysoKSB7IHJldHVybiBfbGlz
dC0+YXQoKytfaSk7IH0KICAgICAgICAgLyoqCiAgICAgICAgICAqIFBvc3RmaXggaW5jcmVtZW50
IG9wZXJhdG9yLgogICAgICAgICAgKi8KLSAgICAgICAgVmFsdWUgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuIFZhbHVlKF9saXN0LT5pbXBBdChfaSsrKSk7IH0KKyAgICAgICAgVmFsdWVJbXAgKm9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiBfbGlzdC0+YXQoX2krKyk7IH0KICAgICAgICAgLyoqCiAg
ICAgICAgICAqIFByZWZpeCBkZWNyZW1lbnQgb3BlcmF0b3IuCiAgICAgICAgICAqLwotICAgICAg
ICBWYWx1ZSBvcGVyYXRvci0tKCkgeyByZXR1cm4gVmFsdWUoX2xpc3QtPmltcEF0KC0tX2kpKTsg
fQorICAgICAgICBWYWx1ZUltcCAqb3BlcmF0b3ItLSgpIHsgcmV0dXJuIF9saXN0LT5hdCgtLV9p
KTsgfQogICAgICAgICAvKioKICAgICAgICAgICogUG9zdGZpeCBkZWNyZW1lbnQgb3BlcmF0b3Iu
CiAgICAgICAgICAqLwotICAgICAgICBWYWx1ZSBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gVmFs
dWUoX2xpc3QtPmltcEF0KF9pLS0pKTsgfQorICAgICAgICBWYWx1ZUltcCAqb3BlcmF0b3ItLShp
bnQpIHsgcmV0dXJuIF9saXN0LT5hdChfaS0tKTsgfQogICAgICAgICAvKioKICAgICAgICAgICog
Q29tcGFyZSB0aGUgaXRlcmF0b3Igd2l0aCBhbm90aGVyIG9uZS4KICAgICAgICAgICogQHJldHVy
biBUcnVlIGlmIHRoZSB0d28gaXRlcmF0b3JzIG9wZXJhdGUgb24gdGhlIHNhbWUgbGlzdCBlbGVt
ZW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTcKZGlmZiAtcCAtdSAtcjEuMTcgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5o
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAw
MAkxLjE3CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJOCBBdWcgMjAwNSAwMTowMDo1
MSAtMDAwMApAQCAtMTI3LDE3ICsxMjcsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqIEhlbHBl
ciBmb3IgZ2V0U3RhdGljRnVuY3Rpb25TbG90IGFuZCBnZXRTdGF0aWNQcm9wZXJ0eVNsb3QKICAg
ICovCiAgIHRlbXBsYXRlIDxjbGFzcyBGdW5jSW1wPgotICBpbmxpbmUgVmFsdWUgc3RhdGljRnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgaW5saW5lIFZhbHVlSW1wICpzdGF0aWNG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogICB7CiAgICAgICAvLyBMb29rIGZvciBj
YWNoZWQgdmFsdWUgaW4gZHluYW1pYyBtYXAgb2YgcHJvcGVydGllcyAoaW4gT2JqZWN0SW1wKQog
ICAgICAgT2JqZWN0SW1wICp0aGlzT2JqID0gc2xvdC5zbG90QmFzZSgpOwogICAgICAgVmFsdWVJ
bXAgKmNhY2hlZFZhbCA9IHRoaXNPYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwogICAgICAg
aWYgKGNhY2hlZFZhbCkKLSAgICAgICAgICByZXR1cm4gVmFsdWUoY2FjaGVkVmFsKTsKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZFZhbDsKIAogICAgICAgY29uc3QgSGFzaEVudHJ5ICplbnRyeSA9IHNs
b3Quc3RhdGljRW50cnkoKTsKLSAgICAgIFZhbHVlIHZhbCA9IFZhbHVlKG5ldyBGdW5jSW1wKGV4
ZWMsIGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcykpOwotICAgICAgdGhpc09iai0+cHV0RGly
ZWN0KHByb3BlcnR5TmFtZSwgdmFsLmltcCgpLCBlbnRyeS0+YXR0cik7CisgICAgICBWYWx1ZUlt
cCAqdmFsID0gbmV3IEZ1bmNJbXAoZXhlYywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zKTsK
KyAgICAgIHRoaXNPYmotPnB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIHZhbCwgZW50cnktPmF0dHIp
OwogICAgICAgcmV0dXJuIHZhbDsKICAgfQogCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljVmFsdWVTbG90IGFuZCBnZXRTdGF0aWNQ
cm9wZXJ0eVNsb3QKICAgICovCiAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgotICBpbmxpbmUg
VmFsdWUgc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorICBpbmxpbmUgVmFsdWVJbXAgKnN0YXRpY1Zh
bHVlR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKICAgewogICAgICAgVGhpc0ltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0
PFRoaXNJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAgIGNvbnN0IEhhc2hFbnRyeSAqZW50
cnkgPSBzbG90LnN0YXRpY0VudHJ5KCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAqLwogICB0ZW1wbGF0ZSA8Y2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgog
ICBpbmxpbmUgdm9pZCBsb29rdXBQdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVJbXAgKnZhbHVlLCBp
bnQgYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUs
IFRoaXNJbXAqIHRoaXNPYmopCiAgIHsKICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9v
a3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CkBAIC0yNjQsMTQgKzI2NCwxNCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzQ3Rvcj4KICAgaW5saW5l
IE9iamVjdEltcCAqY2FjaGVHbG9iYWxPYmplY3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpCiAgIHsKLSAgICBPYmplY3RJbXAgKmdsb2JhbE9iamVjdCA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+Z2xv
YmFsT2JqZWN0KCkuaW1wKCkpOworICAgIE9iamVjdEltcCAqZ2xvYmFsT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5nbG9iYWxPYmpl
Y3QoKSk7CiAgICAgVmFsdWVJbXAgKm9iaiA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0KHByb3Bl
cnR5TmFtZSk7CiAgICAgaWYgKG9iaikgewogICAgICAgYXNzZXJ0KG9iai0+aXNPYmplY3QoKSk7
CiAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KG9iaik7CiAgICAgfQogICAg
IE9iamVjdEltcCAqbmV3T2JqZWN0ID0gbmV3IENsYXNzQ3RvcihleGVjKTsKLSAgICBnbG9iYWxP
YmplY3QtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIFZhbHVlKG5ld09iamVjdCksIEludGVybmFs
KTsKKyAgICBnbG9iYWxPYmplY3QtPnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIG5ld09iamVjdCwg
SW50ZXJuYWwpOwogICAgIHJldHVybiBuZXdPYmplY3Q7CiAgIH0KIApAQCAtMjk3LDcgKzI5Nyw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6IFwKICAgICBzdGF0aWMgT2JqZWN0SW1wICpz
ZWxmKEV4ZWNTdGF0ZSAqZXhlYykgXAogICAgIHsgXAotICAgICAgcmV0dXJuIGNhY2hlR2xvYmFs
T2JqZWN0PENsYXNzUHJvdG8+KCBleGVjLCAiW1siIENsYXNzTmFtZSAiLnByb3RvdHlwZV1dIiAp
OyBcCisgICAgICByZXR1cm4gY2FjaGVHbG9iYWxPYmplY3Q8Q2xhc3NQcm90bz4oZXhlYywgIltb
IiBDbGFzc05hbWUgIi5wcm90b3R5cGVdXSIpOyBcCiAgICAgfSBcCiAgIHByb3RlY3RlZDogXAog
ICAgIENsYXNzUHJvdG8oIEV4ZWNTdGF0ZSAqZXhlYyApIFwKQEAgLTMzMSw4ICszMzEsOCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICB7IFwKICAgICAgICBwdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlO
YW1lLCBOdW1iZXIobGVuKSwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7IFwKICAgICB9
IFwKLSAgICAvKiBNYWNybyB1c2VyIG5lZWRzIHRvIGltcGxlbWVudCB0aGUgY2FsbCBmdW5jdGlv
bi4gKi8gXAotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7IFwKKyAgICAvKiBNYWNybyB1c2VyIG5lZWRzIHRv
IGltcGxlbWVudCB0aGUgY2FsbEFzRnVuY3Rpb24gZnVuY3Rpb24uICovIFwKKyAgICB2aXJ0dWFs
IFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncyk7IFwKICAgcHJpdmF0ZTogXAogICAgIGludCBpZDsgXAog
ICB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1yMS4xNiBKYXZhU2NyaXB0Q29y
ZS9ranMvbWF0aF9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3Qu
Y3BwCTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xNgorKysgSmF2YVNjcmlwdENvcmUva2pz
L21hdGhfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjUxIC0wMDAwCkBAIC04Niw3ICs4Niw3
IEBAIGJvb2wgTWF0aE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgcmV0dXJuIGdl
dFN0YXRpY1Byb3BlcnR5U2xvdDxNYXRoRnVuY0ltcCwgTWF0aE9iamVjdEltcCwgT2JqZWN0SW1w
PihleGVjLCAmbWF0aFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1
ZSBNYXRoT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqTWF0aE9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICBkb3VibGUgZCA9IC00MjsgLy8gOykKICAgc3dp
dGNoICh0b2tlbikgewpAQCAtMTI1LDEwICsxMjUsOSBAQCBWYWx1ZSBNYXRoT2JqZWN0SW1wOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4CiAKIE1hdGhGdW5jSW1wOjpNYXRoRnVuY0ltcChFeGVjU3RhdGUg
KmV4ZWMsIGludCBpLCBpbnQgbCkKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKAotICAgIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCkt
PmJ1aWx0aW5GdW5jdGlvblByb3RvdHlwZSgpLmltcCgpKQorICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uUHJvdG90eXBlSW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5GdW5j
dGlvblByb3RvdHlwZSgpKQogICAgICksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7
CiAgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGwsIERvbnREZWxldGV8UmVhZE9ubHl8
RG9udEVudW0pOwogfQogCkBAIC0xMzcsMTAgKzEzNiwxMCBAQCBib29sIE1hdGhGdW5jSW1wOjpp
bXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiAgIHJldHVybiB0cnVlOwogfQogCi1WYWx1ZSBNYXRoRnVu
Y0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8sIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqTWF0aEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsKLSAg
ZG91YmxlIGFyZyA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gIGRvdWJsZSBhcmcyID0gYXJn
c1sxXS50b051bWJlcihleGVjKTsKKyAgZG91YmxlIGFyZyA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpOworICBkb3VibGUgYXJnMiA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogICBkb3VibGUg
cmVzdWx0OwogCiAgIHN3aXRjaCAoaWQpIHsKQEAgLTE3OCw3ICsxNzcsNyBAQCBWYWx1ZSBNYXRo
RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgdW5zaWduZWQgaW50IGFyZ3NDb3Vu
dCA9IGFyZ3Muc2l6ZSgpOwogICAgIHJlc3VsdCA9IC1JbmY7CiAgICAgZm9yICggdW5zaWduZWQg
aW50IGsgPSAwIDsgayA8IGFyZ3NDb3VudCA7ICsrayApIHsKLSAgICAgIGRvdWJsZSB2YWwgPSBh
cmdzW2tdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgZG91YmxlIHZhbCA9IGFyZ3Nba10tPnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgaWYgKCBpc05hTiggdmFsICkgKQogICAgICAgewogICAgICAgICBy
ZXN1bHQgPSBOYU47CkBAIC0xOTMsNyArMTkyLDcgQEAgVmFsdWUgTWF0aEZ1bmNJbXA6OmNhbGwo
RXhlY1N0YXRlICpleGVjLAogICAgIHVuc2lnbmVkIGludCBhcmdzQ291bnQgPSBhcmdzLnNpemUo
KTsKICAgICByZXN1bHQgPSArSW5mOwogICAgIGZvciAoIHVuc2lnbmVkIGludCBrID0gMCA7IGsg
PCBhcmdzQ291bnQgOyArK2sgKSB7Ci0gICAgICBkb3VibGUgdmFsID0gYXJnc1trXS50b051bWJl
cihleGVjKTsKKyAgICAgIGRvdWJsZSB2YWwgPSBhcmdzW2tdLT50b051bWJlcihleGVjKTsKICAg
ICAgIGlmICggaXNOYU4oIHZhbCApICkKICAgICAgIHsKICAgICAgICAgcmVzdWx0ID0gTmFOOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9v
YmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmgJNyBBdWcgMjAwNSAw
NjoxNzozNSAtMDAwMAkxLjcKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5oCTgg
QXVnIDIwMDUgMDE6MDA6NTEgLTAwMDAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgTWF0aE9iamVjdEltcChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICAgICAgICAgICAgICBP
YmplY3RQcm90b3R5cGVJbXAgKm9ialByb3RvKTsKICAgICBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
ZW51bSB7IEV1bGVyLCBMbjIsIExuMTAsIExvZzJFLCBMb2cxMEUsIFBpLCBTcXJ0MV8yLCBTcXJ0
MiwKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBNYXRo
RnVuY0ltcChFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbCk7CiAgICAgdmlydHVhbCBib29s
IGltcGxlbWVudHNDYWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFs
IFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAgIHByaXZhdGU6CiAgICAgaW50IGlkOwogICB9OwpJ
bmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS42OQpkaWZmIC1wIC11IC1yMS42OSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCi0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJ
MS42OQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjU1
IC0wMDAwCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJub2Rlcy5oIgogCi0vLyNpbmNs
dWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAj
aWZkZWYgS0pTX0RFQlVHX01FTQpAQCAtNDQsNiArNDMsNyBAQAogI2luY2x1ZGUgImxleGVyLmgi
CiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgInVzdHJpbmcuaCIKKyNpbmNsdWRl
ICJyZWZlcmVuY2VfbGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCkBAIC0xMTYsNyAr
MTE2LDcgQEAgTm9kZTo6fk5vZGUoKQogCiBSZWZlcmVuY2UgTm9kZTo6ZXZhbHVhdGVSZWZlcmVu
Y2UoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXZhbHVhdGUoZXhlYyk7CisgIFZh
bHVlSW1wICp2ID0gZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlJFRkVSRU5D
RQogICByZXR1cm4gUmVmZXJlbmNlOjptYWtlVmFsdWVSZWZlcmVuY2Uodik7CiB9CkBAIC0xMzMs
MTYgKzEzMywxNiBAQCB2b2lkIE5vZGU6OmZpbmFsQ2hlY2soKQogfQogI2VuZGlmCiAKLVZhbHVl
IE5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hh
ciAqbXNnKQorVmFsdWVJbXAgKk5vZGU6OnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJv
clR5cGUgZSwgY29uc3QgY2hhciAqbXNnKQogewotICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLCBlLCBtc2csIGxpbmVObygpLCBzb3VyY2VJZCgpLCAmc291cmNlVVJMKTsKKyAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIGUsIG1zZywgbGluZU5vKCksIHNvdXJj
ZUlkKCksICZzb3VyY2VVUkwpOwogICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgcmV0dXJu
IGVycjsKIH0KIAotVmFsdWUgTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9y
VHlwZSBlLCBjb25zdCBjaGFyICptc2csIFZhbHVlIHYsIE5vZGUgKmV4cHIpCitWYWx1ZUltcCAq
Tm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFy
ICptc2csIFZhbHVlSW1wICp2LCBOb2RlICpleHByKQogewotICBjaGFyICp2U3RyID0gc3RyZHVw
KHYudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgIGNoYXIgKnZTdHIgPSBzdHJkdXAodi0+dG9T
dHJpbmcoZXhlYykuYXNjaWkoKSk7CiAgIGNoYXIgKmV4cHJTdHIgPSBzdHJkdXAoZXhwci0+dG9T
dHJpbmcoKS5hc2NpaSgpKTsKICAgCiAgIGludCBsZW5ndGggPSAgc3RybGVuKG1zZykgLSA0IC8q
IHR3byAlcyAqLyArIHN0cmxlbih2U3RyKSArIHN0cmxlbihleHByU3RyKSArIDEgLyogbnVsbCB0
ZXJtaW5hdG9yICovOwpAQCAtMTUxLDIxICsxNTEsMjEgQEAgVmFsdWUgTm9kZTo6dGhyb3dFcnJv
cihFeGVjU3RhdGUgKmV4ZWMsIAogICBmcmVlKHZTdHIpOwogICBmcmVlKGV4cHJTdHIpOwogCi0g
IFZhbHVlIHJlc3VsdCA9IHRocm93RXJyb3IoZXhlYywgZSwgc3RyKTsKKyAgVmFsdWVJbXAgKnJl
c3VsdCA9IHRocm93RXJyb3IoZXhlYywgZSwgc3RyKTsKICAgZGVsZXRlIFtdIHN0cjsKICAgCiAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAotVmFsdWUgTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUg
KmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2csIElkZW50aWZpZXIgbGFiZWwpCitW
YWx1ZUltcCAqTm9kZTo6dGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBj
b25zdCBjaGFyICptc2csIElkZW50aWZpZXIgbGFiZWwpCiB7CiAgIGNvbnN0IGNoYXIgKmwgPSBs
YWJlbC5hc2NpaSgpOwogICBpbnQgbGVuZ3RoID0gc3RybGVuKG1zZykgLSAyIC8qICVzICovICsg
c3RybGVuKGwpICsgMSAvKiBudWxsIHRlcm1pbmF0b3IgKi87CiAgIGNoYXIgKm1lc3NhZ2UgPSBu
ZXcgY2hhcltsZW5ndGhdOwogICBzcHJpbnRmKG1lc3NhZ2UsIG1zZywgbCk7CiAKLSAgVmFsdWUg
cmVzdWx0ID0gdGhyb3dFcnJvcihleGVjLCBlLCBtZXNzYWdlKTsKKyAgVmFsdWVJbXAgKnJlc3Vs
dCA9IHRocm93RXJyb3IoZXhlYywgZSwgbWVzc2FnZSk7CiAgIGRlbGV0ZSBbXSBtZXNzYWdlOwog
CiAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzQsMTEgKzE3NCwxMSBAQCBWYWx1ZSBOb2RlOjp0aHJv
d0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywgCiB2b2lkIE5vZGU6OnNldEV4Y2VwdGlvbkRldGFpbHNJ
Zk5lZWRlZChFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIE9iamVjdCBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS50b09iamVj
dChleGVjKTsKLSAgICAgICAgaWYgKCFleGNlcHRpb24uaGFzUHJvcGVydHkoZXhlYywgImxpbmUi
KSAmJgotICAgICAgICAgICAgIWV4Y2VwdGlvbi5oYXNQcm9wZXJ0eShleGVjLCAic291cmNlVVJM
IikpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbi5wdXQoZXhlYywgImxpbmUiLCBOdW1iZXIobGlu
ZSkpOwotICAgICAgICAgICAgZXhjZXB0aW9uLnB1dChleGVjLCAic291cmNlVVJMIiwgU3RyaW5n
KHNvdXJjZVVSTCkpOworICAgICAgICBPYmplY3RJbXAgKmV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2Vw
dGlvbigpLT50b09iamVjdChleGVjKTsKKyAgICAgICAgaWYgKCFleGNlcHRpb24tPmhhc1Byb3Bl
cnR5KGV4ZWMsICJsaW5lIikgJiYKKyAgICAgICAgICAgICFleGNlcHRpb24tPmhhc1Byb3BlcnR5
KGV4ZWMsICJzb3VyY2VVUkwiKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXQoZXhlYywg
ImxpbmUiLCBOdW1iZXIobGluZSkpOworICAgICAgICAgICAgZXhjZXB0aW9uLT5wdXQoZXhlYywg
InNvdXJjZVVSTCIsIFN0cmluZyhzb3VyY2VVUkwpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTIyMiw1MCArMjIyLDQ4IEBAIHZvaWQgU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4
ZWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bGxOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVmFsdWUgTnVsbE5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqTnVsbE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqLypleGVjKi8pCiB7CiAgIHJldHVybiBOdWxsKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFuTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLVZhbHVlIEJvb2xlYW5Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhl
YyovKQorVmFsdWVJbXAgKkJvb2xlYW5Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyov
KQogewotICByZXR1cm4gVmFsdWUodmFsdWUpOworICByZXR1cm4ganNCb29sZWFuKHZhbHVlKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlck5vZGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVmFsdWUgTnVtYmVyTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1ZhbHVlSW1wICpOdW1iZXJOb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKi8qZXhlYyovKQogewotICByZXR1cm4gVmFsdWUodmFsdWUpOworICByZXR1cm4g
anNOdW1iZXIodmFsdWUpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1WYWx1ZSBT
dHJpbmdOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhlYyovKQorVmFsdWVJbXAgKlN0cmlu
Z05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pCiB7Ci0gIHJldHVybiB2YWx1ZTsK
KyAgcmV0dXJuIGpzU3RyaW5nKHZhbHVlKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIFJlZ0V4cE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotVmFsdWUgUmVnRXhwTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAg
KlJlZ0V4cE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgTGlzdCBsaXN0Owot
ICBTdHJpbmcgcChwYXR0ZXJuKTsKLSAgU3RyaW5nIGYoZmxhZ3MpOwotICBsaXN0LmFwcGVuZChw
KTsKLSAgbGlzdC5hcHBlbmQoZik7CisgIGxpc3QuYXBwZW5kKGpzU3RyaW5nKHBhdHRlcm4pKTsK
KyAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZmxhZ3MpKTsKIAotICBPYmplY3QgcmVnID0gZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmltcCgpLT5idWlsdGluUmVnRXhwKCk7Ci0gIHJldHVybiBy
ZWcuY29uc3RydWN0KGV4ZWMsbGlzdCk7CisgIE9iamVjdEltcCAqcmVnID0gZXhlYy0+bGV4aWNh
bEludGVycHJldGVyKCktPmltcCgpLT5idWlsdGluUmVnRXhwKCk7CisgIHJldHVybiByZWctPmNv
bnN0cnVjdChleGVjLGxpc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gVGhpc05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBF
Q01BIDExLjEuMQotVmFsdWUgVGhpc05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1Zh
bHVlSW1wICpUaGlzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICByZXR1cm4g
ZXhlYy0+Y29udGV4dCgpLmltcCgpLT50aGlzVmFsdWUoKTsKIH0KQEAgLTI3Myw3ICsyNzEsNyBA
QCBWYWx1ZSBUaGlzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiAvLyBFQ01BIDExLjEuMiAmIDEwLjEuNAotVmFsdWUgUmVzb2x2ZU5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpSZXNvbHZlTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQogewogICBTY29wZUNoYWluIGNoYWluID0gZXhlYy0+Y29udGV4
dCgpLmltcCgpLT5zY29wZUNoYWluKCk7CiAKQEAgLTI4MiwxMyArMjgwLDE0IEBAIFZhbHVlIFJl
c29sdmVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmUKICAgUHJvcGVydHlTbG90IHNsb3Q7CiAg
IGRvIHsgCiAgICAgT2JqZWN0SW1wICpvID0gY2hhaW4udG9wKCk7CisKICAgICBpZiAoby0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KSkKICAgICAgIHJldHVybiBzbG90LmdldFZh
bHVlKGV4ZWMsIGlkZW50KTsKICAgICAKICAgICBjaGFpbi5wb3AoKTsKICAgfSB3aGlsZSAoIWNo
YWluLmlzRW1wdHkoKSk7CiAKLSAgcmV0dXJuIFJlZmVyZW5jZShOdWxsKCksIGlkZW50KS5nZXRW
YWx1ZShleGVjKTsKKyAgcmV0dXJuIFJlZmVyZW5jZShpZGVudCkuZ2V0VmFsdWUoZXhlYyk7CiB9
CiAKIFJlZmVyZW5jZSBSZXNvbHZlTm9kZTo6ZXZhbHVhdGVSZWZlcmVuY2UoRXhlY1N0YXRlICpl
eGVjKQpAQCAtMzA2LDEwICszMDUsOSBAQCBSZWZlcmVuY2UgUmVzb2x2ZU5vZGU6OmV2YWx1YXRl
UmVmZXJlbmNlCiAgICAgY2hhaW4ucG9wKCk7CiAgIH0gd2hpbGUgKCFjaGFpbi5pc0VtcHR5KCkp
OwogCi0gIHJldHVybiBSZWZlcmVuY2UoTnVsbCgpLCBpZGVudCk7CisgIHJldHVybiBSZWZlcmVu
Y2UoaWRlbnQpOwogfQogCi0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHcm91
cE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgR3JvdXBO
b2RlOjpyZWYoKQpAQCAtMzI3LDcgKzMyNSw3IEBAIGJvb2wgR3JvdXBOb2RlOjpkZXJlZigpCiB9
CiAKIC8vIEVDTUEgMTEuMS42Ci1WYWx1ZSBHcm91cE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKK1ZhbHVlSW1wICpHcm91cE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsK
ICAgcmV0dXJuIGdyb3VwLT5ldmFsdWF0ZShleGVjKTsKIH0KQEAgLTM2MiwxNSArMzYwLDE1IEBA
IGJvb2wgRWxlbWVudE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4xLjQKLVZhbHVlIEVs
ZW1lbnROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqRWxlbWVudE5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgT2JqZWN0IGFycmF5ID0gZXhlYy0+
bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVjdChleGVjLCBMaXN0
OjplbXB0eSgpKTsKKyAgT2JqZWN0SW1wICphcnJheSA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRl
cigpLT5idWlsdGluQXJyYXkoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpOwogICBp
bnQgbGVuZ3RoID0gMDsKICAgZm9yIChFbGVtZW50Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5s
aXN0KSB7Ci0gICAgVmFsdWUgdmFsID0gbi0+bm9kZS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgVmFs
dWVJbXAgKnZhbCA9IG4tPm5vZGUtPmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCiAgICAgbGVuZ3RoICs9IG4tPmVsaXNpb247Ci0gICAgYXJyYXkucHV0KGV4ZWMs
IGxlbmd0aCsrLCB2YWwpOworICAgIGFycmF5LT5wdXQoZXhlYywgbGVuZ3RoKyssIHZhbCk7CiAg
IH0KICAgcmV0dXJuIGFycmF5OwogfQpAQCAtMzkyLDIzICszOTAsMjMgQEAgYm9vbCBBcnJheU5v
ZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4xLjQKLVZhbHVlIEFycmF5Tm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkFycmF5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogewotICBPYmplY3QgYXJyYXk7CisgIE9iamVjdEltcCAqYXJyYXk7CiAgIGlu
dCBsZW5ndGg7CiAKICAgaWYgKGVsZW1lbnQpIHsKLSAgICBhcnJheSA9IE9iamVjdChzdGF0aWNf
Y2FzdDxPYmplY3RJbXAqPihlbGVtZW50LT5ldmFsdWF0ZShleGVjKS5pbXAoKSkpOworICAgIGFy
cmF5ID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oZWxlbWVudC0+ZXZhbHVhdGUoZXhlYykpOwog
ICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gICAgbGVuZ3RoID0gb3B0ID8gYXJyYXkuZ2V0
KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lKS50b0ludDMyKGV4ZWMpIDogMDsKKyAgICBsZW5ndGgg
PSBvcHQgPyBhcnJheS0+Z2V0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lKS0+dG9JbnQzMihleGVj
KSA6IDA7CiAgIH0gZWxzZSB7Ci0gICAgVmFsdWUgbmV3QXJyID0gZXhlYy0+bGV4aWNhbEludGVy
cHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpOwot
ICAgIGFycmF5ID0gT2JqZWN0KHN0YXRpY19jYXN0PE9iamVjdEltcCo+KG5ld0Fyci5pbXAoKSkp
OworICAgIFZhbHVlSW1wICpuZXdBcnIgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbkFycmF5KCktPmNvbnN0cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpOworICAgIGFycmF5ID0g
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4obmV3QXJyKTsKICAgICBsZW5ndGggPSAwOwogICB9CiAK
ICAgaWYgKG9wdCkKLSAgICBhcnJheS5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIFZhbHVl
KGVsaXNpb24gKyBsZW5ndGgpLCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIGFycmF5LT5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKGVsaXNpb24gKyBsZW5ndGgpLCBE
b250RW51bSB8IERvbnREZWxldGUpOwogCiAgIHJldHVybiBhcnJheTsKIH0KQEAgLTQzMCwxMiAr
NDI4LDEyIEBAIGJvb2wgT2JqZWN0TGl0ZXJhbE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAx
MS4xLjUKLVZhbHVlIE9iamVjdExpdGVyYWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
CitWYWx1ZUltcCAqT2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKICAgaWYgKGxpc3QpCiAgICAgcmV0dXJuIGxpc3QtPmV2YWx1YXRlKGV4ZWMpOwogCi0gIHJl
dHVybiBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLmNvbnN0cnVj
dChleGVjLExpc3Q6OmVtcHR5KCkpOworICByZXR1cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eVZhbHVlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjcsMTcgKzQ2NSwxNyBAQCBib29sIFByb3Bl
cnR5VmFsdWVOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMS41Ci1WYWx1ZSBQcm9wZXJ0
eVZhbHVlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKlByb3BlcnR5
VmFsdWVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIE9iamVjdCBvYmogPSBl
eGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLmNvbnN0cnVjdChleGVj
LCBMaXN0OjplbXB0eSgpKTsKKyAgT2JqZWN0SW1wICpvYmogPSBleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLT5jb25zdHJ1Y3QoZXhlYywgTGlzdDo6ZW1wdHkoKSk7
CiAgIAogICBmb3IgKFByb3BlcnR5VmFsdWVOb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPmxpc3Qp
IHsKLSAgICBWYWx1ZSBuID0gcC0+bmFtZS0+ZXZhbHVhdGUoZXhlYyk7CisgICAgVmFsdWVJbXAg
Km4gPSBwLT5uYW1lLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICAgIFZhbHVlIHYgPSBwLT5hc3NpZ24tPmV2YWx1YXRlKGV4ZWMpOworICAgIFZhbHVlSW1w
ICp2ID0gcC0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQogCi0gICAgb2JqLnB1dChleGVjLCBJZGVudGlmaWVyKG4udG9TdHJpbmcoZXhlYykpLCB2
KTsKKyAgICBvYmotPnB1dChleGVjLCBJZGVudGlmaWVyKG4tPnRvU3RyaW5nKGV4ZWMpKSwgdik7
CiAgIH0KIAogICByZXR1cm4gb2JqOwpAQCAtNDg2LDkgKzQ4NCw5IEBAIFZhbHVlIFByb3BlcnR5
VmFsdWVOb2RlOjpldmFsdWF0ZShFeGVjU3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBQcm9wZXJ0eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8v
IEVDTUEgMTEuMS41Ci1WYWx1ZSBQcm9wZXJ0eU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypl
eGVjKi8pCitWYWx1ZUltcCAqUHJvcGVydHlOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8qZXhl
YyovKQogewotICBWYWx1ZSBzOworICBWYWx1ZUltcCAqczsKIAogICBpZiAoc3RyLmlzTnVsbCgp
KSB7CiAgICAgcyA9IFN0cmluZyhVU3RyaW5nOjpmcm9tKG51bWVyaWMpKTsKQEAgLTUyMCwzNiAr
NTE4LDMyIEBAIGJvb2wgQWNjZXNzb3JOb2RlMTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjIu
MWEKLVZhbHVlIEFjY2Vzc29yTm9kZTE6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVl
SW1wICpBY2Nlc3Nvck5vZGUxOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVl
IHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSBleHByMS0+ZXZh
bHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVlIHYyID0gZXhw
cjItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhl
Yyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIE9iamVjdCBvID0gdjEudG9PYmplY3Qo
ZXhlYyk7Ci0gIHVuc2lnbmVkIGk7Ci0gIGlmICh2Mi50b1VJbnQzMihpKSkKLSAgICByZXR1cm4g
by5nZXQoZXhlYywgaSk7Ci0KLSAgU3RyaW5nIHMgPSB2Mi50b1N0cmluZyhleGVjKTsKLSAgcmV0
dXJuIG8uZ2V0KGV4ZWMsIElkZW50aWZpZXIocy52YWx1ZSgpKSk7CisgIE9iamVjdEltcCAqbyA9
IHYxLT50b09iamVjdChleGVjKTsKKyAgdWludDMyX3QgaTsKKyAgaWYgKHYyLT5nZXRVSW50MzIo
aSkpCisgICAgcmV0dXJuIG8tPmdldChleGVjLCBpKTsKKyAgcmV0dXJuIG8tPmdldChleGVjLCBJ
ZGVudGlmaWVyKHYyLT50b1N0cmluZyhleGVjKSkpOwogfQogCiBSZWZlcmVuY2UgQWNjZXNzb3JO
b2RlMTo6ZXZhbHVhdGVSZWZlcmVuY2UoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2MSA9
IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYxID0gZXhwcjEtPmV2YWx1YXRl
KGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05SRUZFUkVOQ0UKLSAgVmFsdWUgdjIgPSBleHBy
Mi0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVj
KTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OUkVGRVJFTkNFCi0gIE9iamVjdCBvID0gdjEudG9PYmpl
Y3QoZXhlYyk7Ci0gIHVuc2lnbmVkIGk7Ci0gIGlmICh2Mi50b1VJbnQzMihpKSkKKyAgT2JqZWN0
SW1wICpvID0gdjEtPnRvT2JqZWN0KGV4ZWMpOworICB1aW50MzJfdCBpOworICBpZiAodjItPmdl
dFVJbnQzMihpKSkKICAgICByZXR1cm4gUmVmZXJlbmNlKG8sIGkpOwotICBTdHJpbmcgcyA9IHYy
LnRvU3RyaW5nKGV4ZWMpOwotICByZXR1cm4gUmVmZXJlbmNlKG8sIElkZW50aWZpZXIocy52YWx1
ZSgpKSk7CisgIHJldHVybiBSZWZlcmVuY2UobywgSWRlbnRpZmllcih2Mi0+dG9TdHJpbmcoZXhl
YykpKTsKIH0KIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWNjZXNzb3JO
b2RlMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIEFjY2Vzc29yTm9k
ZTI6OnJlZigpCkBAIC01NjcsMjAgKzU2MSwxOSBAQCBib29sIEFjY2Vzc29yTm9kZTI6OmRlcmVm
KCkKIH0KIAogLy8gRUNNQSAxMS4yLjFiCi1WYWx1ZSBBY2Nlc3Nvck5vZGUyOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqQWNjZXNzb3JOb2RlMjo6ZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVl
SW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVF
Ci0gIE9iamVjdCBvID0gdi50b09iamVjdChleGVjKTsKLSAgcmV0dXJuIG8uZ2V0KGV4ZWMsIGlk
ZW50KTsKKyAgcmV0dXJuIHYtPnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgaWRlbnQpOwogCiB9
CiAKIFJlZmVyZW5jZSBBY2Nlc3Nvck5vZGUyOjpldmFsdWF0ZVJlZmVyZW5jZShFeGVjU3RhdGUg
KmV4ZWMpCiB7Ci0gIFZhbHVlIHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAg
KnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OUkVGRVJFTkNF
Ci0gIE9iamVjdCBvID0gdi50b09iamVjdChleGVjKTsKKyAgT2JqZWN0SW1wICpvID0gdi0+dG9P
YmplY3QoZXhlYyk7CiAgIHJldHVybiBSZWZlcmVuY2UobywgaWRlbnQpOwogfQogCkBAIC02MDgs
MTAgKzYwMSwxMCBAQCBib29sIEFyZ3VtZW50TGlzdE5vZGU6OmRlcmVmKCkKICAgcmV0dXJuIE5v
ZGU6OmRlcmVmKCk7CiB9CiAKLVZhbHVlIEFyZ3VtZW50TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqQXJndW1lbnRMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlICovKmV4ZWMqLykKIHsKICAgYXNzZXJ0KDApOwotICByZXR1cm4gVmFsdWUoKTsgLy8g
ZHVtbXksIHNlZSBldmFsdWF0ZUxpc3QoKQorICByZXR1cm4gTlVMTDsgLy8gZHVtbXksIHNlZSBl
dmFsdWF0ZUxpc3QoKQogfQogCiAvLyBFQ01BIDExLjIuNApAQCAtNjIwLDcgKzYxMyw3IEBAIExp
c3QgQXJndW1lbnRMaXN0Tm9kZTo6ZXZhbHVhdGVMaXN0KEV4ZWMKICAgTGlzdCBsOwogCiAgIGZv
ciAoQXJndW1lbnRMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0KSB7Ci0gICAgVmFs
dWUgdiA9IG4tPmV4cHItPmV2YWx1YXRlKGV4ZWMpOworICAgIFZhbHVlSW1wICp2ID0gbi0+ZXhw
ci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OTElTVAogICAgIGwuYXBw
ZW5kKHYpOwogICB9CkBAIC02NDQsMTAgKzYzNywxMCBAQCBib29sIEFyZ3VtZW50c05vZGU6OmRl
cmVmKCkKICAgcmV0dXJuIE5vZGU6OmRlcmVmKCk7CiB9CiAKLVZhbHVlIEFyZ3VtZW50c05vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pCitWYWx1ZUltcCAqQXJndW1lbnRzTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKIHsKICAgYXNzZXJ0KDApOwotICByZXR1cm4g
VmFsdWUoKTsgLy8gZHVtbXksIHNlZSBldmFsdWF0ZUxpc3QoKQorICByZXR1cm4gTlVMTDsgLy8g
ZHVtbXksIHNlZSBldmFsdWF0ZUxpc3QoKQogfQogCiAvLyBFQ01BIDExLjIuNApAQCAtNjgxLDkg
KzY3NCw5IEBAIGJvb2wgTmV3RXhwck5vZGU6OmRlcmVmKCkKICAgcmV0dXJuIE5vZGU6OmRlcmVm
KCk7CiB9CiAKLVZhbHVlIE5ld0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitW
YWx1ZUltcCAqTmV3RXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFs
dWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1
YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgIExpc3QgYXJnTGlzdDsK
QEAgLTY5MiwxOCArNjg1LDE2IEBAIFZhbHVlIE5ld0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUgKmUKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICB9CiAKLSAgaWYgKHYudHlwZSgp
ICE9IE9iamVjdFR5cGUpIHsKLSAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhbiBvYmplY3QuIENh
bm5vdCBiZSB1c2VkIHdpdGggbmV3LiIsIHYsIGV4cHIpOworICBpZiAoIXYtPmlzT2JqZWN0KCkp
IHsKKyAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJWYWx1ZUltcCAqJXMg
KHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNl
ZCB3aXRoIG5ldy4iLCB2LCBleHByKTsKICAgfQogCi0gIE9iamVjdCBjb25zdHIgPSBPYmplY3Qo
c3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odi5pbXAoKSkpOwotICBpZiAoIWNvbnN0ci5pbXBsZW1l
bnRzQ29uc3RydWN0KCkpIHsKLSAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhIGNvbnN0cnVjdG9y
LiBDYW5ub3QgYmUgdXNlZCB3aXRoIG5ldy4iLCB2LCBleHByKTsKKyAgT2JqZWN0SW1wICpjb25z
dHIgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2KTsKKyAgaWYgKCFjb25zdHItPmltcGxlbWVu
dHNDb25zdHJ1Y3QoKSkgeworICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
IlZhbHVlSW1wIColcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5vdCBhIGNvbnN0cnVj
dG9yLiBDYW5ub3QgYmUgdXNlZCB3aXRoIG5ldy4iLCB2LCBleHByKTsKICAgfQogCi0gIFZhbHVl
IHJlcyA9IGNvbnN0ci5jb25zdHJ1Y3QoZXhlYyxhcmdMaXN0KTsKLQotICByZXR1cm4gcmVzOwor
ICByZXR1cm4gY29uc3RyLT5jb25zdHJ1Y3QoZXhlYywgYXJnTGlzdCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC03MjcsNyArNzE4LDcgQEAgYm9vbCBGdW5jdGlvbkNhbGxOb2Rl
OjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuMi4zCi1WYWx1ZSBGdW5jdGlvbkNhbGxOb2RlOjpl
dmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqRnVuY3Rpb25DYWxsTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICBSZWZlcmVuY2UgcmVmID0gZXhwci0+ZXZhbHVh
dGVSZWZlcmVuY2UoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCkBAIC03MzUsMTQg
KzcyNiwxNCBAQCBWYWx1ZSBGdW5jdGlvbkNhbGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhCiAgIExp
c3QgYXJnTGlzdCA9IGFyZ3MtPmV2YWx1YXRlTGlzdChleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKIAotICBWYWx1ZSB2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOworICBWYWx1ZUltcCAq
diA9IHJlZi5nZXRWYWx1ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAotICBp
ZiAodi50eXBlKCkgIT0gT2JqZWN0VHlwZSkgewotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvciwgIlZhbHVlICVzIChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9i
amVjdC4iLCB2LCBleHByKTsKKyAgaWYgKCF2LT5pc09iamVjdCgpKSB7CisgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiVmFsdWVJbXAgKiVzIChyZXN1bHQgb2YgZXhwcmVz
c2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2LCBleHByKTsKICAgfQogCi0gIE9iamVjdEltcCAq
ZnVuYyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYuaW1wKCkpOworICBPYmplY3RJbXAgKmZ1
bmMgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2KTsKIAogICBpZiAoIWZ1bmMtPmltcGxlbWVu
dHNDYWxsKCkpIHsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJPYmpl
Y3QgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBkb2VzIG5vdCBhbGxvdyBjYWxscy4iLCB2
LCBleHByKTsKQEAgLTc1MCw3ICs3NDEsNyBAQCBWYWx1ZSBGdW5jdGlvbkNhbGxOb2RlOjpldmFs
dWF0ZShFeGVjU3RhCiAKICAgT2JqZWN0SW1wICp0aGlzT2JqSW1wID0gMDsKICAgVmFsdWVJbXAg
KnRoaXNWYWxJbXAgPSByZWYuYmFzZUlmTXV0YWJsZSgpOwotICBpZiAodGhpc1ZhbEltcCAmJiB0
aGlzVmFsSW1wLT50eXBlKCkgPT0gT2JqZWN0VHlwZSAmJiAhc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
ICo+KHRoaXNWYWxJbXApLT5pbmhlcml0cygmQWN0aXZhdGlvbkltcDo6aW5mbykpCisgIGlmICh0
aGlzVmFsSW1wICYmIHRoaXNWYWxJbXAtPmlzT2JqZWN0KCkgJiYgIXN0YXRpY19jYXN0PE9iamVj
dEltcCAqPih0aGlzVmFsSW1wKS0+aW5oZXJpdHMoJkFjdGl2YXRpb25JbXA6OmluZm8pKQogICAg
IHRoaXNPYmpJbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odGhpc1ZhbEltcCk7CiAKICAg
aWYgKCF0aGlzT2JqSW1wKSB7CkBAIC03NjAsMTAgKzc1MSwxMCBAQCBWYWx1ZSBGdW5jdGlvbkNh
bGxOb2RlOjpldmFsdWF0ZShFeGVjU3RhCiAgICAgLy8gdGhhdCB0aGUgc2VjdGlvbiBkb2VzIG5v
dCBhcHBseSB0byBpbnRlcmFsIGZ1bmN0aW9ucywgYnV0IGZvciBzaW1wbGljaXR5CiAgICAgLy8g
b2YgaW1wbGVtZW50YXRpb24gd2UgdXNlIHRoZSBnbG9iYWwgb2JqZWN0IGFueXdheSBoZXJlLiBU
aGlzIGd1YXJhbnRlZXMKICAgICAvLyB0aGF0IGluIGhvc3Qgb2JqZWN0cyB5b3UgYWx3YXlzIGdl
dCBhIHZhbGlkIG9iamVjdCBmb3IgdGhpcy4KLSAgICB0aGlzT2JqSW1wID0gZXhlYy0+ZHluYW1p
Y0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLmltcCgpOworICAgIHRoaXNPYmpJbXAgPSBl
eGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgIH0KIAotICBPYmpl
Y3QgdGhpc09iaih0aGlzT2JqSW1wKTsKKyAgT2JqZWN0SW1wICp0aGlzT2JqKHRoaXNPYmpJbXAp
OwogICByZXR1cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKIH0KIApAQCAt
Nzg0LDE5ICs3NzUsMTkgQEAgYm9vbCBQb3N0Zml4Tm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01B
IDExLjMKLVZhbHVlIFBvc3RmaXhOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1
ZUltcCAqUG9zdGZpeE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgUmVmZXJl
bmNlIHJlZiA9IGV4cHItPmV2YWx1YXRlUmVmZXJlbmNlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENF
UFRJT05WQUxVRQotICBWYWx1ZSB2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOworICBWYWx1ZUltcCAq
diA9IHJlZi5nZXRWYWx1ZShleGVjKTsKIAogICBib29sIGtub3duVG9CZUludGVnZXI7Ci0gIGRv
dWJsZSBuID0gdi50b051bWJlcihleGVjLCBrbm93blRvQmVJbnRlZ2VyKTsKKyAgZG91YmxlIG4g
PSB2LT50b051bWJlcihleGVjLCBrbm93blRvQmVJbnRlZ2VyKTsKIAogICBkb3VibGUgbmV3VmFs
dWUgPSAob3BlciA9PSBPcFBsdXNQbHVzKSA/IG4gKyAxIDogbiAtIDE7Ci0gIHJlZi5wdXRWYWx1
ZShleGVjLCBWYWx1ZShuZXdWYWx1ZSwga25vd25Ub0JlSW50ZWdlcikpOworICByZWYucHV0VmFs
dWUoZXhlYywganNOdW1iZXIobmV3VmFsdWUsIGtub3duVG9CZUludGVnZXIpKTsKIAotICByZXR1
cm4gVmFsdWUobiwga25vd25Ub0JlSW50ZWdlcik7CisgIHJldHVybiBqc051bWJlcihuLCBrbm93
blRvQmVJbnRlZ2VyKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERl
bGV0ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgxNiwxMSAr
ODA3LDExIEBAIGJvb2wgRGVsZXRlTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQuMQot
VmFsdWUgRGVsZXRlTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkRl
bGV0ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgUmVmZXJlbmNlIHJlZiA9
IGV4cHItPmV2YWx1YXRlUmVmZXJlbmNlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICByZXR1cm4gVmFsdWUocmVmLmRlbGV0ZVZhbHVlKGV4ZWMpKTsKKyAgcmV0dXJuIGpzQm9v
bGVhbihyZWYuZGVsZXRlVmFsdWUoZXhlYykpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gVm9pZE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtODQwLDkgKzgzMSw5IEBAIGJvb2wgVm9pZE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNN
QSAxMS40LjIKLVZhbHVlIFZvaWROb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1
ZUltcCAqVm9pZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgZHVt
bXkxID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBL
SlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTg2NSwx
NiArODU2LDE2IEBAIGJvb2wgVHlwZU9mTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQu
MwotVmFsdWUgVHlwZU9mTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAg
KlR5cGVPZk5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgY29uc3QgY2hhciAq
cyA9IDBMOwogICBSZWZlcmVuY2UgcmVmID0gZXhwci0+ZXZhbHVhdGVSZWZlcmVuY2UoZXhlYyk7
CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgIFZhbHVlSW1wICpiID0gcmVmLmJhc2VJZk11
dGFibGUoKTsKLSAgaWYgKGIgJiYgYi0+ZGlzcGF0Y2hUeXBlKCkgPT0gTnVsbFR5cGUpCi0gICAg
cmV0dXJuIFZhbHVlKCJ1bmRlZmluZWQiKTsKLSAgVmFsdWUgdiA9IHJlZi5nZXRWYWx1ZShleGVj
KTsKLSAgc3dpdGNoICh2LnR5cGUoKSkKKyAgaWYgKGIgJiYgYi0+aXNOdWxsKCkpCisgICAgcmV0
dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsKKyAgVmFsdWVJbXAgKnYgPSByZWYuZ2V0VmFsdWUo
ZXhlYyk7CisgIHN3aXRjaCAodi0+dHlwZSgpKQogICAgIHsKICAgICBjYXNlIFVuZGVmaW5lZFR5
cGU6CiAgICAgICBzID0gInVuZGVmaW5lZCI7CkBAIC04OTIsMTQgKzg4MywxNCBAQCBWYWx1ZSBU
eXBlT2ZOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4CiAgICAgICBzID0gInN0cmluZyI7CiAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgaWYgKHYudHlwZSgpID09IE9iamVjdFR5
cGUgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odi5pbXAoKSktPmltcGxlbWVudHNDYWxsKCkp
CisgICAgICBpZiAodi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2KS0+
aW1wbGVtZW50c0NhbGwoKSkKIAlzID0gImZ1bmN0aW9uIjsKICAgICAgIGVsc2UKIAlzID0gIm9i
amVjdCI7CiAgICAgICBicmVhazsKICAgICB9CiAKLSAgcmV0dXJuIFZhbHVlKHMpOworICByZXR1
cm4ganNTdHJpbmcocyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
cmVmaXhOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MTksMTcg
KzkxMCwxNyBAQCBib29sIFByZWZpeE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS40LjQg
YW5kIDExLjQuNQotVmFsdWUgUHJlZml4Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQor
VmFsdWVJbXAgKlByZWZpeE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgUmVm
ZXJlbmNlIHJlZiA9IGV4cHItPmV2YWx1YXRlUmVmZXJlbmNlKGV4ZWMpOwogICBLSlNfQ0hFQ0tF
WENFUFRJT05WQUxVRQotICBWYWx1ZSB2ID0gcmVmLmdldFZhbHVlKGV4ZWMpOworICBWYWx1ZUlt
cCAqdiA9IHJlZi5nZXRWYWx1ZShleGVjKTsKIAogICBib29sIGtub3duVG9CZUludGVnZXI7Ci0g
IGRvdWJsZSBuID0gdi50b051bWJlcihleGVjLCBrbm93blRvQmVJbnRlZ2VyKTsKKyAgZG91Ymxl
IG4gPSB2LT50b051bWJlcihleGVjLCBrbm93blRvQmVJbnRlZ2VyKTsKIAogICBkb3VibGUgbmV3
VmFsdWUgPSAob3BlciA9PSBPcFBsdXNQbHVzKSA/IG4gKyAxIDogbiAtIDE7Ci0gIFZhbHVlIG4y
KG5ld1ZhbHVlLCBrbm93blRvQmVJbnRlZ2VyKTsKKyAgVmFsdWVJbXAgKm4yID0ganNOdW1iZXIo
bmV3VmFsdWUsIGtub3duVG9CZUludGVnZXIpOwogCiAgIHJlZi5wdXRWYWx1ZShleGVjLCBuMik7
CiAKQEAgLTk1MywxMiArOTQ0LDEyIEBAIGJvb2wgVW5hcnlQbHVzTm9kZTo6ZGVyZWYoKQogfQog
CiAvLyBFQ01BIDExLjQuNgotVmFsdWUgVW5hcnlQbHVzTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKQorVmFsdWVJbXAgKlVuYXJ5UGx1c05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9
IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gIHJl
dHVybiBWYWx1ZSh2LnRvTnVtYmVyKGV4ZWMpKTsgLyogVE9ETzogb3B0aW1pemUgKi8KKyAgcmV0
dXJuIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpKTsgLyogVE9ETzogb3B0aW1pemUgKi8KIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5lZ2F0ZU5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3OCwxNCArOTY5LDE0IEBAIGJvb2wgTmVn
YXRlTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQuNwotVmFsdWUgTmVnYXRlTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKk5lZ2F0ZU5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwor
ICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJ
T05WQUxVRQogCiAgIGJvb2wga25vd25Ub0JlSW50ZWdlcjsKLSAgZG91YmxlIG4gPSB2LnRvTnVt
YmVyKGV4ZWMsIGtub3duVG9CZUludGVnZXIpOwotICByZXR1cm4gVmFsdWUoLW4sIGtub3duVG9C
ZUludGVnZXIgJiYgbiAhPSAwKTsKKyAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjLCBrbm93
blRvQmVJbnRlZ2VyKTsKKyAgcmV0dXJuIGpzTnVtYmVyKC1uLCBrbm93blRvQmVJbnRlZ2VyICYm
IG4gIT0gMCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaXR3aXNl
Tm90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDA1LDExICs5OTYs
MTEgQEAgYm9vbCBCaXR3aXNlTm90Tm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQuOAot
VmFsdWUgQml0d2lzZU5vdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1w
ICpCaXR3aXNlTm90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2
ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVhdGUo
ZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIHJldHVybiBWYWx1ZSh+di50b0lu
dDMyKGV4ZWMpKTsKKyAgcmV0dXJuIGpzTnVtYmVyKH52LT50b0ludDMyKGV4ZWMpKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxOb3ROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMjksMTEgKzEwMjAsMTEgQEAgYm9vbCBMb2dp
Y2FsTm90Tm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjQuOQotVmFsdWUgTG9naWNhbE5v
dE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpMb2dpY2FsTm90Tm9k
ZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2ID0gZXhwci0+ZXZhbHVh
dGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19D
SEVDS0VYQ0VQVElPTlZBTFVFCi0gIHJldHVybiBWYWx1ZSghdi50b0Jvb2xlYW4oZXhlYykpOwor
ICByZXR1cm4ganNCb29sZWFuKCF2LT50b0Jvb2xlYW4oZXhlYykpOwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTXVsdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMTA1NywxMiArMTA0OCwxMiBAQCBib29sIE11bHROb2RlOjpkZXJl
ZigpCiB9CiAKIC8vIEVDTUEgMTEuNQotVmFsdWUgTXVsdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYykKK1ZhbHVlSW1wICpNdWx0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQog
ewotICBWYWx1ZSB2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYxID0g
dGVybTEtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCi0gIFZh
bHVlIHYyID0gdGVybTItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSB0ZXJtMi0+
ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgcmV0dXJuIG11
bHQoZXhlYywgdjEsIHYyLCBvcGVyKTsKQEAgLTEwODksMTIgKzEwODAsMTIgQEAgYm9vbCBBZGRO
b2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTEuNgotVmFsdWUgQWRkTm9kZTo6ZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKQorVmFsdWVJbXAgKkFkZE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKIHsKLSAgVmFsdWUgdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1w
ICp2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
IAotICBWYWx1ZSB2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYyID0g
dGVybTItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogCiAgIHJl
dHVybiBhZGQoZXhlYywgdjEsIHYyLCBvcGVyKTsKQEAgLTExMjEsMjIgKzExMTIsMjIgQEAgYm9v
bCBTaGlmdE5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS43Ci1WYWx1ZSBTaGlmdE5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpTaGlmdE5vZGU6OmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdjEgPSB0ZXJtMS0+ZXZhbHVhdGUoZXhlYyk7
CisgIFZhbHVlSW1wICp2MSA9IHRlcm0xLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKLSAgVmFsdWUgdjIgPSB0ZXJtMi0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVl
SW1wICp2MiA9IHRlcm0yLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgdW5zaWduZWQgaW50IGkyID0gdjIudG9VSW50MzIoZXhlYyk7CisgIHVuc2lnbmVkIGlu
dCBpMiA9IHYyLT50b1VJbnQzMihleGVjKTsKICAgaTIgJj0gMHgxZjsKIAogICBzd2l0Y2ggKG9w
ZXIpIHsKICAgY2FzZSBPcExTaGlmdDoKLSAgICByZXR1cm4gVmFsdWUodjEudG9JbnQzMihleGVj
KSA8PCBpMik7CisgICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpIDw8IGkyKTsK
ICAgY2FzZSBPcFJTaGlmdDoKLSAgICByZXR1cm4gVmFsdWUodjEudG9JbnQzMihleGVjKSA+PiBp
Mik7CisgICAgcmV0dXJuIGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpID4+IGkyKTsKICAgY2Fz
ZSBPcFVSU2hpZnQ6Ci0gICAgcmV0dXJuIFZhbHVlKHYxLnRvVUludDMyKGV4ZWMpID4+IGkyKTsK
KyAgICByZXR1cm4ganNOdW1iZXIodjEtPnRvVUludDMyKGV4ZWMpID4+IGkyKTsKICAgZGVmYXVs
dDoKICAgICBhc3NlcnQoISJTaGlmdE5vZGU6IHVuaGFuZGxlZCBzd2l0Y2ggY2FzZSIpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTExNjQsMTEgKzExNTUsMTEgQEAgYm9vbCBSZWxhdGlv
bmFsTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjgKLVZhbHVlIFJlbGF0aW9uYWxOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqUmVsYXRpb25hbE5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdjEgPSBleHByMS0+ZXZhbHVhdGUo
ZXhlYyk7CisgIFZhbHVlSW1wICp2MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKLSAgVmFsdWUgdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7Cisg
IFZhbHVlSW1wICp2MiA9IGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKIAogICBib29sIGI7CkBAIC0xMTg2LDMwICsxMTc3LDMwIEBAIFZhbHVlIFJlbGF0
aW9uYWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUKICAgICAgIGIgPSAob3BlciA9PSBPcEdyZWF0
ZXIpID8gKHIgPT0gMSkgOiAociA9PSAwKTsKICAgfSBlbHNlIGlmIChvcGVyID09IE9wSW4pIHsK
ICAgICAgIC8vIElzIGFsbCBvZiB0aGlzIE9LIGZvciBob3N0IG9iamVjdHM/Ci0gICAgICBpZiAo
djIudHlwZSgpICE9IE9iamVjdFR5cGUpCisgICAgICBpZiAoIXYyLT5pc09iamVjdCgpKQogICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsICBUeXBlRXJyb3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJWYWx1ZSAlcyAocmVzdWx0IG9mIGV4cHJlc3Npb24gJXMpIGlzIG5v
dCBhbiBvYmplY3QuIENhbm5vdCBiZSB1c2VkIHdpdGggSU4gZXhwcmVzc2lvbi4iLCB2MiwgZXhw
cjIpOwotICAgICAgT2JqZWN0IG8yKHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYyLmltcCgpKSk7
Ci0gICAgICBiID0gbzIuaGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcih2MS50b1N0cmluZyhl
eGVjKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmFsdWVJbXAgKiVzIChyZXN1
bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IGFuIG9iamVjdC4gQ2Fubm90IGJlIHVzZWQgd2l0
aCBJTiBleHByZXNzaW9uLiIsIHYyLCBleHByMik7CisgICAgICBPYmplY3RJbXAgKm8yKHN0YXRp
Y19jYXN0PE9iamVjdEltcCo+KHYyKSk7CisgICAgICBiID0gbzItPmhhc1Byb3BlcnR5KGV4ZWMs
IElkZW50aWZpZXIodjEtPnRvU3RyaW5nKGV4ZWMpKSk7CiAgIH0gZWxzZSB7Ci0gICAgaWYgKHYy
LnR5cGUoKSAhPSBPYmplY3RUeXBlKQorICAgIGlmICghdjItPmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsICBUeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2Jq
ZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIGluc3RhbmNlb2Ygb3BlcmF0b3IuIiwgdjIsIGV4cHIy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZUltcCAqJXMgKHJlc3VsdCBvZiBl
eHByZXNzaW9uICVzKSBpcyBub3QgYW4gb2JqZWN0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIGluc3Rh
bmNlb2Ygb3BlcmF0b3IuIiwgdjIsIGV4cHIyKTsKIAotICAgIE9iamVjdCBvMihzdGF0aWNfY2Fz
dDxPYmplY3RJbXAqPih2Mi5pbXAoKSkpOwotICAgIGlmICghbzIuaW1wbGVtZW50c0hhc0luc3Rh
bmNlKCkpIHsKLSAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgb25seSBzb21lIHR5cGVz
IG9mIG9iamVjdHMgImltbGVtZW50IiB0aGUgW1tIYXNJbnN0YW5jZV1dIHByb3BlcnR5LgorICAg
IE9iamVjdEltcCAqbzIoc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4odjIpKTsKKyAgICBpZiAoIW8y
LT5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSkgeworICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBz
cGVjLCBvbmx5IHNvbWUgdHlwZXMgb2Ygb2JqZWN0cyAiaW1wbGVtZW50IiB0aGUgW1tIYXNJbnN0
YW5jZV1dIHByb3BlcnR5LgogICAgICAgLy8gQnV0IHdlIGFyZSBzdXBwb3NlZCB0byB0aHJvdyBh
biBleGNlcHRpb24gd2hlcmUgdGhlIG9iamVjdCBkb2VzIG5vdCAiaGF2ZSIgdGhlIFtbSGFzSW5z
dGFuY2VdXQogICAgICAgLy8gcHJvcGVydHkuIEl0IHNlZW1zIHRoYXQgYWxsIG9iamVjdCBoYXZl
IHRoZSBwcm9wZXJ0eSwgYnV0IG5vdCBhbGwgaW1wbGVtZW50IGl0LCBzbyBpbiB0aGlzCiAgICAg
ICAvLyBjYXNlIHdlIHJldHVybiBmYWxzZSAoY29uc2lzdGVudCB3aXRoIG1vemlsbGEpCi0gICAg
ICByZXR1cm4gVmFsdWUoZmFsc2UpOworICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CiAg
ICAgICAvLyAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwKICAgICAgIC8v
CQkJIk9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIFtbSGFzSW5zdGFuY2VdXSBtZXRob2Qu
IiApOwogICAgIH0KLSAgICByZXR1cm4gbzIuaGFzSW5zdGFuY2UoZXhlYywgdjEpOworICAgIHJl
dHVybiBqc0Jvb2xlYW4obzItPmhhc0luc3RhbmNlKGV4ZWMsIHYxKSk7CiAgIH0KIAotICByZXR1
cm4gVmFsdWUoYik7CisgIHJldHVybiBqc0Jvb2xlYW4oYik7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBFcXVhbE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMjMzLDExICsxMjI0LDExIEBAIGJvb2wgRXF1YWxOb2RlOjpkZXJlZigp
CiB9CiAKIC8vIEVDTUEgMTEuOQotVmFsdWUgRXF1YWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpCitWYWx1ZUltcCAqRXF1YWxOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7
Ci0gIFZhbHVlIHYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjEgPSBl
eHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCi0gIFZhbHVl
IHYyID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSBleHByMi0+ZXZh
bHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgYm9vbCByZXN1bHQ7
CkBAIC0xMjUwLDcgKzEyNDEsNyBAQCBWYWx1ZSBFcXVhbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlCiAgICAgYm9vbCBlcSA9IHN0cmljdEVxdWFsKGV4ZWMsdjEsIHYyKTsKICAgICByZXN1
bHQgPSBvcGVyID09IE9wU3RyRXEgPyBlcSA6ICFlcTsKICAgfQotICByZXR1cm4gVmFsdWUocmVz
dWx0KTsKKyAgcmV0dXJuIGpzQm9vbGVhbihyZXN1bHQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gQml0T3Blck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMTI3NCwxNCArMTI2NSwxNCBAQCBib29sIEJpdE9wZXJOb2RlOjpkZXJlZigp
CiB9CiAKIC8vIEVDTUEgMTEuMTAKLVZhbHVlIEJpdE9wZXJOb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUgKmV4ZWMpCitWYWx1ZUltcCAqQml0T3Blck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKLSAgVmFsdWUgdjEgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2
MSA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAg
VmFsdWUgdjIgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2MiA9IGV4cHIy
LT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgaW50IGkxID0g
djEudG9JbnQzMihleGVjKTsKLSAgaW50IGkyID0gdjIudG9JbnQzMihleGVjKTsKKyAgaW50IGkx
ID0gdjEtPnRvSW50MzIoZXhlYyk7CisgIGludCBpMiA9IHYyLT50b0ludDMyKGV4ZWMpOwogICBp
bnQgcmVzdWx0OwogICBpZiAob3BlciA9PSBPcEJpdEFuZCkKICAgICByZXN1bHQgPSBpMSAmIGky
OwpAQCAtMTI5MCw3ICsxMjgxLDcgQEAgVmFsdWUgQml0T3Blck5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZQogICBlbHNlCiAgICAgcmVzdWx0ID0gaTEgfCBpMjsKIAotICByZXR1cm4gVmFsdWUo
cmVzdWx0KTsKKyAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnlMb2dpY2FsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMzE0LDE1ICsxMzA1LDE1IEBAIGJvb2wgQmluYXJ5TG9naWNhbE5vZGU6
OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4xMQotVmFsdWUgQmluYXJ5TG9naWNhbE5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1wICpCaW5hcnlMb2dpY2FsTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZSB2MSA9IGV4cHIxLT5ldmFsdWF0ZShl
eGVjKTsKKyAgVmFsdWVJbXAgKnYxID0gZXhwcjEtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQotICBib29sIGIxID0gdjEudG9Cb29sZWFuKGV4ZWMpOworICBib29s
IGIxID0gdjEtPnRvQm9vbGVhbihleGVjKTsKICAgaWYgKCghYjEgJiYgb3BlciA9PSBPcEFuZCkg
fHwgKGIxICYmIG9wZXIgPT0gT3BPcikpCiAgICAgcmV0dXJuIHYxOwogCi0gIFZhbHVlIHYyID0g
ZXhwcjItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdjIgPSBleHByMi0+ZXZhbHVhdGUo
ZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAKICAgcmV0dXJuIHYyOwpAQCAtMTM1
MywxMSArMTM0NCwxMSBAQCBib29sIENvbmRpdGlvbmFsTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBF
Q01BIDExLjEyCi1WYWx1ZSBDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhl
YykKK1ZhbHVlSW1wICpDb25kaXRpb25hbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKLSAgVmFsdWUgdiA9IGxvZ2ljYWwtPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9
IGxvZ2ljYWwtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotICBi
b29sIGIgPSB2LnRvQm9vbGVhbihleGVjKTsKKyAgYm9vbCBiID0gdi0+dG9Cb29sZWFuKGV4ZWMp
OwogCiAgIGlmIChiKQogICAgIHYgPSBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CkBAIC0xMzg5LDE3
ICsxMzgwLDE3IEBAIGJvb2wgQXNzaWduTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDExLjEz
Ci1WYWx1ZSBBc3NpZ25Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAq
QXNzaWduTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogewogICBSZWZlcmVuY2UgbCA9
IGxlZnQtPmV2YWx1YXRlUmVmZXJlbmNlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxV
RQotICBWYWx1ZSBlLCB2OworICBWYWx1ZUltcCAqdjsKICAgaWYgKG9wZXIgPT0gT3BFcXVhbCkg
ewogICAgIHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05W
QUxVRQogICB9IGVsc2UgewotICAgIFZhbHVlIHYxID0gbC5nZXRWYWx1ZShleGVjKTsKLSAgICBW
YWx1ZSB2MiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICAgIFZhbHVlSW1wICp2MSA9IGwuZ2V0
VmFsdWUoZXhlYyk7CisgICAgVmFsdWVJbXAgKnYyID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICBpbnQgaTE7CiAgICAgaW50IGkyOwpAQCAt
MTQxOCw0MSArMTQwOSw0MSBAQCBWYWx1ZSBBc3NpZ25Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4CiAgICAgICB2ID0gYWRkKGV4ZWMsIHYxLCB2MiwgJy0nKTsKICAgICAgIGJyZWFrOwogICAg
IGNhc2UgT3BMU2hpZnQ6Ci0gICAgICBpMSA9IHYxLnRvSW50MzIoZXhlYyk7Ci0gICAgICBpMiA9
IHYyLnRvSW50MzIoZXhlYyk7Ci0gICAgICB2ID0gVmFsdWUoaTEgPDwgaTIpOworICAgICAgaTEg
PSB2MS0+dG9JbnQzMihleGVjKTsKKyAgICAgIGkyID0gdjItPnRvSW50MzIoZXhlYyk7CisgICAg
ICB2ID0ganNOdW1iZXIoaTEgPDwgaTIpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcFJTaGlm
dDoKLSAgICAgIGkxID0gdjEudG9JbnQzMihleGVjKTsKLSAgICAgIGkyID0gdjIudG9JbnQzMihl
eGVjKTsKLSAgICAgIHYgPSBWYWx1ZShpMSA+PiBpMik7CisgICAgICBpMSA9IHYxLT50b0ludDMy
KGV4ZWMpOworICAgICAgaTIgPSB2Mi0+dG9JbnQzMihleGVjKTsKKyAgICAgIHYgPSBqc051bWJl
cihpMSA+PiBpMik7CiAgICAgICBicmVhazsKICAgICBjYXNlIE9wVVJTaGlmdDoKLSAgICAgIHVp
ID0gdjEudG9VSW50MzIoZXhlYyk7Ci0gICAgICBpMiA9IHYyLnRvSW50MzIoZXhlYyk7Ci0gICAg
ICB2ID0gVmFsdWUodWkgPj4gaTIpOworICAgICAgdWkgPSB2MS0+dG9VSW50MzIoZXhlYyk7Cisg
ICAgICBpMiA9IHYyLT50b0ludDMyKGV4ZWMpOworICAgICAgdiA9IGpzTnVtYmVyKHVpID4+IGky
KTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BBbmRFcToKLSAgICAgIGkxID0gdjEudG9JbnQz
MihleGVjKTsKLSAgICAgIGkyID0gdjIudG9JbnQzMihleGVjKTsKLSAgICAgIHYgPSBWYWx1ZShp
MSAmIGkyKTsKKyAgICAgIGkxID0gdjEtPnRvSW50MzIoZXhlYyk7CisgICAgICBpMiA9IHYyLT50
b0ludDMyKGV4ZWMpOworICAgICAgdiA9IGpzTnVtYmVyKGkxICYgaTIpOwogICAgICAgYnJlYWs7
CiAgICAgY2FzZSBPcFhPckVxOgotICAgICAgaTEgPSB2MS50b0ludDMyKGV4ZWMpOwotICAgICAg
aTIgPSB2Mi50b0ludDMyKGV4ZWMpOwotICAgICAgdiA9IFZhbHVlKGkxIF4gaTIpOworICAgICAg
aTEgPSB2MS0+dG9JbnQzMihleGVjKTsKKyAgICAgIGkyID0gdjItPnRvSW50MzIoZXhlYyk7Cisg
ICAgICB2ID0ganNOdW1iZXIoaTEgXiBpMik7CiAgICAgICBicmVhazsKICAgICBjYXNlIE9wT3JF
cToKLSAgICAgIGkxID0gdjEudG9JbnQzMihleGVjKTsKLSAgICAgIGkyID0gdjIudG9JbnQzMihl
eGVjKTsKLSAgICAgIHYgPSBWYWx1ZShpMSB8IGkyKTsKKyAgICAgIGkxID0gdjEtPnRvSW50MzIo
ZXhlYyk7CisgICAgICBpMiA9IHYyLT50b0ludDMyKGV4ZWMpOworICAgICAgdiA9IGpzTnVtYmVy
KGkxIHwgaTIpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcE1vZEVxOiB7CiAgICAgICBib29s
IGQxS25vd25Ub0JlSW50ZWdlcjsKLSAgICAgIGRvdWJsZSBkMSA9IHYxLnRvTnVtYmVyKGV4ZWMs
IGQxS25vd25Ub0JlSW50ZWdlcik7CisgICAgICBkb3VibGUgZDEgPSB2MS0+dG9OdW1iZXIoZXhl
YywgZDFLbm93blRvQmVJbnRlZ2VyKTsKICAgICAgIGJvb2wgZDJLbm93blRvQmVJbnRlZ2VyOwot
ICAgICAgZG91YmxlIGQyID0gdjIudG9OdW1iZXIoZXhlYywgZDJLbm93blRvQmVJbnRlZ2VyKTsK
LSAgICAgIHYgPSBWYWx1ZShmbW9kKGQxLCBkMiksIGQxS25vd25Ub0JlSW50ZWdlciAmJiBkMktu
b3duVG9CZUludGVnZXIgJiYgZDIgIT0gMCk7CisgICAgICBkb3VibGUgZDIgPSB2Mi0+dG9OdW1i
ZXIoZXhlYywgZDJLbm93blRvQmVJbnRlZ2VyKTsKKyAgICAgIHYgPSBqc051bWJlcihmbW9kKGQx
LCBkMiksIGQxS25vd25Ub0JlSW50ZWdlciAmJiBkMktub3duVG9CZUludGVnZXIgJiYgZDIgIT0g
MCk7CiAgICAgfQogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTE0ODcsMTEgKzE0Nzgs
MTEgQEAgYm9vbCBDb21tYU5vZGU6OmRlcmVmKCkKIH0KIAogLy8gRUNNQSAxMS4xNAotVmFsdWUg
Q29tbWFOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqQ29tbWFOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIGR1bW15ID0gZXhwcjEtPmV2
YWx1YXRlKGV4ZWMpOworICBleHByMS0+ZXZhbHVhdGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQ
VElPTlZBTFVFCi0gIFZhbHVlIHYgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1w
ICp2ID0gZXhwcjItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
CiAgIHJldHVybiB2OwpAQCAtMTU0MCw3ICsxNTMxLDcgQEAgQ29tcGxldGlvbiBTdGF0TGlzdE5v
ZGU6OmV4ZWN1dGUoRXhlY1N0YQogICBDb21wbGV0aW9uIGMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUo
ZXhlYyk7CiAgIEtKU19BQk9SVFBPSU5UCiAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgIFZhbHVlIGV4ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgVmFsdWVJbXAgKmV4ID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4g
Q29tcGxldGlvbihUaHJvdywgZXgpOwogICB9CkBAIC0xNTQ4LDcgKzE1MzksNyBAQCBDb21wbGV0
aW9uIFN0YXRMaXN0Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhCiAgIGlmIChjLmNvbXBsVHlwZSgpICE9
IE5vcm1hbCkKICAgICByZXR1cm4gYzsKICAgCi0gIFZhbHVlIHYgPSBjLnZhbHVlKCk7CisgIFZh
bHVlSW1wICp2ID0gYy52YWx1ZSgpOwogICAKICAgZm9yIChTdGF0TGlzdE5vZGUgKm4gPSBsaXN0
OyBuOyBuID0gbi0+bGlzdCkgewogICAgIENvbXBsZXRpb24gYzIgPSBuLT5zdGF0ZW1lbnQtPmV4
ZWN1dGUoZXhlYyk7CkBAIC0xNTU3LDcgKzE1NDgsNyBAQCBDb21wbGV0aW9uIFN0YXRMaXN0Tm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhCiAgICAgICByZXR1cm4gYzI7CiAKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgIFZhbHVlIGV4ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAg
ICBWYWx1ZUltcCAqZXggPSBleGVjLT5leGNlcHRpb24oKTsKICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgZXgpOwogICAgIH0KQEAg
LTE1OTMsNyArMTU4NCw3IEBAIGJvb2wgQXNzaWduRXhwck5vZGU6OmRlcmVmKCkKIH0KIAogLy8g
RUNNQSAxMi4yCi1WYWx1ZSBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQorVmFsdWVJbXAgKkFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7
CiAgIHJldHVybiBleHByLT5ldmFsdWF0ZShleGVjKTsKIH0KQEAgLTE2MjEsMTkgKzE2MTIsMTkg
QEAgYm9vbCBWYXJEZWNsTm9kZTo6ZGVyZWYoKQogfQogCiAvLyBFQ01BIDEyLjIKLVZhbHVlIFZh
ckRlY2xOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqVmFyRGVjbE5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgT2JqZWN0IHZhcmlhYmxlID0gZXhl
Yy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpOworICBPYmplY3RJbXAgKnZhcmlh
YmxlID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9iamVjdCgpOwogCi0gIFZhbHVl
IHZhbDsKKyAgVmFsdWVJbXAgKnZhbDsKICAgaWYgKGluaXQpIHsKICAgICAgIHZhbCA9IGluaXQt
PmV2YWx1YXRlKGV4ZWMpOwogICAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgfSBlbHNl
IHsKICAgICAgIC8vIGFscmVhZHkgZGVjbGFyZWQ/IC0gY2hlY2sgd2l0aCBnZXREaXJlY3Qgc28g
eW91IGNhbiBvdmVycmlkZQogICAgICAgLy8gYnVpbHQtaW4gcHJvcGVydGllcyBvZiB0aGUgZ2xv
YmFsIG9iamVjdCB3aXRoIHZhciBkZWNsYXJhdGlvbnMuCi0gICAgICBpZiAoIHZhcmlhYmxlLmlt
cCgpLT5nZXREaXJlY3QoaWRlbnQpICkgCi0gICAgICAgICAgcmV0dXJuIFZhbHVlKCk7CisgICAg
ICBpZiAodmFyaWFibGUtPmdldERpcmVjdChpZGVudCkpIAorICAgICAgICAgIHJldHVybiBOVUxM
OwogICAgICAgdmFsID0gVW5kZWZpbmVkKCk7CiAgIH0KIApAQCAtMTY0NywyNCArMTYzOCwyNCBA
QCBWYWx1ZSBWYXJEZWNsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICplCiAgICAgZmxhZ3MgfD0g
RG9udERlbGV0ZTsKICAgaWYgKHZhclR5cGUgPT0gVmFyRGVjbE5vZGU6OkNvbnN0YW50KQogICAg
IGZsYWdzIHw9IFJlYWRPbmx5OwotICB2YXJpYWJsZS5wdXQoZXhlYywgaWRlbnQsIHZhbCwgZmxh
Z3MpOworICB2YXJpYWJsZS0+cHV0KGV4ZWMsIGlkZW50LCB2YWwsIGZsYWdzKTsKIAotICByZXR1
cm4gaWRlbnQudXN0cmluZygpOworICByZXR1cm4ganNTdHJpbmcoaWRlbnQudXN0cmluZygpKTsK
IH0KIAogdm9pZCBWYXJEZWNsTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykK
IHsKLSAgT2JqZWN0IHZhcmlhYmxlID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52YXJpYWJsZU9i
amVjdCgpOworICBPYmplY3RJbXAgKnZhcmlhYmxlID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT52
YXJpYWJsZU9iamVjdCgpOwogCiAgIC8vIElmIGEgdmFyaWFibGUgYnkgdGhpcyBuYW1lIGFscmVh
ZHkgZXhpc3RzLCBkb24ndCBjbG9iYmVyIGl0IC0KICAgLy8gaXQgbWlnaHQgYmUgYSBmdW5jdGlv
biBwYXJhbWV0ZXIKLSAgaWYgKCF2YXJpYWJsZS5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsK
KyAgaWYgKCF2YXJpYWJsZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7CiAgICAgaW50IGZs
YWdzID0gSW50ZXJuYWw7CiAgICAgaWYgKGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+Y29kZVR5cGUo
KSAhPSBFdmFsQ29kZSkKICAgICAgIGZsYWdzIHw9IERvbnREZWxldGU7CiAgICAgaWYgKHZhclR5
cGUgPT0gVmFyRGVjbE5vZGU6OkNvbnN0YW50KQogICAgICAgZmxhZ3MgfD0gUmVhZE9ubHk7Ci0g
ICAgdmFyaWFibGUucHV0KGV4ZWMsIGlkZW50LCBVbmRlZmluZWQoKSwgZmxhZ3MpOworICAgIHZh
cmlhYmxlLT5wdXQoZXhlYywgaWRlbnQsIFVuZGVmaW5lZCgpLCBmbGFncyk7CiAgIH0KIH0KIApA
QCAtMTY5NCw3ICsxNjg1LDcgQEAgYm9vbCBWYXJEZWNsTGlzdE5vZGU6OmRlcmVmKCkKIAogCiAv
LyBFQ01BIDEyLjIKLVZhbHVlIFZhckRlY2xMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKQorVmFsdWVJbXAgKlZhckRlY2xMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KQogewogICBmb3IgKFZhckRlY2xMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0KSB7
CiAgICAgbi0+dmFyLT5ldmFsdWF0ZShleGVjKTsKQEAgLTE4MTQsNyArMTgwNSw3IEBAIENvbXBs
ZXRpb24gRXhwclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXgKIHsKICAgS0pTX0JSRUFLUE9JTlQ7
CiAKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4
cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KIAogICByZXR1cm4gQ29t
cGxldGlvbihOb3JtYWwsIHYpOwpAQCAtMTg0OSw5ICsxODQwLDkgQEAgQ29tcGxldGlvbiBJZk5v
ZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleAogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICBWYWx1
ZSB2ID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gZXhwci0+ZXZhbHVh
dGUoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgotICBib29sIGIgPSB2LnRvQm9vbGVhbihl
eGVjKTsKKyAgYm9vbCBiID0gdi0+dG9Cb29sZWFuKGV4ZWMpOwogCiAgIC8vIGlmIC4uLiB0aGVu
CiAgIGlmIChiKQpAQCAtMTg5OCw5ICsxODg5LDggQEAgQ29tcGxldGlvbiBEb1doaWxlTm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdAogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICBWYWx1ZSBiZSwgYnY7
CisgIFZhbHVlSW1wICpidjsKICAgQ29tcGxldGlvbiBjOwotICBWYWx1ZSB2YWx1ZTsKIAogICBk
byB7CiAgICAgLy8gYmFpbCBvdXQgb24gZXJyb3IKQEAgLTE5MTEsMTUgKzE5MDEsMTUgQEAgQ29t
cGxldGlvbiBEb1doaWxlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdAogICAgIGV4ZWMtPmNvbnRleHQo
KS5pbXAoKS0+c2VlbkxhYmVscygpLT5wb3BJdGVyYXRpb24oKTsKICAgICBpZiAoISgoYy5jb21w
bFR5cGUoKSA9PSBDb250aW51ZSkgJiYgbHMuY29udGFpbnMoYy50YXJnZXQoKSkpKSB7CiAgICAg
ICBpZiAoKGMuY29tcGxUeXBlKCkgPT0gQnJlYWspICYmIGxzLmNvbnRhaW5zKGMudGFyZ2V0KCkp
KQotICAgICAgICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIENvbXBsZXRpb24oTm9ybWFsLCBOVUxMKTsKICAgICAgIGlmIChjLmNvbXBsVHlwZSgpICE9
IE5vcm1hbCkKICAgICAgICAgcmV0dXJuIGM7CiAgICAgfQogICAgIGJ2ID0gZXhwci0+ZXZhbHVh
dGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OCi0gIH0gd2hpbGUgKGJ2LnRvQm9vbGVh
bihleGVjKSk7CisgIH0gd2hpbGUgKGJ2LT50b0Jvb2xlYW4oZXhlYykpOwogCi0gIHJldHVybiBD
b21wbGV0aW9uKE5vcm1hbCwgdmFsdWUpOworICByZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIE5V
TEwpOwogfQogCiB2b2lkIERvV2hpbGVOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpl
eGVjKQpAQCAtMTk1MiwxNSArMTk0MiwxNSBAQCBDb21wbGV0aW9uIFdoaWxlTm9kZTo6ZXhlY3V0
ZShFeGVjU3RhdGUgCiB7CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIGJlLCBidjsKKyAg
VmFsdWVJbXAgKmJ2OwogICBDb21wbGV0aW9uIGM7CiAgIGJvb2wgYihmYWxzZSk7Ci0gIFZhbHVl
IHZhbHVlOworICBWYWx1ZUltcCAqdmFsdWUgPSBOVUxMOwogCiAgIHdoaWxlICgxKSB7CiAgICAg
YnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAgICBi
ID0gYnYudG9Cb29sZWFuKGV4ZWMpOworICAgIGIgPSBidi0+dG9Cb29sZWFuKGV4ZWMpOwogCiAg
ICAgLy8gYmFpbCBvdXQgb24gZXJyb3IKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KQEAgLTIwMjEs
NyArMjAxMSw3IEBAIGJvb2wgRm9yTm9kZTo6ZGVyZWYoKQogLy8gRUNNQSAxMi42LjMKIENvbXBs
ZXRpb24gRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIHYsIGN2
YWw7CisgIFZhbHVlSW1wICp2LCAqY3ZhbCA9IE5VTEw7CiAKICAgaWYgKGV4cHIxKSB7CiAgICAg
diA9IGV4cHIxLT5ldmFsdWF0ZShleGVjKTsKQEAgLTIwMzEsNyArMjAyMSw3IEBAIENvbXBsZXRp
b24gRm9yTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmUKICAgICBpZiAoZXhwcjIpIHsKICAgICAg
IHYgPSBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KLSAg
ICAgIGlmICghdi50b0Jvb2xlYW4oZXhlYykpCisgICAgICBpZiAoIXYtPnRvQm9vbGVhbihleGVj
KSkKIAlyZXR1cm4gQ29tcGxldGlvbihOb3JtYWwsIGN2YWwpOwogICAgIH0KICAgICAvLyBiYWls
IG91dCBvbiBlcnJvcgpAQCAtMjExMyw4ICsyMTAzLDkgQEAgYm9vbCBGb3JJbk5vZGU6OmRlcmVm
KCkKIC8vIEVDTUEgMTIuNi40CiBDb21wbGV0aW9uIEZvckluTm9kZTo6ZXhlY3V0ZShFeGVjU3Rh
dGUgKmV4ZWMpCiB7Ci0gIFZhbHVlIGUsIHJldHZhbDsKLSAgT2JqZWN0IHY7CisgIFZhbHVlSW1w
ICplOworICBWYWx1ZUltcCAqcmV0dmFsID0gTlVMTDsKKyAgT2JqZWN0SW1wICp2OwogICBDb21w
bGV0aW9uIGM7CiAgIFJlZmVyZW5jZUxpc3QgcHJvcExpc3Q7CiAKQEAgLTIxMjksMTkgKzIxMjAs
MTkgQEAgQ29tcGxldGlvbiBGb3JJbk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogICAvLyB0aGUg
bG9vcCBhdCBhbGwsIGJlY2F1c2UgdGhlaXIgb2JqZWN0IHdyYXBwZXJzIHdpbGwgaGF2ZSBhCiAg
IC8vIHByb3BlcnR5IGxpc3QgYnV0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHlvdSBhdHRl
bXB0IHRvCiAgIC8vIGFjY2VzcyBhbnkgcHJvcGVydHkuCi0gIGlmIChlLnR5cGUoKSA9PSBVbmRl
ZmluZWRUeXBlIHx8IGUudHlwZSgpID09IE51bGxUeXBlKSB7Ci0gICAgcmV0dXJuIENvbXBsZXRp
b24oTm9ybWFsLCByZXR2YWwpOworICBpZiAoZS0+aXNVbmRlZmluZWRPck51bGwoKSkgeworICAg
IHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgTlVMTCk7CiAgIH0KIAogICBLSlNfQ0hFQ0tFWENF
UFRJT04KLSAgdiA9IGUudG9PYmplY3QoZXhlYyk7Ci0gIHByb3BMaXN0ID0gdi5wcm9wTGlzdChl
eGVjKTsKKyAgdiA9IGUtPnRvT2JqZWN0KGV4ZWMpOworICBwcm9wTGlzdCA9IHYtPnByb3BMaXN0
KGV4ZWMpOwogCiAgIFJlZmVyZW5jZUxpc3RJdGVyYXRvciBwcm9wSXQgPSBwcm9wTGlzdC5iZWdp
bigpOwogCiAgIHdoaWxlIChwcm9wSXQgIT0gcHJvcExpc3QuZW5kKCkpIHsKICAgICBJZGVudGlm
aWVyIG5hbWUgPSBwcm9wSXQtPmdldFByb3BlcnR5TmFtZShleGVjKTsKLSAgICBpZiAoIXYuaGFz
UHJvcGVydHkoZXhlYyxuYW1lKSkgeworICAgIGlmICghdi0+aGFzUHJvcGVydHkoZXhlYyxuYW1l
KSkgewogICAgICAgcHJvcEl0Kys7CiAgICAgICBjb250aW51ZTsKICAgICB9CkBAIC0yMTg1LDgg
KzIxNzYsNiBAQCBDb21wbGV0aW9uIENvbnRpbnVlTm9kZTo6ZXhlY3V0ZShFeGVjU3RhCiB7CiAg
IEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIGR1bW15OwotCiAgIGlmIChpZGVudC5pc0VtcHR5
KCkgJiYgIWV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+c2VlbkxhYmVscygpLT5pbkl0ZXJhdGlvbigp
KQogICAgIHJldHVybiBDb21wbGV0aW9uKFRocm93LAogCQkgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yLCAiSW52YWxpZCBjb250aW51ZSBzdGF0ZW1lbnQuIikpOwpAQCAtMjE5NCw3
ICsyMTgzLDcgQEAgQ29tcGxldGlvbiBDb250aW51ZU5vZGU6OmV4ZWN1dGUoRXhlY1N0YQogICAg
IHJldHVybiBDb21wbGV0aW9uKFRocm93LAogICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsICJMYWJlbCAlcyBub3QgZm91bmQuIiwgaWRlbnQpKTsKICAg
ZWxzZQotICAgIHJldHVybiBDb21wbGV0aW9uKENvbnRpbnVlLCBkdW1teSwgaWRlbnQpOworICAg
IHJldHVybiBDb21wbGV0aW9uKENvbnRpbnVlLCBOVUxMLCBpZGVudCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCcmVha05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0yMjA0LDggKzIxOTMsNiBAQCBDb21wbGV0aW9uIEJyZWFrTm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUgCiB7CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIGR1
bW15OwotCiAgIGlmIChpZGVudC5pc0VtcHR5KCkgJiYgIWV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+
c2VlbkxhYmVscygpLT5pbkl0ZXJhdGlvbigpICYmCiAgICAgICAhZXhlYy0+Y29udGV4dCgpLmlt
cCgpLT5zZWVuTGFiZWxzKCktPmluU3dpdGNoKCkpCiAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhy
b3csCkBAIC0yMjE0LDcgKzIyMDEsNyBAQCBDb21wbGV0aW9uIEJyZWFrTm9kZTo6ZXhlY3V0ZShF
eGVjU3RhdGUgCiAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csCiAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIkxhYmVsICVzIG5vdCBmb3VuZC4i
LCBpZGVudCkpOwogICBlbHNlCi0gICAgcmV0dXJuIENvbXBsZXRpb24oQnJlYWssIGR1bW15LCBp
ZGVudCk7CisgICAgcmV0dXJuIENvbXBsZXRpb24oQnJlYWssIE5VTEwsIGlkZW50KTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJldHVybk5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyNDYsNyArMjIzMyw3IEBAIENvbXBsZXRpb24g
UmV0dXJuTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUKICAgaWYgKCF2YWx1ZSkKICAgICByZXR1cm4g
Q29tcGxldGlvbihSZXR1cm5WYWx1ZSwgVW5kZWZpbmVkKCkpOwogCi0gIFZhbHVlIHYgPSB2YWx1
ZS0+ZXZhbHVhdGUoZXhlYyk7CisgIFZhbHVlSW1wICp2ID0gdmFsdWUtPmV2YWx1YXRlKGV4ZWMp
OwogICBLSlNfQ0hFQ0tFWENFUFRJT04KIAogICByZXR1cm4gQ29tcGxldGlvbihSZXR1cm5WYWx1
ZSwgdik7CkBAIC0yMjc3LDkgKzIyNjQsOSBAQCBDb21wbGV0aW9uIFdpdGhOb2RlOjpleGVjdXRl
KEV4ZWNTdGF0ZSAqCiB7CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gIFZhbHVlIHYgPSBleHByLT5l
dmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJbXAgKnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAg
S0pTX0NIRUNLRVhDRVBUSU9OCi0gIE9iamVjdCBvID0gdi50b09iamVjdChleGVjKTsKKyAgT2Jq
ZWN0SW1wICpvID0gdi0+dG9PYmplY3QoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBl
eGVjLT5jb250ZXh0KCkuaW1wKCktPnB1c2hTY29wZShvKTsKICAgQ29tcGxldGlvbiByZXMgPSBz
dGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CkBAIC0yMzE0LDkgKzIzMDEsOSBAQCBib29sIENhc2VD
bGF1c2VOb2RlOjpkZXJlZigpCiB9CiAKIC8vIEVDTUEgMTIuMTEKLVZhbHVlIENhc2VDbGF1c2VO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqQ2FzZUNsYXVzZU5vZGU6
OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRl
KGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hF
Q0tFWENFUFRJT05WQUxVRQogCiAgIHJldHVybiB2OwpAQCAtMjM2MSwxMSArMjM0OCwxMSBAQCBi
b29sIENsYXVzZUxpc3ROb2RlOjpkZXJlZigpCiAgIHJldHVybiBOb2RlOjpkZXJlZigpOwogfQog
Ci1WYWx1ZSBDbGF1c2VMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKK1Zh
bHVlSW1wICpDbGF1c2VMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICovKmV4ZWMqLykKIHsK
ICAgLyogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCAqLwogICBhc3NlcnQoZmFsc2UpOwotICByZXR1
cm4gVmFsdWUoKTsKKyAgcmV0dXJuIE5VTEw7CiB9CiAKIC8vIEVDTUEgMTIuMTEKQEAgLTI0MjAs
MTcgKzI0MDcsMTcgQEAgYm9vbCBDYXNlQmxvY2tOb2RlOjpkZXJlZigpCiAgIHJldHVybiBOb2Rl
OjpkZXJlZigpOwogfQogCi1WYWx1ZSBDYXNlQmxvY2tOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUg
Ki8qZXhlYyovKQorVmFsdWVJbXAgKkNhc2VCbG9ja05vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
LypleGVjKi8pCiB7CiAgIC8qIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgKi8KICAgYXNzZXJ0KGZh
bHNlKTsKLSAgcmV0dXJuIFZhbHVlKCk7CisgIHJldHVybiBOVUxMOwogfQogCiAvLyBFQ01BIDEy
LjExCi1Db21wbGV0aW9uIENhc2VCbG9ja05vZGU6OmV2YWxCbG9jayhFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IFZhbHVlJiBpbnB1dCkKK0NvbXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2Nr
KEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKmlucHV0KQogewotICBWYWx1ZSB2OworICBWYWx1
ZUltcCAqdjsKICAgQ29tcGxldGlvbiByZXM7CiAgIENsYXVzZUxpc3ROb2RlICphID0gbGlzdDEs
ICpiID0gbGlzdDI7CiAgIENhc2VDbGF1c2VOb2RlICpjbGF1c2U7CkBAIC0yNTI0LDcgKzI1MTEs
NyBAQCBDb21wbGV0aW9uIFN3aXRjaE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlCiB7CiAgIEtKU19C
UkVBS1BPSU5UOwogCi0gIFZhbHVlIHYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKKyAgVmFsdWVJ
bXAgKnYgPSBleHByLT5ldmFsdWF0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAg
ZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zZWVuTGFiZWxzKCktPnB1c2hTd2l0Y2goKTsKQEAgLTI2
MDAsNyArMjU4Nyw3IEBAIENvbXBsZXRpb24gVGhyb3dOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAK
IHsKICAgS0pTX0JSRUFLUE9JTlQ7CiAKLSAgVmFsdWUgdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMp
OworICBWYWx1ZUltcCAqdiA9IGV4cHItPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENF
UFRJT04KIAogICByZXR1cm4gQ29tcGxldGlvbihUaHJvdywgdik7CkBAIC0yNjMwLDE0ICsyNjE3
LDE0IEBAIENvbXBsZXRpb24gQ2F0Y2hOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAKIH0KIAogLy8g
RUNNQSAxMi4xNAotQ29tcGxldGlvbiBDYXRjaE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBWYWx1ZSAmYXJnKQorQ29tcGxldGlvbiBDYXRjaE5vZGU6OmV4ZWN1dGUoRXhlY1N0
YXRlICpleGVjLCBWYWx1ZUltcCAqYXJnKQogewogICAvKiBUT0RPOiBjb3JyZWN0ID8gTm90IHBh
cnQgb2YgdGhlIHNwZWMgKi8KIAogICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCi0gIE9iamVj
dCBvYmoobmV3IE9iamVjdEltcCgpKTsKLSAgb2JqLnB1dChleGVjLCBpZGVudCwgYXJnLCBEb250
RGVsZXRlKTsKKyAgT2JqZWN0SW1wICpvYmoobmV3IE9iamVjdEltcCgpKTsKKyAgb2JqLT5wdXQo
ZXhlYywgaWRlbnQsIGFyZywgRG9udERlbGV0ZSk7CiAgIGV4ZWMtPmNvbnRleHQoKS5pbXAoKS0+
cHVzaFNjb3BlKG9iaik7CiAgIENvbXBsZXRpb24gYyA9IGJsb2NrLT5leGVjdXRlKGV4ZWMpOwog
ICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnBvcFNjb3BlKCk7CkBAIC0yNzE3LDcgKzI3MDQsNyBA
QCBDb21wbGV0aW9uIFRyeU5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICplCiAgIH0KIAogICBpZiAo
IV9jYXRjaCkgewotICAgIFZhbHVlIGxhc3RFeGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsK
KyAgICBWYWx1ZUltcCAqbGFzdEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwogICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgCiAgICAgYzIgPSBfZmluYWwtPmV4ZWN1dGUoZXhl
Yyk7CkBAIC0yNzY0LDcgKzI3NTEsNyBAQCBib29sIFBhcmFtZXRlck5vZGU6OmRlcmVmKCkKIH0K
IAogLy8gRUNNQSAxMwotVmFsdWUgUGFyYW1ldGVyTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICov
KmV4ZWMqLykKK1ZhbHVlSW1wICpQYXJhbWV0ZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKi8q
ZXhlYyovKQogewogICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yODA3LDM4ICsyNzk0LDM0
IEBAIGJvb2wgRnVuY0RlY2xOb2RlOjpkZXJlZigpCiAvLyBFQ01BIDEzCiB2b2lkIEZ1bmNEZWNs
Tm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhlYykKIHsKKyAgQ29udGV4dEltcCAq
Y29udGV4dCA9IGV4ZWMtPmNvbnRleHQoKS5pbXAoKTsKKwogICAvLyBUT0RPOiBsZXQgdGhpcyBi
ZSBhbiBvYmplY3Qgd2l0aCBbW0NsYXNzXV0gcHJvcGVydHkgIkZ1bmN0aW9uIgotICBGdW5jdGlv
bkltcCAqZmltcCA9IG5ldyBEZWNsYXJlZEZ1bmN0aW9uSW1wKGV4ZWMsIGlkZW50LCBib2R5LCBl
eGVjLT5jb250ZXh0KCkuaW1wKCktPnNjb3BlQ2hhaW4oKSk7Ci0gIE9iamVjdCBmdW5jKGZpbXAp
OyAvLyBwcm90ZWN0IGZyb20gR0MKKyAgRnVuY3Rpb25JbXAgKmZpbXAgPSBuZXcgRGVjbGFyZWRG
dW5jdGlvbkltcChleGVjLCBpZGVudCwgYm9keSwgY29udGV4dC0+c2NvcGVDaGFpbigpKTsKKyAg
T2JqZWN0SW1wICpmdW5jKGZpbXApOyAvLyBwcm90ZWN0IGZyb20gR0MKIAotICAvLyAgVmFsdWUg
cHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLmNvbnN0
cnVjdChleGVjLExpc3Q6OmVtcHR5KCkpOwotICBMaXN0IGVtcHR5OwotICBPYmplY3QgcHJvdG8g
PSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLmNvbnN0cnVjdChl
eGVjLGVtcHR5KTsKLSAgcHJvdG8ucHV0KGV4ZWMsIGNvbnN0cnVjdG9yUHJvcGVydHlOYW1lLCBm
dW5jLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKLSAgZnVuYy5wdXQoZXhlYywgcHJv
dG90eXBlUHJvcGVydHlOYW1lLCBwcm90bywgSW50ZXJuYWx8RG9udERlbGV0ZSk7CisgIE9iamVj
dEltcCAqcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgp
LT5jb25zdHJ1Y3QoZXhlYywgTGlzdDo6ZW1wdHkoKSk7CisgIHByb3RvLT5wdXQoZXhlYywgY29u
c3RydWN0b3JQcm9wZXJ0eU5hbWUsIGZ1bmMsIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0p
OworICBmdW5jLT5wdXQoZXhlYywgcHJvdG90eXBlUHJvcGVydHlOYW1lLCBwcm90bywgSW50ZXJu
YWx8RG9udERlbGV0ZSk7CiAKICAgaW50IHBsZW4gPSAwOwogICBmb3IoUGFyYW1ldGVyTm9kZSAq
cCA9IHBhcmFtOyBwICE9IDBMOyBwID0gcC0+bmV4dFBhcmFtKCksIHBsZW4rKykKICAgICBmaW1w
LT5hZGRQYXJhbWV0ZXIocC0+aWRlbnQoKSk7CiAKLSAgZnVuYy5wdXQoZXhlYywgbGVuZ3RoUHJv
cGVydHlOYW1lLCBOdW1iZXIocGxlbiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwor
ICBmdW5jLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIocGxlbiksIFJlYWRP
bmx5fERvbnREZWxldGV8RG9udEVudW0pOwogCi0gIGlmIChleGVjLT5jb250ZXh0KCkuaW1wKCkt
PmNvZGVUeXBlKCkgPT0gRXZhbENvZGUpIHsKLSAgICAvLyBFQ01BIDEwLjIuMgotICAgIGV4ZWMt
PmNvbnRleHQoKS5pbXAoKS0+dmFyaWFibGVPYmplY3QoKS5wdXQoZXhlYywgaWRlbnQsIGZ1bmMs
IEludGVybmFsKTsKLSAgfSBlbHNlIHsKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnZhcmlh
YmxlT2JqZWN0KCkucHV0KGV4ZWMsIGlkZW50LCBmdW5jLCBJbnRlcm5hbCB8IERvbnREZWxldGUp
OwotICB9CisgIC8vIEVDTUEgMTAuMi4yCisgIGNvbnRleHQtPnZhcmlhYmxlT2JqZWN0KCktPnB1
dChleGVjLCBpZGVudCwgZnVuYywgSW50ZXJuYWwgfCAoY29udGV4dC0+Y29kZVR5cGUoKSA9PSBF
dmFsQ29kZSA/IDAgOiBEb250RGVsZXRlKSk7CiAKICAgaWYgKGJvZHkpIHsKICAgICAvLyBoYWNr
IHRoZSBzY29wZSBzbyB0aGF0IHRoZSBmdW5jdGlvbiBnZXRzIHB1dCBhcyBhIHByb3BlcnR5IG9m
IGZ1bmMsIGFuZCBpdCdzIHNjb3BlCiAgICAgLy8gY29udGFpbnMgdGhlIGZ1bmMgYXMgd2VsbCBh
cyBvdXIgY3VycmVudCBzY29wZQotICAgIE9iamVjdCBvbGRWYXIgPSBleGVjLT5jb250ZXh0KCku
aW1wKCktPnZhcmlhYmxlT2JqZWN0KCk7Ci0gICAgZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zZXRW
YXJpYWJsZU9iamVjdChmdW5jKTsKLSAgICBleGVjLT5jb250ZXh0KCkuaW1wKCktPnB1c2hTY29w
ZShmdW5jKTsKKyAgICBPYmplY3RJbXAgKm9sZFZhciA9IGNvbnRleHQtPnZhcmlhYmxlT2JqZWN0
KCk7CisgICAgY29udGV4dC0+c2V0VmFyaWFibGVPYmplY3QoZnVuYyk7CisgICAgY29udGV4dC0+
cHVzaFNjb3BlKGZ1bmMpOwogICAgIGJvZHktPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKLSAgICBl
eGVjLT5jb250ZXh0KCkuaW1wKCktPnBvcFNjb3BlKCk7Ci0gICAgZXhlYy0+Y29udGV4dCgpLmlt
cCgpLT5zZXRWYXJpYWJsZU9iamVjdChvbGRWYXIpOworICAgIGNvbnRleHQtPnBvcFNjb3BlKCk7
CisgICAgY29udGV4dC0+c2V0VmFyaWFibGVPYmplY3Qob2xkVmFyKTsKICAgfQogfQogCkBAIC0y
ODY0LDEyICsyODQ3LDExIEBAIGJvb2wgRnVuY0V4cHJOb2RlOjpkZXJlZigpCiAKIAogLy8gRUNN
QSAxMwotVmFsdWUgRnVuY0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCitWYWx1
ZUltcCAqRnVuY0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIEZ1bmN0
aW9uSW1wICpmaW1wID0gbmV3IERlY2xhcmVkRnVuY3Rpb25JbXAoZXhlYywgSWRlbnRpZmllcjo6
bnVsbCgpLCBib2R5LCBleGVjLT5jb250ZXh0KCkuaW1wKCktPnNjb3BlQ2hhaW4oKSk7Ci0gIFZh
bHVlIHJldChmaW1wKTsKLSAgTGlzdCBlbXB0eTsKLSAgVmFsdWUgcHJvdG8gPSBleGVjLT5sZXhp
Y2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLmNvbnN0cnVjdChleGVjLGVtcHR5KTsK
KyAgVmFsdWVJbXAgKnJldChmaW1wKTsKKyAgVmFsdWVJbXAgKnByb3RvID0gZXhlYy0+bGV4aWNh
bEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVt
cHR5KCkpOwogICBmaW1wLT5wdXQoZXhlYywgcHJvdG90eXBlUHJvcGVydHlOYW1lLCBwcm90bywg
SW50ZXJuYWx8RG9udERlbGV0ZSk7CiAKICAgaW50IHBsZW4gPSAwOwpAQCAtMjkzMiw3ICsyOTE0
LDcgQEAgQ29tcGxldGlvbiBTb3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoRQogICAgICAgcmV0
dXJuIGMyOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdG8gcmV0dXJuIGMyIGhlcmUsIGJ1dCBpdCBz
ZWVtcyB0aGF0IG1vemlsbGEgcmV0dXJucyBjMSBpZgogICAgIC8vIGMyIGRvZXNuJ3QgaGF2ZSBh
IHZhbHVlCi0gICAgaWYgKCFjMi52YWx1ZSgpLmlzTnVsbCgpKQorICAgIGlmIChjMi52YWx1ZSgp
KQogICAgICAgYzEgPSBjMjsKICAgfQogICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC1wIC11IC1yMS4yMyBKYXZhU2Ny
aXB0Q29yZS9ranMvbm9kZXMuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJMTQgSnVs
IDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS4yMworKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJ
OCBBdWcgMjAwNSAwMTowMDo1NiAtMDAwMApAQCAtODIsNyArODIsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKIAogICAgIEtKU19GQVNUX0FMTE9DQVRFRDsKIAotICAgIHZpcnR1YWwgVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKSA9IDA7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKSA9IDA7CiAgICAgdmlydHVhbCBSZWZlcmVuY2UgZXZhbHVhdGVSZWZl
cmVuY2UoRXhlY1N0YXRlICpleGVjKTsKICAgICBVU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QgPSAwOwpAQCAt
MTAzLDkgKzEwMyw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHN0YXRpYyB2b2lkIGZpbmFsQ2hl
Y2soKTsKICNlbmRpZgogICBwcm90ZWN0ZWQ6Ci0gICAgVmFsdWUgdGhyb3dFcnJvcihFeGVjU3Rh
dGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBjaGFyICptc2cpOwotICAgIFZhbHVlIHRocm93
RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hhciAqbXNnLCBWYWx1
ZSB2LCBOb2RlICpleHByKTsKLSAgICBWYWx1ZSB0aHJvd0Vycm9yKEV4ZWNTdGF0ZSAqZXhlYywg
RXJyb3JUeXBlIGUsIGNvbnN0IGNoYXIgKm1zZywgSWRlbnRpZmllciBsYWJlbCk7CisgICAgVmFs
dWVJbXAgKnRocm93RXJyb3IoRXhlY1N0YXRlICpleGVjLCBFcnJvclR5cGUgZSwgY29uc3QgY2hh
ciAqbXNnKTsKKyAgICBWYWx1ZUltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9y
VHlwZSBlLCBjb25zdCBjaGFyICptc2csIFZhbHVlSW1wICp2LCBOb2RlICpleHByKTsKKyAgICBW
YWx1ZUltcCAqdGhyb3dFcnJvcihFeGVjU3RhdGUgKmV4ZWMsIEVycm9yVHlwZSBlLCBjb25zdCBj
aGFyICptc2csIElkZW50aWZpZXIgbGFiZWwpOwogICAgIHZvaWQgc2V0RXhjZXB0aW9uRGV0YWls
c0lmTmVlZGVkKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgaW50IGxpbmU7CiAgICAgVVN0cmluZyBz
b3VyY2VVUkw7CkBAIC0xMzYsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHByb3RlY3Rl
ZDoKICAgICBMYWJlbFN0YWNrIGxzOwogICBwcml2YXRlOgotICAgIFZhbHVlIGV2YWx1YXRlKEV4
ZWNTdGF0ZSAqLypleGVjKi8pIHsgcmV0dXJuIFVuZGVmaW5lZCgpOyB9CisgICAgVmFsdWVJbXAg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqLypleGVjKi8pIHsgcmV0dXJuIFVuZGVmaW5lZCgpOyB9CiAg
ICAgaW50IGwwLCBsMTsKICAgICBpbnQgc2lkOwogICAgIGJvb2wgYnJlYWtQb2ludDsKQEAgLTE0
NSwxNCArMTQ1LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBOdWxsTm9kZSA6IHB1Ymxp
YyBOb2RlIHsKICAgcHVibGljOgogICAgIE51bGxOb2RlKCkge30KLSAgICBWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0Owog
ICB9OwogCiAgIGNsYXNzIEJvb2xlYW5Ob2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAg
ICAgQm9vbGVhbk5vZGUoYm9vbCB2KSA6IHZhbHVlKHYpIHt9Ci0gICAgVmFsdWUgZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKICAgICBib29sIHZhbHVlOwpAQCAtMTYxLDcgKzE2MSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAg
TnVtYmVyTm9kZShkb3VibGUgdikgOiB2YWx1ZSh2KSB7IH0KLSAgICBWYWx1ZSBldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBw
cml2YXRlOgogICAgIGRvdWJsZSB2YWx1ZTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAg
IFN0cmluZ05vZGUoY29uc3QgVVN0cmluZyAqdikgeyB2YWx1ZSA9ICp2OyB9Ci0gICAgVmFsdWUg
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBj
b25zdDsKICAgcHJpdmF0ZToKICAgICBVU3RyaW5nIHZhbHVlOwpAQCAtMTgwLDcgKzE4MCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgUmVnRXhwTm9kZShjb25zdCBVU3RyaW5n
ICZwLCBjb25zdCBVU3RyaW5nICZmKQogICAgICAgOiBwYXR0ZXJuKHApLCBmbGFncyhmKSB7IH0K
LSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFVTdHJpbmcgcGF0dGVybiwgZmxhZ3M7
CkBAIC0xODksMTQgKzE4OSwxNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgVGhpc05vZGUg
OiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBUaGlzTm9kZSgpIHt9Ci0gICAgVmFsdWUg
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0
YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBj
b25zdDsKICAgfTsKIAogICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVi
bGljOgogICAgIFJlc29sdmVOb2RlKGNvbnN0IElkZW50aWZpZXIgJnMpIDogaWRlbnQocykgeyB9
Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIFJlZmVyZW5jZSBldmFsdWF0ZVJl
ZmVyZW5jZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgpAQCAtMjA4LDcgKzIwOCw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgIEdyb3VwTm9kZShOb2RlICpnKSA6IGdyb3VwKGcpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICB2aXJ0dWFs
IFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIFJlZmVyZW5jZSBldmFsdWF0
ZVJlZmVyZW5jZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0IHsgZ3JvdXAtPnN0cmVhbVRvKHMpOyB9CiAgIHByaXZhdGU6
CkBAIC0yMjMsNyArMjIzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IGxpc3QobC0+bGlz
dCksIGVsaXNpb24oZSksIG5vZGUobikgeyBsLT5saXN0ID0gdGhpczsgfQogICAgIHZpcnR1YWwg
dm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0Owog
ICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheU5vZGU7CkBAIC0yNDEsNyArMjQxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IGVsZW1lbnQoZWxlLT5saXN0KSwgZWxpc2lvbihl
bGkpLCBvcHQodHJ1ZSkgeyBlbGUtPmxpc3QgPSAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigp
OwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
CiAgICAgRWxlbWVudE5vZGUgKmVsZW1lbnQ7CkBAIC0yNTgsNyArMjU4LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICA6IG5hbWUobiksIGFzc2lnbihhKSwgbGlzdChsLT5saXN0KSB7IGwtPmxp
c3QgPSB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9i
amVjdExpdGVyYWxOb2RlOwpAQCAtMjczLDcgKzI3Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IE9iamVjdExpdGVyYWxOb2RlKFByb3BlcnR5VmFsdWVOb2RlICpsKSA6IGxpc3QobC0+bGlzdCkg
eyBsLT5saXN0ID0gMDsgfQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJv
b2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZh
bHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFByb3BlcnR5VmFs
dWVOb2RlICpsaXN0OwpAQCAtMjgzLDcgKzI4Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgUHJvcGVydHlOb2RlKGRvdWJsZSBkKSA6IG51bWVyaWMoZCkgeyB9CiAgICAgUHJv
cGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXIgJnMpIDogc3RyKHMpIHsgfQotICAgIFZhbHVlIGV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29u
c3Q7CiAgIHByaXZhdGU6CiAgICAgZG91YmxlIG51bWVyaWM7CkBAIC0yOTUsNyArMjk1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgQWNjZXNzb3JOb2RlMShOb2RlICplMSwgTm9kZSAqZTIpIDog
ZXhwcjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmly
dHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsK
KyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIFJl
ZmVyZW5jZSBldmFsdWF0ZVJlZmVyZW5jZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgpAQCAtMzA4
LDcgKzMwOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFjY2Vzc29yTm9kZTIoTm9kZSAqZSwg
Y29uc3QgSWRlbnRpZmllciAmcykgOiBleHByKGUpLCBpZGVudChzKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIFJlZmVyZW5jZSBldmFsdWF0ZVJlZmVyZW5jZShFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OwogICBwcml2YXRlOgpAQCAtMzI0LDcgKzMyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
OiBsaXN0KGwtPmxpc3QpLCBleHByKGUpIHsgbC0+bGlzdCA9IHRoaXM7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgpAQCAt
MzQwLDcgKzM0MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBsaXN0KGwtPmxpc3QpIHsg
bC0+bGlzdCA9IDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29s
IGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1
ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChF
eGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0g
JnMpIGNvbnN0OwogICBwcml2YXRlOgpAQCAtMzUzLDcgKzM1Myw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIE5ld0V4cHJOb2RlKE5vZGUgKmUsIEFyZ3VtZW50c05vZGUgKmEpIDogZXhwcihlKSwg
YXJncyhhKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVy
ZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHI7CkBAIC0z
NjUsNyArMzY1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRnVuY3Rpb25DYWxsTm9kZShOb2Rl
ICplLCBBcmd1bWVudHNOb2RlICphKSA6IGV4cHIoZSksIGFyZ3MoYSkge30KICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
ICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIFBvc3RmaXhOb2RlKE5vZGUgKmUsIE9wZXJhdG9yIG8pIDogZXhwcihlKSwg
b3BlcihvKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVy
ZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHI7CkBAIC0z
ODksNyArMzg5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRGVsZXRlTm9kZShOb2RlICplKSA6
IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRl
cmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUlt
cCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAt
NDAwLDcgKzQwMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFZvaWROb2RlKE5vZGUgKmUpIDog
ZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVy
ZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1w
ICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHI7CkBAIC00
MTEsNyArNDExLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgVHlwZU9mTm9kZShOb2RlICplKSA6
IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRl
cmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUlt
cCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAt
NDIyLDcgKzQyMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFByZWZpeE5vZGUoT3BlcmF0b3Ig
bywgTm9kZSAqZSkgOiBvcGVyKG8pLCBleHByKGUpIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigp
OwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
CiAgICAgT3BlcmF0b3Igb3BlcjsKQEAgLTQzNCw3ICs0MzQsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBVbmFyeVBsdXNOb2RlKE5vZGUgKmUpIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9p
ZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBw
cml2YXRlOgogICAgIE5vZGUgKmV4cHI7CkBAIC00NDUsNyArNDQ1LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgTmVnYXRlTm9kZShOb2RlICplKSA6IGV4cHIoZSkge30KICAgICB2aXJ0dWFsIHZv
aWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAg
cHJpdmF0ZToKICAgICBOb2RlICpleHByOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIEJpdHdpc2VOb3ROb2RlKE5vZGUgKmUpIDogZXhwcihlKSB7fQogICAgIHZpcnR1
YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHI7CkBAIC00NjcsNyArNDY3LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgTG9naWNhbE5vdE5vZGUoTm9kZSAqZSkgOiBleHByKGUpIHt9CiAgICAg
dmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqZXhwcjsKQEAgLTQ3OCw3ICs0NzgsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBNdWx0Tm9kZShOb2RlICp0MSwgTm9kZSAqdDIsIGNoYXIgb3Ap
IDogdGVybTEodDEpLCB0ZXJtMih0MiksIG9wZXIob3ApIHt9CiAgICAgdmlydHVhbCB2b2lkIHJl
ZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6CiAgICAgTm9kZSAqdGVybTEsICp0ZXJtMjsKQEAgLTQ5MCw3ICs0OTAsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBBZGROb2RlKE5vZGUgKnQxLCBOb2RlICp0MiwgY2hhciBvcCkgOiB0ZXJt
MSh0MSksIHRlcm0yKHQyKSwgb3BlcihvcCkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAg
ICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAg
ICBOb2RlICp0ZXJtMSwgKnRlcm0yOwpAQCAtNTAzLDcgKzUwMyw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgOiB0ZXJtMSh0MSksIHRlcm0yKHQyKSwgb3BlcihvKSB7fQogICAgIHZpcnR1YWwg
dm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0Owog
ICBwcml2YXRlOgogICAgIE5vZGUgKnRlcm0xLCAqdGVybTI7CkBAIC01MTYsNyArNTE2LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICBleHByMShlMSksIGV4cHIyKGUyKSwgb3BlcihvKSB7fQog
ICAgIHZpcnR1YWwgdm9pZCByZWYoKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBW
YWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0g
JnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIE5vZGUgKmV4cHIxLCAqZXhwcjI7CkBAIC01Mjks
NyArNTI5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IGV4cHIxKGUxKSwgZXhwcjIoZTIp
LCBvcGVyKG8pIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqZXhwcjEsICpl
eHByMjsKQEAgLTU0Miw3ICs1NDIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGV4cHIxKGUx
KSwgZXhwcjIoZTIpLCBvcGVyKG8pIHt9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZp
cnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7
CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9k
ZSAqZXhwcjEsICpleHByMjsKQEAgLTU1OCw3ICs1NTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpLCBvcGVyKG8pIHt9CiAgICAgdmlydHVhbCB2b2lkIHJl
ZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZh
dGU6CiAgICAgTm9kZSAqZXhwcjEsICpleHByMjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgIGxvZ2ljYWwobCksIGV4cHIxKGUxKSwgZXhwcjIoZTIpIHt9CiAgICAg
dmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3Q7CiAgIHByaXZhdGU6CiAgICAgTm9kZSAqbG9naWNhbCwgKmV4cHIxLCAqZXhwcjI7CkBA
IC01ODUsNyArNTg1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXNzaWduTm9kZShOb2RlICps
LCBPcGVyYXRvciBvLCBOb2RlICplKSA6IGxlZnQobCksIG9wZXIobyksIGV4cHIoZSkge30KICAg
ICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZz
KSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpsZWZ0OwpAQCAtNTk4LDcgKzU5OCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIENvbW1hTm9kZShOb2RlICplMSwgTm9kZSAqZTIpIDogZXhw
cjEoZTEpLCBleHByMihlMikge30KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVh
bCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAg
ICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBOb2RlICpl
eHByMSwgKmV4cHIyOwpAQCAtNjI1LDcgKzYyNSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFz
c2lnbkV4cHJOb2RlKE5vZGUgKmUpIDogZXhwcihlKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZWYo
KTsKICAgICB2aXJ0dWFsIGJvb2wgZGVyZWYoKTsKLSAgICBWYWx1ZSBldmFsdWF0ZShFeGVjU3Rh
dGUgKmV4ZWMpOworICAgIFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgogICAgIE5vZGUgKmV4cHI7CkBAIC02MzcsNyArNjM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgVmFyRGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciAmaWQsIEFzc2lnbkV4cHJOb2RlICppbiwg
VHlwZSB0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVm
KCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1ZhckRl
Y2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CkBAIC02NTQsNyArNjU0LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICA6IGxpc3QobC0+bGlzdCksIHZhcih2KSB7IGwtPmxpc3QgPSB0aGlzOyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAg
IFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRl
KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVj
U3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMp
IGNvbnN0OwogICBwcml2YXRlOgpAQCAtODMwLDcgKzgzMCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgOiBleHByKGUpLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVmKCk7Ci0gICAgVmFsdWUgZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAqZXZhbHVhdGUoRXhlY1N0YXRl
ICpleGVjKTsKICAgICBDb21wbGV0aW9uIGV2YWxTdGF0ZW1lbnRzKEV4ZWNTdGF0ZSAqZXhlYyk7
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwpAQCAtODQ3LDcg
Kzg0Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgOiBjbChjKSwgbngobi0+bngpIHsgbi0+
bnggPSB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJ
bXAgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgQ2FzZUNsYXVzZU5vZGUgKmNsYXVz
ZSgpIGNvbnN0IHsgcmV0dXJuIGNsOyB9CiAgICAgQ2xhdXNlTGlzdE5vZGUgKm5leHQoKSBjb25z
dCB7IHJldHVybiBueDsgfQogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0
YXRlICpleGVjKTsKQEAgLTg2Myw4ICs4NjMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDYXNl
QmxvY2tOb2RlKENsYXVzZUxpc3ROb2RlICpsMSwgQ2FzZUNsYXVzZU5vZGUgKmQsIENsYXVzZUxp
c3ROb2RlICpsMik7CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBk
ZXJlZigpOwotICAgIFZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7Ci0gICAgQ29tcGxl
dGlvbiBldmFsQmxvY2soRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgaW5wdXQpOworICAg
IFZhbHVlSW1wICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIENvbXBsZXRpb24gZXZh
bEJsb2NrKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKmlucHV0KTsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CkBAIC05MTYsNyArOTE2
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1
YWwgYm9vbCBkZXJlZigpOwogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7Ci0gICAgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
VmFsdWUgJmFyZyk7CisgICAgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYywgVmFs
dWVJbXAgKmFyZyk7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OwogICBwcml2YXRlOgpAQCAtOTYzLDcgKzk2Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
OiBpZChpKSwgbmV4dChsaXN0LT5uZXh0KSB7IGxpc3QtPm5leHQgPSB0aGlzOyB9CiAgICAgdmly
dHVhbCB2b2lkIHJlZigpOwogICAgIHZpcnR1YWwgYm9vbCBkZXJlZigpOwotICAgIFZhbHVlIGV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CisgICAgVmFsdWVJbXAgKmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCgpIHsgcmV0dXJuIGlkOyB9CiAgICAgUGFy
YW1ldGVyTm9kZSAqbmV4dFBhcmFtKCkgeyByZXR1cm4gbmV4dDsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICA6IHBhcmFtKHAtPm5leHQpLCBib2R5KGIpIHsgcC0+bmV4
dCA9IDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVmKCk7CiAgICAgdmlydHVhbCBib29sIGRlcmVm
KCk7Ci0gICAgVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICBWYWx1ZUltcCAq
ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKICAgICBQYXJhbWV0ZXJOb2RlICpwYXJh
bTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IEphdmFTY3JpcHRD
b3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9v
YmplY3QuY3BwCTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xOQorKysgSmF2YVNjcmlwdENv
cmUva2pzL251bWJlcl9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDE6MDA6NTYgLTAwMDAKQEAgLTUy
LDggKzUyLDcgQEAgTnVtYmVyUHJvdG90eXBlSW1wOjpOdW1iZXJQcm90b3R5cGVJbXAoRQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAg
KmZ1bmNQcm90bykKICAgOiBOdW1iZXJJbnN0YW5jZUltcChvYmpQcm90bykKIHsKLSAgVmFsdWUg
cHJvdGVjdCh0aGlzKTsKLSAgc2V0SW50ZXJuYWxWYWx1ZShOdW1iZXJJbXA6Onplcm8oKSk7Cisg
IHNldEludGVybmFsVmFsdWUoanNaZXJvKCkpOwogCiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxs
IGJlIGFkZGVkIGxhdGVyLCBhZnRlciBOdW1iZXJPYmplY3RJbXAgaGFzIGJlZW4gY29uc3RydWN0
ZWQKIApAQCAtNzIsNyArNzEsNiBAQCBOdW1iZXJQcm90b0Z1bmNJbXA6Ok51bWJlclByb3RvRnVu
Y0ltcChFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblBy
b3RvdHlwZUltcCAqZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbikKICAgOiBJbnRlcm5hbEZ1bmN0
aW9uSW1wKGZ1bmNQcm90byksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1
dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250
RW51bSk7CiB9CiAKQEAgLTEyNywyNiArMTI1LDI0IEBAIHN0YXRpYyBVU3RyaW5nIGNoYXJfc2Vx
dWVuY2UoY2hhciBjLCBpbnQKIH0KIAogLy8gRUNNQSAxNS43LjQuMiAtIDE1LjcuNC43Ci1WYWx1
ZSBOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLSAgVmFsdWUgcmVzdWx0OwotCiAgIC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24u
ICJ0aGlzIiBoYXMgdG8gYmUgYSBOdW1iZXIgb2JqZWN0Ci0gIGlmICghdGhpc09iai5pbmhlcml0
cygmTnVtYmVySW5zdGFuY2VJbXA6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJ
bnN0YW5jZUltcDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVy
biBlcnI7CiAgIH0KIAotICBWYWx1ZSB2ID0gdGhpc09iai5pbnRlcm5hbFZhbHVlKCk7CisgIFZh
bHVlSW1wICp2ID0gdGhpc09iai0+aW50ZXJuYWxWYWx1ZSgpOwogICBzd2l0Y2ggKGlkKSB7CiAg
IGNhc2UgVG9TdHJpbmc6IHsKICAgICBkb3VibGUgZHJhZGl4ID0gMTA7CiAgICAgaWYgKCFhcmdz
LmlzRW1wdHkoKSkKLSAgICAgIGRyYWRpeCA9IGFyZ3NbMF0udG9JbnRlZ2VyKGV4ZWMpOworICAg
ICAgZHJhZGl4ID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmIChkcmFkaXggPj0g
MiAmJiBkcmFkaXggPD0gMzYgJiYgZHJhZGl4ICE9IDEwKSB7IC8vIGZhbHNlIGZvciBOYU4KICAg
ICAgIGludCByYWRpeCA9IHN0YXRpY19jYXN0PGludD4oZHJhZGl4KTsKLSAgICAgIHVuc2lnbmVk
IGkgPSB2LnRvVUludDMyKGV4ZWMpOworICAgICAgdW5zaWduZWQgaSA9IHYtPnRvVUludDMyKGV4
ZWMpOwogICAgICAgY2hhciBzWzMzXTsKICAgICAgIGNoYXIgKnAgPSBzICsgc2l6ZW9mKHMpOwog
ICAgICAgKi0tcCA9ICdcMCc7CkBAIC0xNTQsMjMgKzE1MCwyMCBAQCBWYWx1ZSBOdW1iZXJQcm90
b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgICAgICotLXAgPSAiMDEyMzQ1Njc4OWFiY2Rl
ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IltpICUgcmFkaXhdOwogICAgICAgICBpIC89IHJhZGl4Owog
ICAgICAgfSB3aGlsZSAoaSk7Ci0gICAgICByZXN1bHQgPSBTdHJpbmcocCk7CisgICAgICByZXR1
cm4gU3RyaW5nKHApOwogICAgIH0gZWxzZQotICAgICAgcmVzdWx0ID0gU3RyaW5nKHYudG9TdHJp
bmcoZXhlYykpOwotICAgIGJyZWFrOworICAgICAgcmV0dXJuIFN0cmluZyh2LT50b1N0cmluZyhl
eGVjKSk7CiAgIH0KICAgY2FzZSBUb0xvY2FsZVN0cmluZzogLyogVE9ETyAqLwotICAgIHJlc3Vs
dCA9IFN0cmluZyh2LnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBicmVhazsKKyAgICByZXR1cm4gU3Ry
aW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgY2FzZSBWYWx1ZU9mOgotICAgIHJlc3VsdCA9IE51
bWJlcih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICBicmVhazsKKyAgICByZXR1cm4gTnVtYmVyKHYt
PnRvTnVtYmVyKGV4ZWMpKTsKICAgY2FzZSBUb0ZpeGVkOiAKICAgewotICAgICAgVmFsdWUgZnJh
Y3Rpb25EaWdpdHMgPSBhcmdzWzBdOwotICAgICAgZG91YmxlIGRmID0gZnJhY3Rpb25EaWdpdHMu
dG9JbnRlZ2VyKGV4ZWMpOworICAgICAgVmFsdWVJbXAgKmZyYWN0aW9uRGlnaXRzID0gYXJnc1sw
XTsKKyAgICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7CiAg
ICAgICBpZiAoIShkZiA+PSAwICYmIGRmIDw9IDIwKSkgeyAvLyB0cnVlIGZvciBOYU4KLSAgICAg
ICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLAorICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSYW5nZUVycm9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b0ZpeGVkKCkgZGlnaXRzIGFyZ3Vt
ZW50IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpOwogICAgICAgICAgIAogICAgICAgICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwpAQCAtMTc4LDcgKzE3MSw3IEBAIFZhbHVlIE51bWJlclBy
b3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAgIH0KICAgICAgIGludCBmID0gKGludClk
ZjsKICAgICAgIAotICAgICAgZG91YmxlIHggPSB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgZG91
YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKICAgICAgIGlmIChpc05hTih4KSkKICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCJOYU4iKTsKICAgICAgIApAQCAtMjEyLDE1ICsyMDUsMTUgQEAgVmFs
dWUgTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICAgICAgICAgIHJldHVybiBT
dHJpbmcocyttLnN1YnN0cigwLGstZikpOwogICB9CiAgIGNhc2UgVG9FeHBvbmVudGlhbDogewot
ICAgICAgZG91YmxlIHggPSB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgZG91YmxlIHggPSB2LT50
b051bWJlcihleGVjKTsKICAgICAgIAogICAgICAgaWYgKGlzTmFOKHgpIHx8IGlzSW5mKHgpKQog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoVVN0cmluZzo6ZnJvbSh4KSk7CiAgICAgICAKLSAgICAg
IFZhbHVlIGZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKLSAgICAgIGRvdWJsZSBkZiA9IGZyYWN0
aW9uRGlnaXRzLnRvSW50ZWdlcihleGVjKTsKKyAgICAgIFZhbHVlSW1wICpmcmFjdGlvbkRpZ2l0
cyA9IGFyZ3NbMF07CisgICAgICBkb3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0cy0+dG9JbnRlZ2Vy
KGV4ZWMpOwogICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpIHsgLy8gdHJ1ZSBmb3Ig
TmFOCi0gICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VFcnJv
ciwKKyAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VF
cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9FeHBvbmVudGlh
bCgpIGFyZ3VtZW50IG11c3QgYmV0d2VlbiAwIGFuZCAyMCIpOwogICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgIHJldHVybiBlcnI7CkBAIC0yMjgsNyArMjIxLDcg
QEAgVmFsdWUgTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICAgICAgaW50IGYg
PSAoaW50KWRmOwogICAgICAgCiAgICAgICBpbnQgZGVjaW1hbEFkanVzdCA9IDA7Ci0gICAgICBp
ZiAoIWZyYWN0aW9uRGlnaXRzLmlzQShVbmRlZmluZWRUeXBlKSkgeworICAgICAgaWYgKCFmcmFj
dGlvbkRpZ2l0cy0+aXNVbmRlZmluZWQoKSkgewogICAgICAgICAgIGRvdWJsZSBsb2d4ID0gZmxv
b3IobG9nMTAoeCkpOwogICAgICAgICAgIHggLz0gcG93KDEwLGxvZ3gpOwogICAgICAgICAgIGRv
dWJsZSBmeCA9IGZsb29yKHgqcG93KDEwLGYpKS9wb3coMTAsZik7CkBAIC0yNjMsNyArMjU2LDcg
QEAgVmFsdWUgTnVtYmVyUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICAgICAgfSBlbHNl
IHsKICAgICAgICAgICBidWZbaSsrXSA9IHJlc3VsdFswXTsKICAgICAgICAgICAKLSAgICAgICAg
ICBpZiAoZnJhY3Rpb25EaWdpdHMuaXNBKFVuZGVmaW5lZFR5cGUpKQorICAgICAgICAgIGlmIChm
cmFjdGlvbkRpZ2l0cy0+aXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgZiA9IGxlbmd0aC0x
OwogICAgICAgICAgIAogICAgICAgICAgIGlmIChsZW5ndGggPiAxICYmIGYgPiAwKSB7CkBAIC0z
MTAsMTAgKzMwMywxMCBAQCBWYWx1ZSBOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
CiAgICAgICBpbnQgZSA9IDA7CiAgICAgICBVU3RyaW5nIG07CiAgICAgICAKLSAgICAgIGRvdWJs
ZSBkcCA9IGFyZ3NbMF0udG9JbnRlZ2VyKGV4ZWMpOwotICAgICAgZG91YmxlIHggPSB2LnRvTnVt
YmVyKGV4ZWMpOworICAgICAgZG91YmxlIGRwID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4ZWMpOwor
ICAgICAgZG91YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKICAgICAgIGlmIChpc05hTihkcCkg
fHwgaXNOYU4oeCkgfHwgaXNJbmYoeCkpCi0gICAgICAgICAgcmV0dXJuIFN0cmluZyh2LnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgICAgICByZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICAgIAogICAgICAgVVN0cmluZyBzID0gIiI7CiAgICAgICBpZiAoeCA8IDApIHsKQEAgLTMy
Miw3ICszMTUsNyBAQCBWYWx1ZSBOdW1iZXJQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAg
ICAgICB9CiAgICAgICAKICAgICAgIGlmIChkcCA8IDEgfHwgZHAgPiAyMSkgewotICAgICAgICAg
IE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCisgICAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJhbmdlRXJyb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvUHJlY2lzaW9uKCkgYXJndW1lbnQgbXVz
dCBiZSBiZXR3ZWVuIDEgYW5kIDIxIik7CiAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVy
cik7CiAgICAgICAgICAgcmV0dXJuIGVycjsKQEAgLTM3Miw3ICszNjUsNyBAQCBWYWx1ZSBOdW1i
ZXJQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICB9CiAgICAgICAKICB9Ci0gIHJldHVy
biByZXN1bHQ7CisgIHJldHVybiBOVUxMOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gTnVtYmVyT2JqZWN0SW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMzk0LDEyICszODcsMTEgQEAgTnVtYmVyT2JqZWN0SW1wOjpOdW1iZXJPYmplY3RJbXAoRXhl
Y1N0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUHJvdG90eXBlSW1w
ICpudW1iZXJQcm90bykKICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKIHsKLSAg
VmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgLy8gTnVtYmVyLlByb3RvdHlwZQogICBwdXREaXJlY3Qo
cHJvdG90eXBlUHJvcGVydHlOYW1lLCBudW1iZXJQcm90byxEb250RW51bXxEb250RGVsZXRlfFJl
YWRPbmx5KTsKIAogICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICBwdXRE
aXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXJJbXA6Om9uZSgpLCBSZWFkT25seXxEb250
RGVsZXRlfERvbnRFbnVtKTsKKyAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwganNPbmUo
KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKIGJvb2wgTnVtYmVyT2JqZWN0
SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTQwNywxMiArMzk5LDEyIEBA
IGJvb2wgTnVtYmVyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgcmV0dXJuIGdldFN0
YXRpY1ZhbHVlU2xvdDxOdW1iZXJPYmplY3RJbXAsIEludGVybmFsRnVuY3Rpb25JbXA+KGV4ZWMs
ICZudW1iZXJUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgTnVt
YmVyT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqTnVtYmVyT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8vIEVDTUEgMTUuNy4zCiAgIHN3aXRjaCh0b2tl
bikgewogICBjYXNlIE5hTlZhbHVlOgotICAgIHJldHVybiBOdW1iZXIoTmFOKTsKKyAgICByZXR1
cm4ganNOYU4oKTsKICAgY2FzZSBOZWdJbmZpbml0eToKICAgICByZXR1cm4gTnVtYmVyKC1JbmYp
OwogICBjYXNlIFBvc0luZmluaXR5OgpAQCAtNDMyLDE4ICs0MjQsMTggQEAgYm9vbCBOdW1iZXJP
YmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1YwogCiAKIC8vIEVDTUEgMTUuNy4xCi1PYmplY3Qg
TnVtYmVyT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKQorT2JqZWN0SW1wICpOdW1iZXJPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIE9iamVjdEltcCAqcHJvdG8gPSBleGVjLT5sZXhp
Y2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk51bWJlclByb3RvdHlwZSgpLmltcCgpOwotICBPYmpl
Y3Qgb2JqKG5ldyBOdW1iZXJJbnN0YW5jZUltcChwcm90bykpOworICBPYmplY3RJbXAgKnByb3Rv
ID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5OdW1iZXJQcm90b3R5cGUoKTsK
KyAgT2JqZWN0SW1wICpvYmoobmV3IE51bWJlckluc3RhbmNlSW1wKHByb3RvKSk7CiAKLSAgTnVt
YmVyIG47CisgIGRvdWJsZSBuOwogICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAgbiA9IE51bWJl
cigwKTsKKyAgICBuID0gMDsKICAgZWxzZQotICAgIG4gPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
OworICAgIG4gPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKIAotICBvYmouc2V0SW50ZXJuYWxW
YWx1ZShuKTsKKyAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKG4pKTsKIAogICByZXR1
cm4gb2JqOwogfQpAQCAtNDU0LDEwICs0NDYsMTAgQEAgYm9vbCBOdW1iZXJPYmplY3RJbXA6Omlt
cGxlbWVudHNDYWxsKCkgYwogfQogCiAvLyBFQ01BIDE1LjcuMgotVmFsdWUgTnVtYmVyT2JqZWN0
SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpOdW1iZXJPYmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKIHsK
ICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQogICAgIHJldHVybiBOdW1iZXIoMCk7CiAgIGVsc2UKLSAg
ICByZXR1cm4gTnVtYmVyKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBOdW1i
ZXIoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L251bWJlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL251bWJlcl9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYg
LXAgLXUgLXIxLjkgSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaAk3IEF1ZyAyMDA1IDA2OjE3OjM1IC0wMDAwCTEu
OQorKysgSmF2YVNjcmlwdENvcmUva2pzL251bWJlcl9vYmplY3QuaAk4IEF1ZyAyMDA1IDAxOjAw
OjU2IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaSwgaW50IGxlbik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50
c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAg
KmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKIAogICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcsIFZh
bHVlT2YsIFRvRml4ZWQsIFRvRXhwb25lbnRpYWwsIFRvUHJlY2lzaW9uIH07CiAgIHByaXZhdGU6
CkBAIC03OSwxOSArNzksMjAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgICAg
IE51bWJlclByb3RvdHlwZUltcCAqbnVtYmVyUHJvdG8pOwogCiAgICAgdmlydHVhbCBib29sIGlt
cGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3Qo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdElt
cCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwor
ICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAogICAgIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwogICAgIGVudW0geyBOYU5WYWx1ZSwgTmVnSW5maW5pdHksIFBvc0luZmluaXR5LCBNYXhW
YWx1ZSwgTWluVmFsdWUgfTsKIAogICAgIENvbXBsZXRpb24gZXhlY3V0ZShjb25zdCBMaXN0ICYp
OwotICAgIE9iamVjdCBjb25zdHJ1Y3QoY29uc3QgTGlzdCAmKTsKKyAgICBPYmplY3RJbXAgKmNv
bnN0cnVjdChjb25zdCBMaXN0ICYpOwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ5
CmRpZmYgLXAgLXUgLXIxLjQ5IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCi0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAk3IEF1ZyAyMDA1IDA2OjE3OjM1IC0wMDAwCTEuNDkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCTggQXVnIDIwMDUgMDE6MDA6NTYgLTAw
MDAKQEAgLTQwLDEwICs0MCwxMCBAQAogI2luY2x1ZGUgIm5vZGVzLmgiCiAKICNpZm5kZWYgTkRF
QlVHCi0jZGVmaW5lIEpBVkFTQ1JJUFRfQ0FMTF9UUkFDSU5HIFllcworLy8jZGVmaW5lIEpBVkFT
Q1JJUFRfQ0FMTF9UUkFDSU5HIDEKICNlbmRpZgogCi0jaWZkZWYgSkFWQVNDUklQVF9DQUxMX1RS
QUNJTkcKKyNpZiBKQVZBU0NSSVBUX0NBTExfVFJBQ0lORwogc3RhdGljIGJvb2wgX3RyYWNlSmF2
YVNjcmlwdCA9IGZhbHNlOwogCiBleHRlcm4gIkMiIHsKQEAgLTYzLDIxICs2MywxNCBAQCBuYW1l
c3BhY2UgS0pTIHsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9iamVjdCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotT2JqZWN0IE9iamVjdDo6
ZHluYW1pY0Nhc3QoY29uc3QgVmFsdWUgJnYpCitWYWx1ZUltcCAqT2JqZWN0SW1wOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAodi5pc051bGwoKSB8fCB2LnR5cGUoKSAhPSBPYmplY3RUeXBlKQotICAgIHJldHVybiBP
YmplY3QoMCk7CisgIGFzc2VydChpbXBsZW1lbnRzQ2FsbCgpKTsKIAotICByZXR1cm4gT2JqZWN0
KHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYuaW1wKCkpKTsKLX0KLQotCi1WYWx1ZSBPYmplY3Q6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
Ci17IAogI2lmIEtKU19NQVhfU1RBQ0sgPiAwCiAgIHN0YXRpYyBpbnQgZGVwdGggPSAwOyAvLyBz
dW0gb2YgYWxsIGNvbmN1cnJlbnQgaW50ZXJwcmV0ZXJzCiAKLSNpZmRlZiBKQVZBU0NSSVBUX0NB
TExfVFJBQ0lORworI2lmIEpBVkFTQ1JJUFRfQ0FMTF9UUkFDSU5HCiAgICAgc3RhdGljIGJvb2wg
dHJhY2luZyA9IGZhbHNlOwogICAgIGlmICh0cmFjZUphdmFTY3JpcHQoKSAmJiAhdHJhY2luZykg
ewogICAgICAgICB0cmFjaW5nID0gdHJ1ZTsKQEAgLTg3LDcgKzgwLDcgQEAgVmFsdWUgT2JqZWN0
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZQogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IGFyZ3Muc2l6ZSgpOyBqKyspIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVw
dGg7IGkrKykKICAgICAgICAgICAgICAgICBwdXRjaGFyICgnICcpOwotICAgICAgICAgICAgcHJp
bnRmICgiKioqIGFyZ1slZF0gPSAlc1xuIiwgaiwgYXJnc1tqXS50b1N0cmluZyhleGVjKS5hc2Np
aSgpKTsKKyAgICAgICAgICAgIHByaW50ZiAoIioqKiBhcmdbJWRdID0gJXNcbiIsIGosIGFyZ3Nb
al0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICAgICAgICB9CiAgICAgICAgIHRyYWNpbmcg
PSBmYWxzZTsKICAgICB9CkBAIC05NSwyNSArODgsMjUgQEAgVmFsdWUgT2JqZWN0OjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZQogCiAgIGlmICgrK2RlcHRoID4gS0pTX01BWF9TVEFDSykgewog
ICAgIC0tZGVwdGg7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VF
cnJvciwKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmFuZ2VFcnJv
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW11bSBjYWxsIHN0YWNrIHNp
emUgZXhjZWVkZWQuIik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJu
IGVycjsKICAgfQogI2VuZGlmCiAKLSAgVmFsdWUgcmV0ID0gaW1wKCktPmNhbGwoZXhlYyx0aGlz
T2JqLGFyZ3MpOyAKKyAgVmFsdWVJbXAgKnJldCA9IGNhbGxBc0Z1bmN0aW9uKGV4ZWMsdGhpc09i
aixhcmdzKTsgCiAKICNpZiBLSlNfTUFYX1NUQUNLID4gMAogICAtLWRlcHRoOwogI2VuZGlmCiAK
LSNpZmRlZiBKQVZBU0NSSVBUX0NBTExfVFJBQ0lORworI2lmIEpBVkFTQ1JJUFRfQ0FMTF9UUkFD
SU5HCiAgICAgaWYgKHRyYWNlSmF2YVNjcmlwdCgpICYmICF0cmFjaW5nKSB7CiAgICAgICAgIHRy
YWNpbmcgPSB0cnVlOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCiAg
ICAgICAgICAgICBwdXRjaGFyICgnICcpOwotICAgICAgICBwcmludGYgKCIqKiogcmV0dXJuaW5n
OiAgJXNcbiIsIHJldC50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKKyAgICAgICAgcHJpbnRmICgi
KioqIHJldHVybmluZzogICVzXG4iLCByZXQtPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwogICAg
ICAgICB0cmFjaW5nID0gZmFsc2U7CiAgICAgfQogI2VuZGlmCkBAIC0xMjMsMzcgKzExNiwxMyBA
QCBWYWx1ZSBPYmplY3Q6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLU9iamVjdEltcDo6T2JqZWN0SW1wKGNvbnN0IE9iamVjdCAmcHJvdG8p
Ci0gIDogX3Byb3RvKHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHByb3RvLmltcCgpKSksIF9pbnRl
cm5hbFZhbHVlKDBMKQotewotICAvL2ZwcmludGYoc3RkZXJyLCJPYmplY3RJbXA6Ok9iamVjdElt
cCAlcFxuIiwodm9pZCopdGhpcyk7Ci19Ci0KLU9iamVjdEltcDo6T2JqZWN0SW1wKE9iamVjdElt
cCAqcHJvdG8pCi0gIDogX3Byb3RvKHByb3RvKSwgX2ludGVybmFsVmFsdWUoMEwpCi17Ci0gIC8v
ZnByaW50ZihzdGRlcnIsIk9iamVjdEltcDo6T2JqZWN0SW1wICVwXG4iLCh2b2lkKil0aGlzKTsK
LX0KLQotT2JqZWN0SW1wOjpPYmplY3RJbXAoKQotewotICAvL2ZwcmludGYoc3RkZXJyLCJPYmpl
Y3RJbXA6Ok9iamVjdEltcCAlcFxuIiwodm9pZCopdGhpcyk7Ci0gIF9wcm90byA9IE51bGxJbXA6
OnN0YXRpY051bGw7Ci0gIF9pbnRlcm5hbFZhbHVlID0gMEw7Ci19Ci0KLU9iamVjdEltcDo6fk9i
amVjdEltcCgpCi17Ci0gIC8vZnByaW50ZihzdGRlcnIsIk9iamVjdEltcDo6fk9iamVjdEltcCAl
cFxuIiwodm9pZCopdGhpcyk7Ci19Ci0KIHZvaWQgT2JqZWN0SW1wOjptYXJrKCkKIHsKLSAgLy9m
cHJpbnRmKHN0ZGVyciwiT2JqZWN0SW1wOjptYXJrKCkgJXBcbiIsKHZvaWQqKXRoaXMpOwotICBW
YWx1ZUltcDo6bWFyaygpOworICBBbGxvY2F0ZWRWYWx1ZUltcDo6bWFyaygpOwogCi0gIGlmIChf
cHJvdG8gJiYgIV9wcm90by0+bWFya2VkKCkpCi0gICAgX3Byb3RvLT5tYXJrKCk7CisgIFZhbHVl
SW1wICpwcm90byA9IF9wcm90bzsKKyAgaWYgKCFwcm90by0+bWFya2VkKCkpCisgICAgcHJvdG8t
Pm1hcmsoKTsKIAogICBfcHJvcC5tYXJrKCk7CiAKQEAgLTE2MywzOSArMTMyLDE0IEBAIHZvaWQg
T2JqZWN0SW1wOjptYXJrKCkKICAgX3Njb3BlLm1hcmsoKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZv
ICpPYmplY3RJbXA6OmNsYXNzSW5mbygpIGNvbnN0Ci17Ci0gIHJldHVybiAwOwotfQotCi1ib29s
IE9iamVjdEltcDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvICppbmZvKSBjb25zdAotewotICBp
ZiAoIWluZm8pCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IENsYXNzSW5mbyAqY2kgPSBj
bGFzc0luZm8oKTsKLSAgaWYgKCFjaSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgd2hpbGUgKGNp
ICYmIGNpICE9IGluZm8pCi0gICAgY2kgPSBjaS0+cGFyZW50Q2xhc3M7Ci0KLSAgcmV0dXJuIChj
aSA9PSBpbmZvKTsKLX0KLQogVHlwZSBPYmplY3RJbXA6OnR5cGUoKSBjb25zdAogewogICByZXR1
cm4gT2JqZWN0VHlwZTsKIH0KIAotVmFsdWUgT2JqZWN0SW1wOjpwcm90b3R5cGUoKSBjb25zdAot
ewotICByZXR1cm4gVmFsdWUoX3Byb3RvKTsKLX0KLQotdm9pZCBPYmplY3RJbXA6OnNldFByb3Rv
dHlwZShjb25zdCBWYWx1ZSAmcHJvdG8pCitjb25zdCBDbGFzc0luZm8gKk9iamVjdEltcDo6Y2xh
c3NJbmZvKCkgY29uc3QKIHsKLSAgX3Byb3RvID0gcHJvdG8uaW1wKCk7CisgIHJldHVybiAwOwog
fQogCiBVU3RyaW5nIE9iamVjdEltcDo6Y2xhc3NOYW1lKCkgY29uc3QKQEAgLTIwNiw3ICsxNTAs
NyBAQCBVU3RyaW5nIE9iamVjdEltcDo6Y2xhc3NOYW1lKCkgY29uc3QKICAgcmV0dXJuICJPYmpl
Y3QiOwogfQogCi1WYWx1ZSBPYmplY3RJbXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK1ZhbHVlSW1wICpPYmplY3RJbXA6OmdldChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIHsK
ICAgUHJvcGVydHlTbG90IHNsb3Q7CiAKQEAgLTIxNiw3ICsxNjAsNyBAQCBWYWx1ZSBPYmplY3RJ
bXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvCiAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
VmFsdWUgT2JqZWN0SW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0CitWYWx1ZUltcCAqT2JqZWN0SW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgIFByb3BlcnR5U2xvdCBzbG90OwogICBpZiAo
Y29uc3RfY2FzdDxPYmplY3RJbXAgKj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKQpAQCAtMjI1LDcgKzE2OSw3IEBAIFZhbHVlIE9iamVjdEltcDo6Z2V0
KEV4ZWNTdGF0ZSAqZXhlYywgdW4KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIE9i
amVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Citib29sIE9iamVjdEltcDo6Z2V0UHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlSW1wKiYgcmVzdWx0KSBjb25zdAogewogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgaWYgKGNv
bnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkgewpAQCAtMjM2LDcgKzE4MCw3IEBAIGJvb2wgT2JqZWN0SW1wOjpnZXRQ
cm9wZXJ0eShFeGVjU3RhdGUgKmUKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE9iamVjdElt
cDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0Citib29sIE9iamVjdEltcDo6Z2V0UHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wKiYgcmVzdWx0KSBjb25zdAog
ewogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgaWYgKGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRo
aXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgewpAQCAtMjU2
LDcgKzIwMCw3IEBAIGJvb2wgT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXQKICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIFZhbHVlSW1wICpwcm90byA9IGltcC0+X3Byb3Rv
OwotICAgIGlmIChwcm90by0+ZGlzcGF0Y2hUeXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgICBpZiAo
IXByb3RvLT5pc09iamVjdCgpKQogICAgICAgYnJlYWs7CiAgICAgCiAgICAgaW1wID0gc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wICo+KHByb3RvKTsKQEAgLTI3MSwxMCArMjE1LDkgQEAgYm9vbCBPYmpl
Y3RJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogfQogCiAvLyBFQ01BIDguNi4yLjIKLXZv
aWQgT2JqZWN0SW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKQordm9pZCBPYmplY3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKLSAgYXNzZXJ0
KCF2YWx1ZS5pc051bGwoKSk7CisgIGFzc2VydCh2YWx1ZSk7CiAKICAgLy8gbm9uLXN0YW5kYXJk
IG5ldHNjYXBlIGV4dGVuc2lvbgogICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpLT5zcGVjaWFsUHJvdG90eXBlSWRlbnRpZmllcigpKSB7CkBAIC0yOTQsMTEg
KzIzNywxMSBAQCB2b2lkIE9iamVjdEltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uCiAgICAg
cmV0dXJuOwogICB9CiAKLSAgX3Byb3AucHV0KHByb3BlcnR5TmFtZSx2YWx1ZS5pbXAoKSxhdHRy
KTsKKyAgX3Byb3AucHV0KHByb3BlcnR5TmFtZSx2YWx1ZSxhdHRyKTsKIH0KIAogdm9pZCBPYmpl
Y3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgICAg
ICAgICAgICAgICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBwdXQoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgYXR0cik7CiB9CkBAIC0zNDAsNiAr
MjgzLDEyIEBAIGJvb2wgT2JqZWN0SW1wOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUKICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAorYm9vbCBPYmplY3RJbXA6Omhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoreworICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8T2JqZWN0SW1wICo+KHRoaXMp
LT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwogLy8g
RUNNQSA4LjYuMi41CiBib29sIE9iamVjdEltcDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICov
KmV4ZWMqLywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKQogewpAQCAtMzcwLDI4ICsz
MTksMjggQEAgdm9pZCBPYmplY3RJbXA6OmRlbGV0ZUFsbFByb3BlcnRpZXMoIEV4ZQogfQogCiAv
LyBFQ01BIDguNi4yLjYKLVZhbHVlIE9iamVjdEltcDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSAq
ZXhlYywgVHlwZSBoaW50KSBjb25zdAorVmFsdWVJbXAgKk9iamVjdEltcDo6ZGVmYXVsdFZhbHVl
KEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdAogewogICBpZiAoaGludCAhPSBTdHJp
bmdUeXBlICYmIGhpbnQgIT0gTnVtYmVyVHlwZSkgewogICAgIC8qIFByZWZlciBTdHJpbmcgZm9y
IERhdGUgb2JqZWN0cyAqLwotICAgIGlmIChfcHJvdG8gPT0gZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5EYXRlUHJvdG90eXBlKCkuaW1wKCkpCisgICAgaWYgKF9wcm90byA9PSBl
eGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkRhdGVQcm90b3R5cGUoKSkKICAgICAg
IGhpbnQgPSBTdHJpbmdUeXBlOwogICAgIGVsc2UKICAgICAgIGhpbnQgPSBOdW1iZXJUeXBlOwog
ICB9CiAKLSAgVmFsdWUgdjsKKyAgVmFsdWVJbXAgKnY7CiAgIGlmIChoaW50ID09IFN0cmluZ1R5
cGUpCiAgICAgdiA9IGdldChleGVjLHRvU3RyaW5nUHJvcGVydHlOYW1lKTsKICAgZWxzZQogICAg
IHYgPSBnZXQoZXhlYyx2YWx1ZU9mUHJvcGVydHlOYW1lKTsKIAotICBpZiAodi50eXBlKCkgPT0g
T2JqZWN0VHlwZSkgewotICAgIE9iamVjdCBvID0gT2JqZWN0KHN0YXRpY19jYXN0PE9iamVjdElt
cCo+KHYuaW1wKCkpKTsKLSAgICBpZiAoby5pbXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNwZWMgc2F5
cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCi0gICAgICBPYmplY3QgdGhpc09iaiA9IE9i
amVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMpKTsKLSAgICAgIFZhbHVlIGRlZiA9IG8u
Y2FsbChleGVjLHRoaXNPYmosTGlzdDo6ZW1wdHkoKSk7Ci0gICAgICBUeXBlIGRlZlR5cGUgPSBk
ZWYudHlwZSgpOworICBpZiAodi0+aXNPYmplY3QoKSkgeworICAgIE9iamVjdEltcCAqbyA9IHN0
YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOworICAgIGlmIChvLT5pbXBsZW1lbnRzQ2FsbCgpKSB7
IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCisgICAgICBPYmplY3RJ
bXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMpOworICAgICAgVmFsdWVJ
bXAgKmRlZiA9IG8tPmNhbGwoZXhlYyx0aGlzT2JqLExpc3Q6OmVtcHR5KCkpOworICAgICAgVHlw
ZSBkZWZUeXBlID0gZGVmLT50eXBlKCk7CiAgICAgICBpZiAoZGVmVHlwZSA9PSBVbnNwZWNpZmll
ZFR5cGUgfHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8CiAgICAgICAgICAgZGVmVHlwZSA9
PSBOdWxsVHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5UeXBlIHx8CiAgICAgICAgICAgZGVmVHlw
ZSA9PSBTdHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVtYmVyVHlwZSkgewpAQCAtNDA1LDEyICsz
NTQsMTIgQEAgVmFsdWUgT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlIAogICBlbHNl
CiAgICAgdiA9IGdldChleGVjLHRvU3RyaW5nUHJvcGVydHlOYW1lKTsKIAotICBpZiAodi50eXBl
KCkgPT0gT2JqZWN0VHlwZSkgewotICAgIE9iamVjdCBvID0gT2JqZWN0KHN0YXRpY19jYXN0PE9i
amVjdEltcCo+KHYuaW1wKCkpKTsKLSAgICBpZiAoby5pbXBsZW1lbnRzQ2FsbCgpKSB7IC8vIHNw
ZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCi0gICAgICBPYmplY3QgdGhpc09i
aiA9IE9iamVjdChjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMpKTsKLSAgICAgIFZhbHVlIGRl
ZiA9IG8uY2FsbChleGVjLHRoaXNPYmosTGlzdDo6ZW1wdHkoKSk7Ci0gICAgICBUeXBlIGRlZlR5
cGUgPSBkZWYudHlwZSgpOworICBpZiAodi0+aXNPYmplY3QoKSkgeworICAgIE9iamVjdEltcCAq
byA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHYpOworICAgIGlmIChvLT5pbXBsZW1lbnRzQ2Fs
bCgpKSB7IC8vIHNwZWMgc2F5cyAibm90IHByaW1pdGl2ZSB0eXBlIiBidXQgLi4uCisgICAgICBP
YmplY3RJbXAgKnRoaXNPYmogPSBjb25zdF9jYXN0PE9iamVjdEltcCo+KHRoaXMpOworICAgICAg
VmFsdWVJbXAgKmRlZiA9IG8tPmNhbGwoZXhlYyx0aGlzT2JqLExpc3Q6OmVtcHR5KCkpOworICAg
ICAgVHlwZSBkZWZUeXBlID0gZGVmLT50eXBlKCk7CiAgICAgICBpZiAoZGVmVHlwZSA9PSBVbnNw
ZWNpZmllZFR5cGUgfHwgZGVmVHlwZSA9PSBVbmRlZmluZWRUeXBlIHx8CiAgICAgICAgICAgZGVm
VHlwZSA9PSBOdWxsVHlwZSB8fCBkZWZUeXBlID09IEJvb2xlYW5UeXBlIHx8CiAgICAgICAgICAg
ZGVmVHlwZSA9PSBTdHJpbmdUeXBlIHx8IGRlZlR5cGUgPT0gTnVtYmVyVHlwZSkgewpAQCAtNDIy
LDIzICszNzEsMjAgQEAgVmFsdWUgT2JqZWN0SW1wOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRlIAog
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgcmV0dXJuIGV4ZWMtPmV4Y2VwdGlvbigp
OwogCi0gIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFR5cGVFcnJvciwgSTE4Tl9O
T09QKCJObyBkZWZhdWx0IHZhbHVlIikpOworICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYywgVHlwZUVycm9yLCBJMThOX05PT1AoIk5vIGRlZmF1bHQgdmFsdWUiKSk7CiAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICByZXR1cm4gZXJyOwogfQogCi1jb25zdCBIYXNoRW50
cnkqIE9iamVjdEltcDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUgKSBjb25zdAorY29uc3QgSGFzaEVudHJ5KiBPYmplY3RJbXA6OmZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
IGNvbnN0IENsYXNzSW5mbyAqaW5mbyA9IGNsYXNzSW5mbygpOwotICB3aGlsZSAoaW5mbykgewot
ICAgIGlmIChpbmZvLT5wcm9wSGFzaFRhYmxlKSB7Ci0gICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeShpbmZvLT5wcm9wSGFzaFRhYmxlLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgaWYgKGUpCisgIGZvciAoY29uc3QgQ2xhc3NJbmZvICppbmZvID0gY2xhc3NJbmZvKCk7
IGluZm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAgIGlmIChjb25zdCBIYXNoVGFi
bGUgKnByb3BIYXNoVGFibGUgPSBpbmZvLT5wcm9wSGFzaFRhYmxlKSB7CisgICAgICBpZiAoY29u
c3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkocHJvcEhhc2hUYWJsZSwgcHJvcGVy
dHlOYW1lKSkKICAgICAgICAgcmV0dXJuIGU7CiAgICAgfQotICAgIGluZm8gPSBpbmZvLT5wYXJl
bnRDbGFzczsKICAgfQotICByZXR1cm4gMEw7CisgIHJldHVybiAwOwogfQogCiBib29sIE9iamVj
dEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0CkBAIC00NDYsMTMgKzM5MiwxMyBAQCBi
b29sIE9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvCiAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IE9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqLypleGVjKi8sIGNv
bnN0IExpc3QgJi8qYXJncyovKQorT2JqZWN0SW1wICpPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVj
U3RhdGUgKi8qZXhlYyovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKIHsKICAgYXNzZXJ0KGZhbHNl
KTsKLSAgcmV0dXJuIE9iamVjdCgwKTsKKyAgcmV0dXJuIE5VTEw7CiB9CiAKLU9iamVjdCBPYmpl
Y3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0
IFVTdHJpbmcgJi8qc291cmNlVVJMKi8sIGludCAvKmxpbmVOdW1iZXIqLykKK09iamVjdEltcCAq
T2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBj
b25zdCBVU3RyaW5nICYvKnNvdXJjZVVSTCovLCBpbnQgLypsaW5lTnVtYmVyKi8pCiB7CiAgIHJl
dHVybiBjb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CkBAIC00NjIsMTAgKzQwOCwxMCBAQCBib29s
IE9iamVjdEltcDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdAogICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIE9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKi8qZXhlYyovLCBPYmplY3QgJi8qdGhp
c09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKK1ZhbHVlSW1wICpPYmplY3RJbXA6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLypleGVjKi8sIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNv
bnN0IExpc3QgJi8qYXJncyovKQogewogICBhc3NlcnQoZmFsc2UpOwotICByZXR1cm4gT2JqZWN0
KDApOworICByZXR1cm4gTlVMTDsKIH0KIAogYm9vbCBPYmplY3RJbXA6OmltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpIGNvbnN0CkBAIC00NzMsMTkgKzQxOSwxOSBAQCBib29sIE9iamVjdEltcDo6aW1w
bGVtZW50c0hhc0luc3RhbmNlKCkgCiAgIHJldHVybiBmYWxzZTsKIH0KIAotQm9vbGVhbiBPYmpl
Y3RJbXA6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSAqLypleGVjKi8sIGNvbnN0IFZhbHVlICYvKnZh
bHVlKi8pCitib29sIE9iamVjdEltcDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlICovKmV4ZWMqLywg
VmFsdWVJbXAgKi8qdmFsdWUqLykKIHsKICAgYXNzZXJ0KGZhbHNlKTsKLSAgcmV0dXJuIEJvb2xl
YW4oZmFsc2UpOworICByZXR1cm4gZmFsc2U7CiB9CiAKIFJlZmVyZW5jZUxpc3QgT2JqZWN0SW1w
Ojpwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJzaXZlKQogewogICBSZWZlcmVu
Y2VMaXN0IGxpc3Q7Ci0gIGlmIChfcHJvdG8gJiYgX3Byb3RvLT5kaXNwYXRjaFR5cGUoKSA9PSBP
YmplY3RUeXBlICYmIHJlY3Vyc2l2ZSkKKyAgaWYgKF9wcm90by0+aXNPYmplY3QoKSAmJiByZWN1
cnNpdmUpCiAgICAgbGlzdCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KF9wcm90byktPnByb3BM
aXN0KGV4ZWMscmVjdXJzaXZlKTsKIAotICBfcHJvcC5hZGRFbnVtZXJhYmxlc1RvUmVmZXJlbmNl
TGlzdChsaXN0LCBPYmplY3QodGhpcykpOworICBfcHJvcC5hZGRFbnVtZXJhYmxlc1RvUmVmZXJl
bmNlTGlzdChsaXN0LCB0aGlzKTsKIAogICAvLyBBZGQgcHJvcGVydGllcyBmcm9tIHRoZSBzdGF0
aWMgaGFzaHRhYmxlIG9mIHByb3BlcnRpZXMKICAgY29uc3QgQ2xhc3NJbmZvICppbmZvID0gY2xh
c3NJbmZvKCk7CkBAIC01MDQsMjIgKzQ1MCw3IEBAIFJlZmVyZW5jZUxpc3QgT2JqZWN0SW1wOjpw
cm9wTGlzdChFeGVjU3QKICAgcmV0dXJuIGxpc3Q7CiB9CiAKLVZhbHVlIE9iamVjdEltcDo6aW50
ZXJuYWxWYWx1ZSgpIGNvbnN0Ci17Ci0gIHJldHVybiBWYWx1ZShfaW50ZXJuYWxWYWx1ZSk7Ci19
Ci0KLXZvaWQgT2JqZWN0SW1wOjpzZXRJbnRlcm5hbFZhbHVlKGNvbnN0IFZhbHVlICZ2KQotewot
ICBfaW50ZXJuYWxWYWx1ZSA9IHYuaW1wKCk7Ci19Ci0KLXZvaWQgT2JqZWN0SW1wOjpzZXRJbnRl
cm5hbFZhbHVlKFZhbHVlSW1wICp2KQotewotICBfaW50ZXJuYWxWYWx1ZSA9IHY7Ci19Ci0KLVZh
bHVlIE9iamVjdEltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJl
ZFR5cGUpIGNvbnN0CitWYWx1ZUltcCAqT2JqZWN0SW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUg
KmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKIHsKICAgcmV0dXJuIGRlZmF1bHRWYWx1
ZShleGVjLHByZWZlcnJlZFR5cGUpOwogfQpAQCAtNTMxLDIzICs0NjIsMjMgQEAgYm9vbCBPYmpl
Y3RJbXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKi8qZQogCiBkb3VibGUgT2JqZWN0SW1wOjp0b051
bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIFZhbHVlIHByaW0gPSB0b1ByaW1pdGl2
ZShleGVjLE51bWJlclR5cGUpOworICBWYWx1ZUltcCAqcHJpbSA9IHRvUHJpbWl0aXZlKGV4ZWMs
TnVtYmVyVHlwZSk7CiAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgLy8gc2hvdWxkIGJlIHBp
Y2tlZCB1cCBzb29uIGluIG5vZGVzLmNwcAogICAgIHJldHVybiAwLjA7Ci0gIHJldHVybiBwcmlt
LnRvTnVtYmVyKGV4ZWMpOworICByZXR1cm4gcHJpbS0+dG9OdW1iZXIoZXhlYyk7CiB9CiAKIFVT
dHJpbmcgT2JqZWN0SW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIFZh
bHVlIHByaW0gPSB0b1ByaW1pdGl2ZShleGVjLFN0cmluZ1R5cGUpOworICBWYWx1ZUltcCAqcHJp
bSA9IHRvUHJpbWl0aXZlKGV4ZWMsU3RyaW5nVHlwZSk7CiAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIG5vZGVzLmNwcAogICAgIHJldHVy
biAiIjsKLSAgcmV0dXJuIHByaW0udG9TdHJpbmcoZXhlYyk7CisgIHJldHVybiBwcmltLT50b1N0
cmluZyhleGVjKTsKIH0KIAotT2JqZWN0IE9iamVjdEltcDo6dG9PYmplY3QoRXhlY1N0YXRlICov
KmV4ZWMqLykgY29uc3QKK09iamVjdEltcCAqT2JqZWN0SW1wOjp0b09iamVjdChFeGVjU3RhdGUg
Ki8qZXhlYyovKSBjb25zdAogewotICByZXR1cm4gT2JqZWN0KGNvbnN0X2Nhc3Q8T2JqZWN0SW1w
Kj4odGhpcykpOworICByZXR1cm4gY29uc3RfY2FzdDxPYmplY3RJbXAqPih0aGlzKTsKIH0KIAog
dm9pZCBPYmplY3RJbXA6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCkBAIC01NTcsNyArNDg4LDcgQEAgdm9pZCBPYmpl
Y3RJbXA6OnB1dERpcmVjdChjb25zdCBJZGVudGlmaQogCiB2b2lkIE9iamVjdEltcDo6cHV0RGly
ZWN0KGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgaW50IHZhbHVlLCBpbnQgYXR0cikK
IHsKLSAgICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLCBOdW1iZXJJbXA6OmNyZWF0ZSh2YWx1ZSks
IGF0dHIpOworICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIGpzTnVtYmVyKHZhbHVlKSwgYXR0
cik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvciAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NzQsMTAgKzUwNSwxMCBAQCBj
b25zdCBjaGFyICogY29uc3QgZXJyb3JOYW1lc0FycltdID0gewogCiBjb25zdCBjaGFyICogY29u
c3QgKiBjb25zdCBFcnJvcjo6ZXJyb3JOYW1lcyA9IGVycm9yTmFtZXNBcnI7CiAKLU9iamVjdCBF
cnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSAqZXhlYywgRXJyb3JUeXBlIGVycnR5cGUsIGNvbnN0IGNo
YXIgKm1lc3NhZ2UsCitPYmplY3RJbXAgKkVycm9yOjpjcmVhdGUoRXhlY1N0YXRlICpleGVjLCBF
cnJvclR5cGUgZXJydHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAgICAgICAg
ICAgIGludCBsaW5lbm8sIGludCBzb3VyY2VJZCwgY29uc3QgVVN0cmluZyAqc291cmNlVVJMKQog
ewotICBPYmplY3QgY29uczsKKyAgT2JqZWN0SW1wICpjb25zOwogICBzd2l0Y2ggKGVycnR5cGUp
IHsKICAgY2FzZSBFdmFsRXJyb3I6CiAgICAgY29ucyA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRl
cigpLT5idWlsdGluRXZhbEVycm9yKCk7CkBAIC02MDYsMjEgKzUzNywyMSBAQCBPYmplY3QgRXJy
b3I6OmNyZWF0ZShFeGVjU3RhdGUgKmV4ZWMsIEVyCiAgICAgbWVzc2FnZSA9IGVycm9yTmFtZXNb
ZXJydHlwZV07CiAgIExpc3QgYXJnczsKICAgYXJncy5hcHBlbmQoU3RyaW5nKG1lc3NhZ2UpKTsK
LSAgT2JqZWN0IGVyciA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoY29ucy5jb25zdHJ1Y3QoZXhlYyxh
cmdzKSk7CisgIE9iamVjdEltcCAqZXJyID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGNvbnMt
PmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKIAogICBpZiAobGluZW5vICE9IC0xKQotICAgIGVyci5w
dXQoZXhlYywgImxpbmUiLCBOdW1iZXIobGluZW5vKSk7CisgICAgZXJyLT5wdXQoZXhlYywgImxp
bmUiLCBOdW1iZXIobGluZW5vKSk7CiAgIGlmIChzb3VyY2VJZCAhPSAtMSkKLSAgICBlcnIucHV0
KGV4ZWMsICJzb3VyY2VJZCIsIE51bWJlcihzb3VyY2VJZCkpOworICAgIGVyci0+cHV0KGV4ZWMs
ICJzb3VyY2VJZCIsIE51bWJlcihzb3VyY2VJZCkpOwogCiAgIGlmKHNvdXJjZVVSTCkKLSAgIGVy
ci5wdXQoZXhlYywic291cmNlVVJMIiwgU3RyaW5nKCpzb3VyY2VVUkwpKTsKKyAgIGVyci0+cHV0
KGV4ZWMsInNvdXJjZVVSTCIsIFN0cmluZygqc291cmNlVVJMKSk7CiAgCiAgIHJldHVybiBlcnI7
CiAKIC8qCiAjaWZuZGVmIE5ERUJVRwotICBjb25zdCBjaGFyICptc2cgPSBlcnIuZ2V0KCJtZXNz
YWdlIikudG9TdHJpbmcoKS52YWx1ZSgpLmFzY2lpKCk7CisgIGNvbnN0IGNoYXIgKm1zZyA9IGVy
ci0+Z2V0KCJtZXNzYWdlIiktPnRvU3RyaW5nKCkudmFsdWUoKS5hc2NpaSgpOwogICBpZiAobCA+
PSAwKQogICAgICAgZnByaW50ZihzdGRlcnIsICJLSlM6ICVzIGF0IGxpbmUgJWQuICVzXG4iLCBl
c3RyLCBsLCBtc2cpOwogICBlbHNlCkBAIC02MzMsNyArNTY0LDcgQEAgT2JqZWN0IEVycm9yOjpj
cmVhdGUoRXhlY1N0YXRlICpleGVjLCBFcgogCiBPYmplY3RJbXAgKmVycm9yKEV4ZWNTdGF0ZSAq
ZXhlYywgRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGludCBsaW5lLCBpbnQg
c291cmNlSWQsIGNvbnN0IFVTdHJpbmcgKnNvdXJjZVVSTCkKIHsKLSAgICByZXR1cm4gRXJyb3I6
OmNyZWF0ZShleGVjLCB0eXBlLCBtZXNzYWdlLCBsaW5lLCBzb3VyY2VJZCwgc291cmNlVVJMKS5p
bXAoKTsKKyAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCB0eXBlLCBtZXNzYWdlLCBsaW5l
LCBzb3VyY2VJZCwgc291cmNlVVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApk
aWZmIC1wIC11IC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9vYmplY3QuaAk3IEF1ZyAyMDA1IDA2OjE3OjM1IC0wMDAwCTEuNDAKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAk4IEF1ZyAyMDA1IDAxOjAwOjU3IC0wMDAwCkBAIC0y
Miw5ICsyMiw4IEBACiAgKgogICovCiAKLQotI2lmbmRlZiBfS0pTX09CSkVDVF9IXwotI2RlZmlu
ZSBfS0pTX09CSkVDVF9IXworI2lmbmRlZiBLSlNfT0JKRUNUX0gKKyNkZWZpbmUgS0pTX09CSkVD
VF9ICiAKIC8vIE9iamVjdHMKIApAQCAtMzgsOSArMzcsNyBAQAogI2RlZmluZSBLSlNfTUFYX1NU
QUNLIDEwMDAKICNlbmRpZgogCi0jaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJpbnRlcnBy
ZXRlci5oIgotI2luY2x1ZGUgInJlZmVyZW5jZV9saXN0LmgiCiAjaW5jbHVkZSAicHJvcGVydHlf
bWFwLmgiCiAjaW5jbHVkZSAicHJvcGVydHlfc2xvdC5oIgogI2luY2x1ZGUgInNjb3BlX2NoYWlu
LmgiCkBAIC01MSw2ICs0OCwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgSGFzaEVudHJ5
OwogICBjbGFzcyBMaXN0SW1wOwogCisgIC8vIEVDTUEgMjYyLTMgOC42LjEKKyAgLy8gUHJvcGVy
dHkgYXR0cmlidXRlcworICBlbnVtIEF0dHJpYnV0ZSB7IE5vbmUgICAgICAgPSAwLAorICAgICAg
ICAgICAgICAgICAgIFJlYWRPbmx5ICAgPSAxIDw8IDEsIC8vIHByb3BlcnR5IGNhbiBiZSBvbmx5
IHJlYWQsIG5vdCB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgRG9udEVudW0gICA9IDEgPDwg
MiwgLy8gcHJvcGVydHkgZG9lc24ndCBhcHBlYXIgaW4gKGZvciAuLiBpbiAuLikKKyAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlID0gMSA8PCAzLCAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxl
dGVkCisgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwgICA9IDEgPDwgNCwgLy8gYW4gaW50ZXJu
YWwgcHJvcGVydHksIHNldCB0byBieXBhc3MgY2hlY2tzCisgICAgICAgICAgICAgICAgICAgRnVu
Y3Rpb24gICA9IDEgPDwgNSB9OyAvLyBwcm9wZXJ0eSBpcyBhIGZ1bmN0aW9uIC0gb25seSB1c2Vk
IGJ5IHN0YXRpYyBoYXNodGFibGVzCisKICAgLyoqCiAgICAqIENsYXNzIEluZm9ybWF0aW9uCiAg
ICAqLwpAQCAtNzQsMjcgKzgwLDIyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgKmR1bW15
OwogICB9OwogICAKLSAgaW5saW5lIE9iamVjdCBWYWx1ZTo6dG9PYmplY3QoRXhlY1N0YXRlICpl
eGVjKSBjb25zdCB7IHJldHVybiByZXAtPmRpc3BhdGNoVG9PYmplY3QoZXhlYyk7IH0KLSAgCi0g
IGNsYXNzIE9iamVjdEltcCA6IHB1YmxpYyBWYWx1ZUltcCB7CisgIGNsYXNzIE9iamVjdEltcCA6
IHB1YmxpYyBBbGxvY2F0ZWRWYWx1ZUltcCB7CiAgIHB1YmxpYzoKICAgICAvKioKICAgICAgKiBD
cmVhdGVzIGEgbmV3IE9iamVjdEltcCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvdG90eXBlCiAgICAg
ICoKICAgICAgKiBAcGFyYW0gcHJvdG8gVGhlIHByb3RvdHlwZQogICAgICAqLwotICAgIE9iamVj
dEltcChjb25zdCBPYmplY3QgJnByb3RvKTsKICAgICBPYmplY3RJbXAoT2JqZWN0SW1wICpwcm90
byk7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IE9iamVjdEltcCB3aXRoIGEgcHJv
dG90eXBlIG9mIE51bGwoKQotICAgICAqICh0aGF0IGlzLCB0aGUgRUNNQVNjcmlwdCAibnVsbCIg
dmFsdWUsIG5vdCBhIG51bGwgT2JqZWN0KS4KKyAgICAgKiAodGhhdCBpcywgdGhlIEVDTUFTY3Jp
cHQgIm51bGwiIHZhbHVlLCBub3QgYSBudWxsIG9iamVjdCBwb2ludGVyKS4KICAgICAgKgogICAg
ICAqLwogICAgIE9iamVjdEltcCgpOwogCi0gICAgdmlydHVhbCB+T2JqZWN0SW1wKCk7Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogCiAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CkBAIC0xNjks
MTUgKzE3MCwyOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAvLyBpbnRlcm5hbCBwcm9wZXJ0aWVz
IChFQ01BIDI2Mi0zIDguNi4yKQogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcHJvdG90
eXBlIG9mIHRoaXMgb2JqZWN0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMKKyAg
ICAgKiB0aGUgInByb3RvdHlwZSIgcHJvcGVydHkuCisgICAgICoKKyAgICAgKiBTZWUgRUNNQSA4
LjYuMgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgb2JqZWN0J3MgcHJvdG90eXBlCisgICAg
ICovCisgICAgLyoqCiAgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbUHJvdG90eXBlXV0g
aW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5CiAgICAgICogYWxsIE9iamVjdHMpCi0g
ICAgICoKLSAgICAgKiBAc2VlIE9iamVjdDo6cHJvdG90eXBlKCkKICAgICAgKi8KLSAgICBWYWx1
ZSBwcm90b3R5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFByb3RvdHlwZShjb25zdCBWYWx1ZSAm
cHJvdG8pOworICAgIFZhbHVlSW1wICpwcm90b3R5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBy
b3RvdHlwZShWYWx1ZUltcCAqcHJvdG8pOwogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
Y2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0CisgICAgICoKKyAgICAgKiBTZWUgRUNNQSA4LjYuMgor
ICAgICAqCisgICAgICogQHJldHVybiBUaGUgb2JqZWN0J3MgY2xhc3MgbmFtZQorICAgICAqLwor
ICAgIC8qKgogICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0NsYXNzXV0gaW50ZXJuYWwg
cHJvcGVydHkgKGltcGxlbWVudGVkIGJ5IGFsbAogICAgICAqIE9iamVjdHMpCiAgICAgICoKQEAg
LTE4NSw2NCArMTk5LDExNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBZb3Ugc2hvdWxkIGVp
dGhlciBpbXBsZW1lbnQgY2xhc3NJbmZvKCksIG9yCiAgICAgICogaWYgeW91IHNpbXBseSBuZWVk
IGEgY2xhc3NuYW1lLCB5b3UgY2FuIHJlaW1wbGVtZW50IGNsYXNzTmFtZSgpCiAgICAgICogaW5z
dGVhZC4KLSAgICAgKgotICAgICAqIEBzZWUgT2JqZWN0OjpjbGFzc05hbWUoKQogICAgICAqLwog
ICAgIHZpcnR1YWwgVVN0cmluZyBjbGFzc05hbWUoKSBjb25zdDsKIAogICAgIC8qKgorICAgICAq
IFJldHJpZXZlcyB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGZyb20gdGhlIG9iamVjdC4gSWYgbmVp
dGhlciB0aGUgb2JqZWN0CisgICAgICogb3IgYW55IG90aGVyIG9iamVjdCBpbiBpdCdzIHByb3Rv
dHlwZSBjaGFpbiBoYXZlIHRoZSBwcm9wZXJ0eSwgdGhpcworICAgICAqIGZ1bmN0aW9uIHdpbGwg
cmV0dXJuIFVuZGVmaW5lZC4KKyAgICAgKgorICAgICAqIFNlZSBFQ01BIDguNi4yLjEKKyAgICAg
KgorICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQorICAgICAq
IEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZl
CisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBzcGVjaWZpZWQgcHJvcGVydHksIG9yIFVuZGVm
aW5lZAorICAgICAqLworICAgIC8qKgogICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0dl
dF1dIGludGVybmFsIHByb3BlcnR5IChpbXBsZW1lbnRlZCBieSBhbGwKICAgICAgKiBPYmplY3Rz
KQotICAgICAqCi0gICAgICogQHNlZSBPYmplY3Q6OmdldCgpCiAgICAgICovCiAgICAgLy8gW1tH
ZXRdXSAtIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYWxsIE9iamVjdHMKLSAgICBWYWx1ZSBnZXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Owot
ICAgIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29u
c3Q7CisgICAgVmFsdWVJbXAgKmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldChFeGVjU3RhdGUgKmV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKLSAgICBib29sIGdldFByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKLSAgICBib29sIGdldFByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGdldFByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZUltcComIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgVmFsdWVJbXAqJiByZXN1bHQpIGNvbnN0OwogCiAg
ICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgdW5z
aWduZWQsIFByb3BlcnR5U2xvdCYpOworCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIC8qKgorICAgICAqIFNldHMgdGhlIHNwZWNpZmll
ZCBwcm9wZXJ0eS4KKyAgICAgKgorICAgICAqIFNlZSBFQ01BIDguNi4yLjIKKyAgICAgKgorICAg
ICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQorICAgICAqIEBwYXJh
bSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldAorICAgICAqIEBw
YXJhbSBwcm9wZXJ0eVZhbHVlIFRoZSB2YWx1ZSB0byBzZXQKKyAgICAgKi8KKyAgICAvKioKICAg
ICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tQdXRdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1w
bGVtZW50ZWQgYnkgYWxsCiAgICAgICogT2JqZWN0cykKLSAgICAgKgotICAgICAqIEBzZWUgT2Jq
ZWN0OjpwdXQoKQogICAgICAqLwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBj
b25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgICAgICAgICAgICAgICAg
ICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKIAogICAgIC8qKgor
ICAgICAqIFVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyIHByb3BlcnR5
IGlzIGFsbG93ZWQgdG8gYmUgc2V0CisgICAgICogb24gYW4gb2JqZWN0CisgICAgICoKKyAgICAg
KiBTZWUgRUNNQSA4LjYuMi4zCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVu
dCBleGVjdXRpb24gc3RhdGUKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9m
IHRoZSBwcm9wZXJ0eQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvcGVydHkgY2FuIGJl
IHNldCwgb3RoZXJ3aXNlIGZhbHNlCisgICAgICovCisgICAgLyoqCiAgICAgICogSW1wbGVtZW50
YXRpb24gb2YgdGhlIFtbQ2FuUHV0XV0gaW50ZXJuYWwgcHJvcGVydHkgKGltcGxlbWVudGVkIGJ5
IGFsbAogICAgICAqIE9iamVjdHMpCi0gICAgICoKLSAgICAgKiBAc2VlIE9iamVjdDo6Y2FuUHV0
KCkKICAgICAgKi8KICAgICB2aXJ0dWFsIGJvb2wgY2FuUHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIC8qKgorICAgICAqIENo
ZWNrcyB0byBzZWUgd2hldGhlciB0aGUgb2JqZWN0IChvciBhbnkgb2JqZWN0IGluIGl0J3MgcHJv
dG90eXBlIGNoYWluKQorICAgICAqIGhhcyBhIHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCBu
YW1lLgorICAgICAqCisgICAgICogU2VlIEVDTUEgOC42LjIuNAorICAgICAqCisgICAgICogQHBh
cmFtIGV4ZWMgVGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YXRlCisgICAgICogQHBhcmFtIHByb3Bl
cnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hlY2sgZm9yCisgICAgICogQHJl
dHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSwgb3RoZXJ3aXNlIGZhbHNl
CisgICAgICovCisgICAgLyoqCiAgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbSGFzUHJv
cGVydHldXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1wbGVtZW50ZWQgYnkKICAgICAgKiBhbGwgT2Jq
ZWN0cykKLSAgICAgKgotICAgICAqIEBzZWUgT2JqZWN0OjpoYXNQcm9wZXJ0eSgpCiAgICAgICov
Ci0gICAgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsCisJCQkgICAgIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIG9iamVj
dCBoYXMgYSBwcm9wZXJ0eSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKyAgICAgKgorICAgICAq
IFNlZSBFQ01BIDE1LjIuNC41CisgICAgICoKKyAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVu
dCBleGVjdXRpb24gc3RhdGUKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9m
IHRoZSBwcm9wZXJ0eSB0byBjaGVjayBmb3IKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIG9i
amVjdCBoYXMgdGhlIHByb3BlcnR5LCBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KICAgICB2aXJ0
dWFsIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAvKioK
KyAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0Lgor
ICAgICAqCisgICAgICogU2VlIEVDTUEgOC42LjIuNQorICAgICAqCisgICAgICogQHBhcmFtIGV4
ZWMgVGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YXRlCisgICAgICogQHBhcmFtIHByb3BlcnR5TmFt
ZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGVsZXRlCisgICAgICogQHJldHVybiB0cnVl
IGlmIHRoZSBwcm9wZXJ0eSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgb3IgZGlkIG5vdAorICAg
ICAqIGV4aXN0IG9uIHRoZSBvYmplY3QuIGZhbHNlIGlmIGRlbGV0aW5nIHRoZSBzcGVjaWZpZWQg
cHJvcGVydHkgaXMgbm90CisgICAgICogYWxsb3dlZC4KKyAgICAgKi8KKyAgICAvKioKICAgICAg
KiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSAoaW1w
bGVtZW50ZWQgYnkgYWxsCiAgICAgICogT2JqZWN0cykKLSAgICAgKgotICAgICAqIEBzZWUgT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSgpCiAgICAgICovCiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKQEAgLTI1Niw1OSArMzIyLDE5NiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICB2b2lkIGRlbGV0ZUFsbFByb3BlcnRpZXMoRXhlY1N0YXRlICop
OwogCiAgICAgLyoqCisgICAgICogQ29udmVydHMgdGhlIG9iamVjdCBpbnRvIGEgcHJpbWl0aXZl
IHZhbHVlLiBUaGUgdmFsdWUgcmV0dXJuIG1heSBkaWZmZXIKKyAgICAgKiBkZXBlbmRpbmcgb24g
dGhlIHN1cHBsaWVkIGhpbnQKKyAgICAgKgorICAgICAqIFNlZSBFQ01BIDguNi4yLjYKKyAgICAg
KgorICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQorICAgICAq
IEBwYXJhbSBoaW50IFRoZSBkZXNpcmVkIHByaW1pdGl2ZSB0eXBlIHRvIGNvbnZlcnQgdG8KKyAg
ICAgKiBAcmV0dXJuIEEgcHJpbWl0aXZlIHZhbHVlIGNvbnZlcnRlZCBmcm9tIHRoZSBvYmpldGMu
IE5vdGUgdGhhdCB0aGUKKyAgICAgKiB0eXBlIG9mIHByaW1pdGl2ZSB2YWx1ZSByZXR1cm5lZCBt
YXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSByZXF1ZXN0ZWQKKyAgICAgKiBoaW50LgorICAgICAq
LworICAgIC8qKgogICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0RlZmF1bHRWYWx1ZV1d
IGludGVybmFsIHByb3BlcnR5IChpbXBsZW1lbnRlZCBieQogICAgICAqIGFsbCBPYmplY3RzKQot
ICAgICAqCi0gICAgICogQHNlZSBPYmplY3Q6OmRlZmF1bHRWYWx1ZSgpCiAgICAgICovCi0gICAg
dmlydHVhbCBWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBUeXBlIGhpbnQpIGNv
bnN0OworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMs
IFR5cGUgaGludCkgY29uc3Q7CiAKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUg
b2JqZWN0IGltcGxlbWVudHMgdGhlIGNvbnN0cnVjdCgpIG1ldGhvZC4gSWYgdGhpcworICAgICAq
IHJldHVybnMgZmFsc2UgeW91IHNob3VsZCBub3QgY2FsbCB0aGUgY29uc3RydWN0KCkgbWV0aG9k
IG9uIHRoaXMKKyAgICAgKiBvYmplY3QgKHR5cGljYWxseSwgYW4gYXNzZXJ0aW9uIHdpbGwgZmFp
bCB0byBpbmRpY2F0ZSB0aGlzKS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlz
IG9iamVjdCBpbXBsZW1lbnRzIHRoZSBjb25zdHJ1Y3QoKSBtZXRob2QsIG90aGVyd2lzZQorICAg
ICAqIGZhbHNlCisgICAgICovCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3Qo
KSBjb25zdDsKKwogICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0NvbnN0
cnVjdF1dIGludGVybmFsIHByb3BlcnR5CisgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgYmFz
ZWQgb24gdGhpcyBvYmplY3QuIFR5cGljYWxseSB0aGlzIG1lYW5zIHRoZQorICAgICAqIGZvbGxv
d2luZzoKKyAgICAgKiAxLiBBIG5ldyBvYmplY3QgaXMgY3JlYXRlZAorICAgICAqIDIuIFRoZSBw
cm90b3R5cGUgb2YgdGhlIG5ldyBvYmplY3QgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIG9i
amVjdCdzCisgICAgICogICAgInByb3RvdHlwZSIgcHJvcGVydHkKKyAgICAgKiAzLiBUaGUgY2Fs
bCgpIG1ldGhvZCBvZiB0aGlzIG9iamVjdCBpcyBjYWxsZWQsIHdpdGggdGhlIG5ldyBvYmplY3QK
KyAgICAgKiAgICBwYXNzZWQgYXMgdGhlIHRoaXMgdmFsdWUKKyAgICAgKiA0LiBUaGUgbmV3IG9i
amVjdCBpcyByZXR1cm5lZAorICAgICAqCisgICAgICogSW4gc29tZSBjYXNlcywgSG9zdCBvYmpl
Y3RzIG1heSBkaWZmZXIgZnJvbSB0aGVzZSBzZW1hbnRpY3MsIGFsdGhvdWdoCisgICAgICogdGhp
cyBpcyBkaXNjb3VyYWdlZC4KKyAgICAgKgorICAgICAqIElmIGFuIGVycm9yIG9jY3VycyBkdXJp
bmcgY29uc3RydWN0aW9uLCB0aGUgZXhlY3V0aW9uIHN0YXRlJ3MgZXhjZXB0aW9uCisgICAgICog
d2lsbCBiZSBzZXQuIFRoaXMgY2FuIGJlIHRlc3RlZCBmb3Igd2l0aCBFeGVjU3RhdGU6OmhhZEV4
Y2VwdGlvbigpLgorICAgICAqIFVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgdGhlIGV4Y2VwdGlv
biBvYmplY3QgbWF5IGFsc28gYmUgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAc2VlIE9iamVj
dDo6Y29uc3RydWN0KCkKKyAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUg
Y2FsbGVkIGlmIGltcGxlbWVudHNDb25zdHJ1Y3QoKSByZXR1cm5zCisgICAgICogZmFsc2UsIGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCisgICAg
ICoKKyAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUKKyAgICAg
KiBAcGFyYW0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBjYWxsKCkgb25jZSB0
aGUgbmV3IG9iamVjdCBoYXMKKyAgICAgKiBiZWVuIGNyZWF0ZWQKKyAgICAgKiBAcmV0dXJuIFRo
ZSBuZXdseSBjcmVhdGVkICZhbXA7IGluaXRpYWxpemVkIG9iamVjdAorICAgICAqLworICAgIC8q
KgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIHBy
b3BlcnR5CiAgICAgICovCi0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgTGlzdCAmYXJncyk7Ci0gICAgdmlydHVhbCBPYmplY3QgY29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncywgY29uc3QgVVN0cmluZyAmc291cmNlVVJM
LCBpbnQgbGluZU51bWJlcik7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmNvbnN0cnVjdChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpj
b25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBjb25zdCBVU3RyaW5n
ICZzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKIAorICAgIC8qKgorICAgICAqIFdoZXRoZXIg
b3Igbm90IHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUgY2FsbCgpIG1ldGhvZC4gSWYgdGhpcyBy
ZXR1cm5zCisgICAgICogZmFsc2UgeW91IHNob3VsZCBub3QgY2FsbCB0aGUgY2FsbCgpIG1ldGhv
ZCBvbiB0aGlzIG9iamVjdCAodHlwaWNhbGx5LAorICAgICAqIGFuIGFzc2VydGlvbiB3aWxsIGZh
aWwgdG8gaW5kaWNhdGUgdGhpcykuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhp
cyBvYmplY3QgaW1wbGVtZW50cyB0aGUgY2FsbCgpIG1ldGhvZCwgb3RoZXJ3aXNlCisgICAgICog
ZmFsc2UKKyAgICAgKi8KICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsK
KwogICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW0NhbGxdXSBpbnRlcm5h
bCBwcm9wZXJ0eQorICAgICAqIENhbGxzIHRoaXMgb2JqZWN0IGFzIGlmIGl0IGlzIGEgZnVuY3Rp
b24uCisgICAgICoKKyAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2Fs
bGVkIGlmIGltcGxlbWVudHNDYWxsKCkgcmV0dXJucworICAgICAqIGZhbHNlLCBpbiB3aGljaCBj
YXNlIGl0IHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbiBmYWlsdXJlLgogICAgICAqCi0gICAg
ICogQHNlZSBPYmplY3Q6OmNhbGwoKQorICAgICAqIFNlZSBFQ01BIDguNi4yLjMKKyAgICAgKgor
ICAgICAqIEBwYXJhbSBleGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQorICAgICAqIEBw
YXJhbSB0aGlzT2JqIFRoZSBvYmogdG8gYmUgdXNlZCBhcyAidGhpcyIgd2l0aGluIGZ1bmN0aW9u
IGV4ZWN1dGlvbi4KKyAgICAgKiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUg
ZGlmZmVyZW50IGZyb20gdGhlIEMrKyAidGhpcyIKKyAgICAgKiBvYmplY3QuIEZvciBleGFtcGxl
LCBpZiB0aGUgRUNNQVNjcmlwdCBjb2RlICJ3aW5kb3cubG9jYXRpb24tPnRvU3RyaW5nKCkiCisg
ICAgICogaXMgZXhlY3V0ZWQsIGNhbGwoKSB3aWxsIGJlIGludm9rZWQgb24gdGhlIEMrKyBvYmpl
Y3Qgd2hpY2ggaW1wbGVtZW50cworICAgICAqIHRoZSB0b1N0cmluZyBtZXRob2QsIHdpdGggdGhl
IHRoaXNPYmogYmVpbmcgd2luZG93LmxvY2F0aW9uCisgICAgICogQHBhcmFtIGFyZ3MgTGlzdCBv
ZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbgorICAgICAqIEByZXR1cm4g
VGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbgogICAgICAqLwotICAgIHZpcnR1YWwg
VmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGlzdCAmYXJncyk7CisgICAgLyoqCisgICAgICogSW1wbGVtZW50
YXRpb24gb2YgdGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5CisgICAgICovCisgICAgVmFs
dWVJbXAgKmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAorICAgIC8q
KgorICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUgaGFzSW5z
dGFuY2UoKSBtZXRob2QuIElmIHRoaXMKKyAgICAgKiByZXR1cm5zIGZhbHNlIHlvdSBzaG91bGQg
bm90IGNhbGwgdGhlIGhhc0luc3RhbmNlKCkgbWV0aG9kIG9uIHRoaXMKKyAgICAgKiBvYmplY3Qg
KHR5cGljYWxseSwgYW4gYXNzZXJ0aW9uIHdpbGwgZmFpbCB0byBpbmRpY2F0ZSB0aGlzKS4KKyAg
ICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBo
YXNJbnN0YW5jZSgpIG1ldGhvZCwKKyAgICAgKiBvdGhlcndpc2UgZmFsc2UKKyAgICAgKi8KICAg
ICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0hhc0luc3RhbmNlKCkgY29uc3Q7CisKICAgICAvKioK
LSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tIYXNJbnN0YW5jZV1dIGludGVybmFsIHBy
b3BlcnR5CisgICAgICogQ2hlY2tzIHdoZXRoZXIgdmFsdWUgZGVsZWdhdGVzIGJlaGF2aW9yIHRv
IHRoaXMgb2JqZWN0LiBVc2VkIGJ5IHRoZQorICAgICAqIGluc3RhbmNlb2Ygb3BlcmF0b3IuCiAg
ICAgICoKLSAgICAgKiBAc2VlIE9iamVjdDo6aGFzSW5zdGFuY2UoKQorICAgICAqIEBwYXJhbSBl
eGVjIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGF0ZQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUg
dmFsdWUgdG8gY2hlY2sKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdmFsdWUgZGVsZWdhdGVzIGJl
aGF2aW9yIHRvIHRoaXMgb2JqZWN0LCBvdGhlcndpc2UKKyAgICAgKiBmYWxzZQogICAgICAqLwot
ICAgIHZpcnR1YWwgQm9vbGVhbiBoYXNJbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZh
bHVlICZ2YWx1ZSk7CisgICAgLyoqCisgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbSGFz
SW5zdGFuY2VdXSBpbnRlcm5hbCBwcm9wZXJ0eQorICAgICAqLworICAgIHZpcnR1YWwgYm9vbCBo
YXNJbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSk7CiAKICAgICAvKioK
LSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1tTY29wZV1dIGludGVybmFsIHByb3BlcnR5
CisgICAgICogUmV0dXJucyB0aGUgc2NvcGUgb2YgdGhpcyBvYmplY3QuIFRoaXMgaXMgdXNlZCB3
aGVuIGV4ZWN1dGlvbiBkZWNsYXJlZAorICAgICAqIGZ1bmN0aW9ucyAtIHRoZSBleGVjdXRpb24g
Y29udGV4dCBmb3IgdGhlIGZ1bmN0aW9uIGlzIGluaXRpYWxpemVkIHdpdGgKKyAgICAgKiBleHRy
YSBvYmplY3QgaW4gaXQncyBzY29wZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGZ1bmN0aW9ucyBk
ZWNsYXJlZAorICAgICAqIGluc2lkZSBvdGhlciBmdW5jdGlvbnM6CiAgICAgICoKLSAgICAgKiBA
c2VlIE9iamVjdDo6c2NvcGUoKQorICAgICAqIFxjb2RlCisgICAgICogZnVuY3Rpb24gZigpIHsK
KyAgICAgKgorICAgICAqICAgZnVuY3Rpb24gYigpIHsKKyAgICAgKiAgICAgcmV0dXJuIHByb3Rv
dHlwZTsKKyAgICAgKiAgIH0KKyAgICAgKgorICAgICAqICAgdmFyIHggPSA0OworICAgICAqICAg
Ly8gZG8gc29tZSBzdHVmZgorICAgICAqIH0KKyAgICAgKiBmLnByb3RvdHlwZSA9IG5ldyBTdHJp
bmcoKTsKKyAgICAgKiBcZW5kY29kZQorICAgICAqCisgICAgICogV2hlbiB0aGUgZnVuY3Rpb24g
Zi5iIGlzIGV4ZWN1dGVkLCBpdHMgc2NvcGUgd2lsbCBpbmNsdWRlIHByb3BlcnRpZXMgb2YKKyAg
ICAgKiBmLiBTbyBpbiB0aGUgZXhhbXBsZSBhYm92ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGYuYigp
IHdvdWxkIGJlIHRoZSBuZXcKKyAgICAgKiBTdHJpbmcgb2JqZWN0IHRoYXQgd2FzIGFzc2lnbmVk
IHRvIGYucHJvdG90eXBlLgorICAgICAqCisgICAgICogQHBhcmFtIGV4ZWMgVGhlIGN1cnJlbnQg
ZXhlY3V0aW9uIHN0YXRlCisgICAgICogQHJldHVybiBUaGUgZnVuY3Rpb24ncyBzY29wZQorICAg
ICAqLworICAgIC8qKgorICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBbW1Njb3BlXV0gaW50
ZXJuYWwgcHJvcGVydHkKICAgICAgKi8KICAgICBjb25zdCBTY29wZUNoYWluICZzY29wZSgpIGNv
bnN0IHsgcmV0dXJuIF9zY29wZTsgfQogICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFp
biAmcykgeyBfc2NvcGUgPSBzOyB9CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgTGlzdCBv
ZiBSZWZlcmVuY2VzIHRvIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LiBVc2VkCisg
ICAgICogaW4gImZvciB4IGluIHkiIHN0YXRlbWVudHMuIFRoZSBsaXN0IGlzIGNyZWF0ZWQgbmV3
LCBzbyBpdCBjYW4gYmUgZnJlZWx5CisgICAgICogbW9kaWZpZWQgd2l0aG91dCBhZmZlY3Rpbmcg
dGhlIG9iamVjdCdzIHByb3BlcnRpZXMuIEl0IHNob3VsZCBiZSBkZWxldGVkCisgICAgICogYnkg
dGhlIGNhbGxlci4KKyAgICAgKgorICAgICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMg
bWV0aG9kIGluIE9iamVjdEltcGwgdG8gcHJvdmlkZSB0aGUKKyAgICAgKiBhcHBlYXJhbmNlIG9m
CisgICAgICogaGF2aW5nIGV4dHJhIHByb3BlcnRpZXMgb3RoZXIgdGhhbiB0aG9zZSBzZXQgc3Bl
Y2lmaWNhbGx5IHdpdGggcHV0KCkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3Vy
cmVudCBleGVjdXRpb24gc3RhdGUKKyAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIFdoZXRoZXIgb3Ig
bm90IHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCdzIHByb3RvdHlwZQorICAgICAqIGNoYWluIHNo
b3VsZCBiZQorICAgICAqIGluY2x1ZGVkIGluIHRoZSBsaXN0LgorICAgICAqIEByZXR1cm4gQSBM
aXN0IG9mIFJlZmVyZW5jZXMgdG8gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LgorICAgICAqKi8K
ICAgICB2aXJ0dWFsIFJlZmVyZW5jZUxpc3QgcHJvcExpc3QoRXhlY1N0YXRlICpleGVjLCBib29s
IHJlY3Vyc2l2ZSA9IHRydWUpOwogCi0gICAgVmFsdWUgaW50ZXJuYWxWYWx1ZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0SW50ZXJuYWxWYWx1ZShjb25zdCBWYWx1ZSAmdik7CisgICAgLyoqCisgICAg
ICogUmV0dXJucyB0aGUgaW50ZXJuYWwgdmFsdWUgb2YgdGhlIG9iamVjdC4gVGhpcyBpcyB1c2Vk
IGZvciBvYmplY3RzIHN1Y2gKKyAgICAgKiBhcyBTdHJpbmcgYW5kIEJvb2xlYW4gd2hpY2ggYXJl
IHdyYXBwZXJzIGZvciBuYXRpdmUgdHlwZXMuIFRoZSBpbnRlcmFsCisgICAgICogdmFsdWUgaXMg
dGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgd3JhcHBlciBvYmplY3RzLgorICAg
ICAqCisgICAgICogQHNlZSBFQ01BIDguNi4yCisgICAgICogQHJldHVybiBUaGUgaW50ZXJuYWwg
dmFsdWUgb2YgdGhlIG9iamVjdAorICAgICAqLworICAgIFZhbHVlSW1wICppbnRlcm5hbFZhbHVl
KCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBpbnRlcm5hbCB2YWx1ZSBvZiB0
aGUgb2JqZWN0CisgICAgICoKKyAgICAgKiBAc2VlIGludGVybmFsVmFsdWUoKQorICAgICAqCisg
ICAgICogQHBhcmFtIHYgVGhlIG5ldyBpbnRlcm5hbCB2YWx1ZQorICAgICAqLworCiAgICAgdm9p
ZCBzZXRJbnRlcm5hbFZhbHVlKFZhbHVlSW1wICp2KTsKIAotICAgIFZhbHVlIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICBUeXBlIHByZWZlcnJlZFR5
cGUgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OworICAgIFZhbHVlSW1wICp0b1ByaW1pdGl2ZShF
eGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSA9IFVuc3BlY2lmaWVkVHlwZSkgY29u
c3Q7CiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBkb3Vi
bGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgT2JqZWN0IHRvT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CisgICAgT2JqZWN0SW1wICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwogCiAgICAgLy8gVGhpcyBnZXQgbWV0aG9kIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5
IG1hcC4KICAgICAvLyBBIGJpdCBsaWtlIGhhc1Byb3BlcnR5KHJlY3Vyc2l2ZT1mYWxzZSksIHRo
aXMgZG9lc24ndCBnbyB0byB0aGUgcHJvdG90eXBlLgpAQCAtMzQ0LDcgKzU0Nyw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIAogICAgICAgVmFsdWVJbXAg
KnByb3RvID0gaW1wLT5fcHJvdG87Ci0gICAgICBpZiAocHJvdG8tPmRpc3BhdGNoVHlwZSgpICE9
IE9iamVjdFR5cGUpCisgICAgICBpZiAoIXByb3RvLT5pc09iamVjdCgpKQogICAgICAgICBicmVh
azsKICAgICAgIAogICAgICAgaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHByb3RvKTsK
QEAgLTQwMiw5ICs2MDUsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBAcGFyYW0gbGluZW5v
IE9wdGlvbmFsIGxpbmUgbnVtYmVyLgogICAgICAqIEBwYXJhbSBsaW5lbm8gT3B0aW9uYWwgc291
cmNlIGlkLgogICAgICAqLwotICAgIHN0YXRpYyBPYmplY3QgY3JlYXRlKEV4ZWNTdGF0ZSAqZXhl
YywgRXJyb3JUeXBlIGVycnR5cGUgPSBHZW5lcmFsRXJyb3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IDAsIGludCBsaW5lbm8gPSAtMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc291cmNlSWQgPSAtMSwgY29uc3QgVVN0cmluZyAqc291cmNl
VVJMID0gMCk7CisgICAgc3RhdGljIE9iamVjdEltcCAqY3JlYXRlKEV4ZWNTdGF0ZSAqZXhlYywg
RXJyb3JUeXBlIGVycnR5cGUgPSBHZW5lcmFsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSAwLCBpbnQgbGluZW5vID0gLTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJZCA9IC0xLCBjb25zdCBVU3RyaW5nICpz
b3VyY2VVUkwgPSAwKTsKIAogICAgIC8qKgogICAgICAqIEFycmF5IG9mIGVycm9yIG5hbWVzIGNv
cnJlc3BvbmRpbmcgdG8gRXJyb3JUeXBlCkBAIC00MTIsOTcgKzYxNSw0NyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0ICogY29uc3QgZXJyb3JOYW1lczsK
ICAgfTsKIAotICBpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNPYmplY3QoY29uc3QgQ2xhc3NJbmZv
ICppbmZvKSBjb25zdAotICAgIHsgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8Y29u
c3QgT2JqZWN0SW1wICo+KHRoaXMpLT5pbmhlcml0cyhpbmZvKTsgfQotCi0gIGlubGluZSBPYmpl
Y3RJbXAgKlZhbHVlSW1wOjphc09iamVjdCgpCi0gICAgeyByZXR1cm4gaXNPYmplY3QoKSA/IHN0
YXRpY19jYXN0PE9iamVjdEltcCAqPih0aGlzKSA6IDA7IH0KLQotICBpbmxpbmUgT2JqZWN0OjpP
YmplY3QoT2JqZWN0SW1wICpvKSA6IFZhbHVlKG8pIHsgfQotCi0gIGlubGluZSBPYmplY3RJbXAg
Kk9iamVjdDo6aW1wKCkgY29uc3QKLSAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAg
Kj4oVmFsdWU6OmltcCgpKTsgfQotCi0gIGlubGluZSBjb25zdCBDbGFzc0luZm8gKk9iamVjdDo6
Y2xhc3NJbmZvKCkgY29uc3QKLSAgICB7IHJldHVybiBpbXAoKS0+Y2xhc3NJbmZvKCk7IH0KLQot
ICBpbmxpbmUgYm9vbCBPYmplY3Q6OmluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyAqY2luZm8pIGNv
bnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmluaGVyaXRzKGNpbmZvKTsgfQotCi0gIGlubGluZSBW
YWx1ZSBPYmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0Ci0gICAgeyByZXR1cm4gVmFsdWUoaW1wKCkt
PnByb3RvdHlwZSgpKTsgfQotCi0gIGlubGluZSBVU3RyaW5nIE9iamVjdDo6Y2xhc3NOYW1lKCkg
Y29uc3QKLSAgICB7IHJldHVybiBpbXAoKS0+Y2xhc3NOYW1lKCk7IH0KLQotICBpbmxpbmUgVmFs
dWUgT2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmdldChleGVjLHByb3BlcnR5TmFtZSk7
IH0KLQotICBpbmxpbmUgVmFsdWUgT2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmdldChleGVjLHByb3Bl
cnR5TmFtZSk7IH0KLQotICBpbmxpbmUgdm9pZCBPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQg
YXR0cikKLSAgICB7IGltcCgpLT5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUsYXR0cik7IH0K
LQotICBpbmxpbmUgdm9pZCBPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0cikKLSAgICB7IGltcCgpLT5w
dXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUsYXR0cik7IH0KLQotICBpbmxpbmUgYm9vbCBPYmpl
Y3Q6OmNhblB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3QKLSAgICB7IHJldHVybiBpbXAoKS0+Y2FuUHV0KGV4ZWMscHJvcGVydHlOYW1lKTsg
fQorICAgIGlubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjppc09iamVjdChjb25zdCBDbGFz
c0luZm8gKmluZm8pIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIGlzT2JqZWN0KCkgJiYgc3RhdGlj
X2Nhc3Q8Y29uc3QgT2JqZWN0SW1wICo+KHRoaXMpLT5pbmhlcml0cyhpbmZvKTsgfQogCi0gIGlu
bGluZSBib29sIE9iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7IH0KLQotICBpbmxpbmUgYm9vbCBPYmplY3Q6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUpOyB9Ci0KLSAgaW5saW5lIGJvb2wgT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkKLSAgICB7IHJldHVybiBp
bXAoKS0+ZGVsZXRlUHJvcGVydHkoZXhlYyxwcm9wZXJ0eU5hbWUpOyB9Ci0KLSAgaW5saW5lIGJv
b2wgT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkKLSAgICB7IHJldHVybiBpbXAoKS0+ZGVsZXRlUHJvcGVydHkoZXhlYyxwcm9wZXJ0
eU5hbWUpOyB9Ci0KLSAgaW5saW5lIFZhbHVlIE9iamVjdDo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSAqZXhlYywgVHlwZSBoaW50KSBjb25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5kZWZhdWx0VmFs
dWUoZXhlYyxoaW50KTsgfQotCi0gIGlubGluZSBib29sIE9iamVjdDo6aW1wbGVtZW50c0NvbnN0
cnVjdCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gaW1wKCktPmltcGxlbWVudHNDb25zdHJ1Y3QoKTsg
fQotCi0gIGlubGluZSBPYmplY3QgT2JqZWN0Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKQotICAgIHsgcmV0dXJuIGltcCgpLT5jb25zdHJ1Y3QoZXhlYyxhcmdz
KTsgfQotICAKLSAgaW5saW5lIE9iamVjdCBPYmplY3Q6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IGxpbmVO
dW1iZXIpCi0gIHsgcmV0dXJuIGltcCgpLT5jb25zdHJ1Y3QoZXhlYyxhcmdzLHNvdXJjZVVSTCxs
aW5lTnVtYmVyKTsgfQotCi0gIGlubGluZSBib29sIE9iamVjdDo6aW1wbGVtZW50c0NhbGwoKSBj
b25zdAotICAgIHsgcmV0dXJuIGltcCgpLT5pbXBsZW1lbnRzQ2FsbCgpOyB9Ci0KLSAgaW5saW5l
IGJvb2wgT2JqZWN0OjppbXBsZW1lbnRzSGFzSW5zdGFuY2UoKSBjb25zdAotICAgIHsgcmV0dXJu
IGltcCgpLT5pbXBsZW1lbnRzSGFzSW5zdGFuY2UoKTsgfQotCi0gIGlubGluZSBCb29sZWFuIE9i
amVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdmFsdWUpCi0g
ICAgeyByZXR1cm4gaW1wKCktPmhhc0luc3RhbmNlKGV4ZWMsdmFsdWUpOyB9Ci0KLSAgaW5saW5l
IGNvbnN0IFNjb3BlQ2hhaW4gJk9iamVjdDo6c2NvcGUoKSBjb25zdAotICAgIHsgcmV0dXJuIGlt
cCgpLT5zY29wZSgpOyB9Ci0KLSAgaW5saW5lIHZvaWQgT2JqZWN0OjpzZXRTY29wZShjb25zdCBT
Y29wZUNoYWluICZzKQotICAgIHsgaW1wKCktPnNldFNjb3BlKHMpOyB9Ci0KLSAgaW5saW5lIFJl
ZmVyZW5jZUxpc3QgT2JqZWN0Ojpwcm9wTGlzdChFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgcmVjdXJz
aXZlKQotICAgIHsgcmV0dXJuIGltcCgpLT5wcm9wTGlzdChleGVjLHJlY3Vyc2l2ZSk7IH0KLQot
ICBpbmxpbmUgVmFsdWUgT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkgY29uc3QKLSAgICB7IHJldHVy
biBpbXAoKS0+aW50ZXJuYWxWYWx1ZSgpOyB9Ci0KLSAgaW5saW5lIHZvaWQgT2JqZWN0OjpzZXRJ
bnRlcm5hbFZhbHVlKGNvbnN0IFZhbHVlICZ2KQotICAgIHsgaW1wKCktPnNldEludGVybmFsVmFs
dWUodik7IH0KLQotICBpbmxpbmUgdm9pZCBPYmplY3Q6OnNhdmVQcm9wZXJ0aWVzKFNhdmVkUHJv
cGVydGllcyAmcCkgY29uc3QKLSAgICB7IGltcCgpLT5zYXZlUHJvcGVydGllcyhwKTsgfQotICBp
bmxpbmUgdm9pZCBPYmplY3Q6OnJlc3RvcmVQcm9wZXJ0aWVzKGNvbnN0IFNhdmVkUHJvcGVydGll
cyAmcCkKLSAgICB7IGltcCgpLT5yZXN0b3JlUHJvcGVydGllcyhwKTsgfQoraW5saW5lIE9iamVj
dEltcDo6T2JqZWN0SW1wKE9iamVjdEltcCAqcHJvdG8pCisgICAgOiBfcHJvdG8ocHJvdG8pLCBf
aW50ZXJuYWxWYWx1ZSgwKQoreworfQorCitpbmxpbmUgT2JqZWN0SW1wOjpPYmplY3RJbXAoKQor
ICAgIDogX3Byb3RvKGpzTnVsbCgpKSwgX2ludGVybmFsVmFsdWUoMCkKK3sKK30KKworaW5saW5l
IFZhbHVlSW1wICpPYmplY3RJbXA6OmludGVybmFsVmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBfaW50ZXJuYWxWYWx1ZTsKK30KKworaW5saW5lIHZvaWQgT2JqZWN0SW1wOjpzZXRJbnRlcm5h
bFZhbHVlKFZhbHVlSW1wICp2KQoreworICAgIF9pbnRlcm5hbFZhbHVlID0gdjsKK30KKworaW5s
aW5lIFZhbHVlSW1wICpPYmplY3RJbXA6OnByb3RvdHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IF9wcm90bzsKK30KKworaW5saW5lIHZvaWQgT2JqZWN0SW1wOjpzZXRQcm90b3R5cGUoVmFsdWVJ
bXAgKnByb3RvKQoreworICAgIF9wcm90byA9IHByb3RvOworfQorCitpbmxpbmUgYm9vbCBPYmpl
Y3RJbXA6OmluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyAqaW5mbykgY29uc3QKK3sKKyAgICBmb3Ig
KGNvbnN0IENsYXNzSW5mbyAqY2kgPSBjbGFzc0luZm8oKTsgY2k7IGNpID0gY2ktPnBhcmVudENs
YXNzKQorICAgICAgICBpZiAoY2kgPT0gaW5mbykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmIC8vIF9LSlNf
T0JKRUNUX0hfCisjZW5kaWYgLy8gS0pTX09CSkVDVF9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
MgpkaWZmIC1wIC11IC1yMS4xMiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAK
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAkyNSBKdWwgMjAwNSAyMjox
NzoxMiAtMDAwMAkxLjEyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAJ
OCBBdWcgMjAwNSAwMTowMDo1NyAtMDAwMApAQCAtMzcsNyArMzcsNiBAQCBPYmplY3RQcm90b3R5
cGVJbXA6Ok9iamVjdFByb3RvdHlwZUltcChFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvKQogICA6IE9iamVjdElt
cCgpIC8vIFtbUHJvdG90eXBlXV0gaXMgTnVsbCgpCiB7Ci0gICAgVmFsdWUgcHJvdGVjdCh0aGlz
KTsKICAgICBwdXREaXJlY3QodG9TdHJpbmdQcm9wZXJ0eU5hbWUsIG5ldyBPYmplY3RQcm90b0Z1
bmNJbXAoZXhlYyxmdW5jUHJvdG8sT2JqZWN0UHJvdG9GdW5jSW1wOjpUb1N0cmluZywgICAgICAg
ICAgICAwKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh0b0xvY2FsZVN0cmluZ1Byb3BlcnR5
TmFtZSwgbmV3IE9iamVjdFByb3RvRnVuY0ltcChleGVjLGZ1bmNQcm90byxPYmplY3RQcm90b0Z1
bmNJbXA6OlRvTG9jYWxlU3RyaW5nLDApLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZhbHVl
T2ZQcm9wZXJ0eU5hbWUsICBuZXcgT2JqZWN0UHJvdG9GdW5jSW1wKGV4ZWMsZnVuY1Byb3RvLE9i
amVjdFByb3RvRnVuY0ltcDo6VmFsdWVPZiwgICAgICAgICAgICAgMCksIERvbnRFbnVtKTsKQEAg
LTUyLDcgKzUxLDYgQEAgT2JqZWN0UHJvdG9GdW5jSW1wOjpPYmplY3RQcm90b0Z1bmNJbXAoRQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGludCBsZW4pCiAg
IDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBpZChpKQogewotICBWYWx1ZSBwcm90
ZWN0KHRoaXMpOwogICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxl
dGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCkBAIC02NCwyMiArNjIsMTkgQEAgYm9vbCBPYmpl
Y3RQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKAogCiAvLyBFQ01BIDE1LjIuNC4yLCAxNS4y
LjQuNCwgMTUuMi40LjUKIAotVmFsdWUgT2JqZWN0UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk9i
amVjdFByb3RvRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgICAgc3dpdGNoIChpZCkgewogICAg
ICAgICBjYXNlIFZhbHVlT2Y6CiAgICAgICAgICAgICByZXR1cm4gdGhpc09iajsKLSAgICAgICAg
Y2FzZSBIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICBjYXNlIEhhc093blByb3BlcnR5OgogICAg
ICAgICAgICAgLy8gU2FtZSBhcyB0aGUgaW4gb3BlcmF0b3IgYnV0IHdpdGhvdXQgY2hlY2tpbmcg
dGhlIHByb3RvdHlwZQotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoYXJnc1sw
XS50b1N0cmluZyhleGVjKSk7Ci0gICAgICAgICAgICBib29sIGV4aXN0cyA9IHRoaXNPYmouaGFz
T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBWYWx1
ZShleGlzdHMgPyBCb29sZWFuSW1wOjpzdGF0aWNUcnVlIDogQm9vbGVhbkltcDo6c3RhdGljRmFs
c2UpOwotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPmhh
c093blByb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKSk7
CiAgICAgICAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6Ci0gICAgICAgICAgcmV0dXJuIHRoaXNPYmou
aW1wKCktPnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHRoaXNP
YmotPnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgY2FzZSBUb1N0cmluZzoKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIltvYmplY3QgIiArIHRoaXNPYmouY2xh
c3NOYW1lKCkgKyAiXSIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiW29iamVjdCAiICsg
dGhpc09iai0+Y2xhc3NOYW1lKCkgKyAiXSIpOwogICAgIH0KIH0KIApAQCAtOTAsMTIgKzg1LDEx
IEBAIE9iamVjdE9iamVjdEltcDo6T2JqZWN0T2JqZWN0SW1wKEV4ZWNTdGEKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8pCiAg
IDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhp
cyk7CiAgIC8vIEVDTUEgMTUuMi4zLjEKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFt
ZSwgb2JqUHJvdG8sIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgIC8vIG5vLiBv
ZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5h
bWUsIE51bWJlckltcDo6b25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBw
dXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKIH0KIAogCkBAIC0xMDUsMzIgKzk5LDI5IEBAIGJvb2wgT2JqZWN0T2JqZWN0
SW1wOjppbXBsZW1lbnRzQ29uc3RydWMKIH0KIAogLy8gRUNNQSAxNS4yLjIKLU9iamVjdCBPYmpl
Y3RPYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3Mp
CitPYmplY3RJbXAgKk9iamVjdE9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncykKIHsKICAgLy8gaWYgbm8gYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNz
ZWQgLi4uCiAgIGlmIChhcmdzLmlzRW1wdHkoKSkgewotICAgIE9iamVjdCBwcm90byA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgT2Jq
ZWN0IHJlc3VsdChuZXcgT2JqZWN0SW1wKHByb3RvKSk7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Cisg
ICAgT2JqZWN0SW1wICpyZXN1bHQobmV3IE9iamVjdEltcChwcm90bykpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiAgIH0KIAotICBWYWx1ZSBhcmcgPSAqKGFyZ3MuYmVnaW4oKSk7Ci0gIE9iamVjdCBv
YmogPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGFyZyk7Ci0gIGlmICghb2JqLmlzTnVsbCgpKSB7Cisg
IFZhbHVlSW1wICphcmcgPSAqKGFyZ3MuYmVnaW4oKSk7CisgIGlmIChPYmplY3RJbXAgKm9iaiA9
IGFyZy0+Z2V0T2JqZWN0KCkpCiAgICAgcmV0dXJuIG9iajsKLSAgfQogCi0gIHN3aXRjaCAoYXJn
LnR5cGUoKSkgeworICBzd2l0Y2ggKGFyZy0+dHlwZSgpKSB7CiAgIGNhc2UgU3RyaW5nVHlwZToK
ICAgY2FzZSBCb29sZWFuVHlwZToKICAgY2FzZSBOdW1iZXJUeXBlOgotICAgIHJldHVybiBhcmcu
dG9PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIGFyZy0+dG9PYmplY3QoZXhlYyk7CiAgIGRlZmF1
bHQ6CiAgICAgYXNzZXJ0KCEidW5oYW5kbGVkIHN3aXRjaCBjYXNlIGluIE9iamVjdENvbnN0cnVj
dG9yIik7CiAgIGNhc2UgTnVsbFR5cGU6CiAgIGNhc2UgVW5kZWZpbmVkVHlwZToKLSAgICBPYmpl
Y3QgcHJvdG8gPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3Rv
dHlwZSgpOwotICAgIHJldHVybiBPYmplY3QobmV3IE9iamVjdEltcChwcm90bykpOworICAgIHJl
dHVybiBuZXcgT2JqZWN0SW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCkpOwogICB9CiB9CiAKQEAgLTEzOSwyMSArMTMwLDIxIEBAIGJvb2wgT2Jq
ZWN0T2JqZWN0SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGMKICAgcmV0dXJuIHRydWU7CiB9CiAKLVZh
bHVlIE9iamVjdE9iamVjdEltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlz
T2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqT2JqZWN0T2JqZWN0SW1wOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0aGlzT2JqKi8sIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0gIFZhbHVlIHJlc3VsdDsKKyAgVmFsdWVJbXAgKnJlc3VsdDsKIAog
ICBMaXN0IGFyZ0xpc3Q7CiAgIC8vIENvbnN0cnVjdCBhIG5ldyBPYmplY3QKICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpKSB7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsYXJnTGlzdCk7CiAgIH0g
ZWxzZSB7Ci0gICAgVmFsdWUgYXJnID0gYXJnc1swXTsKLSAgICBpZiAoYXJnLnR5cGUoKSA9PSBO
dWxsVHlwZSB8fCBhcmcudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsKKyAgICBWYWx1ZUltcCAq
YXJnID0gYXJnc1swXTsKKyAgICBpZiAoYXJnLT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAg
ICBhcmdMaXN0LmFwcGVuZChhcmcpOwogICAgICAgcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsYXJn
TGlzdCk7CiAgICAgfSBlbHNlCi0gICAgICByZXN1bHQgPSBhcmcudG9PYmplY3QoZXhlYyk7Cisg
ICAgICByZXN1bHQgPSBhcmctPnRvT2JqZWN0KGV4ZWMpOwogICB9CiAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0X29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5o
CTE0IEp1bCAyMDA1IDE4OjI3OjAzIC0wMDAwCTEuOAorKysgSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdF9vYmplY3QuaAk4IEF1ZyAyMDA1IDAxOjAwOjU3IC0wMDAwCkBAIC00NywxMSArNDcsMTAg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFzcyBPYmplY3RQcm90b0Z1bmNJbXAgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgIHB1YmxpYzoKLSAgICBPYmplY3RQcm90b0Z1
bmNJbXAoRXhlY1N0YXRlICpleGVjLCBGdW5jdGlvblByb3RvdHlwZUltcCAqZnVuY1Byb3RvLAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgaW50IGxlbik7CisgICAgT2JqZWN0UHJvdG9G
dW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bywg
aW50IGksIGludCBsZW4pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKiwgT2JqZWN0SW1wICosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAg
ZW51bSB7IFRvU3RyaW5nLCBUb0xvY2FsZVN0cmluZywgVmFsdWVPZiwgSGFzT3duUHJvcGVydHkg
fTsKICAgcHJpdmF0ZToKQEAgLTcxLDkgKzcwLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8pOwogCiAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVj
dCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0
dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqLCBjb25zdCBMaXN0ICZhcmdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZh
bHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpOworICAgIHZpcnR1YWwgVmFsdWVJbXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBP
YmplY3RJbXAgKiwgY29uc3QgTGlzdCAmYXJncyk7CiAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vcGVyYXRpb25zLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgSmF2YVNjcmlwdENvcmUva2pzL29wZXJh
dGlvbnMuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5jcHAJMTQgSnVsIDIw
MDUgMTg6Mjc6MDMgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5j
cHAJOCBBdWcgMjAwNSAwMTowMDo1NyAtMDAwMApAQCAtMTExLDEwICsxMTEsMTAgQEAgYm9vbCBL
SlM6OmlzTmVnSW5mKGRvdWJsZSBkKQogI2VuZGlmCiAKIC8vIEVDTUEgMTEuOS4zCi1ib29sIEtK
Uzo6ZXF1YWwoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgdjEsIGNvbnN0IFZhbHVlJiB2
MikKK2Jvb2wgS0pTOjplcXVhbChFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2MSwgVmFsdWVJ
bXAgKnYyKQogewotICAgIFR5cGUgdDEgPSB2MS50eXBlKCk7Ci0gICAgVHlwZSB0MiA9IHYyLnR5
cGUoKTsKKyAgICBUeXBlIHQxID0gdjEtPnR5cGUoKTsKKyAgICBUeXBlIHQyID0gdjItPnR5cGUo
KTsKIAogICAgIGlmICh0MSAhPSB0MikgewogICAgICAgICBpZiAodDEgPT0gVW5kZWZpbmVkVHlw
ZSkKQEAgLTEzNCw5ICsxMzQsOSBAQCBib29sIEtKUzo6ZXF1YWwoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBWCiAgICAgICAgICAgICAvLyB1c2UgdG9OdW1iZXIKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmICgodDEgPT0gU3RyaW5nVHlwZSB8fCB0MSA9PSBOdW1iZXJUeXBlKSAmJiB0
MiA+PSBPYmplY3RUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVjLCB2MSwg
djIudG9QcmltaXRpdmUoZXhlYykpOworICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVj
LCB2MSwgdjItPnRvUHJpbWl0aXZlKGV4ZWMpKTsKICAgICAgICAgICAgIGlmICh0MSA+PSBPYmpl
Y3RUeXBlICYmICh0MiA9PSBTdHJpbmdUeXBlIHx8IHQyID09IE51bWJlclR5cGUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBlcXVhbChleGVjLCB2MS50b1ByaW1pdGl2ZShleGVjKSwgdjIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChleGVjLCB2MS0+dG9QcmltaXRpdmUoZXhlYyks
IHYyKTsKICAgICAgICAgICAgIGlmICh0MSAhPSB0MikKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTE0Niw4ICsxNDYsOCBAQCBib29sIEtKUzo6ZXF1YWwoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBWCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHQx
ID09IE51bWJlclR5cGUpIHsKLSAgICAgICAgZG91YmxlIGQxID0gdjEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgIGRvdWJsZSBkMiA9IHYyLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBkb3VibGUg
ZDEgPSB2MS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBkMiA9IHYyLT50b051bWJl
cihleGVjKTsKICAgICAgICAgLy8gRklYTUU6IElzbid0IHRoaXMgYWxyZWFkeSBob3cgTmFOIGJl
aGF2ZXM/CiAgICAgICAgIC8vIFdoeSB0aGUgZXh0cmEgbGluZSBvZiBjb2RlPwogICAgICAgICBp
ZiAoaXNOYU4oZDEpIHx8IGlzTmFOKGQyKSkKQEAgLTE1NiwyNyArMTU2LDI3IEBAIGJvb2wgS0pT
OjplcXVhbChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFYKICAgICB9CiAKICAgICBpZiAodDEgPT0g
U3RyaW5nVHlwZSkKLSAgICAgICAgcmV0dXJuIHYxLnRvU3RyaW5nKGV4ZWMpID09IHYyLnRvU3Ry
aW5nKGV4ZWMpOworICAgICAgICByZXR1cm4gdjEtPnRvU3RyaW5nKGV4ZWMpID09IHYyLT50b1N0
cmluZyhleGVjKTsKIAogICAgIGlmICh0MSA9PSBCb29sZWFuVHlwZSkKLSAgICAgICAgcmV0dXJu
IHYxLnRvQm9vbGVhbihleGVjKSA9PSB2Mi50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIHJldHVy
biB2MS0+dG9Cb29sZWFuKGV4ZWMpID09IHYyLT50b0Jvb2xlYW4oZXhlYyk7CiAKICAgICAvLyB0
eXBlcyBhcmUgT2JqZWN0Ci0gICAgcmV0dXJuIHYxLmltcCgpID09IHYyLmltcCgpOworICAgIHJl
dHVybiB2MSA9PSB2MjsKIH0KIAotYm9vbCBLSlM6OnN0cmljdEVxdWFsKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIpCitib29sIEtKUzo6c3RyaWN0RXF1
YWwoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2MikKIHsKLSAgVHlw
ZSB0MSA9IHYxLnR5cGUoKTsKLSAgVHlwZSB0MiA9IHYyLnR5cGUoKTsKKyAgVHlwZSB0MSA9IHYx
LT50eXBlKCk7CisgIFR5cGUgdDIgPSB2Mi0+dHlwZSgpOwogCiAgIGlmICh0MSAhPSB0MikKICAg
ICByZXR1cm4gZmFsc2U7CiAgIGlmICh0MSA9PSBVbmRlZmluZWRUeXBlIHx8IHQxID09IE51bGxU
eXBlKQogICAgIHJldHVybiB0cnVlOwogICBpZiAodDEgPT0gTnVtYmVyVHlwZSkgewotICAgIGRv
dWJsZSBuMSA9IHYxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBuMiA9IHYyLnRvTnVtYmVy
KGV4ZWMpOworICAgIGRvdWJsZSBuMSA9IHYxLT50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
bjIgPSB2Mi0+dG9OdW1iZXIoZXhlYyk7CiAgICAgLy8gRklYTUU6IElzbid0IHRoaXMgYWxyZWFk
eSBob3cgTmFOIGJlaGF2ZXM/CiAgICAgLy8gV2h5IHRoZSBleHRyYSBsaW5lIG9mIGNvZGU/CiAg
ICAgaWYgKGlzTmFOKG4xKSB8fCBpc05hTihuMikpCkBAIC0xODYsMjcgKzE4NiwyNyBAQCBib29s
IEtKUzo6c3RyaWN0RXF1YWwoRXhlY1N0YXRlICpleGVjLCBjCiAgICAgLyogVE9ETzogKzAgYW5k
IC0wICovCiAgICAgcmV0dXJuIGZhbHNlOwogICB9IGVsc2UgaWYgKHQxID09IFN0cmluZ1R5cGUp
IHsKLSAgICByZXR1cm4gdjEudG9TdHJpbmcoZXhlYykgPT0gdjIudG9TdHJpbmcoZXhlYyk7Cisg
ICAgcmV0dXJuIHYxLT50b1N0cmluZyhleGVjKSA9PSB2Mi0+dG9TdHJpbmcoZXhlYyk7CiAgIH0g
ZWxzZSBpZiAodDIgPT0gQm9vbGVhblR5cGUpIHsKLSAgICByZXR1cm4gdjEudG9Cb29sZWFuKGV4
ZWMpID09IHYyLnRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gdjEtPnRvQm9vbGVhbihleGVj
KSA9PSB2Mi0+dG9Cb29sZWFuKGV4ZWMpOwogICB9Ci0gIGlmICh2MS5pbXAoKSA9PSB2Mi5pbXAo
KSkKKyAgaWYgKHYxID09IHYyKQogICAgIHJldHVybiB0cnVlOwogICAvKiBUT0RPOiBqb2luZWQg
b2JqZWN0cyAqLwogCiAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IEtKUzo6cmVsYXRpb24oRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSYgdjEsIGNvbnN0IFZhbHVlJiB2MikKK2ludCBLSlM6
OnJlbGF0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnYxLCBWYWx1ZUltcCAqdjIpCiB7
Ci0gIFZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoZXhlYyxOdW1iZXJUeXBlKTsKLSAgVmFsdWUg
cDIgPSB2Mi50b1ByaW1pdGl2ZShleGVjLE51bWJlclR5cGUpOworICBWYWx1ZUltcCAqcDEgPSB2
MS0+dG9QcmltaXRpdmUoZXhlYyxOdW1iZXJUeXBlKTsKKyAgVmFsdWVJbXAgKnAyID0gdjItPnRv
UHJpbWl0aXZlKGV4ZWMsTnVtYmVyVHlwZSk7CiAKLSAgaWYgKHAxLnR5cGUoKSA9PSBTdHJpbmdU
eXBlICYmIHAyLnR5cGUoKSA9PSBTdHJpbmdUeXBlKQotICAgIHJldHVybiBwMS50b1N0cmluZyhl
eGVjKSA8IHAyLnRvU3RyaW5nKGV4ZWMpID8gMSA6IDA7CisgIGlmIChwMS0+aXNTdHJpbmcoKSAm
JiBwMi0+aXNTdHJpbmcoKSkKKyAgICByZXR1cm4gcDEtPnRvU3RyaW5nKGV4ZWMpIDwgcDItPnRv
U3RyaW5nKGV4ZWMpID8gMSA6IDA7CiAKLSAgZG91YmxlIG4xID0gcDEudG9OdW1iZXIoZXhlYyk7
Ci0gIGRvdWJsZSBuMiA9IHAyLnRvTnVtYmVyKGV4ZWMpOworICBkb3VibGUgbjEgPSBwMS0+dG9O
dW1iZXIoZXhlYyk7CisgIGRvdWJsZSBuMiA9IHAyLT50b051bWJlcihleGVjKTsKICAgaWYgKG4x
IDwgbjIpCiAgICAgcmV0dXJuIDE7CiAgIGlmIChuMSA+PSBuMikKQEAgLTIyNSwzNyArMjI1LDM3
IEBAIGludCBLSlM6Om1pbkludChpbnQgZDEsIGludCBkMikKIH0KIAogLy8gRUNNQSAxMS42Ci1W
YWx1ZSBLSlM6OmFkZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZ2MSwgY29uc3QgVmFs
dWUgJnYyLCBjaGFyIG9wZXIpCitWYWx1ZUltcCAqS0pTOjphZGQoRXhlY1N0YXRlICpleGVjLCBW
YWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2MiwgY2hhciBvcGVyKQogewogICAvLyBleGNlcHRpb24g
Zm9yIHRoZSBEYXRlIGV4Y2VwdGlvbiBpbiBkZWZhdWx0VmFsdWUoKQogICBUeXBlIHByZWZlcnJl
ZCA9IG9wZXIgPT0gJysnID8gVW5zcGVjaWZpZWRUeXBlIDogTnVtYmVyVHlwZTsKLSAgVmFsdWUg
cDEgPSB2MS50b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWQpOwotICBWYWx1ZSBwMiA9IHYyLnRv
UHJpbWl0aXZlKGV4ZWMsIHByZWZlcnJlZCk7CisgIFZhbHVlSW1wICpwMSA9IHYxLT50b1ByaW1p
dGl2ZShleGVjLCBwcmVmZXJyZWQpOworICBWYWx1ZUltcCAqcDIgPSB2Mi0+dG9QcmltaXRpdmUo
ZXhlYywgcHJlZmVycmVkKTsKIAotICBpZiAoKHAxLnR5cGUoKSA9PSBTdHJpbmdUeXBlIHx8IHAy
LnR5cGUoKSA9PSBTdHJpbmdUeXBlKSAmJiBvcGVyID09ICcrJykgewotICAgIHJldHVybiBwMS50
b1N0cmluZyhleGVjKSArIHAyLnRvU3RyaW5nKGV4ZWMpOworICBpZiAoKHAxLT5pc1N0cmluZygp
IHx8IHAyLT5pc1N0cmluZygpKSAmJiBvcGVyID09ICcrJykgeworICAgIHJldHVybiBqc1N0cmlu
ZyhwMS0+dG9TdHJpbmcoZXhlYykgKyBwMi0+dG9TdHJpbmcoZXhlYykpOwogICB9CiAKICAgYm9v
bCBuMUtub3duVG9CZUludGVnZXI7Ci0gIGRvdWJsZSBuMSA9IHAxLnRvTnVtYmVyKGV4ZWMsIG4x
S25vd25Ub0JlSW50ZWdlcik7CisgIGRvdWJsZSBuMSA9IHAxLT50b051bWJlcihleGVjLCBuMUtu
b3duVG9CZUludGVnZXIpOwogICBib29sIG4yS25vd25Ub0JlSW50ZWdlcjsKLSAgZG91YmxlIG4y
ID0gcDIudG9OdW1iZXIoZXhlYywgbjJLbm93blRvQmVJbnRlZ2VyKTsKKyAgZG91YmxlIG4yID0g
cDItPnRvTnVtYmVyKGV4ZWMsIG4yS25vd25Ub0JlSW50ZWdlcik7CiAKICAgYm9vbCByZXN1bHRL
bm93blRvQmVJbnRlZ2VyID0gbjFLbm93blRvQmVJbnRlZ2VyICYmIG4yS25vd25Ub0JlSW50ZWdl
cjsKIAogICBpZiAob3BlciA9PSAnKycpCi0gICAgcmV0dXJuIFZhbHVlKG4xICsgbjIsIHJlc3Vs
dEtub3duVG9CZUludGVnZXIpOworICAgIHJldHVybiBqc051bWJlcihuMSArIG4yLCByZXN1bHRL
bm93blRvQmVJbnRlZ2VyKTsKICAgZWxzZQotICAgIHJldHVybiBWYWx1ZShuMSAtIG4yLCByZXN1
bHRLbm93blRvQmVJbnRlZ2VyKTsKKyAgICByZXR1cm4ganNOdW1iZXIobjEgLSBuMiwgcmVzdWx0
S25vd25Ub0JlSW50ZWdlcik7CiB9CiAKIC8vIEVDTUEgMTEuNQotVmFsdWUgS0pTOjptdWx0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIsIGNoYXIgb3Bl
cikKK1ZhbHVlSW1wICpLSlM6Om11bHQoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZh
bHVlSW1wICp2MiwgY2hhciBvcGVyKQogewogICBib29sIG4xS25vd25Ub0JlSW50ZWdlcjsKLSAg
ZG91YmxlIG4xID0gdjEudG9OdW1iZXIoZXhlYywgbjFLbm93blRvQmVJbnRlZ2VyKTsKKyAgZG91
YmxlIG4xID0gdjEtPnRvTnVtYmVyKGV4ZWMsIG4xS25vd25Ub0JlSW50ZWdlcik7CiAgIGJvb2wg
bjJLbm93blRvQmVJbnRlZ2VyOwotICBkb3VibGUgbjIgPSB2Mi50b051bWJlcihleGVjLCBuMktu
b3duVG9CZUludGVnZXIpOworICBkb3VibGUgbjIgPSB2Mi0+dG9OdW1iZXIoZXhlYywgbjJLbm93
blRvQmVJbnRlZ2VyKTsKIAogICBkb3VibGUgcmVzdWx0OwogICBib29sIHJlc3VsdEtub3duVG9C
ZUludGVnZXI7CkBAIC0yNzEsNSArMjcxLDUgQEAgVmFsdWUgS0pTOjptdWx0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgVgogICAgIHJlc3VsdEtub3duVG9CZUludGVnZXIgPSBuMUtub3duVG9CZUlu
dGVnZXIgJiYgbjJLbm93blRvQmVJbnRlZ2VyICYmIG4yICE9IDA7CiAgIH0KIAotICByZXR1cm4g
VmFsdWUocmVzdWx0LCByZXN1bHRLbm93blRvQmVJbnRlZ2VyKTsKKyAgcmV0dXJuIGpzTnVtYmVy
KHJlc3VsdCwgcmVzdWx0S25vd25Ub0JlSW50ZWdlcik7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvb3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAt
cCAtdSAtcjEuNSBKYXZhU2NyaXB0Q29yZS9ranMvb3BlcmF0aW9ucy5oCi0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvb3BlcmF0aW9ucy5oCTE0IEp1bCAyMDA1IDE4OjI3OjAzIC0wMDAwCTEuNQorKysg
SmF2YVNjcmlwdENvcmUva2pzL29wZXJhdGlvbnMuaAk4IEF1ZyAyMDA1IDAxOjAwOjU3IC0wMDAw
CkBAIC00Nyw4ICs0Nyw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBib29sIGlzTmVnSW5mKGRvdWJs
ZSBkKTsKICNlbmRpZgogCi0gIGJvb2wgZXF1YWwoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1
ZSYgdjEsIGNvbnN0IFZhbHVlJiB2Mik7Ci0gIGJvb2wgc3RyaWN0RXF1YWwoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBWYWx1ZSAmdjEsIGNvbnN0IFZhbHVlICZ2Mik7CisgIGJvb2wgZXF1YWwoRXhl
Y1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2Mik7CisgIGJvb2wgc3RyaWN0
RXF1YWwoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2Mik7CiAgIC8q
KgogICAgKiBUaGlzIG9wZXJhdG9yIHBlcmZvcm1zIGFuIGFic3RyYWN0IHJlbGF0aW9uYWwgY29t
cGFyaXNvbiBvZiB0aGUgdHdvCiAgICAqIGFyZ3VtZW50cyB0aGF0IGNhbiBiZSBvZiBhcmJpdHJh
cnkgdHlwZS4gSWYgcG9zc2libGUsIGNvbnZlcnNpb25zIHRvIHRoZQpAQCAtNTcsNyArNTcsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICogQHJldHVybiAxIGlmIHYxIGlzICJsZXNzLXRoYW4iIHYy
LCAwIGlmIHRoZSByZWxhdGlvbiBpcyAiZ3JlYXRlci10aGFuLW9yLQogICAgKiBlcXVhbCIuIC0x
IGlmIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgogICAgKi8KLSAgaW50IHJlbGF0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgVmFsdWUmIHYxLCBjb25zdCBWYWx1ZSYgdjIpOworICBpbnQgcmVs
YXRpb24oRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdjEsIFZhbHVlSW1wICp2Mik7CiAgIGlu
dCBtYXhJbnQoaW50IGQxLCBpbnQgZDIpOwogICBpbnQgbWluSW50KGludCBkMSwgaW50IGQyKTsK
ICAgLyoqCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgKiBAcGFyYW0gb3Bl
ciAnKycgb3IgJy0nIGZvciBhbiBhZGRpdGlvbiBvciBzdWJzdHJhY3Rpb24sIHJlc3BlY3RpdmVs
eS4KICAgICogQHJldHVybiBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCiAgICAqLwotICBW
YWx1ZSBhZGQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdjEsIGNvbnN0IFZhbHVlICZ2
MiwgY2hhciBvcGVyKTsKKyAgVmFsdWVJbXAgKmFkZChFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1w
ICp2MSwgVmFsdWVJbXAgKnYyLCBjaGFyIG9wZXIpOwogICAvKioKICAgICogTXVsdGlwbGljYXRp
dmUgb3BlcmF0b3IuIEVpdGhlciBtdWx0aXBsaWVzL2RpdmlkZXMgdjEgYW5kIHYyIG9yCiAgICAq
IGNhbGN1bGF0ZXMgdGhlIHJlbWFpbmRlciBmcm9tIGFuIGRpdmlzaW9uLgpAQCAtNzQsNyArNzQs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICogbW9kdWxvIG9wZXJhdGlvbi4KICAgICogQHJldHVy
biBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCiAgICAqLwotICBWYWx1ZSBtdWx0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJnYxLCBjb25zdCBWYWx1ZSAmdjIsIGNoYXIgb3Blcik7
CisgIFZhbHVlSW1wICptdWx0KEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJbXAgKnYxLCBWYWx1ZUlt
cCAqdjIsIGNoYXIgb3Blcik7CiAKIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9w
ZXJ0eV9tYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9ranMvcHJvcGVydHlfbWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NApkaWZmIC1w
IC11IC1yMS40NCBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5jcHAJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkx
LjQ0CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAk4IEF1ZyAyMDA1IDAx
OjAwOjU4IC0wMDAwCkBAIC01NDUsNyArNTQ1LDcgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6bWFyaygp
IGNvbnN0CiAKICAgICBpbnQgc2l6ZSA9IF90YWJsZS0+c2l6ZTsKICAgICBFbnRyeSAqZW50cmll
cyA9IF90YWJsZS0+ZW50cmllczsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBzaXplOyArK2kp
IHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICBWYWx1ZUlt
cCAqdiA9IGVudHJpZXNbaV0udmFsdWU7CiAgICAgICAgIGlmICh2ICYmICF2LT5tYXJrZWQoKSkK
ICAgICAgICAgICAgIHYtPm1hcmsoKTsKQEAgLTU2Myw3ICs1NjMsNyBAQCBzdGF0aWMgaW50IGNv
bXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUHJv
cGVydHlNYXA6OmFkZEVudW1lcmFibGVzVG9SZWZlcmVuY2VMaXN0KFJlZmVyZW5jZUxpc3QgJmxp
c3QsIGNvbnN0IE9iamVjdCAmYmFzZSkgY29uc3QKK3ZvaWQgUHJvcGVydHlNYXA6OmFkZEVudW1l
cmFibGVzVG9SZWZlcmVuY2VMaXN0KFJlZmVyZW5jZUxpc3QgJmxpc3QsIE9iamVjdEltcCAqYmFz
ZSkgY29uc3QKIHsKICAgICBpZiAoIV90YWJsZSkgewogI2lmIFVTRV9TSU5HTEVfRU5UUlkKQEAg
LTYwNSw3ICs2MDUsNyBAQCB2b2lkIFByb3BlcnR5TWFwOjphZGRFbnVtZXJhYmxlc1RvUmVmZXJl
CiAgICAgICAgIGRlbGV0ZSBbXSBzb3J0ZWRFbnVtZXJhYmxlczsKIH0KIAotdm9pZCBQcm9wZXJ0
eU1hcDo6YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVuY2VMaXN0KFJlZmVyZW5jZUxp
c3QgJmxpc3QsIGNvbnN0IE9iamVjdCAmYmFzZSkgY29uc3QKK3ZvaWQgUHJvcGVydHlNYXA6OmFk
ZFNwYXJzZUFycmF5UHJvcGVydGllc1RvUmVmZXJlbmNlTGlzdChSZWZlcmVuY2VMaXN0ICZsaXN0
LCBPYmplY3RJbXAgKmJhc2UpIGNvbnN0CiB7CiAgICAgaWYgKCFfdGFibGUpIHsKICNpZiBVU0Vf
U0lOR0xFX0VOVFJZCkBAIC02MjUsOCArNjI1LDcgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6YWRkU3Bh
cnNlQXJyYXlQcm9wZXJ0aQogICAgIEVudHJ5ICplbnRyaWVzID0gX3RhYmxlLT5lbnRyaWVzOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpICE9IHNpemU7ICsraSkgewogICAgICAgICBVU3RyaW5nOjpS
ZXAgKmtleSA9IGVudHJpZXNbaV0ua2V5OwotICAgICAgICBpZiAoa2V5ICYmIGtleSAhPSAmVVN0
cmluZzo6UmVwOjpudWxsKQotICAgICAgICB7CisgICAgICAgIGlmIChrZXkgJiYga2V5ICE9ICZV
U3RyaW5nOjpSZXA6Om51bGwpIHsKICAgICAgICAgICAgIFVTdHJpbmcgayhrZXkpOwogICAgICAg
ICAgICAgYm9vbCBmaXRzSW5VSW50MzI7CiAgICAgICAgICAgICBrLnRvVUludDMyKCZmaXRzSW5V
SW50MzIpOwpAQCAtNjcwLDcgKzY2OSw3IEBAIHZvaWQgUHJvcGVydHlNYXA6OnNhdmUoU2F2ZWRQ
cm9wZXJ0aWVzICYKICNpZiBVU0VfU0lOR0xFX0VOVFJZCiAgICAgICAgIGlmIChfc2luZ2xlRW50
cnkua2V5ICYmICEoX3NpbmdsZUVudHJ5LmF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBGdW5jdGlv
bikpKSB7CiAgICAgICAgICAgICBwcm9wLT5rZXkgPSBJZGVudGlmaWVyKF9zaW5nbGVFbnRyeS5r
ZXkpOwotICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBWYWx1ZShfc2luZ2xlRW50cnkudmFsdWUp
OworICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBfc2luZ2xlRW50cnkudmFsdWU7CiAgICAgICAg
ICAgICBwcm9wLT5hdHRyaWJ1dGVzID0gX3NpbmdsZUVudHJ5LmF0dHJpYnV0ZXM7CiAgICAgICAg
ICAgICArK3Byb3A7CiAgICAgICAgIH0KQEAgLTcwNiw3ICs3MDUsNyBAQCB2b2lkIFByb3BlcnR5
TWFwOjpzYXZlKFNhdmVkUHJvcGVydGllcyAmCiAgICAgICAgIHdoaWxlIChxICE9IHApIHsKICAg
ICAgICAgICAgIEVudHJ5ICplID0gKnErKzsKICAgICAgICAgICAgIHByb3AtPmtleSA9IElkZW50
aWZpZXIoZS0+a2V5KTsKLSAgICAgICAgICAgIHByb3AtPnZhbHVlID0gVmFsdWUoZS0+dmFsdWUp
OworICAgICAgICAgICAgcHJvcC0+dmFsdWUgPSBlLT52YWx1ZTsKICAgICAgICAgICAgIHByb3At
PmF0dHJpYnV0ZXMgPSBlLT5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgKytwcm9wOwogICAgICAg
ICB9CkBAIC03MjAsNyArNzE5LDcgQEAgdm9pZCBQcm9wZXJ0eU1hcDo6c2F2ZShTYXZlZFByb3Bl
cnRpZXMgJgogdm9pZCBQcm9wZXJ0eU1hcDo6cmVzdG9yZShjb25zdCBTYXZlZFByb3BlcnRpZXMg
JnApCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gcC5fY291bnQ7ICsraSkKLSAgICAgICAg
cHV0KHAuX3Byb3BlcnRpZXNbaV0ua2V5LCBwLl9wcm9wZXJ0aWVzW2ldLnZhbHVlLmltcCgpLCBw
Ll9wcm9wZXJ0aWVzW2ldLmF0dHJpYnV0ZXMpOworICAgICAgICBwdXQocC5fcHJvcGVydGllc1tp
XS5rZXksIHAuX3Byb3BlcnRpZXNbaV0udmFsdWUsIHAuX3Byb3BlcnRpZXNbaV0uYXR0cmlidXRl
cyk7CiB9CiAKICNpZiBET19DT05TSVNURU5DWV9DSEVDSwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3Byb3BlcnR5X21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlm
ZiAtcCAtdSAtcjEuMjIgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCi0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkx
LjIyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJOCBBdWcgMjAwNSAwMTow
MDo1OCAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgS0pTIHsKIAotICAgIGNs
YXNzIE9iamVjdDsKKyAgICBjbGFzcyBPYmplY3RJbXA7CiAgICAgY2xhc3MgUmVmZXJlbmNlTGlz
dDsKICAgICBjbGFzcyBWYWx1ZUltcDsKICAgICAKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgIFZhbHVlSW1wICoqZ2V0TG9jYXRpb24oY29uc3QgSWRlbnRpZmllciAm
bmFtZSk7CiAKICAgICAgICAgdm9pZCBtYXJrKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgYWRkRW51
bWVyYWJsZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBjb25zdCBPYmplY3QgJikg
Y29uc3Q7Ci0Jdm9pZCBhZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3QoUmVm
ZXJlbmNlTGlzdCAmLCBjb25zdCBPYmplY3QgJikgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkRW51
bWVyYWJsZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBPYmplY3RJbXAgKikgY29u
c3Q7CisJdm9pZCBhZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJl
bmNlTGlzdCAmLCBPYmplY3RJbXAgKikgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzYXZlKFNhdmVk
UHJvcGVydGllcyAmKSBjb25zdDsKICAgICAgICAgdm9pZCByZXN0b3JlKGNvbnN0IFNhdmVkUHJv
cGVydGllcyAmcCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0
eV9zbG90LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgSmF2
YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
cHJvcGVydHlfc2xvdC5jcHAJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkxLjEKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjU4IC0wMDAw
CkBAIC0yNSw3ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi1WYWx1ZSBQcm9wZXJ0eVNs
b3Q6OnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAqUHJvcGVydHlTbG90
Ojp1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIEphdmFTY3JpcHRDb3Jl
L2tqcy9wcm9wZXJ0eV9zbG90LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90
LmgJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkxLjEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9w
cm9wZXJ0eV9zbG90LmgJOCBBdWcgMjAwNSAwMTowMDo1OCAtMDAwMApAQCAtMzYsMTcgKzM2LDE3
IEBAIGNsYXNzIE9iamVjdEltcDsKIGNsYXNzIFByb3BlcnR5U2xvdAogewogcHVibGljOgotICAg
IHR5cGVkZWYgVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgdHlwZWRlZiBWYWx1ZUltcCAqKCpHZXRW
YWx1ZUZ1bmMpKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CiAKICAgICBib29sIGlzU2V0KCkgeyByZXR1cm4gbV9nZXRWYWx1ZSAhPSAwOyB9Ci0g
ICAgVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CisgICAgVmFsdWVJbXAgKmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsgCiAgICAgICAgIGlm
IChtX2dldFZhbHVlID09IFZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAgcmV0dXJuICpt
X2RhdGEudmFsdWVTbG90OwogICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUsICp0aGlzKTsgCiAgICAgfQogCi0gICAgVmFsdWUgZ2V0VmFsdWUoRXhlY1N0YXRlICpl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CisgICAgVmFsdWVJbXAgKmdldFZhbHVl
KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsgCiAg
ICAgICAgIGlmIChtX2dldFZhbHVlID09IFZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAgICAg
cmV0dXJuICptX2RhdGEudmFsdWVTbG90OwpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgbG9uZyBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQogCiBw
cml2YXRlOgotICAgIHN0YXRpYyBWYWx1ZSB1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgVmFsdWVJ
bXAgKnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYpOwogCiAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0VmFsdWU7CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NgpkaWZmIC1wIC11IC1yMS42IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgKLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAwMAkxLjYKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0LmgJOCBBdWcgMjAwNSAwMTowMDo1OCAtMDAwMApA
QCAtNDgsMzMgKzQ4LDI2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgewogCWlmICh2YWwpIGdj
VW5wcm90ZWN0KHZhbCk7CiAgICAgICB9Ci0KICAgICAKLSAgICBjbGFzcyBQcm90ZWN0ZWRWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7Ci0gICAgcHVibGljOgotICAgICAgUHJvdGVjdGVkVmFsdWUoKSA6
IFZhbHVlKCkge30KLSAgICAgIFByb3RlY3RlZFZhbHVlKGNvbnN0IFZhbHVlJnYpICA6IFZhbHVl
KHYpIHsgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KHYuaW1wKCkpOyB9OwotICAgICAgUHJvdGVjdGVk
VmFsdWUoY29uc3QgUHJvdGVjdGVkVmFsdWUmdikgIDogVmFsdWUodikgeyBnY1Byb3RlY3ROdWxs
VG9sZXJhbnQodi5pbXAoKSk7IH07Ci0gICAgICB+UHJvdGVjdGVkVmFsdWUoKSB7IGdjVW5wcm90
ZWN0TnVsbFRvbGVyYW50KGltcCgpKTt9Ci0gICAgICBQcm90ZWN0ZWRWYWx1ZSYgb3BlcmF0b3I9
KGNvbnN0IFZhbHVlICZ2KQotCXsgCi0JICBWYWx1ZUltcCAqb2xkID0gaW1wKCk7Ci0JICBWYWx1
ZTo6b3BlcmF0b3I9KHYpOyAKLQkgIGdjUHJvdGVjdE51bGxUb2xlcmFudCh2LmltcCgpKTsKLQkg
IGdjVW5wcm90ZWN0TnVsbFRvbGVyYW50KG9sZCk7IAotCSAgcmV0dXJuICp0aGlzOwotCX0KLSAg
ICAgIFByb3RlY3RlZFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkVmFsdWUgJnYpCi0J
eyAKLQkgIFZhbHVlSW1wICpvbGQgPSBpbXAoKTsKLQkgIFZhbHVlOjpvcGVyYXRvcj0odik7IAot
CSAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KHYuaW1wKCkpOwotCSAgZ2NVbnByb3RlY3ROdWxsVG9s
ZXJhbnQob2xkKTsgCi0JICByZXR1cm4gKnRoaXM7Ci0JfQotICAgIHByaXZhdGU6Ci0gICAgICBl
eHBsaWNpdCBQcm90ZWN0ZWRWYWx1ZShWYWx1ZUltcCAqdik7Ci0gICAgfTsKK2NsYXNzIFByb3Rl
Y3RlZFZhbHVlIHsKK3B1YmxpYzoKKyAgICBQcm90ZWN0ZWRWYWx1ZSgpIDogbV92YWx1ZSgwKSB7
IH0KKyAgICBQcm90ZWN0ZWRWYWx1ZShWYWx1ZUltcCAqdikgOiBtX3ZhbHVlKHYpIHsgZ2NQcm90
ZWN0TnVsbFRvbGVyYW50KHYpOyB9CisgICAgUHJvdGVjdGVkVmFsdWUoY29uc3QgUHJvdGVjdGVk
VmFsdWUmIHYpIDogbV92YWx1ZSh2Lm1fdmFsdWUpIHsgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KG1f
dmFsdWUpOyB9CisgICAgflByb3RlY3RlZFZhbHVlKCkgeyBnY1VucHJvdGVjdE51bGxUb2xlcmFu
dChtX3ZhbHVlKTsgfQorICAgIFByb3RlY3RlZFZhbHVlJiBvcGVyYXRvcj0oVmFsdWVJbXAgKnYp
CisgICAgeworICAgICAgICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQodik7CisgICAgICAgIGdjVW5w
cm90ZWN0TnVsbFRvbGVyYW50KG1fdmFsdWUpOworICAgICAgICBtX3ZhbHVlID0gdjsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBQcm90ZWN0ZWRWYWx1ZSYgb3BlcmF0b3I9KGNv
bnN0IFByb3RlY3RlZFZhbHVlJiB2KSB7IHJldHVybiAqdGhpcyA9IHYubV92YWx1ZTsgfQorICAg
IG9wZXJhdG9yIFZhbHVlSW1wICooKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgVmFs
dWVJbXAgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Citwcm90ZWN0ZWQ6
CisgICAgVmFsdWVJbXAgKm1fdmFsdWU7Cit9OwogCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX29iamVjdC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
dGVjdGVkX29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX29iamVjdC5o
CTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJv
dGVjdGVkX29iamVjdC5oCTggQXVnIDIwMDUgMDE6MDA6NTggLTAwMDAKQEAgLTEsNCArMSwzIEBA
Ci0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1
dGVyLCBJbmMuCkBAIC0yMCw5ICsxOSw4IEBACiAgKgogICovCiAKLQotI2lmbmRlZiBfS0pTX1BS
T1RFQ1RFRF9PQkpFQ1RfSF8KLSNkZWZpbmUgX0tKU19QUk9URUNURURfT0JKRUNUX0hfCisjaWZu
ZGVmIEtKU19QUk9URUNURURfT0JKRUNUX0gKKyNkZWZpbmUgS0pTX1BST1RFQ1RFRF9PQkpFQ1Rf
SAogCiAjaW5jbHVkZSAicHJvdGVjdC5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgpAQCAtMzAsNTMg
KzI4LDM2IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi0gICAgY2xhc3MgUHJvdGVjdGVkT2JqZWN0
IDogcHVibGljIE9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgUHJvdGVjdGVkT2JqZWN0KCkg
OiBPYmplY3QoKSB7fQotICAgICAgUHJvdGVjdGVkT2JqZWN0KGNvbnN0IE9iamVjdCAmbykgIDog
T2JqZWN0KG8pIHsgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KG8uaW1wKCkpOyB9OwotICAgICAgUHJv
dGVjdGVkT2JqZWN0KGNvbnN0IFByb3RlY3RlZE9iamVjdCAmbykgIDogT2JqZWN0KG8pIHsgZ2NQ
cm90ZWN0TnVsbFRvbGVyYW50KG8uaW1wKCkpOyB9OwotICAgICAgflByb3RlY3RlZE9iamVjdCgp
IHsgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQoaW1wKCkpO30KLSAgICAgIFByb3RlY3RlZE9iamVj
dCYgb3BlcmF0b3I9KGNvbnN0IE9iamVjdCAmbykKLQl7IAotCSAgVmFsdWVJbXAgKm9sZCA9IGlt
cCgpOwotCSAgT2JqZWN0OjpvcGVyYXRvcj0obyk7IAotCSAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50
KG8uaW1wKCkpOwotCSAgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQob2xkKTsgCi0JICByZXR1cm4g
KnRoaXM7Ci0JfQotICAgICAgUHJvdGVjdGVkT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgUHJvdGVj
dGVkT2JqZWN0ICZvKQotCXsgCi0JICBWYWx1ZUltcCAqb2xkID0gaW1wKCk7Ci0JICBPYmplY3Q6
Om9wZXJhdG9yPShvKTsgCi0JICBnY1Byb3RlY3ROdWxsVG9sZXJhbnQoby5pbXAoKSk7Ci0JICBn
Y1VucHJvdGVjdE51bGxUb2xlcmFudChvbGQpOyAKLQkgIHJldHVybiAqdGhpczsKLQl9Ci0gICAg
cHJpdmF0ZToKLSAgICAgIGV4cGxpY2l0IFByb3RlY3RlZE9iamVjdChPYmplY3RJbXAgKm8pOwot
ICAgIH07Ci0KK2NsYXNzIFByb3RlY3RlZE9iamVjdCA6IHByaXZhdGUgUHJvdGVjdGVkVmFsdWUg
eworcHVibGljOgorICAgIFByb3RlY3RlZE9iamVjdCgpIHsgfQorICAgIFByb3RlY3RlZE9iamVj
dChPYmplY3RJbXAgKnYpIDogUHJvdGVjdGVkVmFsdWUodikgeyB9CisgICAgUHJvdGVjdGVkT2Jq
ZWN0KGNvbnN0IFByb3RlY3RlZE9iamVjdCYgdikgOiBQcm90ZWN0ZWRWYWx1ZSh2KSB7IH0KKyAg
ICBQcm90ZWN0ZWRPYmplY3QmIG9wZXJhdG9yPShPYmplY3RJbXAgKnYpIHsgUHJvdGVjdGVkVmFs
dWU6Om9wZXJhdG9yPSh2KTsgcmV0dXJuICp0aGlzOyB9CisgICAgUHJvdGVjdGVkT2JqZWN0JiBv
cGVyYXRvcj0oY29uc3QgUHJvdGVjdGVkT2JqZWN0JiB2KSB7IFByb3RlY3RlZFZhbHVlOjpvcGVy
YXRvcj0odik7IHJldHVybiAqdGhpczsgfQorICAgIG9wZXJhdG9yIFZhbHVlSW1wICooKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgb3BlcmF0b3IgT2JqZWN0SW1wICooKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4obV92YWx1ZSk7IH0KKyAgICBPYmplY3RJ
bXAgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
bV92YWx1ZSk7IH0KK307CiAKICAgICBjbGFzcyBQcm90ZWN0ZWRSZWZlcmVuY2UgOiBwdWJsaWMg
UmVmZXJlbmNlIHsKICAgICBwdWJsaWM6Ci0gICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3Qg
UmVmZXJlbmNlJnIpICA6IFJlZmVyZW5jZShyKSB7IGdjUHJvdGVjdE51bGxUb2xlcmFudChyLmJh
c2UuaW1wKCkpOyB9OwotICAgICAgflByb3RlY3RlZFJlZmVyZW5jZSgpIHsgZ2NVbnByb3RlY3RO
dWxsVG9sZXJhbnQoYmFzZS5pbXAoKSk7fQorICAgICAgUHJvdGVjdGVkUmVmZXJlbmNlKGNvbnN0
IFJlZmVyZW5jZSYgcikgOiBSZWZlcmVuY2UocikgeyBnY1Byb3RlY3ROdWxsVG9sZXJhbnQoci5i
YXNlKTsgfTsKKyAgICAgIH5Qcm90ZWN0ZWRSZWZlcmVuY2UoKSB7IGdjVW5wcm90ZWN0TnVsbFRv
bGVyYW50KGJhc2UpO30KICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0
IFJlZmVyZW5jZSAmcikKIAl7IAotCSAgVmFsdWVJbXAgKm9sZCA9IGJhc2UuaW1wKCk7CisJICBW
YWx1ZUltcCAqb2xkID0gYmFzZTsKIAkgIFJlZmVyZW5jZTo6b3BlcmF0b3I9KHIpOyAKLQkgIGdj
UHJvdGVjdE51bGxUb2xlcmFudChyLmJhc2UuaW1wKCkpOworCSAgZ2NQcm90ZWN0TnVsbFRvbGVy
YW50KHIuYmFzZSk7CiAJICBnY1VucHJvdGVjdE51bGxUb2xlcmFudChvbGQpOyAKIAkgIHJldHVy
biAqdGhpczsKIAl9CiAgICAgcHJpdmF0ZToKICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZSgpOwot
ICAgICAgUHJvdGVjdGVkUmVmZXJlbmNlKGNvbnN0IE9iamVjdCYgYiwgY29uc3QgSWRlbnRpZmll
ciYgcCk7Ci0gICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgT2JqZWN0JiBiLCB1bnNpZ25l
ZCBwKTsKICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZShPYmplY3RJbXAgKmIsIGNvbnN0IElkZW50
aWZpZXImIHApOwogICAgICAgUHJvdGVjdGVkUmVmZXJlbmNlKE9iamVjdEltcCAqYiwgdW5zaWdu
ZWQgcCk7Ci0gICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgTnVsbCYgYiwgY29uc3QgSWRl
bnRpZmllciYgcCk7Ci0gICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgTnVsbCYgYiwgdW5z
aWduZWQgcCk7CisgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgSWRlbnRpZmllciYgcCk7
CisgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UodW5zaWduZWQgcCk7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0ZWRfdmFsdWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3Rl
ZF92YWx1ZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBK
YXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX3ZhbHVlcy5jcHAKLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9wcm90ZWN0ZWRfdmFsdWVzLmNwcAkyOCBKdW4gMjAwNSAwMDowMjowOCAtMDAwMAkxLjQK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0ZWRfdmFsdWVzLmNwcAk4IEF1ZyAyMDA1IDAx
OjAwOjU4IC0wMDAwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAicG9pbnRlcl9oYXNoLmgi
CiAjaW5jbHVkZSAic2ltcGxlX251bWJlci5oIgogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgInZhbHVlLmgiCiAKIG5hbWVzcGFjZSBLSlMgewogCkBAIC00MywxNCArNDQsMTQgQEAgaW50
IFByb3RlY3RlZFZhbHVlczo6Z2V0UHJvdGVjdENvdW50KFZhbAogICAgIGlmIChTaW1wbGVOdW1i
ZXI6OmlzKGspKQogICAgICAgcmV0dXJuIDA7CiAKLSAgICB1bnNpZ25lZCBoYXNoID0gY29tcHV0
ZUhhc2goayk7CisgICAgdW5zaWduZWQgaGFzaCA9IHBvaW50ZXJIYXNoKGspOwogICAgIAogICAg
IGludCBpID0gaGFzaCAmIF90YWJsZVNpemVNYXNrOwogI2lmIERVTVBfU1RBVElTVElDUwogICAg
ICsrbnVtUHJvYmVzOwogICAgIG51bUNvbGxpc2lvbnMgKz0gX3RhYmxlW2ldLmtleSAmJiBfdGFi
bGVbaV0ua2V5ICE9IGs7CiAjZW5kaWYKLSAgICB3aGlsZSAoVmFsdWVJbXAgKmtleSA9IF90YWJs
ZVtpXS5rZXkpIHsKKyAgICB3aGlsZSAoQWxsb2NhdGVkVmFsdWVJbXAgKmtleSA9IF90YWJsZVtp
XS5rZXkpIHsKICAgICAgICAgaWYgKGtleSA9PSBrKSB7CiAJICAgIHJldHVybiBfdGFibGVbaV0u
dmFsdWU7CiAJfQpAQCAtNzEsMTQgKzcyLDE0IEBAIHZvaWQgUHJvdGVjdGVkVmFsdWVzOjppbmNy
ZWFzZVByb3RlY3RDb3UKICAgICBpZiAoIV90YWJsZSkKICAgICAgICAgZXhwYW5kKCk7CiAgICAg
Ci0gICAgdW5zaWduZWQgaGFzaCA9IGNvbXB1dGVIYXNoKGspOworICAgIHVuc2lnbmVkIGhhc2gg
PSBwb2ludGVySGFzaChrKTsKICAgICAKICAgICBpbnQgaSA9IGhhc2ggJiBfdGFibGVTaXplTWFz
azsKICNpZiBEVU1QX1NUQVRJU1RJQ1MKICAgICArK251bVByb2JlczsKICAgICBudW1Db2xsaXNp
b25zICs9IF90YWJsZVtpXS5rZXkgJiYgX3RhYmxlW2ldLmtleSAhPSBrOwogI2VuZGlmCi0gICAg
d2hpbGUgKFZhbHVlSW1wICprZXkgPSBfdGFibGVbaV0ua2V5KSB7CisgICAgd2hpbGUgKEFsbG9j
YXRlZFZhbHVlSW1wICprZXkgPSBfdGFibGVbaV0ua2V5KSB7CiAgICAgICAgIGlmIChrZXkgPT0g
aykgewogCSAgICBfdGFibGVbaV0udmFsdWUrKzsKIAkgICAgcmV0dXJuOwpAQCAtODYsNyArODcs
NyBAQCB2b2lkIFByb3RlY3RlZFZhbHVlczo6aW5jcmVhc2VQcm90ZWN0Q291CiAgICAgICAgIGkg
PSAoaSArIDEpICYgX3RhYmxlU2l6ZU1hc2s7CiAgICAgfQogICAgIAotICAgIF90YWJsZVtpXS5r
ZXkgPSBrOworICAgIF90YWJsZVtpXS5rZXkgPSBrLT5kb3duY2FzdCgpOwogICAgIF90YWJsZVtp
XS52YWx1ZSA9IDE7CiAgICAgKytfa2V5Q291bnQ7CiAgICAgCkBAIC05NCw5ICs5NSw5IEBAIHZv
aWQgUHJvdGVjdGVkVmFsdWVzOjppbmNyZWFzZVByb3RlY3RDb3UKICAgICAgICAgZXhwYW5kKCk7
CiB9CiAKLWlubGluZSB2b2lkIFByb3RlY3RlZFZhbHVlczo6aW5zZXJ0KFZhbHVlSW1wICprLCBp
bnQgdikKK2lubGluZSB2b2lkIFByb3RlY3RlZFZhbHVlczo6aW5zZXJ0KEFsbG9jYXRlZFZhbHVl
SW1wICprLCBpbnQgdikKIHsKLSAgICB1bnNpZ25lZCBoYXNoID0gY29tcHV0ZUhhc2goayk7Cisg
ICAgdW5zaWduZWQgaGFzaCA9IHBvaW50ZXJIYXNoKGspOwogICAgIAogICAgIGludCBpID0gaGFz
aCAmIF90YWJsZVNpemVNYXNrOwogI2lmIERVTVBfU1RBVElTVElDUwpAQCAtMTE3LDkgKzExOCw5
IEBAIHZvaWQgUHJvdGVjdGVkVmFsdWVzOjpkZWNyZWFzZVByb3RlY3RDb3UKICAgICBpZiAoU2lt
cGxlTnVtYmVyOjppcyhrKSkKICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIGhhc2ggPSBj
b21wdXRlSGFzaChrKTsKKyAgICB1bnNpZ25lZCBoYXNoID0gcG9pbnRlckhhc2goayk7CiAgICAg
Ci0gICAgVmFsdWVJbXAgKmtleTsKKyAgICBBbGxvY2F0ZWRWYWx1ZUltcCAqa2V5OwogICAgIAog
ICAgIGludCBpID0gaGFzaCAmIF90YWJsZVNpemVNYXNrOwogI2lmIERVTVBfU1RBVElTVElDUwpA
QCAtMTg2LDkgKzE4Nyw0IEBAIHZvaWQgUHJvdGVjdGVkVmFsdWVzOjpyZWhhc2goaW50IG5ld1Rh
YmwKICAgICBmcmVlKG9sZFRhYmxlKTsKIH0KIAotdW5zaWduZWQgUHJvdGVjdGVkVmFsdWVzOjpj
b21wdXRlSGFzaChWYWx1ZUltcCAqcG9pbnRlcikKLXsKLSAgcmV0dXJuIHBvaW50ZXJIYXNoKHBv
aW50ZXIpOwotfQotCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3By
b3RlY3RlZF92YWx1ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL3Byb3RlY3RlZF92YWx1ZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRp
ZmYgLXAgLXUgLXIxLjIgSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3RlZF92YWx1ZXMuaAotLS0g
SmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3RlZF92YWx1ZXMuaAkyMCBBcHIgMjAwNSAxMDoxNDoz
NSAtMDAwMAkxLjIKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0ZWRfdmFsdWVzLmgJOCBB
dWcgMjAwNSAwMTowMDo1OCAtMDAwMApAQCAtMjAsMTkgKzIwLDE0IEBACiAgKgogICovCiAKLQot
I2lmbmRlZiBfS0pTX1BST1RFQ1RFRF9WQUxVRVNfSF8KLSNkZWZpbmUgX0tKU19QUk9URUNURURf
VkFMVUVTX0hfCisjaWZuZGVmIEtKU19QUk9URUNURURfVkFMVUVTX0gKKyNkZWZpbmUgS0pTX1BS
T1RFQ1RFRF9WQUxVRVNfSAogCiBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBWYWx1ZUltcDsK
KyAgICBjbGFzcyBBbGxvY2F0ZWRWYWx1ZUltcDsKIAogICAgIGNsYXNzIFByb3RlY3RlZFZhbHVl
cyB7Ci0Jc3RydWN0IEtleVZhbHVlIHsKLQkgICAgVmFsdWVJbXAgKmtleTsKLQkgICAgaW50IHZh
bHVlOwotCX07Ci0KICAgICBwdWJsaWM6CiAJc3RhdGljIHZvaWQgaW5jcmVhc2VQcm90ZWN0Q291
bnQoVmFsdWVJbXAgKmtleSk7CiAJc3RhdGljIHZvaWQgZGVjcmVhc2VQcm90ZWN0Q291bnQoVmFs
dWVJbXAgKmtleSk7CkBAIC00MCwxNSArMzUsMTkgQEAgbmFtZXNwYWNlIEtKUyB7CiAJc3RhdGlj
IGludCBnZXRQcm90ZWN0Q291bnQoVmFsdWVJbXAgKmtleSk7CiAKICAgICBwcml2YXRlOgotCXN0
YXRpYyB2b2lkIGluc2VydChWYWx1ZUltcCAqa2V5LCBpbnQgdmFsdWUpOworCXN0YXRpYyB2b2lk
IGluc2VydChBbGxvY2F0ZWRWYWx1ZUltcCAqa2V5LCBpbnQgdmFsdWUpOwogCXN0YXRpYyB2b2lk
IGV4cGFuZCgpOwogCXN0YXRpYyB2b2lkIHNocmluaygpOwogCXN0YXRpYyB2b2lkIHJlaGFzaChp
bnQgbmV3VGFibGVTaXplKTsKLQlzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goVmFsdWVJbXAg
KnBvaW50ZXIpOwogCiAJLy8gbGV0IHRoZSBjb2xsZWN0b3Igc2NhbiB0aGUgdGFibGUgZGlyZWN0
bHkgZm9yIHByb3RlY3RlZCB2YWx1ZXMKIAlmcmllbmQgY2xhc3MgQ29sbGVjdG9yOwogCisJc3Ry
dWN0IEtleVZhbHVlIHsKKwkgICAgQWxsb2NhdGVkVmFsdWVJbXAgKmtleTsKKwkgICAgaW50IHZh
bHVlOworCX07CisKIAlzdGF0aWMgS2V5VmFsdWUgKl90YWJsZTsKIAlzdGF0aWMgaW50IF90YWJs
ZVNpemU7CiAJc3RhdGljIGludCBfdGFibGVTaXplTWFzazsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9yZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvcmVmZXJlbmNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZm
IC1wIC11IC1yMS4xMiBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAJMTQgSnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS4x
MgorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5jcHAJOCBBdWcgMjAwNSAwMTowMDo1
OCAtMDAwMApAQCAtMjcsMjIgKzI3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWZlcmVuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLVJlZmVyZW5jZTo6UmVmZXJlbmNlKGNvbnN0IE9iamVjdCYgYiwgY29u
c3QgSWRlbnRpZmllciYgcCkKLSAgOiBiYXNlKGIpLAotICAgIGJhc2VJc1ZhbHVlKGZhbHNlKSwK
LSAgICBwcm9wZXJ0eU5hbWVJc051bWJlcihmYWxzZSksCi0gICAgcHJvcChwKQotewotfQotCi1S
ZWZlcmVuY2U6OlJlZmVyZW5jZShjb25zdCBPYmplY3QmIGIsIHVuc2lnbmVkIHApCi0gIDogYmFz
ZShiKSwKLSAgICBwcm9wZXJ0eU5hbWVBc051bWJlcihwKSwKLSAgICBiYXNlSXNWYWx1ZShmYWxz
ZSksCi0gICAgcHJvcGVydHlOYW1lSXNOdW1iZXIodHJ1ZSkKLXsKLX0KLQogUmVmZXJlbmNlOjpS
ZWZlcmVuY2UoT2JqZWN0SW1wICpiLCBjb25zdCBJZGVudGlmaWVyJiBwKQogICA6IGJhc2UoYiks
CiAgICAgYmFzZUlzVmFsdWUoZmFsc2UpLApAQCAtNTksMjMgKzQzLDIzIEBAIFJlZmVyZW5jZTo6
UmVmZXJlbmNlKE9iamVjdEltcCAqYiwgdW5zaWcKIHsKIH0KIAotUmVmZXJlbmNlOjpSZWZlcmVu
Y2UoY29uc3QgTnVsbCYgYiwgY29uc3QgSWRlbnRpZmllciYgcCkKLSAgOiBiYXNlKGIpLAorUmVm
ZXJlbmNlOjpSZWZlcmVuY2UoY29uc3QgSWRlbnRpZmllciYgcCkKKyAgOiBiYXNlKGpzTnVsbCgp
KSwKICAgICBiYXNlSXNWYWx1ZShmYWxzZSksCiAgICAgcHJvcGVydHlOYW1lSXNOdW1iZXIoZmFs
c2UpLAogICAgIHByb3AocCkKIHsKIH0KIAotUmVmZXJlbmNlOjpSZWZlcmVuY2UoY29uc3QgTnVs
bCYgYiwgdW5zaWduZWQgcCkKLSAgOiBiYXNlKGIpLAorUmVmZXJlbmNlOjpSZWZlcmVuY2UodW5z
aWduZWQgcCkKKyAgOiBiYXNlKGpzTnVsbCgpKSwKICAgICBwcm9wZXJ0eU5hbWVBc051bWJlcihw
KSwKICAgICBiYXNlSXNWYWx1ZShmYWxzZSksCiAgICAgcHJvcGVydHlOYW1lSXNOdW1iZXIodHJ1
ZSkKIHsKIH0KIAotUmVmZXJlbmNlIFJlZmVyZW5jZTo6bWFrZVZhbHVlUmVmZXJlbmNlKGNvbnN0
IFZhbHVlJiB2KQorUmVmZXJlbmNlIFJlZmVyZW5jZTo6bWFrZVZhbHVlUmVmZXJlbmNlKFZhbHVl
SW1wICp2KQogewogICBSZWZlcmVuY2UgdmFsdWVSZWY7CiAgIHZhbHVlUmVmLmJhc2UgPSB2OwpA
QCAtODMsMTAgKzY3LDEwIEBAIFJlZmVyZW5jZSBSZWZlcmVuY2U6Om1ha2VWYWx1ZVJlZmVyZW5j
ZSgKICAgcmV0dXJuIHZhbHVlUmVmOwogfQogCi1WYWx1ZSBSZWZlcmVuY2U6OmdldEJhc2UoRXhl
Y1N0YXRlICpleGVjKSBjb25zdAorVmFsdWVJbXAgKlJlZmVyZW5jZTo6Z2V0QmFzZShFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0CiB7CiAgIGlmIChiYXNlSXNWYWx1ZSkgewotICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBJMThOX05PT1AoIkludmFsaWQg
cmVmZXJlbmNlIGJhc2UiKSk7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFJlZmVyZW5jZUVycm9yLCBJMThOX05PT1AoIkludmFsaWQgcmVmZXJlbmNlIGJhc2UiKSk7
CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQpAQCAt
MTA4LDI1ICs5MiwyNSBAQCBJZGVudGlmaWVyIFJlZmVyZW5jZTo6Z2V0UHJvcGVydHlOYW1lKEV4
CiAgIHJldHVybiBwcm9wOwogfQogCi1WYWx1ZSBSZWZlcmVuY2U6OmdldFZhbHVlKEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3QgCitWYWx1ZUltcCAqUmVmZXJlbmNlOjpnZXRWYWx1ZShFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0IAogewogICBpZiAoYmFzZUlzVmFsdWUpIHsKICAgICByZXR1cm4gYmFzZTsK
ICAgfQogCi0gIFZhbHVlSW1wICpvID0gYmFzZS5pbXAoKTsKLSAgVHlwZSB0ID0gbyA/IG8tPmRp
c3BhdGNoVHlwZSgpIDogTnVsbFR5cGU7CisgIFZhbHVlSW1wICpvID0gYmFzZTsKKyAgVHlwZSB0
ID0gbyA/IG8tPnR5cGUoKSA6IE51bGxUeXBlOwogCiAgIGlmICh0ID09IE51bGxUeXBlKSB7CiAg
ICAgVVN0cmluZyBtID0gSTE4Tl9OT09QKCJDYW4ndCBmaW5kIHZhcmlhYmxlOiAiKSArIGdldFBy
b3BlcnR5TmFtZShleGVjKS51c3RyaW5nKCk7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYywgUmVmZXJlbmNlRXJyb3IsIG0uYXNjaWkoKSk7CisgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCBtLmFzY2lpKCkpOwogICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KIAogICBpZiAodCAh
PSBPYmplY3RUeXBlKSB7CiAgICAgVVN0cmluZyBtID0gSTE4Tl9OT09QKCJCYXNlIGlzIG5vdCBh
biBvYmplY3QiKTsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVu
Y2VFcnJvciwgbS5hc2NpaSgpKTsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYywgUmVmZXJlbmNlRXJyb3IsIG0uYXNjaWkoKSk7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQpAQCAtMTM2LDEwICsxMjAsMTAgQEAgVmFsdWUg
UmVmZXJlbmNlOjpnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZQogICByZXR1cm4gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wKj4obyktPmdldChleGVjLCBwcm9wKTsKIH0KIAotdm9pZCBSZWZlcmVuY2U6OnB1
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVmFsdWUgJncpCit2b2lkIFJlZmVyZW5jZTo6
cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBWYWx1ZUltcCAqdykKIHsKICAgaWYgKGJhc2VJc1Zh
bHVlKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgUmVmZXJlbmNlRXJy
b3IpOworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBSZWZlcmVuY2VF
cnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuOwogICB9CkBA
IC0xNDgsMTEgKzEzMiwxMSBAQCB2b2lkIFJlZmVyZW5jZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpl
eGVjCiAgIHByaW50SW5mbyhleGVjLChVU3RyaW5nKCJzZXR0aW5nIHByb3BlcnR5ICIpK2dldFBy
b3BlcnR5TmFtZShleGVjKS51c3RyaW5nKCkpLmNzdHJpbmcoKS5jX3N0cigpLHcpOwogI2VuZGlm
CiAKLSAgVmFsdWVJbXAgKm8gPSBiYXNlLmltcCgpOwotICBUeXBlIHQgPSBvID8gby0+ZGlzcGF0
Y2hUeXBlKCkgOiBOdWxsVHlwZTsKKyAgVmFsdWVJbXAgKm8gPSBiYXNlOworICBUeXBlIHQgPSBv
ID8gby0+dHlwZSgpIDogTnVsbFR5cGU7CiAKICAgaWYgKHQgPT0gTnVsbFR5cGUpCi0gICAgbyA9
IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKS5pbXAoKTsKKyAgICBv
ID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwogCiAgIGlmIChw
cm9wZXJ0eU5hbWVJc051bWJlcikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4o
byktPnB1dChleGVjLCBwcm9wZXJ0eU5hbWVBc051bWJlciwgdyk7CkBAIC0xNjIsMTMgKzE0Niwx
MyBAQCB2b2lkIFJlZmVyZW5jZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjCiBib29sIFJlZmVy
ZW5jZTo6ZGVsZXRlVmFsdWUoRXhlY1N0YXRlICpleGVjKQogewogICBpZiAoYmFzZUlzVmFsdWUp
IHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFJlZmVyZW5jZUVycm9yKTsK
KyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxSZWZlcmVuY2VFcnJvcik7
CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAK
LSAgVmFsdWVJbXAgKm8gPSBiYXNlLmltcCgpOwotICBUeXBlIHQgPSBvID8gby0+ZGlzcGF0Y2hU
eXBlKCkgOiBOdWxsVHlwZTsKKyAgVmFsdWVJbXAgKm8gPSBiYXNlOworICBUeXBlIHQgPSBvID8g
by0+dHlwZSgpIDogTnVsbFR5cGU7CiAKICAgLy8gVGhlIHNwZWMgZG9lc24ndCBtZW50aW9uIHdo
YXQgdG8gZG8gaWYgdGhlIGJhc2UgaXMgbnVsbC4uLiBqdXN0IHJldHVybiB0cnVlCiAgIGlmICh0
ICE9IE9iamVjdFR5cGUpIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5j
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIEphdmFTY3Jp
cHRDb3JlL2tqcy9yZWZlcmVuY2UuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5o
CTcgQXVnIDIwMDUgMDY6MTc6MzUgLTAwMDAJMS4xMQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Jl
ZmVyZW5jZS5oCTggQXVnIDIwMDUgMDE6MDA6NTggLTAwMDAKQEAgLTI0LDExICsyNCwxMCBAQAog
I2RlZmluZSBfS0pTX1JFRkVSRU5DRV9IXwogCiAjaW5jbHVkZSAiaWRlbnRpZmllci5oIgotI2lu
Y2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBLSlMgewog
Ci0gIGNsYXNzIE9iamVjdDsKICAgY2xhc3MgT2JqZWN0SW1wOwogCiAgIGNsYXNzIFJlZmVyZW5j
ZSB7CkBAIC0zNiwxMyArMzUsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgZnJpZW5kIGNsYXNz
IFJlZmVyZW5jZUxpc3RJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3MgUHJvdGVjdGVkUmVmZXJl
bmNlOwogICBwdWJsaWM6Ci0gICAgUmVmZXJlbmNlKGNvbnN0IE9iamVjdCYgYiwgY29uc3QgSWRl
bnRpZmllciYgcCk7Ci0gICAgUmVmZXJlbmNlKGNvbnN0IE9iamVjdCYgYiwgdW5zaWduZWQgcCk7
CiAgICAgUmVmZXJlbmNlKE9iamVjdEltcCAqYiwgY29uc3QgSWRlbnRpZmllciYgcCk7CiAgICAg
UmVmZXJlbmNlKE9iamVjdEltcCAqYiwgdW5zaWduZWQgcCk7Ci0gICAgUmVmZXJlbmNlKGNvbnN0
IE51bGwmIGIsIGNvbnN0IElkZW50aWZpZXImIHApOwotICAgIFJlZmVyZW5jZShjb25zdCBOdWxs
JiBiLCB1bnNpZ25lZCBwKTsKLSAgICBzdGF0aWMgUmVmZXJlbmNlIG1ha2VWYWx1ZVJlZmVyZW5j
ZShjb25zdCBWYWx1ZSYgdik7CisgICAgUmVmZXJlbmNlKGNvbnN0IElkZW50aWZpZXImIHApOwor
ICAgIFJlZmVyZW5jZSh1bnNpZ25lZCBwKTsKKyAgICBzdGF0aWMgUmVmZXJlbmNlIG1ha2VWYWx1
ZVJlZmVyZW5jZShWYWx1ZUltcCAqKTsKICAgICAKICAgICAvKioKICAgICAgKiBQZXJmb3JtcyB0
aGUgR2V0QmFzZSB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUgKEVDTUEg
OC43KQpAQCAtNTAsNyArNDcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBTaW5jZSByZWZl
cmVuY2VzIGFyZSBzdXBwb3NlZCB0byBoYXZlIGFuIE9iamVjdCBvciBudWxsIGFzIHRoZWlyIGJh
c2UsCiAgICAgICogdGhpcyBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gZWl0aGVyIE51
bGwoKSBvciBhbiBPYmplY3QgdmFsdWUuCiAgICAgICovCi0gICAgVmFsdWUgZ2V0QmFzZShFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRCYXNlKEV4ZWNTdGF0ZSAqZXhl
YykgY29uc3Q7CiAKICAgICAvKioKICAgICAgKiBQZXJmb3JtcyB0aGUgR2V0UHJvcGVydHlOYW1l
IHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2YWx1ZQpAQCAtNjIsMjYgKzU5LDI3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqIFBlcmZvcm1zIHRoZSBHZXRWYWx1ZSB0eXBlIGNv
bnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUKICAgICAgKiAoRUNNQSA4LjcuMSkKICAg
ICAgKi8KLSAgICBWYWx1ZSBnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIFZh
bHVlSW1wICpnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogCiAgICAgLyoqCiAgICAg
ICogUGVyZm9ybXMgdGhlIFB1dFZhbHVlIHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhp
cyB2YWx1ZQogICAgICAqIChFQ01BIDguNy4xKQogICAgICAqLwotICAgIHZvaWQgcHV0VmFsdWUo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdyk7CisgICAgdm9pZCBwdXRWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMsIFZhbHVlSW1wICopOwogICAgIGJvb2wgZGVsZXRlVmFsdWUoRXhlY1N0YXRl
ICpleGVjKTsKIAotICAgIFZhbHVlSW1wICpiYXNlSWZNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
YmFzZUlzVmFsdWUgPyAwIDogYmFzZS5pbXAoKTsgfQorICAgIFZhbHVlSW1wICpiYXNlSWZNdXRh
YmxlKCkgY29uc3QgeyByZXR1cm4gYmFzZUlzVmFsdWUgPyAwIDogYmFzZTsgfQogCiAgIHByaXZh
dGU6CiAgICAgUmVmZXJlbmNlKCkgeyB9CiAKLSAgICBWYWx1ZSBiYXNlOworICAgIFZhbHVlSW1w
ICpiYXNlOwogICAgIHVuc2lnbmVkIHByb3BlcnR5TmFtZUFzTnVtYmVyOwogICAgIGJvb2wgYmFz
ZUlzVmFsdWU7CiAgICAgYm9vbCBwcm9wZXJ0eU5hbWVJc051bWJlcjsKICAgICBtdXRhYmxlIElk
ZW50aWZpZXIgcHJvcDsKICAgfTsKKwogfQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9yZWdleHBfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2
YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIwCmRpZmYgLXAgLXUgLXIxLjIwIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmNw
cAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3BwCTcgQXVnIDIwMDUgMDY6
MTc6MzUgLTAwMDAJMS4yMAorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmplY3QuY3Bw
CTggQXVnIDIwMDUgMDE6MDA6NTkgLTAwMDAKQEAgLTQ1LDcgKzQ1LDYgQEAgUmVnRXhwUHJvdG90
eXBlSW1wOjpSZWdFeHBQcm90b3R5cGVJbXAoRQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90bykKICAgOiBPYmplY3RJ
bXAob2JqUHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHNldEludGVybmFsVmFs
dWUoU3RyaW5nKCIiKSk7CiAKICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0
ZXIgaW4gUmVnRXhwT2JqZWN0J3MgY29uc3RydWN0b3IgKD8pCkBAIC02Myw3ICs2Miw2IEBAIFJl
Z0V4cFByb3RvRnVuY0ltcDo6UmVnRXhwUHJvdG9GdW5jSW1wKEUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGlu
dCBpLCBpbnQgbGVuKQogICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKSwgaWQoaSkK
IHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFt
ZSwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIApAQCAtNzIsNDUgKzcw
LDQ1IEBAIGJvb2wgUmVnRXhwUHJvdG9GdW5jSW1wOjppbXBsZW1lbnRzQ2FsbCgKICAgcmV0dXJu
IHRydWU7CiB9CiAKLVZhbHVlIFJlZ0V4cFByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpSZWdFeHBQ
cm90b0Z1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJlJl
Z0V4cEltcDo6aW5mbykpIHsKLSAgICBpZiAodGhpc09iai5pbmhlcml0cygmUmVnRXhwUHJvdG90
eXBlSW1wOjppbmZvKSkgeworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBJbXA6Omlu
Zm8pKSB7CisgICAgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGVJbXA6Omlu
Zm8pKSB7CiAgICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgIGNhc2UgVG9TdHJpbmc6IHJldHVy
biBTdHJpbmcoIi8vIik7CiAgICAgICB9CiAgICAgfQotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJl
dHVybiBlcnI7CiAgIH0KIAotICBSZWdFeHBJbXAgKnJlaW1wID0gc3RhdGljX2Nhc3Q8UmVnRXhw
SW1wKj4odGhpc09iai5pbXAoKSk7CisgIFJlZ0V4cEltcCAqcmVpbXAgPSBzdGF0aWNfY2FzdDxS
ZWdFeHBJbXAqPih0aGlzT2JqKTsKICAgUmVnRXhwICpyZSA9IHJlaW1wLT5yZWdFeHAoKTsKLSAg
U3RyaW5nIHM7CisgIFVTdHJpbmcgczsKICAgVVN0cmluZyBzdHI7CiAgIHN3aXRjaCAoaWQpIHsK
ICAgY2FzZSBFeGVjOiAgICAgIC8vIDE1LjEwLjYuMgogICBjYXNlIFRlc3Q6CiAgIHsKLSAgICBz
ID0gYXJnc1swXS50b1N0cmluZyhleGVjKTsKLSAgICBpbnQgbGVuZ3RoID0gcy52YWx1ZSgpLnNp
emUoKTsKLSAgICBWYWx1ZSBsYXN0SW5kZXggPSB0aGlzT2JqLmdldChleGVjLCJsYXN0SW5kZXgi
KTsKLSAgICBpbnQgaSA9IGxhc3RJbmRleC5pc051bGwoKSA/IDAgOiBsYXN0SW5kZXgudG9JbnQz
MihleGVjKTsKLSAgICBib29sIGdsb2JhbEZsYWcgPSB0aGlzT2JqLmdldChleGVjLCJnbG9iYWwi
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgcyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICAg
IGludCBsZW5ndGggPSBzLnNpemUoKTsKKyAgICBWYWx1ZUltcCAqbGFzdEluZGV4ID0gdGhpc09i
ai0+Z2V0KGV4ZWMsImxhc3RJbmRleCIpOworICAgIGludCBpID0gbGFzdEluZGV4LT50b0ludDMy
KGV4ZWMpOworICAgIGJvb2wgZ2xvYmFsRmxhZyA9IHRoaXNPYmotPmdldChleGVjLCJnbG9iYWwi
KS0+dG9Cb29sZWFuKGV4ZWMpOwogICAgIGlmICghZ2xvYmFsRmxhZykKICAgICAgIGkgPSAwOwog
ICAgIGlmIChpIDwgMCB8fCBpID4gbGVuZ3RoKSB7Ci0gICAgICB0aGlzT2JqLnB1dChleGVjLCJs
YXN0SW5kZXgiLCBOdW1iZXIoMCksIERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgICB0aGlz
T2JqLT5wdXQoZXhlYywibGFzdEluZGV4IiwgTnVtYmVyKDApLCBEb250RGVsZXRlIHwgRG9udEVu
dW0pOwogICAgICAgaWYgKGlkID09IFRlc3QpCiAgICAgICAgIHJldHVybiBCb29sZWFuKGZhbHNl
KTsKICAgICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE51bGwoKTsKICAgICB9Ci0gICAgUmVnRXhw
T2JqZWN0SW1wKiByZWdFeHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAqPihleGVj
LT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblJlZ0V4cCgpLmltcCgpKTsKLSAgICBpbnQg
KipvdmVjdG9yID0gcmVnRXhwT2JqLT5yZWdpc3RlclJlZ2V4cCggcmUsIHMudmFsdWUoKSApOwor
ICAgIFJlZ0V4cE9iamVjdEltcCogcmVnRXhwT2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0
SW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5SZWdFeHAoKSk7CisgICAg
aW50ICoqb3ZlY3RvciA9IHJlZ0V4cE9iai0+cmVnaXN0ZXJSZWdleHAoIHJlLCBzICk7CiAKLSAg
ICBzdHIgPSByZS0+bWF0Y2gocy52YWx1ZSgpLCBpLCAwTCwgb3ZlY3Rvcik7CisgICAgc3RyID0g
cmUtPm1hdGNoKHMsIGksIDBMLCBvdmVjdG9yKTsKICAgICByZWdFeHBPYmotPnNldFN1YlBhdHRl
cm5zKHJlLT5zdWJQYXR0ZXJucygpKTsKIAogICAgIGlmIChpZCA9PSBUZXN0KQpAQCAtMTE5LDI5
ICsxMTcsMjkgQEAgVmFsdWUgUmVnRXhwUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICAg
IGlmIChzdHIuaXNOdWxsKCkpIC8vIG5vIG1hdGNoCiAgICAgewogICAgICAgaWYgKGdsb2JhbEZs
YWcpCi0gICAgICAgIHRoaXNPYmoucHV0KGV4ZWMsImxhc3RJbmRleCIsTnVtYmVyKDApLCBEb250
RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICB0aGlzT2JqLT5wdXQoZXhlYywibGFzdEluZGV4
IixOdW1iZXIoMCksIERvbnREZWxldGUgfCBEb250RW51bSk7CiAgICAgICByZXR1cm4gTnVsbCgp
OwogICAgIH0KICAgICBlbHNlIC8vIHN1Y2Nlc3MKICAgICB7CiAgICAgICBpZiAoZ2xvYmFsRmxh
ZykKLSAgICAgICAgdGhpc09iai5wdXQoZXhlYywibGFzdEluZGV4IixOdW1iZXIoICgqb3ZlY3Rv
cilbMV0gKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICAgICAgdGhpc09iai0+cHV0KGV4
ZWMsImxhc3RJbmRleCIsTnVtYmVyKCAoKm92ZWN0b3IpWzFdICksIERvbnREZWxldGUgfCBEb250
RW51bSk7CiAgICAgICByZXR1cm4gcmVnRXhwT2JqLT5hcnJheU9mTWF0Y2hlcyhleGVjLHN0cik7
CiAgICAgfQogICB9CiAgIGJyZWFrOwogICBjYXNlIFRvU3RyaW5nOgotICAgIHMgPSB0aGlzT2Jq
LmdldChleGVjLCJzb3VyY2UiKS50b1N0cmluZyhleGVjKTsKKyAgICBzID0gdGhpc09iai0+Z2V0
KGV4ZWMsInNvdXJjZSIpLT50b1N0cmluZyhleGVjKTsKICAgICBzdHIgPSAiLyI7Ci0gICAgc3Ry
ICs9IHMudmFsdWUoKTsKKyAgICBzdHIgKz0gczsKICAgICBzdHIgKz0gIi8iOwotICAgIGlmICh0
aGlzT2JqLmdldChleGVjLCJnbG9iYWwiKS50b0Jvb2xlYW4oZXhlYykpIHsKKyAgICBpZiAodGhp
c09iai0+Z2V0KGV4ZWMsImdsb2JhbCIpLT50b0Jvb2xlYW4oZXhlYykpIHsKICAgICAgIHN0ciAr
PSAiZyI7CiAgICAgfQotICAgIGlmICh0aGlzT2JqLmdldChleGVjLCJpZ25vcmVDYXNlIikudG9C
b29sZWFuKGV4ZWMpKSB7CisgICAgaWYgKHRoaXNPYmotPmdldChleGVjLCJpZ25vcmVDYXNlIikt
PnRvQm9vbGVhbihleGVjKSkgewogICAgICAgc3RyICs9ICJpIjsKICAgICB9Ci0gICAgaWYgKHRo
aXNPYmouZ2V0KGV4ZWMsIm11bHRpbGluZSIpLnRvQm9vbGVhbihleGVjKSkgeworICAgIGlmICh0
aGlzT2JqLT5nZXQoZXhlYywibXVsdGlsaW5lIiktPnRvQm9vbGVhbihleGVjKSkgewogICAgICAg
c3RyICs9ICJtIjsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZyhzdHIpOwpAQCAtMTcyLDEyICsx
NzAsMTEgQEAgUmVnRXhwT2JqZWN0SW1wOjpSZWdFeHBPYmplY3RJbXAoRXhlY1N0YQogCiAgIDog
SW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8pLCBsYXN0T3ZlY3RvcigwTCksIGxhc3ROclN1
YlBhdHRlcm5zKDApCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIC8vIEVDTUEgMTUuMTAu
NS4xIFJlZ0V4cC5wcm90b3R5cGUKICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwg
cmVnUHJvdG8sIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOwogCiAgIC8vIG5vLiBvZiBh
cmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUs
IE51bWJlckltcDo6dHdvKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworICBwdXRE
aXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc1R3bygpLCBSZWFkT25seXxEb250RGVsZXRlfERv
bnRFbnVtKTsKIH0KIAogUmVnRXhwT2JqZWN0SW1wOjp+UmVnRXhwT2JqZWN0SW1wKCkKQEAgLTE5
NCw3ICsxOTEsNyBAQCBpbnQgKipSZWdFeHBPYmplY3RJbXA6OnJlZ2lzdGVyUmVnZXhwKCBjCiAg
IHJldHVybiAmbGFzdE92ZWN0b3I7CiB9CiAKLU9iamVjdCBSZWdFeHBPYmplY3RJbXA6OmFycmF5
T2ZNYXRjaGVzKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVVN0cmluZyAmcmVzdWx0KSBjb25zdAor
T2JqZWN0SW1wICpSZWdFeHBPYmplY3RJbXA6OmFycmF5T2ZNYXRjaGVzKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgVVN0cmluZyAmcmVzdWx0KSBjb25zdAogewogICBMaXN0IGxpc3Q7CiAgIC8vIFRo
ZSByZXR1cm5lZCBhcnJheSBjb250YWlucyAncmVzdWx0JyBhcyBmaXJzdCBpdGVtLCBmb2xsb3dl
ZCBieSB0aGUgbGlzdCBvZiBtYXRjaGVzCkBAIC0yMDQsMTkgKzIwMSwxOSBAQCBPYmplY3QgUmVn
RXhwT2JqZWN0SW1wOjphcnJheU9mTWF0Y2hlcyhFCiAgICAgewogICAgICAgaW50IHN0YXJ0ID0g
bGFzdE92ZWN0b3JbMippXTsKICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgbGlzdC5h
cHBlbmQoVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpOworICAgICAgICBsaXN0LmFwcGVu
ZChqc1VuZGVmaW5lZCgpKTsKICAgICAgIGVsc2UgewogICAgICAgICBVU3RyaW5nIHN1YnN0cmlu
ZyA9IGxhc3RTdHJpbmcuc3Vic3RyKCBzdGFydCwgbGFzdE92ZWN0b3JbMippKzFdIC0gc3RhcnQg
KTsKICAgICAgICAgbGlzdC5hcHBlbmQoU3RyaW5nKHN1YnN0cmluZykpOwogICAgICAgfQogICAg
IH0KLSAgT2JqZWN0IGFyciA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJy
YXkoKS5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7Ci0gIGFyci5wdXQoZXhlYywgImluZGV4IiwgTnVt
YmVyKGxhc3RPdmVjdG9yWzBdKSk7Ci0gIGFyci5wdXQoZXhlYywgImlucHV0IiwgU3RyaW5nKGxh
c3RTdHJpbmcpKTsKKyAgT2JqZWN0SW1wICphcnIgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVjdChleGVjLCBsaXN0KTsKKyAgYXJyLT5wdXQoZXhl
YywgImluZGV4IiwgTnVtYmVyKGxhc3RPdmVjdG9yWzBdKSk7CisgIGFyci0+cHV0KGV4ZWMsICJp
bnB1dCIsIFN0cmluZyhsYXN0U3RyaW5nKSk7CiAgIHJldHVybiBhcnI7CiB9CiAKLVZhbHVlIFJl
Z0V4cE9iamVjdEltcDo6YmFja3JlZkdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAg
KlJlZ0V4cE9iamVjdEltcDo6YmFja3JlZkdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBS
ZWdFeHBPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAgKj4o
c2xvdC5zbG90QmFzZSgpKTsKICAgdW5zaWduZWQgbG9uZyBpID0gc2xvdC5pbmRleCgpOwpAQCAt
MjUzLDM2ICsyNTAsMzUgQEAgYm9vbCBSZWdFeHBPYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1
YwogfQogCiAvLyBFQ01BIDE1LjEwLjQKLU9iamVjdCBSZWdFeHBPYmplY3RJbXA6OmNvbnN0cnVj
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmplY3RJbXAgKlJlZ0V4cE9i
amVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgT2JqZWN0IG8gPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGFyZ3NbMF0pOwotICBpZiAoIW8uaXNO
dWxsKCkgJiYgby5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkgewotICAgIGlmIChhcmdzWzFd
LnR5cGUoKSAhPSBVbmRlZmluZWRUeXBlKSB7Ci0gICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIE9iamVjdEltcCAqbyA9IGFyZ3NbMF0tPmdldE9iamVj
dCgpOworICBpZiAobyAmJiBvLT5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkgeworICAgIGlm
ICghYXJnc1sxXS0+aXNVbmRlZmluZWQoKSkgeworICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAgICAgcmV0dXJuIG87CiAgIH0KICAgCi0gIFVT
dHJpbmcgcCA9IGFyZ3NbMF0udHlwZSgpID09IFVuZGVmaW5lZFR5cGUgPyBVU3RyaW5nKCIiKSA6
IGFyZ3NbMF0udG9TdHJpbmcoZXhlYyk7Ci0gIFVTdHJpbmcgZmxhZ3MgPSBhcmdzWzFdLnR5cGUo
KSA9PSBVbmRlZmluZWRUeXBlID8gVVN0cmluZygiIikgOiBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMp
OworICBVU3RyaW5nIHAgPSBhcmdzWzBdLT5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBh
cmdzWzBdLT50b1N0cmluZyhleGVjKTsKKyAgVVN0cmluZyBmbGFncyA9IGFyZ3NbMV0tPmlzVW5k
ZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpOwogCi0gIFJl
Z0V4cFByb3RvdHlwZUltcCAqcHJvdG8gPSBzdGF0aWNfY2FzdDxSZWdFeHBQcm90b3R5cGVJbXAq
PihleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblJlZ0V4cFByb3RvdHlwZSgpLmlt
cCgpKTsKKyAgUmVnRXhwUHJvdG90eXBlSW1wICpwcm90byA9IHN0YXRpY19jYXN0PFJlZ0V4cFBy
b3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluUmVnRXhwUHJv
dG90eXBlKCkpOwogICBSZWdFeHBJbXAgKmRhdCA9IG5ldyBSZWdFeHBJbXAocHJvdG8pOwotICBP
YmplY3Qgb2JqKGRhdCk7IC8vIHByb3RlY3QgZnJvbSBHQwogCiAgIGJvb2wgZ2xvYmFsID0gKGZs
YWdzLmZpbmQoImciKSA+PSAwKTsKICAgYm9vbCBpZ25vcmVDYXNlID0gKGZsYWdzLmZpbmQoImki
KSA+PSAwKTsKICAgYm9vbCBtdWx0aWxpbmUgPSAoZmxhZ3MuZmluZCgibSIpID49IDApOwogICAv
LyBUT0RPOiB0aHJvdyBhIHN5bnRheCBlcnJvciBvbiBpbnZhbGlkIGZsYWdzCiAKLSAgZGF0LT5w
dXREaXJlY3QoImdsb2JhbCIsIGdsb2JhbCA/IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29s
ZWFuSW1wOjpzdGF0aWNGYWxzZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwot
ICBkYXQtPnB1dERpcmVjdCgiaWdub3JlQ2FzZSIsIGlnbm9yZUNhc2UgPyBCb29sZWFuSW1wOjpz
dGF0aWNUcnVlIDogQm9vbGVhbkltcDo6c3RhdGljRmFsc2UsIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKLSAgZGF0LT5wdXREaXJlY3QoIm11bHRpbGluZSIsIG11bHRpbGluZSA/
IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29sZWFuSW1wOjpzdGF0aWNGYWxzZSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICBkYXQtPnB1dERpcmVjdCgiZ2xvYmFsIiwg
anNCb29sZWFuKGdsb2JhbCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAg
ZGF0LT5wdXREaXJlY3QoImlnbm9yZUNhc2UiLCBqc0Jvb2xlYW4oaWdub3JlQ2FzZSksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgZGF0LT5wdXREaXJlY3QoIm11bHRpbGlu
ZSIsIGpzQm9vbGVhbihtdWx0aWxpbmUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CiAKLSAgZGF0LT5wdXREaXJlY3QoInNvdXJjZSIsIG5ldyBTdHJpbmdJbXAocCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgZGF0LT5wdXREaXJlY3QoImxhc3RJbmRl
eCIsIE51bWJlckltcDo6emVybygpLCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICBkYXQtPnB1
dERpcmVjdCgic291cmNlIiwganNTdHJpbmcocCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsKKyAgZGF0LT5wdXREaXJlY3QoImxhc3RJbmRleCIsIGpzWmVybygpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0pOwogCiAgIGludCByZWZsYWdzID0gUmVnRXhwOjpOb25lOwogICBpZiAo
Z2xvYmFsKQpAQCAtMjkzLDcgKzI4OSw3IEBAIE9iamVjdCBSZWdFeHBPYmplY3RJbXA6OmNvbnN0
cnVjdChFeGVjU3QKICAgICAgIHJlZmxhZ3MgfD0gUmVnRXhwOjpNdWx0aWxpbmU7CiAgIGRhdC0+
c2V0UmVnRXhwKG5ldyBSZWdFeHAocCwgcmVmbGFncykpOwogCi0gIHJldHVybiBvYmo7CisgIHJl
dHVybiBkYXQ7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0SW1wOjppbXBsZW1lbnRzQ2FsbCgpIGNv
bnN0CkBAIC0zMDIsNyArMjk4LDcgQEAgYm9vbCBSZWdFeHBPYmplY3RJbXA6OmltcGxlbWVudHND
YWxsKCkgYwogfQogCiAvLyBFQ01BIDE1LjEwLjMKLVZhbHVlIFJlZ0V4cE9iamVjdEltcDo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8sCitWYWx1ZUltcCAqUmVnRXhw
T2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLyp0
aGlzT2JqKi8sCiAJCQkgICAgY29uc3QgTGlzdCAmYXJncykKIHsKICAgLy8gVE9ETzogaGFuZGxl
IFJlZ0V4cCBhcmd1bWVudCBjYXNlICgxNS4xMC4zLjEpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvcmVnZXhwX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRp
ZmYgLXAgLXUgLXIxLjEwIEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgJNyBBdWcgMjAwNSAwNjoxNzozNSAtMDAw
MAkxLjEwCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5oCTggQXVnIDIwMDUg
MDE6MDA6NTkgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlSW1wICpmdW5jUHJvdG8sIGludCBpLCBp
bnQgbGVuKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAg
ICAgZW51bSB7IEV4ZWMsIFRlc3QsIFRvU3RyaW5nIH07CiAgIHByaXZhdGU6CkBAIC03MCwxNiAr
NzAsMTYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAgICAgICAgIFJlZ0V4cFByb3Rv
dHlwZUltcCAqcmVnUHJvdG8pOwogICAgIHZpcnR1YWwgflJlZ0V4cE9iamVjdEltcCgpOwogICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBP
YmplY3QgY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CisgICAg
dmlydHVhbCBPYmplY3RJbXAgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3Qg
JmFyZ3MpOwogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIGludCAqKiByZWdpc3RlclJlZ2V4cCggY29uc3Qg
UmVnRXhwKiByZSwgY29uc3QgVVN0cmluZyYgcyApOwogICAgIHZvaWQgc2V0U3ViUGF0dGVybnMo
aW50IG51bSkgeyBsYXN0TnJTdWJQYXR0ZXJucyA9IG51bTsgfQotICAgIE9iamVjdCBhcnJheU9m
TWF0Y2hlcyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFVTdHJpbmcgJnJlc3VsdCkgY29uc3Q7Cisg
ICAgT2JqZWN0SW1wICphcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFVTdHJp
bmcgJnJlc3VsdCkgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIFZhbHVlIGJhY2tyZWZH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmJhY2tyZWZHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAg
CiAgICAgVVN0cmluZyBsYXN0U3RyaW5nOwogICAgIGludCAqbGFzdE92ZWN0b3I7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40MQpkaWZmIC1wIC11IC1yMS40MSBKYXZhU2NyaXB0Q29yZS9ranMvc3Ry
aW5nX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAk3
IEF1ZyAyMDA1IDA2OjE3OjM1IC0wMDAwCTEuNDEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDAxOjAwOjU5IC0wMDAwCkBAIC01MCwxNSArNTAsMTUg
QEAgU3RyaW5nSW5zdGFuY2VJbXA6OlN0cmluZ0luc3RhbmNlSW1wKE9iagogICBzZXRJbnRlcm5h
bFZhbHVlKFN0cmluZyhzdHJpbmcpKTsKIH0KIAotVmFsdWUgU3RyaW5nSW5zdGFuY2VJbXA6Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQorVmFsdWVJbXAgKlN0cmluZ0luc3RhbmNlSW1w
OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCkKIHsKLSAgICByZXR1cm4gVmFsdWUoc3Rh
dGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2VJbXAgKj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxW
YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLnNpemUoKSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRp
Y19jYXN0PFN0cmluZ0luc3RhbmNlSW1wICo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFs
dWUoKS0+dG9TdHJpbmcoZXhlYykuc2l6ZSgpKTsKIH0KIAotVmFsdWUgU3RyaW5nSW5zdGFuY2VJ
bXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpCitWYWx1ZUltcCAqU3RyaW5nSW5zdGFu
Y2VJbXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7Ci0gICAgY29uc3QgVUNoYXIg
YyA9IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlSW1wICo+KHNsb3Quc2xvdEJhc2UoKSktPmlu
dGVybmFsVmFsdWUoKS50b1N0cmluZyhleGVjKVtzbG90LmluZGV4KCldOwotICAgIHJldHVybiBW
YWx1ZShVU3RyaW5nKCZjLCAxKSk7CisgICAgY29uc3QgVUNoYXIgYyA9IHN0YXRpY19jYXN0PFN0
cmluZ0luc3RhbmNlSW1wICo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFsVmFsdWUoKS0+dG9T
dHJpbmcoZXhlYylbc2xvdC5pbmRleCgpXTsKKyAgICByZXR1cm4ganNTdHJpbmcoVVN0cmluZygm
YywgMSkpOwogfQogCiBib29sIFN0cmluZ0luc3RhbmNlSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCAmc2xvdCkKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBTdHJpbmdJbnN0YW5jZUltcDo6Z2V0
T3duUHJvcGVydHlTbAogICBib29sIG9rOwogICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IHByb3Bl
cnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKICAgaWYgKG9rKSB7Ci0gICAgY29uc3QgVVN0cmlu
ZyBzID0gaW50ZXJuYWxWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOworICAgIGNvbnN0IFVTdHJpbmcg
cyA9IGludGVybmFsVmFsdWUoKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgY29uc3QgdW5zaWduZWQg
bGVuZ3RoID0gcy5zaXplKCk7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBTdHJpbmdJbnN0YW5jZUltcDo6Z2V0T3du
UHJvcGVydHlTbAogICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBTdHJpbmdJbnN0YW5jZUltcDo6cHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKQordm9pZCBTdHJpbmdJbnN0YW5jZUltcDo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKQogewogICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkK
ICAgICByZXR1cm47CkBAIC0xNDIsMTAgKzE0Miw4IEBAIFN0cmluZ1Byb3RvdHlwZUltcDo6U3Ry
aW5nUHJvdG90eXBlSW1wKEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9iamVjdFByb3RvdHlwZUltcCAqb2JqUHJvdG8pCiAgIDogU3RyaW5nSW5zdGFuY2VJbXAob2Jq
UHJvdG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3
aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdPYmplY3RJbXAgaGFzIGJlZW4gYnVpbHQK
LSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVySW1wOjp6ZXJvKCksIERvbnRE
ZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwotCisgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5h
bWUsIGpzWmVybygpLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKIH0KIAogYm9vbCBT
dHJpbmdQcm90b3R5cGVJbXA6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpAQCAtMTU3
LDEwICsxNTUsOSBAQCBib29sIFN0cmluZ1Byb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHlTCiAK
IFN0cmluZ1Byb3RvRnVuY0ltcDo6U3RyaW5nUHJvdG9GdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IGksIGludCBsZW4pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcCgKLSAgICBzdGF0aWNfY2Fz
dDxGdW5jdGlvblByb3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluRnVuY3Rpb25Qcm90b3R5cGUoKS5pbXAoKSkKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvblBy
b3RvdHlwZUltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluRnVuY3Rpb25Q
cm90b3R5cGUoKSkKICAgICApLCBpZChpKQogewotICBWYWx1ZSBwcm90ZWN0KHRoaXMpOwogICBw
dXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBsZW4sIERvbnREZWxldGV8UmVhZE9ubHl8RG9u
dEVudW0pOwogfQogCkBAIC0xNzEsOCArMTY4LDggQEAgYm9vbCBTdHJpbmdQcm90b0Z1bmNJbXA6
OmltcGxlbWVudHNDYWxsKAogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVnRXhwSXNHbG9iYWwoUmVn
RXhwSW1wICpyZWdFeHAsIEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgICBWYWx1ZSBnbG9iYWxQcm9w
ZXJ0eSA9IHJlZ0V4cC0+Z2V0KGV4ZWMsImdsb2JhbCIpOwotICAgIHJldHVybiBnbG9iYWxQcm9w
ZXJ0eS50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSAmJiBnbG9iYWxQcm9wZXJ0eS50b0Jvb2xlYW4o
ZXhlYyk7CisgICAgVmFsdWVJbXAgKmdsb2JhbFByb3BlcnR5ID0gcmVnRXhwLT5nZXQoZXhlYywi
Z2xvYmFsIik7CisgICAgcmV0dXJuICFnbG9iYWxQcm9wZXJ0eS0+aXNVbmRlZmluZWQoKSAmJiBn
bG9iYWxQcm9wZXJ0eS0+dG9Cb29sZWFuKGV4ZWMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQg
ZXhwYW5kU291cmNlUmFuZ2VzKFVTdHJpbmc6OlJhbmdlICogJiBhcnJheSwgaW50JiBjb3VudCwg
aW50JiBjYXBhY2l0eSkKQEAgLTI1OSwyMiArMjU2LDIyIEBAIHN0YXRpYyBpbmxpbmUgVVN0cmlu
ZyBzdWJzdGl0dXRlQmFja3JlZmUKICAgcmV0dXJuIHN1YnN0aXR1dGVkUmVwbGFjZW1lbnQ7CiB9
CiAKLXN0YXRpYyBWYWx1ZSByZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVVN0cmluZyAm
c291cmNlLCBjb25zdCBWYWx1ZSAmcGF0dGVybiwgY29uc3QgVmFsdWUgJnJlcGxhY2VtZW50KQor
c3RhdGljIFZhbHVlSW1wICpyZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgVVN0cmluZyAm
c291cmNlLCBWYWx1ZUltcCAqcGF0dGVybiwgVmFsdWVJbXAgKnJlcGxhY2VtZW50KQogewogICBP
YmplY3RJbXAgKnJlcGxhY2VtZW50RnVuY3Rpb24gPSAwOwogICBVU3RyaW5nIHJlcGxhY2VtZW50
U3RyaW5nOwogCi0gIGlmIChyZXBsYWNlbWVudC50eXBlKCkgPT0gT2JqZWN0VHlwZSAmJiByZXBs
YWNlbWVudC50b09iamVjdChleGVjKS5pbXBsZW1lbnRzQ2FsbCgpKQotICAgIHJlcGxhY2VtZW50
RnVuY3Rpb24gPSByZXBsYWNlbWVudC50b09iamVjdChleGVjKS5pbXAoKTsKKyAgaWYgKHJlcGxh
Y2VtZW50LT5pc09iamVjdCgpICYmIHJlcGxhY2VtZW50LT50b09iamVjdChleGVjKS0+aW1wbGVt
ZW50c0NhbGwoKSkKKyAgICByZXBsYWNlbWVudEZ1bmN0aW9uID0gcmVwbGFjZW1lbnQtPnRvT2Jq
ZWN0KGV4ZWMpOwogICBlbHNlCi0gICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudC50
b1N0cmluZyhleGVjKTsKKyAgICByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VtZW50LT50b1N0
cmluZyhleGVjKTsKIAotICBpZiAocGF0dGVybi50eXBlKCkgPT0gT2JqZWN0VHlwZSAmJiBwYXR0
ZXJuLnRvT2JqZWN0KGV4ZWMpLmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7Ci0gICAgUmVn
RXhwSW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIHBhdHRlcm4udG9PYmplY3Qo
ZXhlYykuaW1wKCkgKTsKKyAgaWYgKHBhdHRlcm4tPmlzT2JqZWN0KCkgJiYgcGF0dGVybi0+dG9P
YmplY3QoZXhlYyktPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7CisgICAgUmVnRXhwSW1w
KiBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIHBhdHRlcm4tPnRvT2JqZWN0KGV4ZWMp
ICk7CiAgICAgUmVnRXhwICpyZWcgPSBpbXAtPnJlZ0V4cCgpOwogICAgIGJvb2wgZ2xvYmFsID0g
cmVnRXhwSXNHbG9iYWwoaW1wLCBleGVjKTsKIAotICAgIFJlZ0V4cE9iamVjdEltcCogcmVnRXhw
T2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0SW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5SZWdFeHAoKS5pbXAoKSk7CisgICAgUmVnRXhwT2JqZWN0SW1wKiByZWdF
eHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAqPihleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpblJlZ0V4cCgpKTsKIAogICAgIGludCBtYXRjaEluZGV4ID0gMDsKICAg
ICBpbnQgbGFzdEluZGV4ID0gMDsKQEAgLTMwMiwyMCArMjk5LDIwIEBAIHN0YXRpYyBWYWx1ZSBy
ZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywgY28KICAgICAgICAgICBpbnQgY29tcGxldGVNYXRjaFN0
YXJ0ID0gKCpvdmVjdG9yKVswXTsKICAgICAgICAgICBMaXN0IGFyZ3M7CiAKLSAgICAgICAgICBh
cmdzLmFwcGVuZChWYWx1ZShtYXRjaFN0cmluZykpOworICAgICAgICAgIGFyZ3MuYXBwZW5kKGpz
U3RyaW5nKG1hdGNoU3RyaW5nKSk7CiAgICAgICAgICAgCiAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlZy0+c3ViUGF0dGVybnMoKTsgaSsrKSB7CiAgICAgICAgICAgICAgIGlu
dCBtYXRjaFN0YXJ0ID0gKCpvdmVjdG9yKVsoaSArIDEpICogMl07CiAgICAgICAgICAgICAgIGlu
dCBtYXRjaExlbiA9ICgqb3ZlY3RvcilbKGkgKyAxKSAqIDIgKyAxXSAtIG1hdGNoU3RhcnQ7CiAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1ZShzb3VyY2Uuc3Vi
c3RyKG1hdGNoU3RhcnQsIG1hdGNoTGVuKSkpOworICAgICAgICAgICAgICBhcmdzLmFwcGVuZChq
c1N0cmluZyhzb3VyY2Uuc3Vic3RyKG1hdGNoU3RhcnQsIG1hdGNoTGVuKSkpOwogICAgICAgICAg
IH0KICAgICAgICAgICAKLSAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1ZShjb21wbGV0ZU1hdGNo
U3RhcnQpKTsKLSAgICAgICAgICBhcmdzLmFwcGVuZChWYWx1ZShzb3VyY2UpKTsKKyAgICAgICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQpKTsKKyAgICAgICAgICBh
cmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2UpKTsKIAogICAgICAgICAgIHJlcGxhY2VtZW50U3Ry
aW5nID0gcmVwbGFjZW1lbnRGdW5jdGlvbi0+Y2FsbChleGVjLCBleGVjLT5keW5hbWljSW50ZXJw
cmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzKS50b1N0cmluZyhleGVjKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyktPnRv
U3RyaW5nKGV4ZWMpOwogICAgICAgfQogICAgICAgCiAgICAgICBVU3RyaW5nIHN1YnN0aXR1dGVk
UmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFjZW1lbnRTdHJpbmcs
IHNvdXJjZSwgb3ZlY3RvciwgcmVnKTsKQEAgLTM0NCw3ICszNDEsNyBAQCBzdGF0aWMgVmFsdWUg
cmVwbGFjZShFeGVjU3RhdGUgKmV4ZWMsIGNvCiAgIH0KICAgCiAgIC8vIEZpcnN0IGFyZyBpcyBh
IHN0cmluZwotICBVU3RyaW5nIHBhdHRlcm5TdHJpbmcgPSBwYXR0ZXJuLnRvU3RyaW5nKGV4ZWMp
OworICBVU3RyaW5nIHBhdHRlcm5TdHJpbmcgPSBwYXR0ZXJuLT50b1N0cmluZyhleGVjKTsKICAg
aW50IG1hdGNoUG9zID0gc291cmNlLmZpbmQocGF0dGVyblN0cmluZyk7CiAgIGludCBtYXRjaExl
biA9IHBhdHRlcm5TdHJpbmcuc2l6ZSgpOwogICAvLyBEbyB0aGUgcmVwbGFjZW1lbnQKQEAgLTM1
NCwzMSArMzUxLDMxIEBAIHN0YXRpYyBWYWx1ZSByZXBsYWNlKEV4ZWNTdGF0ZSAqZXhlYywgY28K
ICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24pIHsKICAgICAgIExpc3QgYXJnczsKICAgICAgIAot
ICAgICAgYXJncy5hcHBlbmQoVmFsdWUoc291cmNlLnN1YnN0cihtYXRjaFBvcywgbWF0Y2hMZW4p
KSk7Ci0gICAgICBhcmdzLmFwcGVuZChWYWx1ZShtYXRjaFBvcykpOwotICAgICAgYXJncy5hcHBl
bmQoVmFsdWUoc291cmNlKSk7CisgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2Uuc3Vi
c3RyKG1hdGNoUG9zLCBtYXRjaExlbikpKTsKKyAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKG1h
dGNoUG9zKSk7CisgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhzb3VyY2UpKTsKICAgICAgIAog
ICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSByZXBsYWNlbWVudEZ1bmN0aW9uLT5jYWxsKGV4ZWMs
IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncykudG9TdHJpbmco
ZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncyktPnRvU3RyaW5nKGV4ZWMpOwogICB9CiAKICAgcmV0dXJuIFN0cmluZyhzb3VyY2Uu
c3Vic3RyKDAsIG1hdGNoUG9zKSArIHJlcGxhY2VtZW50U3RyaW5nICsgc291cmNlLnN1YnN0ciht
YXRjaFBvcyArIG1hdGNoTGVuKSk7CiB9CiAKIC8vIEVDTUEgMTUuNS40LjIgLSAxNS41LjQuMjAK
LVZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHJpbmdQcm90b0Z1bmNJbXA6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewotICBWYWx1ZSByZXN1bHQ7CisgIFZhbHVlSW1wICpyZXN1bHQgPSBO
VUxMOwogCiAgIC8vIHRvU3RyaW5nIGFuZCB2YWx1ZU9mIGFyZSBubyBnZW5lcmljIGZ1bmN0aW9u
LgogICBpZiAoaWQgPT0gVG9TdHJpbmcgfHwgaWQgPT0gVmFsdWVPZikgewotICAgIGlmICh0aGlz
T2JqLmlzTnVsbCgpIHx8ICF0aGlzT2JqLmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZUltcDo6aW5m
bykpIHsKLSAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
KyAgICBpZiAoIXRoaXNPYmogfHwgIXRoaXNPYmotPmluaGVyaXRzKCZTdHJpbmdJbnN0YW5jZUlt
cDo6aW5mbykpIHsKKyAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CiAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgIHJldHVybiBl
cnI7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZyh0aGlzT2JqLmludGVybmFsVmFsdWUoKS50
b1N0cmluZyhleGVjKSk7CisgICAgcmV0dXJuIFN0cmluZyh0aGlzT2JqLT5pbnRlcm5hbFZhbHVl
KCktPnRvU3RyaW5nKGV4ZWMpKTsKICAgfQogCiAgIFVTdHJpbmcgdSwgdTIsIHUzOwpAQCAtMzg2
LDExICszODMsMTEgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQog
ICBkb3VibGUgZHBvczsKICAgZG91YmxlIGQgPSAwLjA7CiAKLSAgVVN0cmluZyBzID0gdGhpc09i
ai50b1N0cmluZyhleGVjKTsKKyAgVVN0cmluZyBzID0gdGhpc09iai0+dG9TdHJpbmcoZXhlYyk7
CiAKICAgaW50IGxlbiA9IHMuc2l6ZSgpOwotICBWYWx1ZSBhMCA9IGFyZ3NbMF07Ci0gIFZhbHVl
IGExID0gYXJnc1sxXTsKKyAgVmFsdWVJbXAgKmEwID0gYXJnc1swXTsKKyAgVmFsdWVJbXAgKmEx
ID0gYXJnc1sxXTsKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgVG9TdHJpbmc6CkBAIC00MDAs
NyArMzk3LDcgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICBj
YXNlIENoYXJBdDoKICAgICAvLyBPdGhlciBicm93c2VycyB0cmVhdCBhbiBvbWl0dGVkIHBhcmFt
ZXRlciBhcyAwIHJhdGhlciB0aGFuIE5hTi4KICAgICAvLyBUaGF0IGRvZXNuJ3QgbWF0Y2ggdGhl
IEVDTUEgc3RhbmRhcmQsIGJ1dCBpcyBuZWVkZWQgZm9yIHNpdGUgY29tcGF0aWJpbGl0eS4KLSAg
ICBkcG9zID0gYTAuaXNBKFVuZGVmaW5lZFR5cGUpID8gMCA6IGEwLnRvSW50ZWdlcihleGVjKTsK
KyAgICBkcG9zID0gYTAtPmlzVW5kZWZpbmVkKCkgPyAwIDogYTAtPnRvSW50ZWdlcihleGVjKTsK
ICAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCBsZW4pIC8vIGZhbHNlIGZvciBOYU4KICAgICAg
IHUgPSBzLnN1YnN0cihzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpLCAxKTsKICAgICBlbHNlCkBAIC00
MTAsMjYgKzQwNywyNiBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRl
CiAgIGNhc2UgQ2hhckNvZGVBdDoKICAgICAvLyBPdGhlciBicm93c2VycyB0cmVhdCBhbiBvbWl0
dGVkIHBhcmFtZXRlciBhcyAwIHJhdGhlciB0aGFuIE5hTi4KICAgICAvLyBUaGF0IGRvZXNuJ3Qg
bWF0Y2ggdGhlIEVDTUEgc3RhbmRhcmQsIGJ1dCBpcyBuZWVkZWQgZm9yIHNpdGUgY29tcGF0aWJp
bGl0eS4KLSAgICBkcG9zID0gYTAuaXNBKFVuZGVmaW5lZFR5cGUpID8gMCA6IGEwLnRvSW50ZWdl
cihleGVjKTsKKyAgICBkcG9zID0gYTAtPmlzVW5kZWZpbmVkKCkgPyAwIDogYTAtPnRvSW50ZWdl
cihleGVjKTsKICAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCBsZW4pIC8vIGZhbHNlIGZvciBO
YU4KICAgICAgIHJlc3VsdCA9IE51bWJlcihzW3N0YXRpY19jYXN0PGludD4oZHBvcyldLnVuaWNv
ZGUoKSk7CiAgICAgZWxzZQotICAgICAgcmVzdWx0ID0gTnVtYmVyKE5hTik7CisgICAgICByZXN1
bHQgPSBqc05hTigpOwogICAgIGJyZWFrOwogICBjYXNlIENvbmNhdDogewogICAgIExpc3RJdGVy
YXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsKICAgICBmb3IgKCA7IGl0ICE9IGFyZ3MuZW5kKCkgOyAr
K2l0KSB7Ci0gICAgICAgIHMgKz0gaXQtPmRpc3BhdGNoVG9TdHJpbmcoZXhlYyk7CisgICAgICAg
IHMgKz0gaXQtPnRvU3RyaW5nKGV4ZWMpOwogICAgIH0KICAgICByZXN1bHQgPSBTdHJpbmcocyk7
CiAgICAgYnJlYWs7CiAgIH0KICAgY2FzZSBJbmRleE9mOgotICAgIHUyID0gYTAudG9TdHJpbmco
ZXhlYyk7Ci0gICAgaWYgKGExLnR5cGUoKSA9PSBVbmRlZmluZWRUeXBlKQorICAgIHUyID0gYTAt
PnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChhMS0+aXNVbmRlZmluZWQoKSkKICAgICAgIGRwb3Mg
PSAwOwogICAgIGVsc2UgewotICAgICAgZHBvcyA9IGExLnRvSW50ZWdlcihleGVjKTsKKyAgICAg
IGRwb3MgPSBhMS0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgICAgaWYgKGRwb3MgPj0gMCkgeyAvLyBm
YWxzZSBmb3IgTmFOCiAgICAgICAgIGlmIChkcG9zID4gbGVuKQogICAgICAgICAgIGRwb3MgPSBs
ZW47CkBAIC00MzksMTIgKzQzNiwxMiBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6OmNhbGwo
RXhlY1N0YXRlCiAgICAgcmVzdWx0ID0gTnVtYmVyKHMuZmluZCh1Miwgc3RhdGljX2Nhc3Q8aW50
PihkcG9zKSkpOwogICAgIGJyZWFrOwogICBjYXNlIExhc3RJbmRleE9mOgotICAgIHUyID0gYTAu
dG9TdHJpbmcoZXhlYyk7Ci0gICAgZCA9IGExLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChhMS50
eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSB8fCBLSlM6OmlzTmFOKGQpKQorICAgIHUyID0gYTAtPnRv
U3RyaW5nKGV4ZWMpOworICAgIGQgPSBhMS0+dG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKGExLT5p
c1VuZGVmaW5lZCgpIHx8IEtKUzo6aXNOYU4oZCkpCiAgICAgICBkcG9zID0gbGVuOwogICAgIGVs
c2UgewotICAgICAgZHBvcyA9IGExLnRvSW50ZWdlcihleGVjKTsKKyAgICAgIGRwb3MgPSBhMS0+
dG9JbnRlZ2VyKGV4ZWMpOwogICAgICAgaWYgKGRwb3MgPj0gMCkgeyAvLyBmYWxzZSBmb3IgTmFO
CiAgICAgICAgIGlmIChkcG9zID4gbGVuKQogICAgICAgICAgIGRwb3MgPSBsZW47CkBAIC00NTgs
OSArNDU1LDkgQEAgVmFsdWUgU3RyaW5nUHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogICAg
IHUgPSBzOwogICAgIFJlZ0V4cCAqcmVnLCAqdG1wUmVnID0gMDsKICAgICBSZWdFeHBJbXAgKmlt
cCA9IDA7Ci0gICAgaWYgKGEwLmlzQShPYmplY3RUeXBlKSAmJiBhMC50b09iamVjdChleGVjKS5p
bmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkKKyAgICBpZiAoYTAtPmlzT2JqZWN0KCkgJiYgYTAt
PmdldE9iamVjdCgpLT5pbmhlcml0cygmUmVnRXhwSW1wOjppbmZvKSkKICAgICB7Ci0gICAgICBp
bXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oIGEwLnRvT2JqZWN0KGV4ZWMpLmltcCgpICk7
CisgICAgICBpbXAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAgKj4oYTApOwogICAgICAgcmVnID0g
aW1wLT5yZWdFeHAoKTsKICAgICB9CiAgICAgZWxzZQpAQCAtNDY5LDkgKzQ2Niw5IEBAIFZhbHVl
IFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICAgICAqICBJZiByZWdleHAg
aXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0
IGlzCiAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9u
IG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAqLwotICAgICAgcmVnID0gdG1wUmVnID0gbmV3
IFJlZ0V4cChhMC50b1N0cmluZyhleGVjKSwgUmVnRXhwOjpOb25lKTsKKyAgICAgIHJlZyA9IHRt
cFJlZyA9IG5ldyBSZWdFeHAoYTAtPnRvU3RyaW5nKGV4ZWMpLCBSZWdFeHA6Ok5vbmUpOwogICAg
IH0KLSAgICBSZWdFeHBPYmplY3RJbXAqIHJlZ0V4cE9iaiA9IHN0YXRpY19jYXN0PFJlZ0V4cE9i
amVjdEltcCo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluUmVnRXhwKCkuaW1w
KCkpOworICAgIFJlZ0V4cE9iamVjdEltcCogcmVnRXhwT2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhw
T2JqZWN0SW1wKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5SZWdFeHAoKSk7
CiAgICAgaW50ICoqb3ZlY3RvciA9IHJlZ0V4cE9iai0+cmVnaXN0ZXJSZWdleHAocmVnLCB1KTsK
ICAgICBVU3RyaW5nIG1zdHIgPSByZWctPm1hdGNoKHUsIC0xLCAmcG9zLCBvdmVjdG9yKTsKICAg
ICBpZiAoaWQgPT0gU2VhcmNoKSB7CkBAIC00OTIsNyArNDg5LDcgQEAgVmFsdWUgU3RyaW5nUHJv
dG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZQogCWludCBsYXN0SW5kZXggPSAwOwogCXdoaWxlIChw
b3MgPj0gMCkgewogICAgICAgICAgIGlmIChtc3RyLmlzTnVsbCgpKQotICAgICAgICAgICAgbGlz
dC5hcHBlbmQoVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpOworICAgICAgICAgICAgbGlz
dC5hcHBlbmQoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgZWxzZQogCSAgICBsaXN0LmFwcGVu
ZChTdHJpbmcobXN0cikpOwogCSAgbGFzdEluZGV4ID0gcG9zOwpAQCAtNTA4LDcgKzUwNSw3IEBA
IFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKIAkgIC8vIG90aGVyIGJy
b3dzZXJzIGFuZCBiZWNhdXNlIE51bGwgaXMgYSBmYWxzZSB2YWx1ZS4KIAkgIHJlc3VsdCA9IE51
bGwoKTsgCiAJfSBlbHNlIHsKLQkgIHJlc3VsdCA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CisJICByZXN1bHQgPSBleGVj
LT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVjdChleGVjLCBs
aXN0KTsKIAl9CiAgICAgICB9CiAgICAgfQpAQCAtNTIxLDcgKzUxOCw3IEBAIFZhbHVlIFN0cmlu
Z1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgY2FzZSBTbGljZTogLy8gaHR0cDovL2Rl
dmVsb3Blci5uZXRzY2FwZS5jb20vZG9jcy9tYW51YWxzL2pzL2NsaWVudC9qc3JlZi9zdHJpbmcu
aHRtIzExOTQzNjYKICAgICB7CiAgICAgICAgIC8vIFRoZSBhcmcgcHJvY2Vzc2luZyBpcyB2ZXJ5
IG11Y2ggbGlrZSBBcnJheVByb3RvRnVuYzo6U2xpY2UKLSAgICAgICAgZG91YmxlIGJlZ2luID0g
YXJnc1swXS50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBiZWdpbiA9IGFyZ3NbMF0t
PnRvSW50ZWdlcihleGVjKTsKICAgICAgICAgaWYgKGJlZ2luID49IDApIHsgLy8gZmFsc2UgZm9y
IE5hTgogICAgICAgICAgIGlmIChiZWdpbiA+IGxlbikKICAgICAgICAgICAgIGJlZ2luID0gbGVu
OwpAQCAtNTMxLDggKzUyOCw4IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVj
U3RhdGUKICAgICAgICAgICAgIGJlZ2luID0gMDsKICAgICAgICAgfQogICAgICAgICBkb3VibGUg
ZW5kID0gbGVuOwotICAgICAgICBpZiAoYXJnc1sxXS50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSkg
ewotICAgICAgICAgIGVuZCA9IGFyZ3NbMV0udG9JbnRlZ2VyKGV4ZWMpOworICAgICAgICBpZiAo
IWFyZ3NbMV0tPmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICBlbmQgPSBhcmdzWzFdLT50b0lu
dGVnZXIoZXhlYyk7CiAgICAgICAgICAgaWYgKGVuZCA+PSAwKSB7IC8vIGZhbHNlIGZvciBOYU4K
ICAgICAgICAgICAgIGlmIChlbmQgPiBsZW4pCiAgICAgICAgICAgICAgIGVuZCA9IGxlbjsKQEAg
LTU0NywxOCArNTQ0LDE4IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3Rh
dGUKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgU3BsaXQ6IHsKLSAgICBPYmplY3Qg
Y29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCk7
Ci0gICAgT2JqZWN0IHJlcyA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoY29uc3RydWN0b3IuY29uc3Ry
dWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSkpOworICAgIE9iamVjdEltcCAqY29uc3RydWN0b3IgPSBl
eGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCk7CisgICAgT2JqZWN0SW1w
ICpyZXMgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oY29uc3RydWN0b3ItPmNvbnN0cnVjdChl
eGVjLExpc3Q6OmVtcHR5KCkpKTsKICAgICByZXN1bHQgPSByZXM7CiAgICAgdSA9IHM7CiAgICAg
aSA9IHAwID0gMDsKLSAgICB1aW50MzJfdCBsaW1pdCA9IGExLnR5cGUoKSA9PSBVbmRlZmluZWRU
eXBlID8gMHhGRkZGRkZGRlUgOiBhMS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoYTAudHlwZSgp
ID09IE9iamVjdFR5cGUgJiYgT2JqZWN0OjpkeW5hbWljQ2FzdChhMCkuaW5oZXJpdHMoJlJlZ0V4
cEltcDo6aW5mbykpIHsKLSAgICAgIE9iamVjdCBvYmowID0gT2JqZWN0OjpkeW5hbWljQ2FzdChh
MCk7Ci0gICAgICBSZWdFeHAgcmVnKG9iajAuZ2V0KGV4ZWMsInNvdXJjZSIpLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICB1aW50MzJfdCBsaW1pdCA9IGExLT5pc1VuZGVmaW5lZCgpID8gMHhGRkZGRkZG
RlUgOiBhMS0+dG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGEwLT5pc09iamVjdCgpICYmIHN0YXRp
Y19jYXN0PE9iamVjdEltcCAqPihhMCktPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7Cisg
ICAgICBPYmplY3RJbXAgKm9iajAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oYTApOworICAg
ICAgUmVnRXhwIHJlZyhvYmowLT5nZXQoZXhlYywic291cmNlIiktPnRvU3RyaW5nKGV4ZWMpKTsK
ICAgICAgIGlmICh1LmlzRW1wdHkoKSAmJiAhcmVnLm1hdGNoKHUsIDApLmlzTnVsbCgpKSB7CiAJ
Ly8gZW1wdHkgc3RyaW5nIG1hdGNoZWQgYnkgcmVnZXhwIC0+IGVtcHR5IGFycmF5Ci0JcmVzLnB1
dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKDApKTsKKwlyZXMtPnB1dChleGVjLGxl
bmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKDApKTsKIAlicmVhazsKICAgICAgIH0KICAgICAgIHBv
cyA9IDA7CkBAIC01NzIsMTMgKzU2OSwxMyBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6OmNh
bGwoRXhlY1N0YXRlCiAJICBicmVhazsKIAlwb3MgPSBtcG9zICsgKG1zdHIuaXNFbXB0eSgpID8g
MSA6IG1zdHIuc2l6ZSgpKTsKIAlpZiAobXBvcyAhPSBwMCB8fCAhbXN0ci5pc0VtcHR5KCkpIHsK
LQkgIHJlcy5wdXQoZXhlYyxpLCBTdHJpbmcodS5zdWJzdHIocDAsIG1wb3MtcDApKSk7CisJICBy
ZXMtPnB1dChleGVjLGksIFN0cmluZyh1LnN1YnN0cihwMCwgbXBvcy1wMCkpKTsKIAkgIHAwID0g
bXBvcyArIG1zdHIuc2l6ZSgpOwogCSAgaSsrOwogCX0KICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgdTIgPSBhMC50b1N0cmluZyhleGVjKTsKKyAgICAgIHUyID0gYTAtPnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgaWYgKHUyLmlzRW1wdHkoKSkgewogCWlmICh1LmlzRW1wdHkoKSkgewogCSAg
Ly8gZW1wdHkgc2VwYXJhdG9yIG1hdGNoZXMgZW1wdHkgc3RyaW5nIC0+IGVtcHR5IGFycmF5CkBA
IC01ODYsMTEgKzU4MywxMSBAQCBWYWx1ZSBTdHJpbmdQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0
YXRlCiAJICBicmVhazsKIAl9IGVsc2UgewogCSAgd2hpbGUgKHN0YXRpY19jYXN0PHVpbnQzMl90
PihpKSAhPSBsaW1pdCAmJiBpIDwgdS5zaXplKCktMSkKLQkgICAgcmVzLnB1dChleGVjLCBpKyss
IFN0cmluZyh1LnN1YnN0cihwMCsrLCAxKSkpOworCSAgICByZXMtPnB1dChleGVjLCBpKyssIFN0
cmluZyh1LnN1YnN0cihwMCsrLCAxKSkpOwogCX0KICAgICAgIH0gZWxzZSB7CiAJd2hpbGUgKHN0
YXRpY19jYXN0PHVpbnQzMl90PihpKSAhPSBsaW1pdCAmJiAocG9zID0gdS5maW5kKHUyLCBwMCkp
ID49IDApIHsKLQkgIHJlcy5wdXQoZXhlYywgaSwgU3RyaW5nKHUuc3Vic3RyKHAwLCBwb3MtcDAp
KSk7CisJICByZXMtPnB1dChleGVjLCBpLCBTdHJpbmcodS5zdWJzdHIocDAsIHBvcy1wMCkpKTsK
IAkgIHAwID0gcG9zICsgdTIuc2l6ZSgpOwogCSAgaSsrOwogCX0KQEAgLTU5OCwxMyArNTk1LDEz
IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICB9CiAgICAg
Ly8gYWRkIHJlbWFpbmluZyBzdHJpbmcsIGlmIGFueQogICAgIGlmIChzdGF0aWNfY2FzdDx1aW50
MzJfdD4oaSkgIT0gbGltaXQpCi0gICAgICByZXMucHV0KGV4ZWMsIGkrKywgU3RyaW5nKHUuc3Vi
c3RyKHAwKSkpOwotICAgIHJlcy5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlcihp
KSk7CisgICAgICByZXMtPnB1dChleGVjLCBpKyssIFN0cmluZyh1LnN1YnN0cihwMCkpKTsKKyAg
ICByZXMtPnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGkpKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAgIGNhc2UgU3Vic3RyOiB7Ci0gICAgZG91YmxlIGQgPSBhMC50b0ludGVnZXIo
ZXhlYyk7Ci0gICAgZG91YmxlIGQyID0gYTEudG9JbnRlZ2VyKGV4ZWMpOworICAgIGRvdWJsZSBk
ID0gYTAtPnRvSW50ZWdlcihleGVjKTsKKyAgICBkb3VibGUgZDIgPSBhMS0+dG9JbnRlZ2VyKGV4
ZWMpOwogICAgIGlmICghKGQgPj0gMCkpIHsgLy8gdHJ1ZSBmb3IgTmFOCiAgICAgICBkICs9IGxl
bjsKICAgICAgIGlmICghKGQgPj0gMCkpIC8vIHRydWUgZm9yIE5hTgpAQCAtNjIyLDggKzYxOSw4
IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAgICBicmVhazsK
ICAgfQogICBjYXNlIFN1YnN0cmluZzogewotICAgIGRvdWJsZSBzdGFydCA9IGEwLnRvTnVtYmVy
KGV4ZWMpOwotICAgIGRvdWJsZSBlbmQgPSBhMS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
c3RhcnQgPSBhMC0+dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGVuZCA9IGExLT50b051bWJl
cihleGVjKTsKICAgICBpZiAoS0pTOjppc05hTihzdGFydCkpCiAgICAgICBzdGFydCA9IDA7CiAg
ICAgaWYgKEtKUzo6aXNOYU4oZW5kKSkKQEAgLTYzNiw3ICs2MzMsNyBAQCBWYWx1ZSBTdHJpbmdQ
cm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlCiAgICAgICBzdGFydCA9IGxlbjsKICAgICBpZiAo
ZW5kID4gbGVuKQogICAgICAgZW5kID0gbGVuOwotICAgIGlmIChhMS50eXBlKCkgPT0gVW5kZWZp
bmVkVHlwZSkKKyAgICBpZiAoYTEtPmlzVW5kZWZpbmVkKCkpCiAgICAgICBlbmQgPSBsZW47CiAg
ICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICBkb3VibGUgdGVtcCA9IGVuZDsKQEAgLTY4OSwx
NiArNjg2LDE2IEBAIFZhbHVlIFN0cmluZ1Byb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUKICAg
ICByZXN1bHQgPSBTdHJpbmcoIjxzdXA+IiArIHMgKyAiPC9zdXA+Iik7CiAgICAgYnJlYWs7CiAg
IGNhc2UgRm9udGNvbG9yOgotICAgIHJlc3VsdCA9IFN0cmluZygiPGZvbnQgY29sb3I9XCIiICsg
YTAudG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIpOworICAgIHJlc3VsdCA9
IFN0cmluZygiPGZvbnQgY29sb3I9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBz
ICsgIjwvZm9udD4iKTsKICAgICBicmVhazsKICAgY2FzZSBGb250c2l6ZToKLSAgICByZXN1bHQg
PSBTdHJpbmcoIjxmb250IHNpemU9XCIiICsgYTAudG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMg
KyAiPC9mb250PiIpOworICAgIHJlc3VsdCA9IFN0cmluZygiPGZvbnQgc2l6ZT1cIiIgKyBhMC0+
dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9mb250PiIpOwogICAgIGJyZWFrOwogICBj
YXNlIEFuY2hvcjoKLSAgICByZXN1bHQgPSBTdHJpbmcoIjxhIG5hbWU9XCIiICsgYTAudG9TdHJp
bmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOworICAgIHJlc3VsdCA9IFN0cmluZygiPGEg
bmFtZT1cIiIgKyBhMC0+dG9TdHJpbmcoZXhlYykgKyAiXCI+IiArIHMgKyAiPC9hPiIpOwogICAg
IGJyZWFrOwogICBjYXNlIExpbms6Ci0gICAgcmVzdWx0ID0gU3RyaW5nKCI8YSBocmVmPVwiIiAr
IGEwLnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwvYT4iKTsKKyAgICByZXN1bHQgPSBT
dHJpbmcoIjxhIGhyZWY9XCIiICsgYTAtPnRvU3RyaW5nKGV4ZWMpICsgIlwiPiIgKyBzICsgIjwv
YT4iKTsKICAgICBicmVhazsKICNlbmRpZgogICB9CkBAIC03MTMsNyArNzEwLDYgQEAgU3RyaW5n
T2JqZWN0SW1wOjpTdHJpbmdPYmplY3RJbXAoRXhlY1N0YQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nUHJvdG90eXBlSW1wICpzdHJpbmdQcm90bykKICAgOiBJbnRlcm5h
bEZ1bmN0aW9uSW1wKGZ1bmNQcm90bykKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgLy8g
RUNNQSAxNS41LjMuMSBTdHJpbmcucHJvdG90eXBlCiAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9w
ZXJ0eU5hbWUsIHN0cmluZ1Byb3RvLCBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKIApA
QCAtNzIxLDcgKzcxNyw3IEBAIFN0cmluZ09iamVjdEltcDo6U3RyaW5nT2JqZWN0SW1wKEV4ZWNT
dGEKICAgcHV0RGlyZWN0KGZyb21DaGFyQ29kZSwgbmV3IFN0cmluZ09iamVjdEZ1bmNJbXAoZXhl
YyxmdW5jUHJvdG8pLCBEb250RW51bSk7CiAKICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29u
c3RydWN0b3IKLSAgcHV0RGlyZWN0KGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVySW1wOjpvbmUo
KSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CisgIHB1dERpcmVjdChsZW5ndGhQcm9w
ZXJ0eU5hbWUsIGpzT25lKCksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCiAK
QEAgLTczMSwxMiArNzI3LDEyIEBAIGJvb2wgU3RyaW5nT2JqZWN0SW1wOjppbXBsZW1lbnRzQ29u
c3RydWMKIH0KIAogLy8gRUNNQSAxNS41LjIKLU9iamVjdCBTdHJpbmdPYmplY3RJbXA6OmNvbnN0
cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitPYmplY3RJbXAgKlN0cmlu
Z09iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykK
IHsKLSAgT2JqZWN0SW1wICpwcm90byA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWls
dGluU3RyaW5nUHJvdG90eXBlKCkuaW1wKCk7CisgIE9iamVjdEltcCAqcHJvdG8gPSBleGVjLT5s
ZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpblN0cmluZ1Byb3RvdHlwZSgpOwogICBpZiAoYXJn
cy5zaXplKCkgPT0gMCkKLSAgICByZXR1cm4gT2JqZWN0KG5ldyBTdHJpbmdJbnN0YW5jZUltcChw
cm90bykpOwotICByZXR1cm4gT2JqZWN0KG5ldyBTdHJpbmdJbnN0YW5jZUltcChwcm90bywgYXJn
cy5iZWdpbigpLT5kaXNwYXRjaFRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIG5ldyBTdHJp
bmdJbnN0YW5jZUltcChwcm90byk7CisgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2VJbXAocHJv
dG8sIGFyZ3MuYmVnaW4oKS0+dG9TdHJpbmcoZXhlYykpOwogfQogCiBib29sIFN0cmluZ09iamVj
dEltcDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdApAQCAtNzQ1LDEzICs3NDEsMTMgQEAgYm9vbCBT
dHJpbmdPYmplY3RJbXA6OmltcGxlbWVudHNDYWxsKCkgYwogfQogCiAvLyBFQ01BIDE1LjUuMQot
VmFsdWUgU3RyaW5nT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYvKnRo
aXNPYmoqLywgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHJpbmdPYmplY3RJbXA6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICovKnRoaXNPYmoqLywgY29u
c3QgTGlzdCAmYXJncykKIHsKICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQogICAgIHJldHVybiBTdHJp
bmcoIiIpOwogICBlbHNlIHsKLSAgICBWYWx1ZSB2ID0gYXJnc1swXTsKLSAgICByZXR1cm4gU3Ry
aW5nKHYudG9TdHJpbmcoZXhlYykpOworICAgIFZhbHVlSW1wICp2ID0gYXJnc1swXTsKKyAgICBy
ZXR1cm4gU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKICAgfQogfQogCkBAIC03NjEsOCArNzU3
LDcgQEAgVmFsdWUgU3RyaW5nT2JqZWN0SW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZQogU3RyaW5nT2Jq
ZWN0RnVuY0ltcDo6U3RyaW5nT2JqZWN0RnVuY0ltcChFeGVjU3RhdGUgKmV4ZWMsIEZ1bmN0aW9u
UHJvdG90eXBlSW1wICpmdW5jUHJvdG8pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJv
dG8pCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7Ci0gIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0
eU5hbWUsIE51bWJlckltcDo6b25lKCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwor
ICBwdXREaXJlY3QobGVuZ3RoUHJvcGVydHlOYW1lLCBqc09uZSgpLCBEb250RGVsZXRlfFJlYWRP
bmx5fERvbnRFbnVtKTsKIH0KIAogYm9vbCBTdHJpbmdPYmplY3RGdW5jSW1wOjppbXBsZW1lbnRz
Q2FsbCgpIGNvbnN0CkBAIC03NzAsNyArNzY1LDcgQEAgYm9vbCBTdHJpbmdPYmplY3RGdW5jSW1w
OjppbXBsZW1lbnRzQ2FsbAogICByZXR1cm4gdHJ1ZTsKIH0KIAotVmFsdWUgU3RyaW5nT2JqZWN0
RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLyp0aGlzT2JqKi8sIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU3RyaW5nT2JqZWN0RnVuY0ltcDo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZh
cmdzKQogewogICBVU3RyaW5nIHM7CiAgIGlmIChhcmdzLnNpemUoKSkgewpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMwpkaWZmIC1wIC11IC1yMS4xMyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVj
dC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCTcgQXVnIDIwMDUgMDY6
MTc6MzYgLTAwMDAJMS4xMworKysgSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAk4
IEF1ZyAyMDA1IDAxOjAwOjU5IC0wMDAwCkBAIC0zMywxNCArMzMsMTQgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgU3RyaW5nSW5zdGFuY2VJbXAoT2JqZWN0SW1wICpwcm90bywgY29uc3QgVVN0cmlu
ZyAmc3RyaW5nKTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBj
b25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSk7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIHByaXZhdGU6Ci0g
ICAgc3RhdGljIFZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpOwotICAgIHN0YXRpYyBWYWx1ZSBpbmRl
eEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QgJnNsb3QpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCk7Cisg
ICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpOwogICB9OwogCiAgIC8qKgpAQCAt
NjksNyArNjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBTdHJpbmdQcm90b0Z1bmNJbXAoRXhl
Y1N0YXRlICpleGVjLCBpbnQgaSwgaW50IGxlbik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVt
ZW50c0NhbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgVmFsdWVJ
bXAgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKTsKIAogICAgIGVudW0geyBUb1N0cmluZywgVmFsdWVPZiwgQ2hhckF0
LCBDaGFyQ29kZUF0LCBDb25jYXQsIEluZGV4T2YsIExhc3RJbmRleE9mLAogCSAgIE1hdGNoLCBS
ZXBsYWNlLCBTZWFyY2gsIFNsaWNlLCBTcGxpdCwKQEAgLTk2LDkgKzk2LDkgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZUltcCAqc3RyaW5nUHJv
dG8pOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZh
cmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cyk7CiAgIH07CiAKICAgLyoqCkBAIC0xMTEsNyArMTExLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IHB1YmxpYzoKICAgICBTdHJpbmdPYmplY3RGdW5jSW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rp
b25Qcm90b3R5cGVJbXAgKmZ1bmNQcm90byk7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHND
YWxsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CiAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvdGVzdGtqcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3Jp
cHRDb3JlL2tqcy90ZXN0a2pzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC1w
IC11IC1yMS4xMyBKYXZhU2NyaXB0Q29yZS9ranMvdGVzdGtqcy5jcHAKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy90ZXN0a2pzLmNwcAkxNCBKdWwgMjAwNSAyMjozMjoxNiAtMDAwMAkxLjEzCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvdGVzdGtqcy5jcHAJOCBBdWcgMjAwNSAwMTowMDo1OSAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCBjbGFzcyBUZXN0RnVuY3Rpb25JbXAgOiBwdWJsaWMgT2JqZWN0SW1w
CiBwdWJsaWM6CiAgIFRlc3RGdW5jdGlvbkltcChpbnQgaSwgaW50IGxlbmd0aCk7CiAgIHZpcnR1
YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgdmlydHVh
bCBWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKTsKKyAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwogCiAgIGVudW0geyBQ
cmludCwgRGVidWcsIFF1aXQsIEdDIH07CiAKQEAgLTUwLDEyICs1MCwxMiBAQCBUZXN0RnVuY3Rp
b25JbXA6OlRlc3RGdW5jdGlvbkltcChpbnQgaSwgCiAgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0
eU5hbWUsbGVuZ3RoLERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOwogfQogCi1WYWx1ZSBU
ZXN0RnVuY3Rpb25JbXA6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiov
LCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlRlc3RGdW5jdGlvbkltcDo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0
ICZhcmdzKQogewogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgUHJpbnQ6CiAgIGNhc2UgRGVidWc6
Ci0gICAgZnByaW50ZihzdGRlcnIsIi0tPiAlc1xuIixhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLmFz
Y2lpKCkpOworICAgIGZwcmludGYoc3RkZXJyLCItLT4gJXNcbiIsYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuYXNjaWkoKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICBjYXNlIFF1aXQ6CiAg
ICAgZXhpdCgwKTsKQEAgLTc2LDEwICs3NiwxMCBAQCBjbGFzcyBWZXJzaW9uRnVuY3Rpb25JbXAg
OiBwdWJsaWMgT2JqZWN0CiBwdWJsaWM6CiAgIFZlcnNpb25GdW5jdGlvbkltcCgpIDogT2JqZWN0
SW1wKCkge30KICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cyk7CiB9OwogCi1WYWx1ZSBWZXJzaW9uRnVuY3Rpb25JbXA6OmNhbGwoRXhlY1N0YXRlICovKmV4
ZWMqLywgT2JqZWN0ICYvKnRoaXNPYmoqLywgY29uc3QgTGlzdCAmLyphcmdzKi8pCitWYWx1ZUlt
cCAqVmVyc2lvbkZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKi8qZXhlYyov
LCBPYmplY3RJbXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICYvKmFyZ3MqLykKIHsKICAgLy8g
V2UgbmVlZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1vemlsbGEg
SlMgdGVzdHMgYnV0IGZvciBub3cKICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55IHZlcnNp
b24tc3BlY2lmaWMgaGFuZGxpbmcKQEAgLTEwMywyMCArMTAzLDIwIEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKICAgewogICAgIEludGVycHJldGVyOjpsb2NrKCk7CiAKLSAgICBP
YmplY3QgZ2xvYmFsKG5ldyBHbG9iYWxJbXAoKSk7CisgICAgT2JqZWN0SW1wICpnbG9iYWwobmV3
IEdsb2JhbEltcCgpKTsKIAogICAgIC8vIGNyZWF0ZSBpbnRlcnByZXRlcgogICAgIEludGVycHJl
dGVyIGludGVycChnbG9iYWwpOwogICAgIC8vIGFkZCBkZWJ1ZygpIGZ1bmN0aW9uCi0gICAgZ2xv
YmFsLnB1dChpbnRlcnAuZ2xvYmFsRXhlYygpLCAiZGVidWciLCBPYmplY3QobmV3IFRlc3RGdW5j
dGlvbkltcChUZXN0RnVuY3Rpb25JbXA6OkRlYnVnLDEpKSk7CisgICAgZ2xvYmFsLT5wdXQoaW50
ZXJwLmdsb2JhbEV4ZWMoKSwgImRlYnVnIiwgbmV3IFRlc3RGdW5jdGlvbkltcChUZXN0RnVuY3Rp
b25JbXA6OkRlYnVnLCAxKSk7CiAgICAgLy8gYWRkICJwcmludCIgZm9yIGNvbXBhdGliaWxpdHkg
d2l0aCB0aGUgbW96aWxsYSBqcyBzaGVsbAotICAgIGdsb2JhbC5wdXQoaW50ZXJwLmdsb2JhbEV4
ZWMoKSwgInByaW50IiwgT2JqZWN0KG5ldyBUZXN0RnVuY3Rpb25JbXAoVGVzdEZ1bmN0aW9uSW1w
OjpQcmludCwxKSkpOworICAgIGdsb2JhbC0+cHV0KGludGVycC5nbG9iYWxFeGVjKCksICJwcmlu
dCIsIG5ldyBUZXN0RnVuY3Rpb25JbXAoVGVzdEZ1bmN0aW9uSW1wOjpQcmludCwgMSkpOwogICAg
IC8vIGFkZCAicXVpdCIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgbW96aWxsYSBqcyBzaGVs
bAotICAgIGdsb2JhbC5wdXQoaW50ZXJwLmdsb2JhbEV4ZWMoKSwgInF1aXQiLCBPYmplY3QobmV3
IFRlc3RGdW5jdGlvbkltcChUZXN0RnVuY3Rpb25JbXA6OlF1aXQsMCkpKTsKKyAgICBnbG9iYWwt
PnB1dChpbnRlcnAuZ2xvYmFsRXhlYygpLCAicXVpdCIsIG5ldyBUZXN0RnVuY3Rpb25JbXAoVGVz
dEZ1bmN0aW9uSW1wOjpRdWl0LCAwKSk7CiAgICAgLy8gYWRkICJnYyIgZm9yIGNvbXBhdGliaWxp
dHkgd2l0aCB0aGUgbW96aWxsYSBqcyBzaGVsbAotICAgIGdsb2JhbC5wdXQoaW50ZXJwLmdsb2Jh
bEV4ZWMoKSwgImdjIiwgT2JqZWN0KG5ldyBUZXN0RnVuY3Rpb25JbXAoVGVzdEZ1bmN0aW9uSW1w
OjpHQywwKSkpOworICAgIGdsb2JhbC0+cHV0KGludGVycC5nbG9iYWxFeGVjKCksICJnYyIsIG5l
dyBUZXN0RnVuY3Rpb25JbXAoVGVzdEZ1bmN0aW9uSW1wOjpHQywgMCkpOwogICAgIC8vIGFkZCAi
dmVyc2lvbiIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgbW96aWxsYSBqcyBzaGVsbCAKLSAg
ICBnbG9iYWwucHV0KGludGVycC5nbG9iYWxFeGVjKCksICJ2ZXJzaW9uIiwgT2JqZWN0KG5ldyBW
ZXJzaW9uRnVuY3Rpb25JbXAoKSkpOworICAgIGdsb2JhbC0+cHV0KGludGVycC5nbG9iYWxFeGVj
KCksICJ2ZXJzaW9uIiwgbmV3IFZlcnNpb25GdW5jdGlvbkltcCgpKTsKIAogICAgIGZvciAoaW50
IGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAgICAgICBpbnQgY29kZV9sZW4gPSAwOwpAQCAtMTUw
LDEzICsxNTAsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgICAgICBp
ZiAoY29tcC5jb21wbFR5cGUoKSA9PSBUaHJvdykgewogICAgICAgICBFeGVjU3RhdGUgKmV4ZWMg
PSBpbnRlcnAuZ2xvYmFsRXhlYygpOwotICAgICAgICBWYWx1ZSBleFZhbCA9IGNvbXAudmFsdWUo
KTsKLSAgICAgICAgY2hhciAqbXNnID0gZXhWYWwudG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKKyAg
ICAgICAgVmFsdWVJbXAgKmV4VmFsID0gY29tcC52YWx1ZSgpOworICAgICAgICBjaGFyICptc2cg
PSBleFZhbC0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKTsKICAgICAgICAgaW50IGxpbmVubyA9IC0x
OwotICAgICAgICBpZiAoZXhWYWwudHlwZSgpID09IE9iamVjdFR5cGUpIHsKLSAgICAgICAgICBW
YWx1ZSBsaW5lVmFsID0gT2JqZWN0OjpkeW5hbWljQ2FzdChleFZhbCkuZ2V0KGV4ZWMsImxpbmUi
KTsKLSAgICAgICAgICBpZiAobGluZVZhbC50eXBlKCkgPT0gTnVtYmVyVHlwZSkKLSAgICAgICAg
ICAgIGxpbmVubyA9IGludChsaW5lVmFsLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgaWYgKGV4
VmFsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgVmFsdWVJbXAgKmxpbmVWYWwgPSBzdGF0aWNf
Y2FzdDxPYmplY3RJbXAgKj4oZXhWYWwpLT5nZXQoZXhlYywibGluZSIpOworICAgICAgICAgIGlm
IChsaW5lVmFsLT5pc051bWJlcigpKQorICAgICAgICAgICAgbGluZW5vID0gaW50KGxpbmVWYWwt
PnRvTnVtYmVyKGV4ZWMpKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGluZW5vICE9IC0xKQog
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJFeGNlcHRpb24sIGxpbmUgJWQ6ICVzXG4iLGxpbmVu
byxtc2cpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKICAgICAgICAgcmV0ID0gZmFsc2U7CiAgICAgICB9CiAgICAgICBlbHNlIGlmIChjb21wLmNv
bXBsVHlwZSgpID09IFJldHVyblZhbHVlKSB7Ci0gICAgICAgIGNoYXIgKm1zZyA9IGNvbXAudmFs
dWUoKS50b1N0cmluZyhpbnRlcnAuZ2xvYmFsRXhlYygpKS5hc2NpaSgpOworICAgICAgICBjaGFy
ICptc2cgPSBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGludGVycC5nbG9iYWxFeGVjKCkpLmFzY2lp
KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCJSZXR1cm4gdmFsdWU6ICVzXG4iLG1zZyk7CiAg
ICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtcCAtdSAtcjEuMjYgSmF2YVNjcmlwdENvcmUva2pzL3Zh
bHVlLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmNwcAkxNCBKdWwgMjAwNSAxODoy
NzowMyAtMDAwMAkxLjI2CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCTggQXVnIDIw
MDUgMDE6MDE6MDAgLTAwMDAKQEAgLTEsNCArMSwzIEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6
IDIgLSotCiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
QEAgLTIzLDExICsyMiwxMSBAQAogICovCiAKICNpbmNsdWRlICJ2YWx1ZS5oIgorCiAjaW5jbHVk
ZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJpbnRlcnByZXRlci5o
IgogCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zNywxMjAgKzM2LDk4IEBACiAjaW5jbHVk
ZSAib3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgImVycm9yX29iamVjdC5oIgogI2luY2x1ZGUgIm5v
ZGVzLmgiCi0jaW5jbHVkZSAic2ltcGxlX251bWJlci5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIAot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFsdWVJbXAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFZhbHVlSW1wOjptYXJrKCkKLXsKLSAgX21h
cmtlZCA9IHRydWU7Ci19CitBbGxvY2F0ZWRWYWx1ZUltcCAqQ29uc3RhbnRWYWx1ZXM6OnVuZGVm
aW5lZCA9IE5VTEw7CitBbGxvY2F0ZWRWYWx1ZUltcCAqQ29uc3RhbnRWYWx1ZXM6Om51bGwgPSBO
VUxMOworQWxsb2NhdGVkVmFsdWVJbXAgKkNvbnN0YW50VmFsdWVzOjpqc1RydWUgPSBOVUxMOwor
QWxsb2NhdGVkVmFsdWVJbXAgKkNvbnN0YW50VmFsdWVzOjpqc0ZhbHNlID0gTlVMTDsKK0FsbG9j
YXRlZFZhbHVlSW1wICpDb25zdGFudFZhbHVlczo6TmFOID0gTlVMTDsKIAotdm9pZCogVmFsdWVJ
bXA6Om9wZXJhdG9yIG5ldyhzaXplX3QgcykKLXsKLSAgcmV0dXJuIENvbGxlY3Rvcjo6YWxsb2Nh
dGUocyk7Ci19CitzdGF0aWMgY29uc3QgZG91YmxlIEQxNiA9IDY1NTM2Oworc3RhdGljIGNvbnN0
IGRvdWJsZSBEMzIgPSA0Mjk0OTY3Mjk2LjA7CiAKLXZvaWQgVmFsdWVJbXA6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKikKK3ZvaWQgKkFsbG9jYXRlZFZhbHVlSW1wOjpvcGVyYXRvciBuZXcoc2l6ZV90
IHNpemUpCiB7Ci0gIC8vIERvIG5vdGhpbmcuIFNvIGZhci4KKyAgICByZXR1cm4gQ29sbGVjdG9y
OjphbGxvY2F0ZShzaXplKTsKIH0KIAotYm9vbCBWYWx1ZUltcDo6dG9VSW50MzIodW5zaWduZWQm
KSBjb25zdAorYm9vbCBBbGxvY2F0ZWRWYWx1ZUltcDo6Z2V0VUludDMyKHVuc2lnbmVkJikgY29u
c3QKIHsKLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA5
LjQKIGRvdWJsZSBWYWx1ZUltcDo6dG9JbnRlZ2VyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKIHsK
LSAgdWludDMyX3QgaTsKLSAgaWYgKGRpc3BhdGNoVG9VSW50MzIoaSkpCi0gICAgcmV0dXJuIGk7
Ci0gIHJldHVybiByb3VuZFZhbHVlKGV4ZWMsIFZhbHVlKGNvbnN0X2Nhc3Q8VmFsdWVJbXAqPih0
aGlzKSkpOworICAgIHVpbnQzMl90IGk7CisgICAgaWYgKGdldFVJbnQzMihpKSkKKyAgICAgICAg
cmV0dXJuIGk7CisgICAgcmV0dXJuIHJvdW5kVmFsdWUoZXhlYywgY29uc3RfY2FzdDxWYWx1ZUlt
cCo+KHRoaXMpKTsKIH0KIAogaW50MzJfdCBWYWx1ZUltcDo6dG9JbnQzMihFeGVjU3RhdGUgKmV4
ZWMpIGNvbnN0CiB7Ci0gIHVpbnQzMl90IGk7Ci0gIGlmIChkaXNwYXRjaFRvVUludDMyKGkpKQot
ICAgIHJldHVybiBpOwotCi0gIGRvdWJsZSBkID0gcm91bmRWYWx1ZShleGVjLCBWYWx1ZShjb25z
dF9jYXN0PFZhbHVlSW1wKj4odGhpcykpKTsKLSAgaWYgKGlzTmFOKGQpIHx8IGlzSW5mKGQpKQot
ICAgIHJldHVybiAwOwotICBkb3VibGUgZDMyID0gZm1vZChkLCBEMzIpOwotCi0gIGlmIChkMzIg
Pj0gRDMyIC8gMi4wKQotICAgIGQzMiAtPSBEMzI7Ci0gIGVsc2UgaWYgKGQzMiA8IC1EMzIgLyAy
LjApCi0gICAgZDMyICs9IEQzMjsKKyAgICB1aW50MzJfdCBpOworICAgIGlmIChnZXRVSW50MzIo
aSkpCisgICAgICAgIHJldHVybiBpOworCisgICAgZG91YmxlIGQgPSByb3VuZFZhbHVlKGV4ZWMs
IGNvbnN0X2Nhc3Q8VmFsdWVJbXAqPih0aGlzKSk7CisgICAgaWYgKGlzTmFOKGQpIHx8IGlzSW5m
KGQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkb3VibGUgZDMyID0gZm1vZChkLCBEMzIpOwor
CisgICAgaWYgKGQzMiA+PSBEMzIgLyAyKQorICAgICAgICBkMzIgLT0gRDMyOworICAgIGVsc2Ug
aWYgKGQzMiA8IC1EMzIgLyAyKQorICAgICAgICBkMzIgKz0gRDMyOwogCi0gIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihkMzIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pihk
MzIpOwogfQogCiB1aW50MzJfdCBWYWx1ZUltcDo6dG9VSW50MzIoRXhlY1N0YXRlICpleGVjKSBj
b25zdAogewotICB1aW50MzJfdCBpOwotICBpZiAoZGlzcGF0Y2hUb1VJbnQzMihpKSkKLSAgICBy
ZXR1cm4gaTsKLQotICBkb3VibGUgZCA9IHJvdW5kVmFsdWUoZXhlYywgVmFsdWUoY29uc3RfY2Fz
dDxWYWx1ZUltcCo+KHRoaXMpKSk7Ci0gIGlmIChpc05hTihkKSB8fCBpc0luZihkKSkKLSAgICBy
ZXR1cm4gMDsKLSAgZG91YmxlIGQzMiA9IGZtb2QoZCwgRDMyKTsKKyAgICB1aW50MzJfdCBpOwor
ICAgIGlmIChnZXRVSW50MzIoaSkpCisgICAgICAgIHJldHVybiBpOworCisgICAgZG91YmxlIGQg
PSByb3VuZFZhbHVlKGV4ZWMsIGNvbnN0X2Nhc3Q8VmFsdWVJbXAqPih0aGlzKSk7CisgICAgaWYg
KGlzTmFOKGQpIHx8IGlzSW5mKGQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkb3VibGUgZDMy
ID0gZm1vZChkLCBEMzIpOwogCi0gIGlmIChkMzIgPCAwKQotICAgIGQzMiArPSBEMzI7CisgICAg
aWYgKGQzMiA8IDApCisgICAgICAgIGQzMiArPSBEMzI7CiAKLSAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQzMl90PihkMzIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZDMyKTsK
IH0KIAogdWludDE2X3QgVmFsdWVJbXA6OnRvVUludDE2KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QK
IHsKLSAgdWludDMyX3QgaTsKLSAgaWYgKGRpc3BhdGNoVG9VSW50MzIoaSkpCi0gICAgcmV0dXJu
IGk7Ci0KLSAgZG91YmxlIGQgPSByb3VuZFZhbHVlKGV4ZWMsIFZhbHVlKGNvbnN0X2Nhc3Q8VmFs
dWVJbXAqPih0aGlzKSkpOwotICBpZiAoaXNOYU4oZCkgfHwgaXNJbmYoZCkpCi0gICAgcmV0dXJu
IDA7Ci0gIGRvdWJsZSBkMTYgPSBmbW9kKGQsIEQxNik7Ci0KLSAgaWYgKGQxNiA8IDApCi0gICAg
ZDE2ICs9IEQxNjsKLQotICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGQxNik7Ci19Ci0K
LU9iamVjdCBWYWx1ZUltcDo6ZGlzcGF0Y2hUb09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
Ci17Ci0gIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBOdW1iZXJJbXAgKj4odGhpcyktPk51bWJlckltcDo6dG9PYmplY3QoZXhlYyk7Ci0g
IHJldHVybiB0b09iamVjdChleGVjKTsKLX0KLQotYm9vbCBWYWx1ZUltcDo6aXNVbmRlZmluZWRP
ck51bGwoKSBjb25zdAotewotICAgIHN3aXRjaCAoZGlzcGF0Y2hUeXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBCb29sZWFuVHlwZToKLSAgICAgICAgY2FzZSBOdW1iZXJUeXBlOgotICAgICAgICBjYXNl
IE9iamVjdFR5cGU6Ci0gICAgICAgIGNhc2UgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE51bGxUeXBlOgotICAgICAgICBjYXNlIFVuZGVmaW5lZFR5cGU6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBVbnNwZWNpZmllZFR5cGU6Ci0g
ICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKKyAgICB1aW50MzJfdCBpOworICAgIGlmIChnZXRVSW50MzIoaSkpCisg
ICAgICAgIHJldHVybiBpOworCisgICAgZG91YmxlIGQgPSByb3VuZFZhbHVlKGV4ZWMsIGNvbnN0
X2Nhc3Q8VmFsdWVJbXAqPih0aGlzKSk7CisgICAgaWYgKGlzTmFOKGQpIHx8IGlzSW5mKGQpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBkb3VibGUgZDE2ID0gZm1vZChkLCBEMTYpOworCisgICAg
aWYgKGQxNiA8IDApCisgICAgICAgIGQxNiArPSBEMTY7CisKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KGQxNik7CiB9CiAKLWJvb2wgVmFsdWVJbXA6OmlzQm9vbGVhbihib29sICZi
b29sZWFuVmFsdWUpIGNvbnN0CitPYmplY3RJbXAgKlZhbHVlSW1wOjp0b09iamVjdChFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgaWYgKFNpbXBsZU51bWJlcjo6aXModGhpcykpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBOdW1iZXJJbXAgKj4odGhpcyktPk51bWJlcklt
cDo6dG9PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIGRvd25jYXN0KCktPnRvT2JqZWN0KGV4ZWMp
OworfQorCitib29sIEFsbG9jYXRlZFZhbHVlSW1wOjpnZXRCb29sZWFuKGJvb2wgJmJvb2xlYW5W
YWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNTgsNyArMTM1LDcgQEAgYm9vbCBWYWx1ZUltcDo6aXNCb29sZWFuKGJvb2wgJmJv
b2xlYW5WYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbHVlSW1wOjppc051bWJlcihk
b3VibGUgJm51bWVyaWNWYWx1ZSkgY29uc3QKK2Jvb2wgQWxsb2NhdGVkVmFsdWVJbXA6OmdldE51
bWJlcihkb3VibGUgJm51bWVyaWNWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzTnVtYmVyKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NiwyNjEgKzE0MywxMTMgQEAgYm9vbCBWYWx1
ZUltcDo6aXNOdW1iZXIoZG91YmxlICZudW1lcmljVgogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFZhbHVlSW1wOjppc1N0cmluZyhVU3RyaW5nICZzdHJpbmdWYWx1ZSkgY29uc3QKK2RvdWJs
ZSBBbGxvY2F0ZWRWYWx1ZUltcDo6Z2V0TnVtYmVyKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHJpbmdWYWx1ZSA9IHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZ0ltcCAqPih0aGlzKS0+dmFsdWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotVVN0cmluZyBWYWx1ZUltcDo6YXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBp
c1N0cmluZygpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wICo+KHRoaXMpLT52YWx1ZSgp
IDogVVN0cmluZygpOworICAgIHJldHVybiBpc051bWJlcigpID8gc3RhdGljX2Nhc3Q8Y29uc3Qg
TnVtYmVySW1wICo+KHRoaXMpLT52YWx1ZSgpIDogTmFOOwogfQogCi1ib29sIFZhbHVlSW1wOjpp
c09iamVjdChPYmplY3RJbXAgKiZvYmplY3QpCitib29sIEFsbG9jYXRlZFZhbHVlSW1wOjpnZXRT
dHJpbmcoVVN0cmluZyAmc3RyaW5nVmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc09iamVjdCgp
KQorICAgIGlmICghaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG9iamVj
dCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih0aGlzKTsKKyAgICBzdHJpbmdWYWx1ZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcCAqPih0aGlzKS0+dmFsdWUoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhbHVlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVmFsdWU6OlZhbHVlKGJvb2wg
YikgOiByZXAoYiA/IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29sZWFuSW1wOjpzdGF0aWNG
YWxzZSkgeyB9Ci0KLVZhbHVlOjpWYWx1ZShpbnQgaSkKLSAgICA6IHJlcChTaW1wbGVOdW1iZXI6
OmZpdHMoaSkgPyBTaW1wbGVOdW1iZXI6Om1ha2UoaSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19j
YXN0PGRvdWJsZT4oaSkpKSB7IH0KLQotVmFsdWU6OlZhbHVlKHVuc2lnbmVkIHUpCi0gICAgOiBy
ZXAoU2ltcGxlTnVtYmVyOjpmaXRzKHUpID8gU2ltcGxlTnVtYmVyOjptYWtlKHUpIDogbmV3IE51
bWJlckltcChzdGF0aWNfY2FzdDxkb3VibGU+KHUpKSkgeyB9Ci0KLVZhbHVlOjpWYWx1ZShkb3Vi
bGUgZCkKLSAgICA6IHJlcChTaW1wbGVOdW1iZXI6OmZpdHMoZCkKLSAgICAgICAgPyBTaW1wbGVO
dW1iZXI6Om1ha2Uoc3RhdGljX2Nhc3Q8bG9uZz4oZCkpCi0gICAgICAgIDogKEtKUzo6aXNOYU4o
ZCkgPyBOdW1iZXJJbXA6OnN0YXRpY05hTiA6IG5ldyBOdW1iZXJJbXAoZCkpKQoteyB9Ci0KLVZh
bHVlOjpWYWx1ZShkb3VibGUgZCwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKQotICAgIDogcmVwKChr
bm93blRvQmVJbnRlZ2VyID8gU2ltcGxlTnVtYmVyOjppbnRlZ2VyRml0cyhkKSA6IFNpbXBsZU51
bWJlcjo6Zml0cyhkKSkKLSAgICAgICAgPyBTaW1wbGVOdW1iZXI6Om1ha2Uoc3RhdGljX2Nhc3Q8
bG9uZz4oZCkpCi0gICAgICAgIDogKCgha25vd25Ub0JlSW50ZWdlciAmJiBLSlM6OmlzTmFOKGQp
KSA/IE51bWJlckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChkKSkpCi17IH0KLQotVmFs
dWU6OlZhbHVlKGxvbmcgbCkKLSAgICA6IHJlcChTaW1wbGVOdW1iZXI6OmZpdHMobCkgPyBTaW1w
bGVOdW1iZXI6Om1ha2UobCkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4obCkp
KSB7IH0KLQotVmFsdWU6OlZhbHVlKHVuc2lnbmVkIGxvbmcgbCkKLSAgICA6IHJlcChTaW1wbGVO
dW1iZXI6OmZpdHMobCkgPyBTaW1wbGVOdW1iZXI6Om1ha2UobCkgOiBuZXcgTnVtYmVySW1wKHN0
YXRpY19jYXN0PGRvdWJsZT4obCkpKSB7IH0KLQotVmFsdWU6OlZhbHVlKGNvbnN0IGNoYXIgKnMp
IDogcmVwKG5ldyBTdHJpbmdJbXAocykpIHsgfQotCi1WYWx1ZTo6VmFsdWUoY29uc3QgVVN0cmlu
ZyAmcykgOiByZXAobmV3IFN0cmluZ0ltcChzKSkgeyB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBVbmRlZmluZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVVuZGVmaW5lZDo6VW5kZWZpbmVkKCkgOiBWYWx1ZShVbmRlZmluZWRJbXA6OnN0YXRp
Y1VuZGVmaW5lZCkKLXsKLX0KLQotVW5kZWZpbmVkIFVuZGVmaW5lZDo6ZHluYW1pY0Nhc3QoY29u
c3QgVmFsdWUgJnYpCi17Ci0gIGlmICh2LmlzTnVsbCgpIHx8IHYudHlwZSgpICE9IFVuZGVmaW5l
ZFR5cGUpCi0gICAgcmV0dXJuIFVuZGVmaW5lZCgwKTsKLQotICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOdWxsIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU51bGw6Ok51bGwoKSA6IFZhbHVlKE51
bGxJbXA6OnN0YXRpY051bGwpCi17Ci19Ci0KLU51bGwgTnVsbDo6ZHluYW1pY0Nhc3QoY29uc3Qg
VmFsdWUgJnYpCi17Ci0gIGlmICh2LmlzTnVsbCgpIHx8IHYudHlwZSgpICE9IE51bGxUeXBlKQot
ICAgIHJldHVybiBOdWxsKDApOwotCi0gIHJldHVybiBOdWxsKCk7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29sZWFuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUJvb2xlYW46OkJvb2xlYW4oYm9vbCBiKQotICA6IFZhbHVlKGIgPyBC
b29sZWFuSW1wOjpzdGF0aWNUcnVlIDogQm9vbGVhbkltcDo6c3RhdGljRmFsc2UpCitVU3RyaW5n
IEFsbG9jYXRlZFZhbHVlSW1wOjpnZXRTdHJpbmcoKSBjb25zdAogeworICAgIHJldHVybiBpc1N0
cmluZygpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nSW1wICo+KHRoaXMpLT52YWx1ZSgpIDog
VVN0cmluZygpOwogfQogCi1ib29sIEJvb2xlYW46OnZhbHVlKCkgY29uc3QKLXsKLSAgYXNzZXJ0
KHJlcCk7Ci0gIHJldHVybiAoKEJvb2xlYW5JbXAqKXJlcCktPnZhbHVlKCk7Ci19Ci0KLUJvb2xl
YW4gQm9vbGVhbjo6ZHluYW1pY0Nhc3QoY29uc3QgVmFsdWUgJnYpCi17Ci0gIGlmICh2LmlzTnVs
bCgpIHx8IHYudHlwZSgpICE9IEJvb2xlYW5UeXBlKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
b29sZWFuSW1wKj4oMCk7Ci0KLSAgcmV0dXJuIHN0YXRpY19jYXN0PEJvb2xlYW5JbXAqPih2Lmlt
cCgpKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0cmluZyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU3RyaW5nOjpTdHJpbmcoY29u
c3QgVVN0cmluZyAmcykgOiBWYWx1ZShuZXcgU3RyaW5nSW1wKHMpKQotewotfQotCi1VU3RyaW5n
IFN0cmluZzo6dmFsdWUoKSBjb25zdAotewotICBhc3NlcnQocmVwKTsKLSAgcmV0dXJuICgoU3Ry
aW5nSW1wKilyZXApLT52YWx1ZSgpOwotfQotCi1TdHJpbmcgU3RyaW5nOjpkeW5hbWljQ2FzdChj
b25zdCBWYWx1ZSAmdikKLXsKLSAgaWYgKHYuaXNOdWxsKCkgfHwgdi50eXBlKCkgIT0gU3RyaW5n
VHlwZSkKLSAgICByZXR1cm4gU3RyaW5nKDApOwotCi0gIHJldHVybiBTdHJpbmcoc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wKj4odi5pbXAoKSkpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gTnVtYmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1OdW1iZXI6Ok51bWJlcihpbnQgaSkKLSAgOiBWYWx1ZShTaW1wbGVOdW1iZXI6OmZpdHMoaSkg
PyBTaW1wbGVOdW1iZXI6Om1ha2UoaSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJs
ZT4oaSkpKSB7IH0KLQotTnVtYmVyOjpOdW1iZXIodW5zaWduZWQgaW50IHUpCi0gIDogVmFsdWUo
U2ltcGxlTnVtYmVyOjpmaXRzKHUpID8gU2ltcGxlTnVtYmVyOjptYWtlKHUpIDogbmV3IE51bWJl
ckltcChzdGF0aWNfY2FzdDxkb3VibGU+KHUpKSkgeyB9Ci0KLU51bWJlcjo6TnVtYmVyKGRvdWJs
ZSBkKQotICA6IFZhbHVlKFNpbXBsZU51bWJlcjo6Zml0cyhkKQotICAgICAgICA/IFNpbXBsZU51
bWJlcjo6bWFrZShzdGF0aWNfY2FzdDxsb25nPihkKSkKLSAgICAgICAgOiAoS0pTOjppc05hTihk
KSA/IE51bWJlckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChkKSkpCi17IH0KLQotTnVt
YmVyOjpOdW1iZXIoZG91YmxlIGQsIGJvb2wga25vd25Ub0JlSW50ZWdlcikKLSAgOiBWYWx1ZSgo
a25vd25Ub0JlSW50ZWdlciA/IFNpbXBsZU51bWJlcjo6aW50ZWdlckZpdHMoZCkgOiBTaW1wbGVO
dW1iZXI6OmZpdHMoZCkpCi0gICAgICAgID8gU2ltcGxlTnVtYmVyOjptYWtlKHN0YXRpY19jYXN0
PGxvbmc+KGQpKQotICAgICAgICA6ICgoIWtub3duVG9CZUludGVnZXIgJiYgS0pTOjppc05hTihk
KSkgPyBOdW1iZXJJbXA6OnN0YXRpY05hTiA6IG5ldyBOdW1iZXJJbXAoZCkpKQoteyB9Ci0KLU51
bWJlcjo6TnVtYmVyKGxvbmcgaW50IGwpCi0gIDogVmFsdWUoU2ltcGxlTnVtYmVyOjpmaXRzKGwp
ID8gU2ltcGxlTnVtYmVyOjptYWtlKGwpIDogbmV3IE51bWJlckltcChzdGF0aWNfY2FzdDxkb3Vi
bGU+KGwpKSkgeyB9Ci0KLU51bWJlcjo6TnVtYmVyKGxvbmcgdW5zaWduZWQgaW50IGwpCi0gIDog
VmFsdWUoU2ltcGxlTnVtYmVyOjpmaXRzKGwpID8gU2ltcGxlTnVtYmVyOjptYWtlKGwpIDogbmV3
IE51bWJlckltcChzdGF0aWNfY2FzdDxkb3VibGU+KGwpKSkgeyB9Ci0KLU51bWJlciBOdW1iZXI6
OmR5bmFtaWNDYXN0KGNvbnN0IFZhbHVlICZ2KQotewotICBpZiAodi5pc051bGwoKSB8fCB2LnR5
cGUoKSAhPSBOdW1iZXJUeXBlKQotICAgIHJldHVybiBOdW1iZXIoKE51bWJlckltcCopMCk7Ci0K
LSAgcmV0dXJuIE51bWJlcihzdGF0aWNfY2FzdDxOdW1iZXJJbXAqPih2LmltcCgpKSk7Ci19Ci0K
LWRvdWJsZSBOdW1iZXI6OnZhbHVlKCkgY29uc3QKLXsKLSAgaWYgKFNpbXBsZU51bWJlcjo6aXMo
cmVwKSkKLSAgICByZXR1cm4gKGRvdWJsZSlTaW1wbGVOdW1iZXI6OnZhbHVlKHJlcCk7Ci0gIGFz
c2VydChyZXApOwotICByZXR1cm4gKChOdW1iZXJJbXAqKXJlcCktPnZhbHVlKCk7Ci19Ci0KLWlu
dCBOdW1iZXI6OmludFZhbHVlKCkgY29uc3QKLXsKLSAgaWYgKFNpbXBsZU51bWJlcjo6aXMocmVw
KSkKLSAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjp2YWx1ZShyZXApOwotICByZXR1cm4gKGludCko
KE51bWJlckltcCopcmVwKS0+dmFsdWUoKTsKLX0KLQotYm9vbCBOdW1iZXI6OmlzTmFOKCkgY29u
c3QKLXsKLSAgcmV0dXJuIHJlcCA9PSBOdW1iZXJJbXA6OnN0YXRpY05hTjsKLX0KLQotYm9vbCBO
dW1iZXI6OmlzSW5mKCkgY29uc3QKLXsKLSAgaWYgKFNpbXBsZU51bWJlcjo6aXMocmVwKSkKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIHJldHVybiBLSlM6OmlzSW5mKCgoTnVtYmVySW1wKilyZXApLT52
YWx1ZSgpKTsKLX0KLQotVmFsdWVJbXAgKnVuZGVmaW5lZCgpCi17Ci0gICAgcmV0dXJuIFVuZGVm
aW5lZEltcDo6c3RhdGljVW5kZWZpbmVkOwotfQotCi1WYWx1ZUltcCAqbnVsbCgpCitPYmplY3RJ
bXAgKkFsbG9jYXRlZFZhbHVlSW1wOjpnZXRPYmplY3QoKQogewotICAgIHJldHVybiBOdWxsSW1w
OjpzdGF0aWNOdWxsOworICAgIHJldHVybiBpc09iamVjdCgpID8gc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KHRoaXMpIDogMDsKIH0KIAotVmFsdWVJbXAgKmJvb2xlYW4oYm9vbCBiKQorY29uc3Qg
T2JqZWN0SW1wICpBbGxvY2F0ZWRWYWx1ZUltcDo6Z2V0T2JqZWN0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYiA/IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29sZWFuSW1wOjpzdGF0aWNGYWxz
ZTsKKyAgICByZXR1cm4gaXNPYmplY3QoKSA/IHN0YXRpY19jYXN0PGNvbnN0IE9iamVjdEltcCAq
Pih0aGlzKSA6IDA7CiB9CiAKLVZhbHVlSW1wICpzdHJpbmcoY29uc3QgY2hhciAqcykKK0FsbG9j
YXRlZFZhbHVlSW1wICpqc1N0cmluZyhjb25zdCBjaGFyICpzKQogewogICAgIHJldHVybiBuZXcg
U3RyaW5nSW1wKHMgPyBzIDogIiIpOwogfQogCi1WYWx1ZUltcCAqc3RyaW5nKGNvbnN0IFVTdHJp
bmcgJnMpCitBbGxvY2F0ZWRWYWx1ZUltcCAqanNTdHJpbmcoY29uc3QgVVN0cmluZyAmcykKIHsK
ICAgICByZXR1cm4gcy5pc051bGwoKSA/IG5ldyBTdHJpbmdJbXAoIiIpIDogbmV3IFN0cmluZ0lt
cChzKTsKIH0KIAotVmFsdWVJbXAgKnplcm8oKQotewotICAgIHJldHVybiBTaW1wbGVOdW1iZXI6
Om1ha2UoMCk7Ci19Ci0KLVZhbHVlSW1wICpvbmUoKQotewotICAgIHJldHVybiBTaW1wbGVOdW1i
ZXI6Om1ha2UoMSk7Ci19Ci0KLVZhbHVlSW1wICp0d28oKQotewotICAgIHJldHVybiBTaW1wbGVO
dW1iZXI6Om1ha2UoMik7Ci19Ci0KLVZhbHVlSW1wICpudW1iZXIoaW50IGkpCitWYWx1ZUltcCAq
anNOdW1iZXIoaW50IGkpCiB7CiAgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6Zml0cyhpKSA/IFNp
bXBsZU51bWJlcjo6bWFrZShpKSA6IG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihp
KSk7CiB9CiAKLVZhbHVlSW1wICpudW1iZXIodW5zaWduZWQgaSkKK1ZhbHVlSW1wICpqc051bWJl
cih1bnNpZ25lZCBpKQogewogICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OmZpdHMoaSkgPyBTaW1w
bGVOdW1iZXI6Om1ha2UoaSkgOiBuZXcgTnVtYmVySW1wKHN0YXRpY19jYXN0PGRvdWJsZT4oaSkp
OwogfQogCi1WYWx1ZUltcCAqbnVtYmVyKGxvbmcgaSkKK1ZhbHVlSW1wICpqc051bWJlcihsb25n
IGkpCiB7CiAgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6Zml0cyhpKSA/IFNpbXBsZU51bWJlcjo6
bWFrZShpKSA6IG5ldyBOdW1iZXJJbXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CiB9CiAKLVZh
bHVlSW1wICpudW1iZXIodW5zaWduZWQgbG9uZyBpKQorVmFsdWVJbXAgKmpzTnVtYmVyKHVuc2ln
bmVkIGxvbmcgaSkKIHsKICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjpmaXRzKGkpID8gU2ltcGxl
TnVtYmVyOjptYWtlKGkpIDogbmV3IE51bWJlckltcChzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsK
IH0KIAotVmFsdWVJbXAgKm51bWJlcihkb3VibGUgZCkKK1ZhbHVlSW1wICpqc051bWJlcihkb3Vi
bGUgZCkKIHsKICAgICByZXR1cm4gU2ltcGxlTnVtYmVyOjpmaXRzKGQpCiAgICAgICAgID8gU2lt
cGxlTnVtYmVyOjptYWtlKHN0YXRpY19jYXN0PGxvbmc+KGQpKQotICAgICAgICA6IChpc05hTihk
KSA/IE51bWJlckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChkKSk7CisgICAgICAgIDog
KGlzTmFOKGQpID8ganNOYU4oKSA6IG5ldyBOdW1iZXJJbXAoZCkpOwogfQogCi1WYWx1ZUltcCAq
bnVtYmVyKGRvdWJsZSBkLCBib29sIGtub3duVG9CZUludGVnZXIpCitWYWx1ZUltcCAqanNOdW1i
ZXIoZG91YmxlIGQsIGJvb2wga25vd25Ub0JlSW50ZWdlcikKIHsKICAgICByZXR1cm4gKGtub3du
VG9CZUludGVnZXIgPyBTaW1wbGVOdW1iZXI6OmludGVnZXJGaXRzKGQpIDogU2ltcGxlTnVtYmVy
OjpmaXRzKGQpKQogICAgICAgICA/IFNpbXBsZU51bWJlcjo6bWFrZShzdGF0aWNfY2FzdDxsb25n
PihkKSkKLSAgICAgICAgOiAoKCFrbm93blRvQmVJbnRlZ2VyICYmIGlzTmFOKGQpKSA/IE51bWJl
ckltcDo6c3RhdGljTmFOIDogbmV3IE51bWJlckltcChkKSk7CisgICAgICAgIDogKCgha25vd25U
b0JlSW50ZWdlciAmJiBpc05hTihkKSkgPyBqc05hTigpIDogbmV3IE51bWJlckltcChkKSk7Cit9
CisKK3ZvaWQgQ29uc3RhbnRWYWx1ZXM6OmluaXQoKQoreworICAgIHVuZGVmaW5lZCA9IG5ldyBV
bmRlZmluZWRJbXAoKTsKKyAgICBudWxsID0gbmV3IE51bGxJbXAoKTsKKyAgICBqc1RydWUgPSBu
ZXcgQm9vbGVhbkltcCh0cnVlKTsKKyAgICBqc0ZhbHNlID0gbmV3IEJvb2xlYW5JbXAoZmFsc2Up
OworICAgIE5hTiA9IG5ldyBOdW1iZXJJbXAoOjpLSlM6Ok5hTik7Cit9CisKK3ZvaWQgQ29uc3Rh
bnRWYWx1ZXM6OmNsZWFyKCkKK3sKKyAgICB1bmRlZmluZWQgPSBOVUxMOworICAgIG51bGwgPSBO
VUxMOworICAgIGpzVHJ1ZSA9IE5VTEw7CisgICAganNGYWxzZSA9IE5VTEw7CisgICAgTmFOID0g
TlVMTDsKK30KKwordm9pZCBDb25zdGFudFZhbHVlczo6bWFyaygpCit7CisgICAgaWYgKEFsbG9j
YXRlZFZhbHVlSW1wICp2ID0gdW5kZWZpbmVkKQorICAgICAgICBpZiAoIXYtPm1hcmtlZCgpKQor
ICAgICAgICAgICAgdi0+bWFyaygpOworICAgIGlmIChBbGxvY2F0ZWRWYWx1ZUltcCAqdiA9IG51
bGwpCisgICAgICAgIGlmICghdi0+bWFya2VkKCkpCisgICAgICAgICAgICB2LT5tYXJrKCk7Cisg
ICAgaWYgKEFsbG9jYXRlZFZhbHVlSW1wICp2ID0ganNUcnVlKQorICAgICAgICBpZiAoIXYtPm1h
cmtlZCgpKQorICAgICAgICAgICAgdi0+bWFyaygpOworICAgIGlmIChBbGxvY2F0ZWRWYWx1ZUlt
cCAqdiA9IGpzRmFsc2UpCisgICAgICAgIGlmICghdi0+bWFya2VkKCkpCisgICAgICAgICAgICB2
LT5tYXJrKCk7CisgICAgaWYgKEFsbG9jYXRlZFZhbHVlSW1wICp2ID0gTmFOKQorICAgICAgICBp
ZiAoIXYtPm1hcmtlZCgpKQorICAgICAgICAgICAgdi0+bWFyaygpOwogfQogCiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
SmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlm
ZiAtcCAtdSAtcjEuMzIgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy92YWx1ZS5oCTE0IEp1bCAyMDA1IDE4OjI3OjA0IC0wMDAwCTEuMzIKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy92YWx1ZS5oCTggQXVnIDIwMDUgMDE6MDE6MDAgLTAwMDAKQEAgLTEsOSAr
MSw4IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgogICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIxLDggQEAKICAqCiAgKi8KIAot
I2lmbmRlZiBfS0pTX1ZBTFVFX0hfCi0jZGVmaW5lIF9LSlNfVkFMVUVfSF8KKyNpZm5kZWYgS0pT
X1ZBTFVFX0gKKyNkZWZpbmUgS0pTX1ZBTFVFX0gKIAogI2lmbmRlZiBOREVCVUcgLy8gcHJvdGVj
dGlvbiBhZ2FpbnN0IHByb2JsZW1zIGlmIGNvbW1pdHRpbmcgd2l0aCBLSlNfVkVSQk9TRSBvbgog
CkBAIC0zNCw0MyArMzMsMjEgQEAKIAogI2VuZGlmCiAKLSNpbmNsdWRlIDxzdGRsaWIuaD4gLy8g
TmVlZGVkIGZvciBzaXplX3QKLQotI2luY2x1ZGUgInVzdHJpbmcuaCIKLQorI2luY2x1ZGUgPGFz
c2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPiAvLyBmb3Igc2l6ZV90CiAjaW5jbHVkZSAic2lt
cGxlX251bWJlci5oIgotCi0vLyBQcmltaXRpdmUgZGF0YSB0eXBlcworI2luY2x1ZGUgInVzdHJp
bmcuaCIKIAogbmFtZXNwYWNlIEtKUyB7CiAKLSAgY2xhc3MgVmFsdWU7Ci0gIGNsYXNzIFZhbHVl
SW1wOwotICBjbGFzcyBWYWx1ZUltcFByaXZhdGU7Ci0gIGNsYXNzIFVuZGVmaW5lZDsKLSAgY2xh
c3MgVW5kZWZpbmVkSW1wOwotICBjbGFzcyBOdWxsOwotICBjbGFzcyBOdWxsSW1wOwotICBjbGFz
cyBCb29sZWFuOwotICBjbGFzcyBCb29sZWFuSW1wOwotICBjbGFzcyBTdHJpbmc7Ci0gIGNsYXNz
IFN0cmluZ0ltcDsKLSAgY2xhc3MgTnVtYmVyOwotICBjbGFzcyBOdW1iZXJJbXA7Ci0gIGNsYXNz
IE9iamVjdDsKLSAgY2xhc3MgT2JqZWN0SW1wOwotICBjbGFzcyBSZWZlcmVuY2U7Ci0gIGNsYXNz
IFJlZmVyZW5jZUltcDsKLSAgY2xhc3MgTGlzdDsKLSAgY2xhc3MgTGlzdEltcDsKLSAgY2xhc3Mg
Q29tcGxldGlvbjsKLSAgY2xhc3MgRXhlY1N0YXRlOwotICBjbGFzcyBDbGFzc0luZm87Ci0KLSAg
LyoqCi0gICAqIFByaW1pdGl2ZSB0eXBlcwotICAgKi8KLSAgZW51bSBUeXBlIHsKK2NsYXNzIENs
YXNzSW5mbzsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIE9iamVjdEltcDsKKworLyoqCisgKiBQ
cmltaXRpdmUgdHlwZXMKKyAqLworZW51bSBUeXBlIHsKICAgICBVbnNwZWNpZmllZFR5cGUgICA9
IDAsCiAgICAgVW5kZWZpbmVkVHlwZSAgICAgPSAxLAogICAgIE51bGxUeXBlICAgICAgICAgID0g
MiwKQEAgLTc4LDQzMSArNTUsNDA0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFN0cmluZ1R5cGUg
ICAgICAgID0gNCwKICAgICBOdW1iZXJUeXBlICAgICAgICA9IDUsCiAgICAgT2JqZWN0VHlwZSAg
ICAgICAgPSA2Ci0gIH07Cit9OwogCi0gIC8qKgotICAgKiBWYWx1ZUltcCBpcyB0aGUgYmFzZSB0
eXBlIGZvciBhbGwgcHJpbWl0aXZlcyAoVW5kZWZpbmVkLCBOdWxsLCBCb29sZWFuLAotICAgKiBT
dHJpbmcsIE51bWJlcikgYW5kIG9iamVjdHMgaW4gRUNNQVNjcmlwdC4KLSAgICoKLSAgICogTm90
ZTogeW91IHNob3VsZCBuZXZlciBpbmhlcml0IGZyb20gVmFsdWVJbXAgYXMgaXQgaXMgZm9yIHBy
aW1pdGl2ZSB0eXBlcwotICAgKiBvbmx5IChhbGwgb2Ygd2hpY2ggYXJlIHByb3ZpZGVkIGludGVy
bmFsbHkgYnkgS0pTKS4gSW5zdGVhZCwgaW5oZXJpdCBmcm9tCi0gICAqIE9iamVjdEltcC4KLSAg
ICovCi0gIGNsYXNzIFZhbHVlSW1wIHsKLSAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9yOwotICAg
IGZyaWVuZCBjbGFzcyBWYWx1ZTsKLSAgICBmcmllbmQgY2xhc3MgQ29udGV4dEltcDsKLSAgICBm
cmllbmQgY2xhc3MgRnVuY3Rpb25DYWxsTm9kZTsKLSAgcHVibGljOgotICAgIFZhbHVlSW1wKCkg
OiBfbWFya2VkKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFsIH5WYWx1ZUltcCgpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICBib29sIG1hcmtlZCgpIGNvbnN0OwotICAgIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3QpOwotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKTsK
Ky8qKgorICogVmFsdWVJbXAgaXMgdGhlIGJhc2UgdHlwZSBmb3IgYWxsIHByaW1pdGl2ZXMgKFVu
ZGVmaW5lZCwgTnVsbCwgQm9vbGVhbiwKKyAqIFN0cmluZywgTnVtYmVyKSBhbmQgb2JqZWN0cyBp
biBFQ01BU2NyaXB0LgorICoKKyAqIE5vdGU6IHlvdSBzaG91bGQgbmV2ZXIgaW5oZXJpdCBmcm9t
IFZhbHVlSW1wIGFzIGl0IGlzIGZvciBwcmltaXRpdmUgdHlwZXMKKyAqIG9ubHkgKGFsbCBvZiB3
aGljaCBhcmUgcHJvdmlkZWQgaW50ZXJuYWxseSBieSBLSlMpLiBJbnN0ZWFkLCBpbmhlcml0IGZy
b20KKyAqIE9iamVjdEltcC4KKyAqLworY2xhc3MgVmFsdWVJbXAgeworICAgIGZyaWVuZCBjbGFz
cyBBbGxvY2F0ZWRWYWx1ZUltcDsgLy8gc28gaXQgY2FuIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3MK
KyAgICBmcmllbmQgY2xhc3MgUHJvdGVjdGVkVmFsdWVzOyAvLyBzbyBpdCBjYW4gY2FsbCBkb3du
Y2FzdCgpCisKK3ByaXZhdGU6CisgICAgVmFsdWVJbXAoKTsKKyAgICB+VmFsdWVJbXAoKTsKKwor
cHVibGljOgorICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0
OworICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0
OworICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBjb25zdDsKKyAgICBib29sIGlzQm9vbGVh
bigpIGNvbnN0OworICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKKyAgICBib29sIGlzU3RyaW5n
KCkgY29uc3Q7CisgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNPYmplY3Qo
Y29uc3QgQ2xhc3NJbmZvICopIGNvbnN0OworCisgICAgLy8gRXh0cmFjdGluZyB0aGUgdmFsdWUu
CisgICAgYm9vbCBnZXRCb29sZWFuKGJvb2wmKSBjb25zdDsKKyAgICBib29sIGdldE51bWJlcihk
b3VibGUmKSBjb25zdDsKKyAgICBkb3VibGUgZ2V0TnVtYmVyKCkgY29uc3Q7IC8vIE5hTiBpZiBu
b3QgYSBudW1iZXIKKyAgICBib29sIGdldFN0cmluZyhVU3RyaW5nJikgY29uc3Q7CisgICAgVVN0
cmluZyBnZXRTdHJpbmcoKSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90IGEgc3RyaW5nCisg
ICAgT2JqZWN0SW1wICpnZXRPYmplY3QoKTsgLy8gTlVMTCBpZiBub3QgYW4gb2JqZWN0CisgICAg
Y29uc3QgT2JqZWN0SW1wICpnZXRPYmplY3QoKSBjb25zdDsgLy8gTlVMTCBpZiBub3QgYW4gb2Jq
ZWN0CisKKyAgICAvLyBFeHRyYWN0aW5nIGludGVnZXIgdmFsdWVzLgorICAgIGJvb2wgZ2V0VUlu
dDMyKHVpbnQzMl90JikgY29uc3Q7CisKKyAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KKyAgICBW
YWx1ZUltcCAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZFR5cGUg
PSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OworICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAq
ZXhlYykgY29uc3Q7CisgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
CisgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYywgYm9vbCYga25vd25Ub0JlSW50
ZWdlcikgY29uc3Q7CisgICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OworICAgIE9iamVjdEltcCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKIAorICAg
IC8vIEludGVnZXIgY29udmVyc2lvbnMuCiAgICAgZG91YmxlIHRvSW50ZWdlcihFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0OwogICAgIGludDMyX3QgdG9JbnQzMihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwogICAgIHVpbnQzMl90IHRvVUludDMyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdWlu
dDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKIAotICAgIC8vIERpc3BhdGNo
IHdyYXBwZXJzIHRoYXQgaGFuZGxlIHRoZSBzcGVjaWFsIHNtYWxsIG51bWJlciBjYXNlCi0KLSAg
ICBUeXBlIGRpc3BhdGNoVHlwZSgpIGNvbnN0OwotICAgIFZhbHVlIGRpc3BhdGNoVG9QcmltaXRp
dmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5cGUp
IGNvbnN0OwotICAgIGJvb2wgZGlzcGF0Y2hUb0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25z
dDsKLSAgICBkb3VibGUgZGlzcGF0Y2hUb051bWJlcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Owot
ICAgIGRvdWJsZSBkaXNwYXRjaFRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYywgYm9vbCAma25vd25U
b0JlSW50ZWdlcikgY29uc3Q7Ci0gICAgVVN0cmluZyBkaXNwYXRjaFRvU3RyaW5nKEV4ZWNTdGF0
ZSAqZXhlYykgY29uc3Q7Ci0gICAgYm9vbCBkaXNwYXRjaFRvVUludDMyKHVpbnQzMl90JikgY29u
c3Q7Ci0gICAgT2JqZWN0IGRpc3BhdGNoVG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsK
LQotICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdCB7IHJldHVybiBkaXNwYXRjaFR5cGUoKSA9
PSBVbmRlZmluZWRUeXBlOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBkaXNw
YXRjaFR5cGUoKSA9PSBOdWxsVHlwZTsgfQotICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBj
b25zdDsKLQotICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gZGlzcGF0Y2hUeXBl
KCkgPT0gQm9vbGVhblR5cGU7IH0KLSAgICBib29sIGlzQm9vbGVhbihib29sICZib29sZWFuVmFs
dWUpIGNvbnN0OworICAgIC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICB2b2lkIG1hcmsoKTsK
KyAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCi0gICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsg
cmV0dXJuIGRpc3BhdGNoVHlwZSgpID09IE51bWJlclR5cGU7IH0KLSAgICBib29sIGlzTnVtYmVy
KGRvdWJsZSAmbnVtZXJpY1ZhbHVlKSBjb25zdDsKK3ByaXZhdGU6CisgICAgLy8gSW1wbGVtZW50
YXRpb24gZGV0YWlscy4KKyAgICBBbGxvY2F0ZWRWYWx1ZUltcCAqZG93bmNhc3QoKTsKKyAgICBj
b25zdCBBbGxvY2F0ZWRWYWx1ZUltcCAqZG93bmNhc3QoKSBjb25zdDsKIAotICAgIGJvb2wgaXNT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBkaXNwYXRjaFR5cGUoKSA9PSBTdHJpbmdUeXBlOyB9Ci0g
ICAgYm9vbCBpc1N0cmluZyhVU3RyaW5nICZzdHJpbmdWYWx1ZSkgY29uc3Q7Ci0gICAgVVN0cmlu
ZyBhc1N0cmluZygpIGNvbnN0OyAvLyBudWxsIHN0cmluZyBpZiBub3QgYSBzdHJpbmcKLQotICAg
IGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiBkaXNwYXRjaFR5cGUoKSA9PSBPYmplY3RU
eXBlOyB9Ci0gICAgYm9vbCBpc09iamVjdChPYmplY3RJbXAgKiZvYmplY3QpOwotICAgIE9iamVj
dEltcCAqYXNPYmplY3QoKTsgLy8gMCBpZiBub3QgYW4gb2JqZWN0Ci0gICAgYm9vbCBpc09iamVj
dChjb25zdCBDbGFzc0luZm8gKikgY29uc3Q7IC8vIGNvbWJpbmUgYW4gaXNPYmplY3QgY2hlY2sg
d2l0aCBhbiBpbmhlcml0cyBjaGVjaworICAgIC8vIEdpdmUgYSBjb21waWxlIHRpbWUgZXJyb3Ig
aWYgd2UgdHJ5IHRvIGNvcHkgb25lIG9mIHRoZXNlLgorICAgIFZhbHVlSW1wKGNvbnN0IFZhbHVl
SW1wJik7CisgICAgVmFsdWVJbXAmIG9wZXJhdG9yPShjb25zdCBWYWx1ZUltcCYpOworfTsKIAot
ICBwcml2YXRlOgorY2xhc3MgQWxsb2NhdGVkVmFsdWVJbXAgOiBwdWJsaWMgVmFsdWVJbXAgewor
ICAgIGZyaWVuZCBjbGFzcyBDb2xsZWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIFVuZGVmaW5lZElt
cDsKKyAgICBmcmllbmQgY2xhc3MgTnVsbEltcDsKKyAgICBmcmllbmQgY2xhc3MgQm9vbGVhbklt
cDsKKyAgICBmcmllbmQgY2xhc3MgTnVtYmVySW1wOworICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdJ
bXA7CisgICAgZnJpZW5kIGNsYXNzIE9iamVjdEltcDsKK3ByaXZhdGU6CisgICAgQWxsb2NhdGVk
VmFsdWVJbXAoKTsKKyAgICB2aXJ0dWFsIH5BbGxvY2F0ZWRWYWx1ZUltcCgpOworcHVibGljOgor
ICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qg
PSAwOworICAgIGJvb2wgaXNCb29sZWFuKCkgY29uc3Q7CisgICAgYm9vbCBpc051bWJlcigpIGNv
bnN0OworICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKyAgICBib29sIGlzT2JqZWN0KCkgY29u
c3Q7CisgICAgYm9vbCBpc09iamVjdChjb25zdCBDbGFzc0luZm8gKikgY29uc3Q7CisKKyAgICAv
LyBFeHRyYWN0aW5nIHRoZSB2YWx1ZS4KKyAgICBib29sIGdldEJvb2xlYW4oYm9vbCYpIGNvbnN0
OworICAgIGJvb2wgZ2V0TnVtYmVyKGRvdWJsZSYpIGNvbnN0OworICAgIGRvdWJsZSBnZXROdW1i
ZXIoKSBjb25zdDsgLy8gTmFOIGlmIG5vdCBhIG51bWJlcgorICAgIGJvb2wgZ2V0U3RyaW5nKFVT
dHJpbmcmKSBjb25zdDsKKyAgICBVU3RyaW5nIGdldFN0cmluZygpIGNvbnN0OyAvLyBudWxsIHN0
cmluZyBpZiBub3QgYSBzdHJpbmcKKyAgICBPYmplY3RJbXAgKmdldE9iamVjdCgpOyAvLyBOVUxM
IGlmIG5vdCBhbiBvYmplY3QKKyAgICBjb25zdCBPYmplY3RJbXAgKmdldE9iamVjdCgpIGNvbnN0
OyAvLyBOVUxMIGlmIG5vdCBhbiBvYmplY3QKIAotICAgIC8vIFRoZSBjb252ZXJzaW9uIG9wZXJh
dGlvbnMKKyAgICAvLyBFeHRyYWN0aW5nIGludGVnZXIgdmFsdWVzLgorICAgIHZpcnR1YWwgYm9v
bCBnZXRVSW50MzIodWludDMyX3QmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgVmFsdWUgdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZFR5cGUgPSBVbnNwZWNpZmllZFR5
cGUpIGNvbnN0ID0gMDsKKyAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KKyAgICB2aXJ0dWFsIFZh
bHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSA9
IFVuc3BlY2lmaWVkVHlwZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4o
RXhlY1N0YXRlICpleGVjKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIo
RXhlY1N0YXRlICpleGVjKSBjb25zdCA9IDA7CisgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0
ZSAqZXhlYywgYm9vbCYga25vd25Ub0JlSW50ZWdlcikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3Ry
aW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgT2Jq
ZWN0IHRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB0b1VJbnQzMih1bnNpZ25lZCYpIGNvbnN0OworICAgIHZpcnR1YWwgT2JqZWN0SW1wICp0b09i
amVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0ID0gMDsKIAotICAgIGJvb2wgX21hcmtlZDsKKyAg
ICAvLyBHYXJiYWdlIGNvbGxlY3Rpb24uCisgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7
CisgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICBib29sIG1hcmtlZCgpIGNvbnN0OwogCi0g
ICAgLy8gR2l2ZSBhIGNvbXBpbGUgdGltZSBlcnJvciBpZiB3ZSB0cnkgdG8gY29weSBvbmUgb2Yg
dGhlc2UuCi0gICAgVmFsdWVJbXAoY29uc3QgVmFsdWVJbXAmKTsKLSAgICBWYWx1ZUltcCYgb3Bl
cmF0b3I9KGNvbnN0IFZhbHVlSW1wJik7Ci0gIH07Ci0gIAotICBWYWx1ZUltcCAqdW5kZWZpbmVk
KCk7Ci0gIFZhbHVlSW1wICpudWxsKCk7Ci0KLSAgVmFsdWVJbXAgKmJvb2xlYW4oYm9vbCA9IGZh
bHNlKTsKLQotICBWYWx1ZUltcCAqc3RyaW5nKGNvbnN0IGNoYXIgKiA9ICIiKTsgLy8gcmV0dXJu
cyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIDAKLSAgVmFsdWVJbXAgKnN0cmluZyhjb25zdCBVU3Ry
aW5nICYpOyAvLyByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBwYXNzZWQgbnVsbCBzdHJpbmcKLQot
ICBWYWx1ZUltcCAqemVybygpOwotICBWYWx1ZUltcCAqb25lKCk7Ci0gIFZhbHVlSW1wICp0d28o
KTsKLSAgVmFsdWVJbXAgKm51bWJlcihpbnQpOwotICBWYWx1ZUltcCAqbnVtYmVyKHVuc2lnbmVk
KTsKLSAgVmFsdWVJbXAgKm51bWJlcihsb25nKTsKLSAgVmFsdWVJbXAgKm51bWJlcih1bnNpZ25l
ZCBsb25nKTsKLSAgVmFsdWVJbXAgKm51bWJlcihkb3VibGUpOwotICBWYWx1ZUltcCAqbnVtYmVy
KGRvdWJsZSwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKTsKLQotICAvKioKLSAgICogRklYTUU6IE5v
dyB0aGF0IHdlIGhhdmUgY29uc2VydmF0aXZlIEdDLCB3ZSB3aWxsIGJlIGRlcHJlY2F0aW5nIHRo
ZQotICAgKiBWYWx1ZSB3cmFwcGVycyBhbmQgcHJvZ3JhbW1pbmcgaW4gdGVybXMgb2YgdGhlIFZh
bHVlSW1wIG9iamVjdHMuCi0gICAqIEV2ZW50dWFsbHkgd2Ugd2lsbCByZW1vdmUgVmFsdWUgYW5k
IHJlbmFtZSBWYWx1ZUltcCB0byBWYWx1ZS4KLSAgICogV2UnbGwgbmVlZCB0byBtb3ZlIHRoZSBj
b21tZW50cyBmcm9tIFZhbHVlIHRvIFZhbHVlSW1wIHRvby4KLSAgICovCi0gIC8qKgotICAgKiBW
YWx1ZSBvYmplY3RzIGFyZSBhY3QgYXMgd3JhcHBlcnMgKCJzbWFydCBwb2ludGVycyIpIGFyb3Vu
ZCBWYWx1ZUltcAotICAgKiBvYmplY3RzIGFuZCB0aGVpciBkZXNjZW5kZW50cy4gSW5zdGVhZCBv
ZiB1c2luZyBWYWx1ZUltcHMKLSAgICogKGFuZCBkZXJpdmF0aXZlcykgZHVyaW5nIG5vcm1hbCBw
cm9ncmFtIGV4ZWN1dGlvbiwgeW91IHNob3VsZCB1c2UgYQotICAgKiBWYWx1ZS1kZXJpdmVkIGNs
YXNzLgotICAgKgotICAgKiBWYWx1ZSBtYWludGFpbnMgYSBwb2ludGVyIHRvIGEgVmFsdWVJbXAg
b2JqZWN0IGFuZCB1c2VzIGEgcmVmZXJlbmNlCi0gICAqIGNvdW50aW5nIHNjaGVtZSB0byBlbnN1
cmUgdGhhdCB0aGUgVmFsdWVJbXAgb2JqZWN0IGlzIG5vdCBkZWxldGVkIG9yCi0gICAqIGdhcmJh
Z2UgY29sbGVjdGVkLgotICAgKgotICAgKiBOb3RlOiBUaGUgY29udmVyc2lvbiBvcGVyYXRpb25z
IGFsbCByZXR1cm4gdmFsdWVzIG9mIHZhcmlvdXMgdHlwZXMgLQotICAgKiBpZiBhbiBlcnJvciBv
Y2N1cnMgZHVyaW5nIGNvbnZlcnNpb24sIGFuIGVycm9yIG9iamVjdCB3aWxsIGluc3RlYWQKLSAg
ICogYmUgcmV0dXJuZWQgKHdoZXJlIHBvc3NpYmxlKSwgYW5kIHRoZSBleGVjdXRpb24gc3RhdGUn
cyBleGNlcHRpb24KLSAgICogd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KLSAgICovCi0gIGNs
YXNzIFZhbHVlIHsKLSAgcHVibGljOgotICAgIFZhbHVlKCkgOiByZXAoMCkgeyB9Ci0gICAgVmFs
dWUoVmFsdWVJbXAgKnYpIDogcmVwKHYpIHsgfQotICAgIG9wZXJhdG9yIFZhbHVlSW1wICooKSBj
b25zdCB7IHJldHVybiByZXA7IH0KLQotICAgIGV4cGxpY2l0IFZhbHVlKGJvb2wpOwotCi0gICAg
ZXhwbGljaXQgVmFsdWUoaW50KTsKLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCk7Ci0gICAg
ZXhwbGljaXQgVmFsdWUoZG91YmxlKTsKLSAgICBleHBsaWNpdCBWYWx1ZShsb25nKTsKLSAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBsb25nKTsKLSAgICBWYWx1ZShkb3VibGUsIGJvb2wga25v
d25Ub0JlSW50ZWdlcik7Ci0KLSAgICBleHBsaWNpdCBWYWx1ZShjb25zdCBjaGFyICopOwotICAg
IFZhbHVlKGNvbnN0IFVTdHJpbmcgJik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB3
aGV0aGVyIG9yIG5vdCB0aGlzIGlzIGEgdmFsaWQgdmFsdWUuIEFuIGludmFsaWQgdmFsdWUKLSAg
ICAgKiBoYXMgYSAwIGltcGxlbWVudGF0aW9uIHBvaW50ZXIgYW5kIHNob3VsZCBub3QgYmUgdXNl
ZCBmb3IKLSAgICAgKiBhbnkgb3RoZXIgb3BlcmF0aW9uIHRoYW4gdGhpcyBjaGVjay4gQ3VycmVu
dCB1c2U6IGFzIGEKLSAgICAgKiBkaXN0aW5jdCByZXR1cm4gdmFsdWUgc2lnbmFsbGluZyBmYWls
aW5nIGR5bmFtaWNDYXN0KCkgY2FsbHMuCi0gICAgICovCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gcmVwICE9IDA7IH0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZAotICAg
ICAqIFVzZSAhaXNWYWxpZCgpIGluc3RlYWQuCi0gICAgICovCi0gICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiByZXAgPT0gMDsgfQotICAgIFZhbHVlSW1wICppbXAoKSBjb25zdCB7IHJl
dHVybiByZXA7IH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdmFsdWUu
IFRoaXMgaXMgb25lIG9mIFVuZGVmaW5lZFR5cGUsIE51bGxUeXBlLAotICAgICAqIEJvb2xlYW5U
eXBlLCBTdHJpbmdUeXBlLCBOdW1iZXJUeXBlLCBvciBPYmplY3RUeXBlLgotICAgICAqCi0gICAg
ICogQHJldHVybiBUaGUgdHlwZSBvZiB2YWx1ZQotICAgICAqLwotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hUeXBlKCk7IH0KLQotICAgIC8qKgotICAgICAqIENo
ZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgaXMgb2YgYSBwYXJ0aWN1bGFyIHRweWUKLSAg
ICAgKgotICAgICAqIEBwYXJhbSB0IFRoZSB0eXBlIHRvIGNvbXBhcmUgd2l0aAotICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBvdGhlcndp
c2UgZmFsc2UKLSAgICAgKi8KLSAgICBib29sIGlzQShUeXBlIHQpIGNvbnN0IHsgcmV0dXJuIHJl
cC0+ZGlzcGF0Y2hUeXBlKCkgPT0gdDsgfQotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgdGhl
IFRvUHJpbWl0aXZlIHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2YWx1ZQotICAg
ICAqIChFQ01BIDkuMSkKLSAgICAgKi8KLSAgICBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUg
KmV4ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgVHlwZSBwcmVmZXJyZWRUeXBlID0gVW5zcGVj
aWZpZWRUeXBlKSBjb25zdAotICAgICAgeyByZXR1cm4gcmVwLT5kaXNwYXRjaFRvUHJpbWl0aXZl
KGV4ZWMsIHByZWZlcnJlZFR5cGUpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyB0aGUg
VG9Cb29sZWFuIHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2YWx1ZSAoRUNNQSA5
LjIpCi0gICAgICovCi0gICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdCB7
IHJldHVybiByZXAtPmRpc3BhdGNoVG9Cb29sZWFuKGV4ZWMpOyB9Ci0KLSAgICAvKioKLSAgICAg
KiBQZXJmb3JtcyB0aGUgVG9OdW1iZXIgdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlz
IHZhbHVlIChFQ01BIDkuMykKLSAgICAgKi8KLSAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRl
ICpleGVjKSBjb25zdCB7IHJldHVybiByZXAtPmRpc3BhdGNoVG9OdW1iZXIoZXhlYyk7IH0KLSAg
ICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjLCBib29sICZrbm93blRvQmVJbnRlZ2Vy
KSBjb25zdCB7IHJldHVybiByZXAtPmRpc3BhdGNoVG9OdW1iZXIoZXhlYywga25vd25Ub0JlSW50
ZWdlcik7IH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHRoZSBUb0ludGVnZXIgdHlwZSBj
b252ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlzIHZhbHVlIChFQ01BIDkuNCkKLSAgICAgKi8KLSAg
ICBkb3VibGUgdG9JbnRlZ2VyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyByZXR1cm4gcmVwLT50
b0ludGVnZXIoZXhlYyk7IH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHRoZSBUb0ludDMy
IHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2YWx1ZSAoRUNNQSA5LjUpCi0gICAg
ICovCi0gICAgaW50MzJfdCB0b0ludDMyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyByZXR1cm4g
cmVwLT50b0ludDMyKGV4ZWMpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyB0aGUgVG9V
aW50MzIgdHlwZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBvbiB0aGlzIHZhbHVlIChFQ01BIDkuNikK
LSAgICAgKi8KLSAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsg
cmV0dXJuIHJlcC0+dG9VSW50MzIoZXhlYyk7IH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1z
IHRoZSBUb1VpbnQxNiB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUgKEVD
TUEgOS43KQotICAgICAqLwotICAgIHVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSAqZXhlYykg
Y29uc3QgeyByZXR1cm4gcmVwLT50b1VJbnQxNihleGVjKTsgfQotCi0gICAgLyoqCi0gICAgICog
UGVyZm9ybXMgdGhlIFRvU3RyaW5nIHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2
YWx1ZSAoRUNNQSA5LjgpCi0gICAgICovCi0gICAgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0IHsgcmV0dXJuIHJlcC0+ZGlzcGF0Y2hUb1N0cmluZyhleGVjKTsgfQotCi0g
ICAgLyoqCi0gICAgICogUGVyZm9ybXMgdGhlIFRvT2JqZWN0IHR5cGUgY29udmVyc2lvbiBvcGVy
YXRpb24gb24gdGhpcyB2YWx1ZSAoRUNNQSA5LjkpCi0gICAgICovCi0gICAgT2JqZWN0IHRvT2Jq
ZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYg
d2UgY2FuIGRvIGEgbG9zc2xlc3MgY29udmVyc2lvbiB0byBVSW50MzIuCi0gICAgICovCi0gICAg
Ym9vbCB0b1VJbnQzMih1aW50MzJfdCYgaSkgY29uc3QgeyByZXR1cm4gcmVwLT5kaXNwYXRjaFRv
VUludDMyKGkpOyB9Ci0KLSAgcHJvdGVjdGVkOgotICAgIFZhbHVlSW1wICpyZXA7Ci0gIH07Ci0K
LSAgLy8gUHJpbWl0aXZlIHR5cGVzCi0KLSAgLyoqCi0gICAqIFJlcHJlc2VudHMgYW4gcHJpbWl0
aXZlIFVuZGVmaW5lZCB2YWx1ZS4gQWxsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzCi0gICAqIHNo
YXJlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIG9iamVjdCwgc28gPT0gd2lsbCBhbHdheXMgcmV0
dXJuIHRydWUKLSAgICogZm9yIGFueSBjb21wYXJpc29uIGJldHdlZW4gdHdvIFVuZGVmaW5lZCBv
YmplY3RzLgotICAgKi8KLSAgY2xhc3MgVW5kZWZpbmVkIDogcHVibGljIFZhbHVlIHsKLSAgcHVi
bGljOgotICAgIFVuZGVmaW5lZCgpOwotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgYSBWYWx1
ZSBpbnRvIGFuIFVuZGVmaW5lZC4gSWYgdGhlIHZhbHVlJ3MgdHlwZSBpcyBub3QKLSAgICAgKiBV
bmRlZmluZWRUeXBlLCBhIG51bGwgb2JqZWN0IHdpbGwgYmUgcmV0dXJuZWQgKGkuZS4gb25lIHdp
dGggaXQncwotICAgICAqIGludGVybmFsIHBvaW50ZXIgc2V0IHRvIDApLiBJZiB5b3UgZG8gbm90
IGtub3cgZm9yIHN1cmUgd2hldGhlciB0aGUKLSAgICAgKiB2YWx1ZSBpcyBvZiB0eXBlIFVuZGVm
aW5lZFR5cGUsIHlvdSBzaG91bGQgY2hlY2sgdGhlIGlzVmFsaWQoKQotICAgICAqIG1ldGhvZHMg
YWZ0ZXJ3YXJkcyBiZWZvcmUgY2FsbGluZyBhbnkgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgdmFs
dWUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gVW5k
ZWZpbmVkCi0gICAgICovCi0gICAgc3RhdGljIFVuZGVmaW5lZCBkeW5hbWljQ2FzdChjb25zdCBW
YWx1ZSAmdik7Ci0gIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFVuZGVmaW5lZEltcDsKLSAg
ICBleHBsaWNpdCBVbmRlZmluZWQoVW5kZWZpbmVkSW1wICp2KTsKK3ByaXZhdGU6CisgICAgYm9v
bCBtX21hcmtlZDsKK307CisKK0FsbG9jYXRlZFZhbHVlSW1wICpqc1VuZGVmaW5lZCgpOworQWxs
b2NhdGVkVmFsdWVJbXAgKmpzTnVsbCgpOworCitBbGxvY2F0ZWRWYWx1ZUltcCAqanNCb29sZWFu
KGJvb2wgPSBmYWxzZSk7CisKK1ZhbHVlSW1wICpqc051bWJlcihkb3VibGUpOworVmFsdWVJbXAg
KmpzTnVtYmVyKGRvdWJsZSwgYm9vbCBrbm93blRvQmVJbnRlZ2VyKTsKK0FsbG9jYXRlZFZhbHVl
SW1wICpqc05hTigpOworVmFsdWVJbXAgKmpzWmVybygpOworVmFsdWVJbXAgKmpzT25lKCk7CitW
YWx1ZUltcCAqanNUd28oKTsKK1ZhbHVlSW1wICpqc051bWJlcihpbnQpOworVmFsdWVJbXAgKmpz
TnVtYmVyKHVuc2lnbmVkKTsKK1ZhbHVlSW1wICpqc051bWJlcihsb25nKTsKK1ZhbHVlSW1wICpq
c051bWJlcih1bnNpZ25lZCBsb25nKTsKKworQWxsb2NhdGVkVmFsdWVJbXAgKmpzU3RyaW5nKGNv
bnN0IFVTdHJpbmcgJik7IC8vIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIHBhc3NlZCBudWxsIHN0
cmluZworQWxsb2NhdGVkVmFsdWVJbXAgKmpzU3RyaW5nKGNvbnN0IGNoYXIgKiA9ICIiKTsgLy8g
cmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgcGFzc2VkIDAKKworZXh0ZXJuIGNvbnN0IGRvdWJsZSBO
YU47CitleHRlcm4gY29uc3QgZG91YmxlIEluZjsKKworY2xhc3MgQ29uc3RhbnRWYWx1ZXMgewor
cHVibGljOgorICAgIHN0YXRpYyBBbGxvY2F0ZWRWYWx1ZUltcCAqdW5kZWZpbmVkOworICAgIHN0
YXRpYyBBbGxvY2F0ZWRWYWx1ZUltcCAqbnVsbDsKKyAgICBzdGF0aWMgQWxsb2NhdGVkVmFsdWVJ
bXAgKmpzRmFsc2U7CisgICAgc3RhdGljIEFsbG9jYXRlZFZhbHVlSW1wICpqc1RydWU7CisgICAg
c3RhdGljIEFsbG9jYXRlZFZhbHVlSW1wICpOYU47CisKKyAgICBzdGF0aWMgdm9pZCBpbml0KCk7
CisgICAgc3RhdGljIHZvaWQgY2xlYXIoKTsKKyAgICBzdGF0aWMgdm9pZCBtYXJrKCk7Cit9Owog
Ci0gIH07CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKmpzVW5kZWZpbmVkKCkKK3sKKyAgICBy
ZXR1cm4gQ29uc3RhbnRWYWx1ZXM6OnVuZGVmaW5lZDsKK30KIAotICAvKioKLSAgICogUmVwcmVz
ZW50cyBhbiBwcmltaXRpdmUgTnVsbCB2YWx1ZS4gQWxsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNz
Ci0gICAqIHNoYXJlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIG9iamVjdCwgc28gPT0gd2lsbCBh
bHdheXMgcmV0dXJuIHRydWUKLSAgICogZm9yIGFueSBjb21wYXJpc29uIGJldHdlZW4gdHdvIE51
bGwgb2JqZWN0cy4KLSAgICovCi0gIGNsYXNzIE51bGwgOiBwdWJsaWMgVmFsdWUgewotICBwdWJs
aWM6Ci0gICAgTnVsbCgpOwotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgYSBWYWx1ZSBpbnRv
IGFuIE51bGwuIElmIHRoZSB2YWx1ZSdzIHR5cGUgaXMgbm90IE51bGxUeXBlLAotICAgICAqIGEg
bnVsbCBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCAoaS5lLiBvbmUgd2l0aCBpdCdzIGludGVybmFs
IHBvaW50ZXIgc2V0Ci0gICAgICogdG8gMCkuIElmIHlvdSBkbyBub3Qga25vdyBmb3Igc3VyZSB3
aGV0aGVyIHRoZSB2YWx1ZSBpcyBvZiB0eXBlCi0gICAgICogTnVsbFR5cGUsIHlvdSBzaG91bGQg
Y2hlY2sgdGhlIGlzVmFsaWQoKSBtZXRob2RzIGFmdGVyd2FyZHMgYmVmb3JlCi0gICAgICogY2Fs
bGluZyBhbnkgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgdmFsdWUuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIFRoZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYSBOdWxsCi0gICAgICovCi0gICAgc3RhdGlj
IE51bGwgZHluYW1pY0Nhc3QoY29uc3QgVmFsdWUgJnYpOwotICBwcml2YXRlOgotICAgIGZyaWVu
ZCBjbGFzcyBOdWxsSW1wOwotICAgIGV4cGxpY2l0IE51bGwoTnVsbEltcCAqdik7Ci0gIH07Citp
bmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKmpzTnVsbCgpCit7CisgICAgcmV0dXJuIENvbnN0YW50
VmFsdWVzOjpudWxsOworfQogCi0gIC8qKgotICAgKiBSZXByZXNlbnRzIGFuIHByaW1pdGl2ZSBC
b29sZWFuIHZhbHVlCi0gICAqLwotICBjbGFzcyBCb29sZWFuIDogcHVibGljIFZhbHVlIHsKLSAg
cHVibGljOgotICAgIEJvb2xlYW4oYm9vbCBiID0gZmFsc2UpOwotCi0gICAgLyoqCi0gICAgICog
Q29udmVydHMgYSBWYWx1ZSBpbnRvIGFuIEJvb2xlYW4uIElmIHRoZSB2YWx1ZSdzIHR5cGUgaXMg
bm90IEJvb2xlYW5UeXBlLAotICAgICAqIGEgbnVsbCBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCAo
aS5lLiBvbmUgd2l0aCBpdCdzIGludGVybmFsIHBvaW50ZXIgc2V0Ci0gICAgICogdG8gMCkuIElm
IHlvdSBkbyBub3Qga25vdyBmb3Igc3VyZSB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBvZiB0eXBlCi0g
ICAgICogQm9vbGVhblR5cGUsIHlvdSBzaG91bGQgY2hlY2sgdGhlIGlzVmFsaWQoKSBtZXRob2Rz
IGFmdGVyd2FyZHMgYmVmb3JlCi0gICAgICogY2FsbGluZyBhbnkgbWV0aG9kcyBvbiB0aGUgcmV0
dXJuZWQgdmFsdWUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSB2YWx1ZSBjb252ZXJ0ZWQg
dG8gYSBCb29sZWFuCi0gICAgICovCi0gICAgc3RhdGljIEJvb2xlYW4gZHluYW1pY0Nhc3QoY29u
c3QgVmFsdWUgJnYpOworaW5saW5lIEFsbG9jYXRlZFZhbHVlSW1wICpqc0Jvb2xlYW4oYm9vbCBi
KQoreworICAgIHJldHVybiBiID8gQ29uc3RhbnRWYWx1ZXM6OmpzVHJ1ZSA6IENvbnN0YW50VmFs
dWVzOjpqc0ZhbHNlOworfQogCi0gICAgYm9vbCB2YWx1ZSgpIGNvbnN0OwotICBwcml2YXRlOgot
ICAgIGZyaWVuZCBjbGFzcyBCb29sZWFuSW1wOwotICAgIGV4cGxpY2l0IEJvb2xlYW4oQm9vbGVh
bkltcCAqdik7Ci0gIH07CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKmpzTmFOKCkKK3sKKyAg
ICByZXR1cm4gQ29uc3RhbnRWYWx1ZXM6Ok5hTjsKK30KIAotICAvKioKLSAgICogUmVwcmVzZW50
cyBhbiBwcmltaXRpdmUgU3RyaW5nIHZhbHVlCi0gICAqLwotICBjbGFzcyBTdHJpbmcgOiBwdWJs
aWMgVmFsdWUgewotICBwdWJsaWM6Ci0gICAgU3RyaW5nKGNvbnN0IFVTdHJpbmcgJnMgPSAiIik7
Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIFZhbHVlIGludG8gYW4gU3RyaW5nLiBJZiB0
aGUgdmFsdWUncyB0eXBlIGlzIG5vdCBTdHJpbmdUeXBlLAotICAgICAqIGEgbnVsbCBvYmplY3Qg
d2lsbCBiZSByZXR1cm5lZCAoaS5lLiBvbmUgd2l0aCBpdCdzIGludGVybmFsIHBvaW50ZXIgc2V0
Ci0gICAgICogdG8gMCkuIElmIHlvdSBkbyBub3Qga25vdyBmb3Igc3VyZSB3aGV0aGVyIHRoZSB2
YWx1ZSBpcyBvZiB0eXBlCi0gICAgICogU3RyaW5nVHlwZSwgeW91IHNob3VsZCBjaGVjayB0aGUg
aXNWYWxpZCgpIG1ldGhvZHMgYWZ0ZXJ3YXJkcyBiZWZvcmUKLSAgICAgKiBjYWxsaW5nIGFueSBt
ZXRob2RzIG9uIHRoZSByZXR1cm5lZCB2YWx1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhl
IHZhbHVlIGNvbnZlcnRlZCB0byBhIFN0cmluZwotICAgICAqLwotICAgIHN0YXRpYyBTdHJpbmcg
ZHluYW1pY0Nhc3QoY29uc3QgVmFsdWUgJnYpOworaW5saW5lIFZhbHVlSW1wOjpWYWx1ZUltcCgp
Cit7Cit9CiAKLSAgICBVU3RyaW5nIHZhbHVlKCkgY29uc3Q7Ci0gIHByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIFN0cmluZ0ltcDsKLSAgICBleHBsaWNpdCBTdHJpbmcoU3RyaW5nSW1wICp2KTsK
LSAgfTsKK2lubGluZSBWYWx1ZUltcDo6flZhbHVlSW1wKCkKK3sKK30KIAotICBleHRlcm4gY29u
c3QgZG91YmxlIE5hTjsKLSAgZXh0ZXJuIGNvbnN0IGRvdWJsZSBJbmY7CitpbmxpbmUgQWxsb2Nh
dGVkVmFsdWVJbXA6OkFsbG9jYXRlZFZhbHVlSW1wKCkKKyAgICA6IG1fbWFya2VkKGZhbHNlKQor
eworfQogCi0gIC8qKgotICAgKiBSZXByZXNlbnRzIGFuIHByaW1pdGl2ZSBOdW1iZXIgdmFsdWUK
LSAgICovCi0gIGNsYXNzIE51bWJlciA6IHB1YmxpYyBWYWx1ZSB7Ci0gICAgZnJpZW5kIGNsYXNz
IFZhbHVlSW1wOwotICBwdWJsaWM6Ci0gICAgTnVtYmVyKGludCBpKTsKLSAgICBOdW1iZXIodW5z
aWduZWQgaW50IHUpOwotICAgIE51bWJlcihkb3VibGUgZCA9IDAuMCk7Ci0gICAgTnVtYmVyKGxv
bmcgaW50IGwpOwotICAgIE51bWJlcihsb25nIHVuc2lnbmVkIGludCBsKTsKLSAgICBOdW1iZXIo
ZG91YmxlIGQsIGJvb2wga25vd25Ub0JlSW50ZWdlcik7Ci0KLSAgICBkb3VibGUgdmFsdWUoKSBj
b25zdDsKLSAgICBpbnQgaW50VmFsdWUoKSBjb25zdDsKLQotICAgIGJvb2wgaXNOYU4oKSBjb25z
dDsKLSAgICBib29sIGlzSW5mKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBh
IFZhbHVlIGludG8gYW4gTnVtYmVyLiBJZiB0aGUgdmFsdWUncyB0eXBlIGlzIG5vdCBOdW1iZXJU
eXBlLAotICAgICAqIGEgbnVsbCBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCAoaS5lLiBvbmUgd2l0
aCBpdCdzIGludGVybmFsIHBvaW50ZXIgc2V0Ci0gICAgICogdG8gMCkuIElmIHlvdSBkbyBub3Qg
a25vdyBmb3Igc3VyZSB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBvZiB0eXBlCi0gICAgICogTnVtYmVy
VHlwZSwgeW91IHNob3VsZCBjaGVjayB0aGUgaXNOdWxsKCkgbWV0aG9kcyBhZnRlcndhcmRzIGJl
Zm9yZQotICAgICAqIGNhbGxpbmcgYW55IG1ldGhvZHMgb24gdGhlIHJldHVybmVkIHZhbHVlLgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgdmFsdWUgY29udmVydGVkIHRvIGEgTnVtYmVyCi0g
ICAgICovCi0gICAgc3RhdGljIE51bWJlciBkeW5hbWljQ2FzdChjb25zdCBWYWx1ZSAmdik7Ci0g
IHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE51bWJlckltcDsKLSAgICBleHBsaWNpdCBOdW1i
ZXIoTnVtYmVySW1wICp2KTsKLSAgfTsKK2lubGluZSBBbGxvY2F0ZWRWYWx1ZUltcDo6fkFsbG9j
YXRlZFZhbHVlSW1wKCkKK3sKK30KIAotaW5saW5lIGJvb2wgVmFsdWVJbXA6Om1hcmtlZCgpIGNv
bnN0CitpbmxpbmUgYm9vbCBBbGxvY2F0ZWRWYWx1ZUltcDo6aXNCb29sZWFuKCkgY29uc3QKIHsK
LSAgLy8gU2ltcGxlIG51bWJlcnMgYXJlIGFsd2F5cyBjb25zaWRlcmVkIG1hcmtlZC4KLSAgcmV0
dXJuIFNpbXBsZU51bWJlcjo6aXModGhpcykgfHwgX21hcmtlZDsKKyAgICByZXR1cm4gdHlwZSgp
ID09IEJvb2xlYW5UeXBlOwogfQogCi0vLyBEaXNwYXRjaGVycyBmb3IgdmlydHVhbCBmdW5jdGlv
bnMsIHRvIHNwZWNpYWwtY2FzZSBzaW1wbGUgbnVtYmVycyB3aGljaAotLy8gd29uJ3QgYmUgcmVh
bCBwb2ludGVycy4KK2lubGluZSBib29sIEFsbG9jYXRlZFZhbHVlSW1wOjppc051bWJlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHR5cGUoKSA9PSBOdW1iZXJUeXBlOworfQogCi1pbmxpbmUgVHlw
ZSBWYWx1ZUltcDo6ZGlzcGF0Y2hUeXBlKCkgY29uc3QKK2lubGluZSBib29sIEFsbG9jYXRlZFZh
bHVlSW1wOjppc1N0cmluZygpIGNvbnN0CiB7Ci0gIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMp
KQotICAgIHJldHVybiBOdW1iZXJUeXBlOwotICByZXR1cm4gdHlwZSgpOworICAgIHJldHVybiB0
eXBlKCkgPT0gU3RyaW5nVHlwZTsKIH0KIAotaW5saW5lIFZhbHVlIFZhbHVlSW1wOjpkaXNwYXRj
aFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAor
aW5saW5lIGJvb2wgQWxsb2NhdGVkVmFsdWVJbXA6OmlzT2JqZWN0KCkgY29uc3QKIHsKLSAgICBp
ZiAoU2ltcGxlTnVtYmVyOjppcyh0aGlzKSkKLSAgICAgICAgcmV0dXJuIFZhbHVlKGNvbnN0X2Nh
c3Q8VmFsdWVJbXAgKj4odGhpcykpOwotICAgIHJldHVybiB0b1ByaW1pdGl2ZShleGVjLCBwcmVm
ZXJyZWRUeXBlKTsKKyAgICByZXR1cm4gdHlwZSgpID09IE9iamVjdFR5cGU7CiB9CiAKLWlubGlu
ZSBib29sIFZhbHVlSW1wOjpkaXNwYXRjaFRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
CitpbmxpbmUgYm9vbCBBbGxvY2F0ZWRWYWx1ZUltcDo6bWFya2VkKCkgY29uc3QKIHsKLSAgICBp
ZiAoU2ltcGxlTnVtYmVyOjppcyh0aGlzKSkKLSAgICAgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6
dmFsdWUodGhpcyk7Ci0gICAgcmV0dXJuIHRvQm9vbGVhbihleGVjKTsKKyAgICByZXR1cm4gbV9t
YXJrZWQ7CiB9CiAKLWlubGluZSBkb3VibGUgVmFsdWVJbXA6OmRpc3BhdGNoVG9OdW1iZXIoRXhl
Y1N0YXRlICpleGVjKSBjb25zdAoraW5saW5lIHZvaWQgQWxsb2NhdGVkVmFsdWVJbXA6Om1hcmso
KQogewotICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQotICAgICAgICByZXR1cm4gU2lt
cGxlTnVtYmVyOjp2YWx1ZSh0aGlzKTsKLSAgICByZXR1cm4gdG9OdW1iZXIoZXhlYyk7CisgICAg
bV9tYXJrZWQgPSB0cnVlOworfQorCitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKlZhbHVlSW1w
Ojpkb3duY2FzdCgpCit7CisgICAgYXNzZXJ0KCFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QWxsb2NhdGVkVmFsdWVJbXAgKj4odGhpcyk7Cit9CisKK2lu
bGluZSBjb25zdCBBbGxvY2F0ZWRWYWx1ZUltcCAqVmFsdWVJbXA6OmRvd25jYXN0KCkgY29uc3QK
K3sKKyAgICBhc3NlcnQoIVNpbXBsZU51bWJlcjo6aXModGhpcykpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBBbGxvY2F0ZWRWYWx1ZUltcCAqPih0aGlzKTsKK30KKworaW5saW5lIGJv
b2wgVmFsdWVJbXA6OmlzVW5kZWZpbmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGhpcyA9PSBq
c1VuZGVmaW5lZCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNOdWxsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdGhpcyA9PSBqc051bGwoKTsKIH0KIAotaW5saW5lIGRvdWJsZSBWYWx1
ZUltcDo6ZGlzcGF0Y2hUb051bWJlcihFeGVjU3RhdGUgKmV4ZWMsIGJvb2wgJmtub3duVG9CZUlu
dGVnZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNVbmRlZmluZWRPck51bGwoKSBj
b25zdAoreworICAgIHJldHVybiB0aGlzID09IGpzVW5kZWZpbmVkKCkgfHwgdGhpcyA9PSBqc051
bGwoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJbXA6OmlzQm9vbGVhbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmlzQm9vbGVh
bigpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6aXNOdW1iZXIoKSBjb25zdAoreworICAg
IHJldHVybiBTaW1wbGVOdW1iZXI6OmlzKHRoaXMpIHx8IGRvd25jYXN0KCktPmlzTnVtYmVyKCk7
Cit9CisKK2lubGluZSBib29sIFZhbHVlSW1wOjppc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmlzU3RyaW5nKCk7Cit9
CisKK2lubGluZSBib29sIFZhbHVlSW1wOjppc09iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmlzT2JqZWN0KCk7Cit9CisK
K2lubGluZSBib29sIFZhbHVlSW1wOjppc09iamVjdChjb25zdCBDbGFzc0luZm8gKmMpIGNvbnN0
Cit7CisgICAgcmV0dXJuICFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmlz
T2JqZWN0KGMpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6Z2V0Qm9vbGVhbihib29sJiB2
KSBjb25zdAoreworICAgIHJldHVybiAhU2ltcGxlTnVtYmVyOjppcyh0aGlzKSAmJiBkb3duY2Fz
dCgpLT5nZXRCb29sZWFuKHYpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZUltcDo6Z2V0TnVtYmVy
KGRvdWJsZSYgdikgY29uc3QKIHsKICAgICBpZiAoU2ltcGxlTnVtYmVyOjppcyh0aGlzKSkgewot
ICAgICAgICBrbm93blRvQmVJbnRlZ2VyID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIFNpbXBsZU51
bWJlcjo6dmFsdWUodGhpcyk7CisgICAgICAgIHYgPSBTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAga25vd25Ub0JlSW50ZWdlciA9IGZh
bHNlOwotICAgIHJldHVybiB0b051bWJlcihleGVjKTsKKyAgICByZXR1cm4gZG93bmNhc3QoKS0+
Z2V0TnVtYmVyKHYpOworfQorCitpbmxpbmUgZG91YmxlIFZhbHVlSW1wOjpnZXROdW1iZXIoKSBj
b25zdAoreworICAgIHJldHVybiBTaW1wbGVOdW1iZXI6OmlzKHRoaXMpID8gU2ltcGxlTnVtYmVy
Ojp2YWx1ZSh0aGlzKSA6IGRvd25jYXN0KCktPmdldE51bWJlcigpOworfQorCitpbmxpbmUgYm9v
bCBWYWx1ZUltcDo6Z2V0U3RyaW5nKFVTdHJpbmcmIHMpIGNvbnN0Cit7CisgICAgcmV0dXJuICFT
aW1wbGVOdW1iZXI6OmlzKHRoaXMpICYmIGRvd25jYXN0KCktPmdldFN0cmluZyhzKTsKK30KKwor
aW5saW5lIFVTdHJpbmcgVmFsdWVJbXA6OmdldFN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFNpbXBsZU51bWJlcjo6aXModGhpcykgPyBVU3RyaW5nKCkgOiBkb3duY2FzdCgpLT5nZXRTdHJp
bmcoKTsKK30KKworaW5saW5lIE9iamVjdEltcCAqVmFsdWVJbXA6OmdldE9iamVjdCgpCit7Cisg
ICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXModGhpcykgPyAwIDogZG93bmNhc3QoKS0+Z2V0T2Jq
ZWN0KCk7CiB9CiAKLWlubGluZSBVU3RyaW5nIFZhbHVlSW1wOjpkaXNwYXRjaFRvU3RyaW5nKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3QKK2lubGluZSBjb25zdCBPYmplY3RJbXAgKlZhbHVlSW1wOjpn
ZXRPYmplY3QoKSBjb25zdAogewotICAgIGlmIChTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQotICAg
ICAgICByZXR1cm4gVVN0cmluZzo6ZnJvbShTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpKTsKLSAg
ICByZXR1cm4gdG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXModGhp
cykgPyAwIDogZG93bmNhc3QoKS0+Z2V0T2JqZWN0KCk7CiB9CiAKLWlubGluZSBib29sIFZhbHVl
SW1wOjpkaXNwYXRjaFRvVUludDMyKHVpbnQzMl90JiByZXN1bHQpIGNvbnN0CitpbmxpbmUgYm9v
bCBWYWx1ZUltcDo6Z2V0VUludDMyKHVpbnQzMl90JiB2KSBjb25zdAogewogICAgIGlmIChTaW1w
bGVOdW1iZXI6OmlzKHRoaXMpKSB7CiAgICAgICAgIGxvbmcgaSA9IFNpbXBsZU51bWJlcjo6dmFs
dWUodGhpcyk7CiAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmVzdWx0ID0gaTsKKyAgICAgICAgdiA9IGk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICByZXR1cm4gdG9VSW50MzIocmVzdWx0KTsKKyAgICByZXR1cm4gZG93bmNh
c3QoKS0+Z2V0VUludDMyKHYpOworfQorCitpbmxpbmUgdm9pZCBWYWx1ZUltcDo6bWFyaygpCit7
CisgICAgaWYgKCFTaW1wbGVOdW1iZXI6OmlzKHRoaXMpKQorICAgICAgICBkb3duY2FzdCgpLT5t
YXJrKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlSW1wOjptYXJrZWQoKSBjb25zdAoreworICAg
IHJldHVybiBTaW1wbGVOdW1iZXI6OmlzKHRoaXMpIHx8IGRvd25jYXN0KCktPm1hcmtlZCgpOwor
fQorCitpbmxpbmUgVHlwZSBWYWx1ZUltcDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNp
bXBsZU51bWJlcjo6aXModGhpcykgPyBOdW1iZXJUeXBlIDogZG93bmNhc3QoKS0+dHlwZSgpOwor
fQorCitpbmxpbmUgVmFsdWVJbXAgKlZhbHVlSW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4
ZWMsIFR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gU2ltcGxlTnVtYmVy
Ojppcyh0aGlzKSA/IGNvbnN0X2Nhc3Q8VmFsdWVJbXAgKj4odGhpcykgOiBkb3duY2FzdCgpLT50
b1ByaW1pdGl2ZShleGVjLCBwcmVmZXJyZWRUeXBlKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWVJ
bXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpbXBs
ZU51bWJlcjo6aXModGhpcykgPyBTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpIDogZG93bmNhc3Qo
KS0+dG9Cb29sZWFuKGV4ZWMpOworfQorCitpbmxpbmUgZG91YmxlIFZhbHVlSW1wOjp0b051bWJl
cihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6aXMo
dGhpcykgPyBTaW1wbGVOdW1iZXI6OnZhbHVlKHRoaXMpIDogZG93bmNhc3QoKS0+dG9OdW1iZXIo
ZXhlYyk7Cit9CisKK2lubGluZSBkb3VibGUgVmFsdWVJbXA6OnRvTnVtYmVyKEV4ZWNTdGF0ZSAq
ZXhlYywgYm9vbCYga25vd25Ub0JlSW50ZWdlcikgY29uc3QKK3sKKyAgICBpZiAoU2ltcGxlTnVt
YmVyOjppcyh0aGlzKSkgeworICAgICAgICBrbm93blRvQmVJbnRlZ2VyID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIFNpbXBsZU51bWJlcjo6dmFsdWUodGhpcyk7CisgICAgfQorICAgIGtub3duVG9C
ZUludGVnZXIgPSBmYWxzZTsKKyAgICByZXR1cm4gZG93bmNhc3QoKS0+dG9OdW1iZXIoZXhlYyk7
Cit9CisKK2lubGluZSBVU3RyaW5nIFZhbHVlSW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMp
IGNvbnN0Cit7CisgICByZXR1cm4gU2ltcGxlTnVtYmVyOjppcyh0aGlzKSA/IFVTdHJpbmc6OmZy
b20oU2ltcGxlTnVtYmVyOjp2YWx1ZSh0aGlzKSkgOiBkb3duY2FzdCgpLT50b1N0cmluZyhleGVj
KTsKK30KKworaW5saW5lIFZhbHVlSW1wICpqc1plcm8oKQoreworICAgIHJldHVybiBTaW1wbGVO
dW1iZXI6Om1ha2UoMCk7CiB9CiAKK2lubGluZSBWYWx1ZUltcCAqanNPbmUoKQoreworICAgIHJl
dHVybiBTaW1wbGVOdW1iZXI6Om1ha2UoMSk7Cit9CisKK2lubGluZSBWYWx1ZUltcCAqanNUd28o
KQoreworICAgIHJldHVybiBTaW1wbGVOdW1iZXI6Om1ha2UoMik7Cit9CisKKy8vIGNvbXBhdGli
aWxpdHkgbmFtZXMgc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2Ugc28gbXVjaCBjb2RlCisKK2lu
bGluZSBBbGxvY2F0ZWRWYWx1ZUltcCAqVW5kZWZpbmVkKCkgeyByZXR1cm4ganNVbmRlZmluZWQo
KTsgfQoraW5saW5lIEFsbG9jYXRlZFZhbHVlSW1wICpOdWxsKCkgeyByZXR1cm4ganNOdWxsKCk7
IH0KK2lubGluZSBBbGxvY2F0ZWRWYWx1ZUltcCAqQm9vbGVhbihib29sIGIpIHsgcmV0dXJuIGpz
Qm9vbGVhbihiKTsgfQoraW5saW5lIFZhbHVlSW1wICpOdW1iZXIoZG91YmxlIG4pIHsgcmV0dXJu
IGpzTnVtYmVyKG4pOyB9CitpbmxpbmUgVmFsdWVJbXAgKk51bWJlcihpbnQgbikgeyByZXR1cm4g
anNOdW1iZXIobik7IH0KK2lubGluZSBWYWx1ZUltcCAqTnVtYmVyKHVuc2lnbmVkIG4pIHsgcmV0
dXJuIGpzTnVtYmVyKG4pOyB9CitpbmxpbmUgVmFsdWVJbXAgKk51bWJlcihsb25nIG4pIHsgcmV0
dXJuIGpzTnVtYmVyKG4pOyB9CitpbmxpbmUgVmFsdWVJbXAgKk51bWJlcih1bnNpZ25lZCBsb25n
IG4pIHsgcmV0dXJuIGpzTnVtYmVyKG4pOyB9CitpbmxpbmUgQWxsb2NhdGVkVmFsdWVJbXAgKlN0
cmluZyhjb25zdCBVU3RyaW5nJiBzKSB7IHJldHVybiBqc1N0cmluZyhzKTsgfQoraW5saW5lIEFs
bG9jYXRlZFZhbHVlSW1wICpTdHJpbmcoY29uc3QgY2hhciAqcykgeyByZXR1cm4ganNTdHJpbmco
cyk7IH0KKwogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmIC8vIF9LSlNfVkFMVUVfSF8KKyNlbmRp
ZiAvLyBLSlNfVkFMVUVfSApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJz
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBXZWJDb3Jl
L2todG1sL2VjbWEvZG9tcGFyc2VyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNl
ci5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDggLTAwMDAJMS4yCisrKyBXZWJDb3JlL2todG1sL2Vj
bWEvZG9tcGFyc2VyLmNwcAk4IEF1ZyAyMDA1IDAxOjAxOjEwIC0wMDAwCkBAIC00OCw5ICs0OCw5
IEBAIGJvb2wgRE9NUGFyc2VyQ29uc3RydWN0b3JJbXA6OmltcGxlbWVudHMKICAgcmV0dXJuIHRy
dWU7CiB9CiAKLU9iamVjdCBET01QYXJzZXJDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQorT2JqZWN0SW1wICpET01QYXJzZXJDb25zdHJ1Y3Rv
ckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQogewotICByZXR1
cm4gT2JqZWN0KG5ldyBET01QYXJzZXIoZXhlYywgZG9jLmdldCgpKSk7CisgIHJldHVybiBuZXcg
RE9NUGFyc2VyKGV4ZWMsIGRvYy5nZXQoKSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBET01QYXJz
ZXI6OmluZm8gPSB7ICJET01QYXJzZXIiLCAwLCAmRE9NUGFyc2VyVGFibGUsIDAgfTsKQEAgLTY3
LDE1ICs2NywxNSBAQCBET01QYXJzZXI6OkRPTVBhcnNlcihFeGVjU3RhdGUgKmV4ZWMsIERPCiB9
CiAKIAotVmFsdWUgRE9NUGFyc2VyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTVBhcnNlclByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmRE9NUGFyc2Vy
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9NUGFyc2VyOjppbmZvKSkgeworICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICAKLSAgRE9NUGFyc2Vy
ICpwYXJzZXIgPSBzdGF0aWNfY2FzdDxET01QYXJzZXIgKj4odGhpc09iai5pbXAoKSk7CisgIERP
TVBhcnNlciAqcGFyc2VyID0gc3RhdGljX2Nhc3Q8RE9NUGFyc2VyICo+KHRoaXNPYmopOwogCiAg
IHN3aXRjaCAoaWQpIHsKICAgY2FzZSBET01QYXJzZXI6OlBhcnNlRnJvbVN0cmluZzoKQEAgLTg0
LDggKzg0LDggQEAgVmFsdWUgRE9NUGFyc2VyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQkJ
CXJldHVybiBVbmRlZmluZWQoKTsKICAgICAgIH0KIAotICAgICAgUVN0cmluZyBzdHIgPSBhcmdz
WzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKLSAgICAgIFFTdHJpbmcgY29udGVudFR5cGUg
PSBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgIFFTdHJpbmcgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOworICAg
ICAgUVN0cmluZyBjb250ZW50VHlwZSA9IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmco
KS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogICAgICAgaWYgKGNvbnRlbnRUeXBlID09ICJ0ZXh0L3ht
bCIgfHwgY29udGVudFR5cGUgPT0gImFwcGxpY2F0aW9uL3htbCIgfHwgY29udGVudFR5cGUgPT0g
ImFwcGxpY2F0aW9uL3hodG1sK3htbCIpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2NJbXBs
ID0gcGFyc2VyLT5kb2MtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KCk7CkluZGV4
OiBXZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEgV2ViQ29yZS9raHRtbC9lY21hL2RvbXBhcnNlci5oCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEvZG9tcGFyc2VyLmgJOCBKdW4gMjAwNSAwOToxNjo0MiAtMDAw
MAkxLjEKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9kb21wYXJzZXIuaAk4IEF1ZyAyMDA1IDAxOjAx
OjEwIC0wMDAwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAg
ICAgRE9NUGFyc2VyQ29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICosIERPTTo6RG9jdW1lbnRJbXBs
ICpkKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKTsKIHByaXZhdGU6CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRv
Y3VtZW50SW1wbD4gZG9jOwogICB9OwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21h
L2tqc19iaW5kaW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC1wIC11IC1y
MS4zNiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3BwCi0tLSBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2JpbmRpbmcuY3BwCTcgQXVnIDIwMDUgMDY6MTc6NDQgLTAwMDAJMS4zNgorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAk4IEF1ZyAyMDA1IDAxOjAxOjEwIC0w
MDAwCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBOb2RlUGVyRG9jTWFwICpkb21Ob2Rlc1BlckRv
Y3VtZW4KIH0KIAogCi1TY3JpcHRJbnRlcnByZXRlcjo6U2NyaXB0SW50ZXJwcmV0ZXIoIGNvbnN0
IE9iamVjdCAmZ2xvYmFsLCBLSFRNTFBhcnQqIHBhcnQgKQorU2NyaXB0SW50ZXJwcmV0ZXI6OlNj
cmlwdEludGVycHJldGVyKCBPYmplY3RJbXAgKmdsb2JhbCwgS0hUTUxQYXJ0KiBwYXJ0ICkKICAg
OiBJbnRlcnByZXRlciggZ2xvYmFsICksIG1fcGFydCggcGFydCApLAogICAgIG1fZXZ0KCAwTCAp
LCBtX2lubGluZUNvZGUoZmFsc2UpLCBtX3RpbWVyQ2FsbGJhY2soZmFsc2UpCiB7CkBAIC0yMDUs
MTQgKzIwNSwxMCBAQCBib29sIFNjcmlwdEludGVycHJldGVyOjp3YXNSdW5CeVVzZXJHZXN0CiB9
CiAKICNpZiBBUFBMRV9DSEFOR0VTCi1ib29sIFNjcmlwdEludGVycHJldGVyOjppc0dsb2JhbE9i
amVjdChjb25zdCBWYWx1ZSAmdikKKworYm9vbCBTY3JpcHRJbnRlcnByZXRlcjo6aXNHbG9iYWxP
YmplY3QoVmFsdWVJbXAgKnYpCiB7Ci0gICAgaWYgKHYudHlwZSgpID09IE9iamVjdFR5cGUpIHsK
LQlPYmplY3QgbyA9IHYudG9PYmplY3QgKGdsb2JhbEV4ZWMoKSk7Ci0JaWYgKG8uY2xhc3NJbmZv
KCkgPT0gJldpbmRvdzo6aW5mbykKLQkgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdi0+aXNPYmplY3QoJldpbmRvdzo6aW5mbyk7CiB9CiAKIGJv
b2wgU2NyaXB0SW50ZXJwcmV0ZXI6OmlzU2FmZVNjcmlwdCAoY29uc3QgSW50ZXJwcmV0ZXIgKl90
YXJnZXQpCkBAIC0yMjgsNyArMjI0LDcgQEAgSW50ZXJwcmV0ZXIgKlNjcmlwdEludGVycHJldGVy
OjppbnRlcnByZQogICAgIHJldHVybiB3aW4tPmludGVycHJldGVyKCk7CiB9CiAKLXZvaWQgKlNj
cmlwdEludGVycHJldGVyOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFsdWUgKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IGxhbmd1YWdlLCBjb25zdCBPYmplY3QgJnZhbHVlLCBjb25zdCBCaW5kaW5n
czo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAqY3VycmVu
dCkKK3ZvaWQgKlNjcmlwdEludGVycHJldGVyOjpjcmVhdGVMYW5ndWFnZUluc3RhbmNlRm9yVmFs
dWUgKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGxhbmd1YWdlLCBPYmplY3RJbXAgKnZhbHVlLCBjb25z
dCBCaW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVj
dCAqY3VycmVudCkKIHsKICAgICB2b2lkICpyZXN1bHQgPSAwOwogICAgIApAQCAtMzA0LDcgKzMw
MCw3IEBAIFFTdHJpbmcgSWRlbnRpZmllcjo6cXN0cmluZygpIGNvbnN0CiAgIHJldHVybiBRU3Ry
aW5nKChRQ2hhciopIGRhdGEoKSwgc2l6ZSgpKTsKIH0KIAotVmFsdWUgZ2V0U3RyaW5nT3JOdWxs
KERPTVN0cmluZyBzKQorVmFsdWVJbXAgKmdldFN0cmluZ09yTnVsbChET01TdHJpbmcgcykKIHsK
ICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgcmV0dXJuIE51bGwoKTsKQEAgLTMxMiwxNyArMzA4LDE3
IEBAIFZhbHVlIGdldFN0cmluZ09yTnVsbChET01TdHJpbmcgcykKICAgICByZXR1cm4gU3RyaW5n
KHMpOwogfQogCi1RVmFyaWFudCBWYWx1ZVRvVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFZhbHVlICZ2YWwpIHsKK1FWYXJpYW50IFZhbHVlVG9WYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywg
VmFsdWVJbXAgKnZhbCkgewogICBRVmFyaWFudCByZXM7Ci0gIHN3aXRjaCAodmFsLnR5cGUoKSkg
eworICBzd2l0Y2ggKHZhbC0+dHlwZSgpKSB7CiAgIGNhc2UgQm9vbGVhblR5cGU6Ci0gICAgcmVz
ID0gUVZhcmlhbnQodmFsLnRvQm9vbGVhbihleGVjKSwgMCk7CisgICAgcmVzID0gUVZhcmlhbnQo
dmFsLT50b0Jvb2xlYW4oZXhlYyksIDApOwogICAgIGJyZWFrOwogICBjYXNlIE51bWJlclR5cGU6
Ci0gICAgcmVzID0gUVZhcmlhbnQodmFsLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICByZXMgPSBRVmFy
aWFudCh2YWwtPnRvTnVtYmVyKGV4ZWMpKTsKICAgICBicmVhazsKICAgY2FzZSBTdHJpbmdUeXBl
OgotICAgIHJlcyA9IFFWYXJpYW50KHZhbC50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAg
IHJlcyA9IFFWYXJpYW50KHZhbC0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKICAgICBicmVh
azsKICAgZGVmYXVsdDoKICAgICAvLyBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZSAnaW52YWxpZCcK
QEAgLTM1MCw4ICszNDYsOCBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IGluCiAgIGNoYXIgYnVmZmVyWzEwMF07IC8vIG5lZWRzIHRvIGZpdCAyMCBjaGFyYWN0ZXJzLCBw
bHVzIGFuIGludGVnZXIgaW4gQVNDSUksIHBsdXMgYSBudWxsIGNoYXJhY3RlcgogICBzcHJpbnRm
KGJ1ZmZlciwgIiVzIGV4Y2VwdGlvbiAlZCIsIHR5cGUsIGNvZGUpOwogCi0gIE9iamVjdCBlcnJv
ck9iamVjdCA9IEVycm9yOjpjcmVhdGUoZXhlYywgR2VuZXJhbEVycm9yLCBidWZmZXIpOwotICBl
cnJvck9iamVjdC5wdXQoZXhlYywgImNvZGUiLCBOdW1iZXIoY29kZSkpOworICBPYmplY3RJbXAg
KmVycm9yT2JqZWN0ID0gRXJyb3I6OmNyZWF0ZShleGVjLCBHZW5lcmFsRXJyb3IsIGJ1ZmZlcik7
CisgIGVycm9yT2JqZWN0LT5wdXQoZXhlYywgImNvZGUiLCBOdW1iZXIoY29kZSkpOwogICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyb3JPYmplY3QpOwogfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX2JpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19iaW5kaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAt
cCAtdSAtcjEuMzEgV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmgKLS0tIFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfYmluZGluZy5oCTcgQXVnIDIwMDUgMDY6MTc6NDQgLTAwMDAJMS4zMQor
KysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmgJOCBBdWcgMjAwNSAwMTowMToxMCAt
MDAwMApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZyh0b1N0cmluZyhleGVjKSk7IH0KKyAgICB2aXJ0dWFsIFZhbHVl
SW1wICp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUpIGNvbnN0IHsgcmV0dXJuIFN0
cmluZyh0b1N0cmluZyhleGVjKSk7IH0KICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhl
Y1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIFVTdHJpbmcoIltmdW5jdGlvbl0iKTsgfQogICB9Owog
CkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBTY3JpcHRJbnRlcnBy
ZXRlciA6IHB1YmxpYyBJbnRlcnByZXRlcgogICB7CiAgIHB1YmxpYzoKLSAgICBTY3JpcHRJbnRl
cnByZXRlcihjb25zdCBPYmplY3QgJmdsb2JhbCwgS0hUTUxQYXJ0KiBwYXJ0KTsKKyAgICBTY3Jp
cHRJbnRlcnByZXRlcihPYmplY3RJbXAgKmdsb2JhbCwgS0hUTUxQYXJ0KiBwYXJ0KTsKICAgICB2
aXJ0dWFsIH5TY3JpcHRJbnRlcnByZXRlcigpOwogCiAgICAgc3RhdGljIERPTU9iamVjdCogZ2V0
RE9NT2JqZWN0KHZvaWQqIG9iamVjdEhhbmRsZSk7CkBAIC0xMDcsMTEgKzEwNywxMSBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBET006OkV2ZW50SW1wbCAqZ2V0Q3VycmVudEV2ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9ldnQ7IH0KIAogI2lmIEFQUExFX0NIQU5HRVMKLSAgICB2aXJ0dWFsIGJvb2wg
aXNHbG9iYWxPYmplY3QoY29uc3QgVmFsdWUgJnYpOworICAgIHZpcnR1YWwgYm9vbCBpc0dsb2Jh
bE9iamVjdChWYWx1ZUltcCAqdik7CiAgICAgdmlydHVhbCBJbnRlcnByZXRlciAqaW50ZXJwcmV0
ZXJGb3JHbG9iYWxPYmplY3QgKGNvbnN0IFZhbHVlSW1wICppbXApOwogICAgIHZpcnR1YWwgYm9v
bCBpc1NhZmVTY3JpcHQgKGNvbnN0IEludGVycHJldGVyICp0YXJnZXQpOwotICAgIHZpcnR1YWwg
dm9pZCAqY3JlYXRlTGFuZ3VhZ2VJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIGlu
dCBsYW5ndWFnZSwgY29uc3QgT2JqZWN0ICZ2YWx1ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmpl
Y3QgKm9yaWdpbiwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKmN1cnJlbnQpOwotICAgIHZv
aWQgKmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlIChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IE9i
amVjdCAmdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0IEJp
bmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgKmNyZWF0ZUxh
bmd1YWdlSW5zdGFuY2VGb3JWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBpbnQgbGFuZ3VhZ2UsIE9i
amVjdEltcCAqdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNvbnN0
IEJpbmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KTsKKyAgICB2b2lkICpjcmVhdGVPYmpjSW5z
dGFuY2VGb3JWYWx1ZSAoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnZhbHVlLCBjb25zdCBC
aW5kaW5nczo6Um9vdE9iamVjdCAqb3JpZ2luLCBjb25zdCBCaW5kaW5nczo6Um9vdE9iamVjdCAq
Y3VycmVudCk7CiAjZW5kaWYKIAogICBwcml2YXRlOgpAQCAtMTI5LDcgKzEyOSw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICBpbmxpbmUgVmFsdWVJbXAgKmNhY2hlRE9NT2JqZWN0KEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NT2JqICpkb21PYmopCiAgIHsKICAgICBpZiAoIWRvbU9iaikKLSAgICAgIHJldHVy
biBudWxsKCk7CisgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgU2NyaXB0SW50ZXJwcmV0ZXIg
KmludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpKTsKICAgICBpZiAoRE9NT2JqZWN0ICpyZXQgPSBpbnRlcnAtPmdldERPTU9i
amVjdChkb21PYmopKQogICAgICAgcmV0dXJuIHJldDsKQEAgLTE1NSwxMiArMTU1LDEyIEBAIG5h
bWVzcGFjZSBLSlMgewogICAvKioKICAgICogIEdldCBhIFN0cmluZyBvYmplY3QsIG9yIE51bGwo
KSBpZiBzIGlzIG51bGwKICAgICovCi0gIFZhbHVlIGdldFN0cmluZ09yTnVsbChET006OkRPTVN0
cmluZyBzKTsKKyAgVmFsdWVJbXAgKmdldFN0cmluZ09yTnVsbChET006OkRPTVN0cmluZyBzKTsK
IAogICAvKioKICAgICogQ29udmVydCBhIEtKUyB2YWx1ZSBpbnRvIGEgUVZhcmlhbnQKICAgICov
Ci0gIFFWYXJpYW50IFZhbHVlVG9WYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmFsdWUm
IHZhbCk7CisgIFFWYXJpYW50IFZhbHVlVG9WYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgVmFsdWVJ
bXAgKnZhbCk7CiAKIH0gLy8gbmFtZXNwYWNlCiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAgLXUgLXIx
LjMzIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21h
L2tqc19jc3MuY3BwCTcgQXVnIDIwMDUgMDY6MTc6NDUgLTAwMDAJMS4zMworKysgV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19jc3MuY3BwCTggQXVnIDIwMDUgMDE6MDE6MTEgLTAwMDAKQEAgLTEzNCwx
MyArMTM0LDEzIEBAIERPTUNTU1N0eWxlRGVjbGFyYXRpb246On5ET01DU1NTdHlsZURlY2wKICAg
U2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1W
YWx1ZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorVmFsdWVJbXAgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxET01DU1NTdHlsZURlY2xhcmF0aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVy
biBnZXRTdHJpbmdPck51bGwodGhpc09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwog
fQogCi1WYWx1ZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eUdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3Bl
cnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NTdHlsZURlY2xhcmF0aW9uICo+KHNsb3Quc2xv
dEJhc2UoKSk7CiAKQEAgLTE4NSwxMyArMTg1LDEzIEBAIGJvb2wgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0T3duUHJvcGUKICAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTUNTU1N0eWxlRGVjbGFy
YXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pCitWYWx1
ZUltcCAqRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIENzc1RleHQ6
CiAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChtX2ltcGwtPmNzc1RleHQoKSk7CiAgIGNhc2Ug
TGVuZ3RoOgotICAgIHJldHVybiBWYWx1ZShtX2ltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4g
anNOdW1iZXIobV9pbXBsLT5sZW5ndGgoKSk7CiAgIGNhc2UgUGFyZW50UnVsZToKICAgICByZXR1
cm4gZ2V0RE9NQ1NTUnVsZShleGVjLCBtX2ltcGwtPnBhcmVudFJ1bGUoKSk7CiAgIGRlZmF1bHQ6
CkBAIC0yMDAsNyArMjAwLDcgQEAgVmFsdWUgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFs
dWVQcgogICB9CiB9CiAKLXZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyICkKK3ZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyICkKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQogICBrZERlYnVnKDYwNzApIDw8ICJE
T01DU1NTdHlsZURlY2xhcmF0aW9uOjpwdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8
IGVuZGw7CkBAIC0yMDgsMTIgKzIwOCwxMiBAQCB2b2lkIERPTUNTU1N0eWxlRGVjbGFyYXRpb246
OnB1dChFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwog
ICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAmc3R5bGVEZWNsID0gKm1faW1wbDsKICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSAiY3NzVGV4dCIpIHsKLSAgICBzdHlsZURlY2wuc2V0Q3NzVGV4dCh2YWx1
ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICBzdHlsZURlY2wuc2V0
Q3NzVGV4dCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgIH0g
ZWxzZSB7CiAgICAgaWYgKGlzQ1NTUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpIHsKICAgICAg
IGJvb2wgcGl4ZWxPclBvczsKICAgICAgIERPTVN0cmluZyBwcm9wID0gY3NzUHJvcGVydHlOYW1l
KHByb3BlcnR5TmFtZSwgJnBpeGVsT3JQb3MpOwotICAgICAgUVN0cmluZyBwcm9wdmFsdWUgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICBRU3RyaW5nIHByb3B2YWx1ZSA9
IHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CiAgICAgICBpZiAocGl4ZWxPclBvcykK
IAlwcm9wdmFsdWUgKz0gInB4IjsKICNpZmRlZiBLSlNfVkVSQk9TRQpAQCAtMjM3LDE3ICsyMzcs
MTcgQEAgdm9pZCBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpwdXQoRXhlY1N0YQogICB9CiB9CiAK
LVZhbHVlIERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvblByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09i
ai5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgewotICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZURlY2xhcmF0aW9uOjppbmZvKSkgeworICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICBET01FeGNlcHRpb25U
cmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgJnN0
eWxlRGVjbCA9ICpzdGF0aWNfY2FzdDxET01DU1NTdHlsZURlY2xhcmF0aW9uICo+KHRoaXNPYmou
aW1wKCkpLT5pbXBsKCk7Ci0gIFN0cmluZyBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOwot
ICBET006OkRPTVN0cmluZyBzID0gc3RyLnZhbHVlKCkuc3RyaW5nKCk7CisgIENTU1N0eWxlRGVj
bGFyYXRpb25JbXBsICZzdHlsZURlY2wgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOworICBVU3RyaW5nIHN0ciA9IGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpOworICBET006OkRPTVN0cmluZyBzID0gc3RyLnN0cmluZygpOwogCiAgIHN3aXRj
aCAoaWQpIHsKICAgICBjYXNlIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OkdldFByb3BlcnR5VmFs
dWU6CkBAIC0yNTksMTAgKzI1OSwxMCBAQCBWYWx1ZSBET01DU1NTdHlsZURlY2xhcmF0aW9uUHJv
dG9GdW5jOjpjCiAgICAgY2FzZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpHZXRQcm9wZXJ0eVBy
aW9yaXR5OgogICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdHlsZURlY2wuZ2V0UHJvcGVy
dHlQcmlvcml0eShzKSk7CiAgICAgY2FzZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpTZXRQcm9w
ZXJ0eToKLSAgICAgIHN0eWxlRGVjbC5zZXRQcm9wZXJ0eShzLCBhcmdzWzFdLnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpLCBhcmdzWzJdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24p
OworICAgICAgc3R5bGVEZWNsLnNldFByb3BlcnR5KHMsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBhcmdzWzJdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUNTU1N0eWxlRGVjbGFyYXRp
b246Okl0ZW06Ci0gICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKHN0eWxlRGVjbC5pdGVtKGFy
Z3NbMF0udG9JbnQzMihleGVjKSkpOworICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdHls
ZURlY2wuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CiAgICAgZGVmYXVsdDoKICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgfQpAQCAtMjk4LDcgKzI5OCw3IEBAIGJvb2wgRE9NU3R5
bGVTaGVldDo6Z2V0T3duUHJvcGVydHlTbG90KEUKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xv
dDxET01TdHlsZVNoZWV0LCBET01PYmplY3Q+KGV4ZWMsICZET01TdHlsZVNoZWV0VGFibGUsIHRo
aXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTVN0eWxlU2hlZXQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
RE9NU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgU3R5bGVTaGVldEltcGwgJnN0eWxlU2hlZXQgPSAqbV9pbXBsOwogICBz
d2l0Y2ggKHRva2VuKSB7CkBAIC0zMTcsMTMgKzMxNywxMyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0
OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAgIGNhc2UgTWVkaWE6CiAgICAgcmV0dXJuIGdldERPTU1l
ZGlhTGlzdChleGVjLCBzdHlsZVNoZWV0Lm1lZGlhKCkpOwogICB9Ci0gIHJldHVybiBWYWx1ZSgp
OworICByZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBET01TdHlsZVNoZWV0OjpwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50IGF0dHIpCit2b2lkIERPTVN0eWxlU2hlZXQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikK
IHsKICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiZGlzYWJsZWQiKSB7Ci0gICAgbV9pbXBsLT5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworICAgIG1faW1wbC0+c2V0RGlzYWJsZWQo
dmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiAgIH0KICAgZWxzZQogICAgIERPTU9iamVjdDo6cHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwpAQCAtMzY0LDcgKzM2NCw3IEBAIERP
TVN0eWxlU2hlZXRMaXN0Ojp+RE9NU3R5bGVTaGVldExpc3QoKQogICBTY3JpcHRJbnRlcnByZXRl
cjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVlIERPTVN0eWxlU2hl
ZXRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkRPTVN0eWxlU2hlZXRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIHN3aXRjaCh0b2tlbikgewogICAgIGNh
c2UgTGVuZ3RoOgpAQCAtMzc1LDEzICszNzUsMTMgQEAgVmFsdWUgRE9NU3R5bGVTaGVldExpc3Q6
OmdldFZhbHVlUHJvcGVydAogICAgIH0KIH0KIAotVmFsdWUgRE9NU3R5bGVTaGVldExpc3Q6Omlu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAqRE9NU3R5bGVTaGVldExpc3Q6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTVN0eWxlU2hlZXRMaXN0ICp0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QgKj4oc2xvdC5zbG90QmFzZSgp
KTsKICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVt
KHNsb3QuaW5kZXgoKSkpOwogfQogCi1WYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkRPTVN0eWxlU2hlZXRMaXN0OjpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTVN0eWxlU2hlZXRMaXN0ICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgRWxl
bWVudEltcGwgKmVsZW1lbnQgPSB0aGlzT2JqLT5tX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVy
dHlOYW1lLnN0cmluZygpKTsKQEAgLTQ2NCwxNiArNDY0LDE2IEBAIFZhbHVlSW1wICpnZXRET01T
dHlsZVNoZWV0TGlzdChFeGVjU3RhdGUKICAgfQogfQogCi1WYWx1ZSBET01TdHlsZVNoZWV0TGlz
dEZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqRE9NU3R5bGVTaGVldExpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTVN0eWxlU2hlZXRMaXN0OjppbmZvKSkg
ewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01TdHlsZVNoZWV0TGlzdDo6aW5mbykpIHsKKyAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4
ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgU3R5bGVTaGVl
dExpc3RJbXBsICZzdHlsZVNoZWV0TGlzdCA9ICpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0TGlz
dCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOworICBTdHlsZVNoZWV0TGlzdEltcGwgJnN0eWxl
U2hlZXRMaXN0ID0gKnN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXRMaXN0ICo+KHRoaXNPYmopLT5p
bXBsKCk7CiAgIGlmIChpZCA9PSBET01TdHlsZVNoZWV0TGlzdDo6SXRlbSkKLSAgICByZXR1cm4g
Z2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZVNoZWV0TGlzdC5pdGVtKGFyZ3NbMF0udG9JbnQz
MihleGVjKSkpOworICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlU2hlZXRM
aXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwogICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKQEAgLTUwNyw3ICs1MDcsNyBAQCBET01NZWRpYUxpc3Q6On5ET01NZWRpYUxpc3QoKQog
ICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAK
LVZhbHVlIERPTU1lZGlhTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikKK1ZhbHVlSW1wICpET01NZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pCiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgY2FzZSBNZWRp
YVRleHQ6CkBAIC01MjAsNyArNTIwLDcgQEAgVmFsdWUgRE9NTWVkaWFMaXN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZQogICB9CiB9CiAKLVZhbHVlIERPTU1lZGlhTGlzdDo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpET01NZWRpYUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgIERPTU1lZGlhTGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERP
TU1lZGlhTGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxs
KHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkpKTsKQEAgLTU0NCwxMSArNTQ0LDEx
IEBAIGJvb2wgRE9NTWVkaWFMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgcmV0dXJuIERP
TU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLXZvaWQgRE9NTWVkaWFMaXN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2b2lkIERP
TU1lZGlhTGlzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBNZWRpYUxpc3RJbXBsICZt
ZWRpYUxpc3QgPSAqbV9pbXBsOwogICBpZiAocHJvcGVydHlOYW1lID09ICJtZWRpYVRleHQiKQot
ICAgIG1lZGlhTGlzdC5zZXRNZWRpYVRleHQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkp
OworICAgIG1lZGlhTGlzdC5zZXRNZWRpYVRleHQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpKTsKICAgZWxzZQogICAgIERPTU9iamVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIGF0dHIpOwogfQpAQCAtNTU4LDIyICs1NTgsMjIgQEAgVmFsdWVJbXAgKmdldERPTU1lZGlh
TGlzdChFeGVjU3RhdGUgKmV4ZQogICByZXR1cm4gY2FjaGVET01PYmplY3Q8TWVkaWFMaXN0SW1w
bCwgRE9NTWVkaWFMaXN0PihleGVjLCBtbCk7CiB9CiAKLVZhbHVlIEtKUzo6RE9NTWVkaWFMaXN0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKktKUzo6RE9NTWVkaWFMaXN0UHJvdG9GdW5jOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTU1lZGlhTGlzdDo6aW5m
bykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Cisg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NTWVkaWFMaXN0OjppbmZvKSkgeworICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQotICBNZWRpYUxpc3RJ
bXBsICZtZWRpYUxpc3QgPSAqc3RhdGljX2Nhc3Q8RE9NTWVkaWFMaXN0ICo+KHRoaXNPYmouaW1w
KCkpLT5pbXBsKCk7CisgIE1lZGlhTGlzdEltcGwgJm1lZGlhTGlzdCA9ICpzdGF0aWNfY2FzdDxE
T01NZWRpYUxpc3QgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNh
c2UgRE9NTWVkaWFMaXN0OjpJdGVtOgotICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChtZWRp
YUxpc3QuaXRlbShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBnZXRTdHJp
bmdPck51bGwobWVkaWFMaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwogICAgIGNh
c2UgRE9NTWVkaWFMaXN0OjpEZWxldGVNZWRpdW06Ci0gICAgICBtZWRpYUxpc3QuZGVsZXRlTWVk
aXVtKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgbWVkaWFMaXN0LmRl
bGV0ZU1lZGl1bShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01NZWRpYUxpc3Q6OkFwcGVuZE1lZGl1bToKLSAg
ICAgIG1lZGlhTGlzdC5hcHBlbmRNZWRpdW0oYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmco
KSk7CisgICAgICBtZWRpYUxpc3QuYXBwZW5kTWVkaXVtKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNjEyLDcgKzYxMiw3IEBAIERPTUNTU1N0eWxlU2hl
ZXQ6On5ET01DU1NTdHlsZVNoZWV0KCkKIHsKIH0KIAotVmFsdWUgRE9NQ1NTU3R5bGVTaGVldDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpET01DU1NTdHlsZVNoZWV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgT3duZXJSdWxl
OgpAQCAtNjMxLDI2ICs2MzEsMjQgQEAgYm9vbCBET01DU1NTdHlsZVNoZWV0OjpnZXRPd25Qcm9w
ZXJ0eVNsbwogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTUNTU1N0eWxlU2hlZXQsIERP
TVN0eWxlU2hlZXQ+KGV4ZWMsICZET01DU1NTdHlsZVNoZWV0VGFibGUsIHRoaXMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTUNTU1N0eWxlU2hlZXRQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1
ZUltcCAqRE9NQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICgh
dGhpc09iai5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZVNoZWV0OjppbmZvKSkgewotICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmS0pTOjpET01DU1NTdHlsZVNoZWV0OjppbmZvKSkgeworICAgIE9iamVjdElt
cCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICBET01FeGNlcHRpb25UcmFuc2xh
dG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgQ1NTU3R5bGVTaGVldEltcGwgJnN0eWxlU2hlZXQgPSAq
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NQ1NTU3R5bGVT
aGVldCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKLSAgVmFsdWUgcmVzdWx0OworICBDU1NT
dHlsZVNoZWV0SW1wbCAmc3R5bGVTaGVldCA9ICpzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1w
bCAqPihzdGF0aWNfY2FzdDxET01DU1NTdHlsZVNoZWV0ICo+KHRoaXNPYmopLT5pbXBsKCkpOwog
ICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01DU1NTdHlsZVNoZWV0OjpJbnNlcnRSdWxlOgot
ICAgICAgcmV0dXJuIE51bWJlcihzdHlsZVNoZWV0Lmluc2VydFJ1bGUoYXJnc1swXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAg
ICAgIGJyZWFrOworICAgICAgcmV0dXJuIE51bWJlcihzdHlsZVNoZWV0Lmluc2VydFJ1bGUoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwogICAgIGNhc2UgRE9NQ1NTU3R5bGVTaGVldDo6RGVsZXRlUnVsZToKLSAgICAg
IHN0eWxlU2hlZXQuZGVsZXRlUnVsZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7
CisgICAgICBzdHlsZVNoZWV0LmRlbGV0ZVJ1bGUoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhj
ZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUNTU1N0eWxl
U2hlZXQ6OkFkZFJ1bGU6IHsKLSAgICAgIGxvbmcgaW5kZXggPSBhcmdzLnNpemUoKSA+PSAzID8g
YXJnc1syXS50b0ludDMyKGV4ZWMpIDogLTE7Ci0gICAgICBzdHlsZVNoZWV0LmFkZFJ1bGUoYXJn
c1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgaW5kZXgsIGV4Y2VwdGlvbik7CisgICAgICBsb25nIGluZGV4ID0gYXJncy5zaXplKCkg
Pj0gMyA/IGFyZ3NbMl0tPnRvSW50MzIoZXhlYykgOiAtMTsKKyAgICAgIHN0eWxlU2hlZXQuYWRk
UnVsZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIGluZGV4LCBleGNlcHRpb24pOwogICAgICAgLy8gQXMgcGVyIE1pY3Jv
c29mdCBkb2N1bWVudGF0aW9uLCBhbHdheXMgcmV0dXJuIC0xLgogICAgICAgcmV0dXJuIE51bWJl
cigtMSk7CiAgICAgfQpAQCAtNjc0LDcgKzY3Miw3IEBAIERPTUNTU1J1bGVMaXN0Ojp+RE9NQ1NT
UnVsZUxpc3QoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5n
ZXQoKSk7CiB9CiAKLVZhbHVlIERPTUNTU1J1bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUNTU1J1bGVMaXN0Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBz
d2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgTGVuZ3RoOgpAQCAtNjg1LDcgKzY4Myw3IEBAIFZhbHVl
IERPTUNTU1J1bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEUKICAgfQogfQogCi1WYWx1ZSBET01D
U1NSdWxlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpET01D
U1NSdWxlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NQ1NTUnVs
ZUxpc3QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NSdWxlTGlzdCAqPihzbG90LnNsb3RC
YXNlKCkpOwogICByZXR1cm4gZ2V0RE9NQ1NTUnVsZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0
ZW0oc2xvdC5pbmRleCgpKSk7CkBAIC03MTUsMTcgKzcxMywxNyBAQCBib29sIERPTUNTU1J1bGVM
aXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCiAgIHJldHVybiBET01PYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1ZSBET01DU1NSdWxl
TGlzdEZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NQ1NTUnVsZUxpc3RGdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
LSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTUNTU1J1bGVMaXN0OjppbmZvKSkgewot
ICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01DU1NSdWxlTGlzdDo6aW5mbykpIHsKKyAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgQ1NTUnVsZUxpc3RJbXBs
ICZjc3NSdWxlTGlzdCA9ICpzdGF0aWNfY2FzdDxET01DU1NSdWxlTGlzdCAqPih0aGlzT2JqLmlt
cCgpKS0+aW1wbCgpOworICBDU1NSdWxlTGlzdEltcGwgJmNzc1J1bGVMaXN0ID0gKnN0YXRpY19j
YXN0PERPTUNTU1J1bGVMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsK
ICAgICBjYXNlIERPTUNTU1J1bGVMaXN0OjpJdGVtOgotICAgICAgcmV0dXJuIGdldERPTUNTU1J1
bGUoZXhlYyxjc3NSdWxlTGlzdC5pdGVtKGFyZ3NbMF0udG9JbnQzMihleGVjKSkpOworICAgICAg
cmV0dXJuIGdldERPTUNTU1J1bGUoZXhlYyxjc3NSdWxlTGlzdC5pdGVtKGFyZ3NbMF0tPnRvSW50
MzIoZXhlYykpKTsKICAgICBkZWZhdWx0OgogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICB9
CkBAIC04MjAsNyArODE4LDcgQEAgYm9vbCBET01DU1NSdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlYwogICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PERPTUNTU1J1bGVGdW5jLCBET01D
U1NSdWxlLCBET01PYmplY3Q+KGV4ZWMsICZET01DU1NSdWxlVGFibGUsIHRoaXMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTUNTU1J1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ1NTUnVsZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgQ1NT
UnVsZUltcGwgJmNzc1J1bGUgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC04NzMs
NyArODcxLDcgQEAgVmFsdWUgRE9NQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgRE9NQ1NTUnVsZTo6cHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGludCBhdHRyKQordm9pZCBET01DU1NSdWxlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAg
IGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8g
Z2V0IHRoZSByaWdodCBoYXNodGFibGUKICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1
cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwpAQCAtODkyLDIyICs4OTAsMjIgQEAg
dm9pZCBET01DU1NSdWxlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjbwogICBsb29rdXBQdXQ8RE9N
Q1NTUnVsZSwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9N
Q1NTUnVsZVRhYmxlLCB0aGlzKTsKIH0KIAotdm9pZCBET01DU1NSdWxlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkK
K3ZvaWQgRE9NQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgLy8g
Zm9yIERPTTo6Q1NTUnVsZTo6U1RZTEVfUlVMRToKICAgY2FzZSBTdHlsZV9TZWxlY3RvclRleHQ6
Ci0gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zZXRT
ZWxlY3RvclRleHQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JUZXh0KHZh
bHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIC8vIGZvciBE
T006OkNTU1J1bGU6OlBBR0VfUlVMRToKICAgY2FzZSBQYWdlX1NlbGVjdG9yVGV4dDoKLSAgICBz
dGF0aWNfY2FzdDxDU1NQYWdlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JU
ZXh0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBzdGF0aWNfY2FzdDxDU1NQ
YWdlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2V0U2VsZWN0b3JUZXh0KHZhbHVlLT50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIC8vIGZvciBET006OkNTU1J1
bGU6OkNIQVJTRVRfUlVMRToKICAgY2FzZSBDaGFyc2V0X0VuY29kaW5nOgotICAgIHN0YXRpY19j
YXN0PENTU0NoYXJzZXRSdWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zZXRFbmNvZGluZyh2YWx1
ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPnNldEVuY29kaW5nKHZhbHVlLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSk7CiAgICAgcmV0dXJuOwogCiAgIGRlZmF1bHQ6CkBAIC05MTUsMjEgKzkxMywy
MSBAQCB2b2lkIERPTUNTU1J1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0CiAgIH0KIH0KIAot
VmFsdWUgRE9NQ1NTUnVsZUZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NQ1NTUnVsZUZ1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZTo6aW5mbykp
IHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlm
ICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTUnVsZTo6aW5mbykpIHsKKyAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgQ1NTUnVsZUltcGwgJmNz
c1J1bGUgPSAqc3RhdGljX2Nhc3Q8RE9NQ1NTUnVsZSAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgp
OworICBDU1NSdWxlSW1wbCAmY3NzUnVsZSA9ICpzdGF0aWNfY2FzdDxET01DU1NSdWxlICo+KHRo
aXNPYmopLT5pbXBsKCk7CiAKICAgaWYgKGNzc1J1bGUudHlwZSgpID09IERPTTo6Q1NTUnVsZTo6
TUVESUFfUlVMRSkgewogICAgIENTU01lZGlhUnVsZUltcGwgJnJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NNZWRpYVJ1bGVJbXBsICY+KGNzc1J1bGUpOwogICAgIGlmIChpZCA9PSBET01DU1NSdWxlOjpN
ZWRpYV9JbnNlcnRSdWxlKQotICAgICAgcmV0dXJuIE51bWJlcihydWxlLmluc2VydFJ1bGUoYXJn
c1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxhcmdzWzFdLnRvSW50MzIoZXhlYykpKTsKKyAg
ICAgIHJldHVybiBOdW1iZXIocnVsZS5pbnNlcnRSdWxlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKICAgICBlbHNlIGlmIChpZCA9PSBE
T01DU1NSdWxlOjpNZWRpYV9EZWxldGVSdWxlKQotICAgICAgcnVsZS5kZWxldGVSdWxlKGFyZ3Nb
MF0udG9JbnQzMihleGVjKSk7CisgICAgICBydWxlLmRlbGV0ZVJ1bGUoYXJnc1swXS0+dG9JbnQz
MihleGVjKSk7CiAgIH0KIAogICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC05NjAsNyArOTU4LDcg
QEAgYm9vbCBDU1NSdWxlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5UwogICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVTbG90PENTU1J1bGVDb25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmQ1NT
UnVsZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZh
bHVlIENTU1J1bGVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7
CiAgIGNhc2UgVU5LTk9XTl9SVUxFOgpAQCAtOTc4LDEwICs5NzYsMTAgQEAgVmFsdWUgQ1NTUnVs
ZUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcgogICBjYXNlIFBBR0VfUlVMRToKICAgICByZXR1
cm4gTnVtYmVyKERPTTo6Q1NTUnVsZTo6UEFHRV9SVUxFKTsKICAgfQotICByZXR1cm4gVmFsdWUo
KTsKKyAgcmV0dXJuIE5VTEw7CiB9CiAKLVZhbHVlIGdldENTU1J1bGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0Q1NTUnVsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAq
ZXhlYykKIHsKICAgcmV0dXJuIGNhY2hlR2xvYmFsT2JqZWN0PENTU1J1bGVDb25zdHJ1Y3Rvcj4o
IGV4ZWMsICJbW2Nzc1J1bGUuY29uc3RydWN0b3JdXSIgKTsKIH0KQEAgLTEwMDEsNyArOTk5LDcg
QEAgRE9NQ1NTVmFsdWU6On5ET01DU1NWYWx1ZSgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3Jn
ZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotVmFsdWUgRE9NQ1NTVmFsdWU6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
RE9NQ1NTVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAgIENTU1ZhbHVlSW1wbCAmY3NzVmFsdWUgPSAqbV9pbXBsOwogICBzd2l0Y2gg
KHRva2VuKSB7CkBAIC0xMDIwLDExICsxMDE4LDExIEBAIGJvb2wgRE9NQ1NTVmFsdWU6OmdldE93
blByb3BlcnR5U2xvdChFeGUKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01DU1NWYWx1
ZSwgRE9NT2JqZWN0PihleGVjLCAmRE9NQ1NTVmFsdWVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAotdm9pZCBET01DU1NWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRy
KQordm9pZCBET01DU1NWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICBDU1NWYWx1
ZUltcGwgJmNzc1ZhbHVlID0gKm1faW1wbDsKICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiY3NzVGV4
dCIpCi0gICAgY3NzVmFsdWUuc2V0Q3NzVGV4dCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmco
KSk7CisgICAgY3NzVmFsdWUuc2V0Q3NzVGV4dCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpOwogICBlbHNlCiAgICAgRE9NT2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYXR0cik7CiB9CkBAIC0xMDM2LDcgKzEwMzQsNyBAQCBWYWx1ZUltcCAqZ2V0RE9NQ1NTVmFs
dWUoRXhlY1N0YXRlICpleGVjCiAgICAgcmV0dXJuIE51bGwoKTsKICAgU2NyaXB0SW50ZXJwcmV0
ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFt
aWNJbnRlcnByZXRlcigpKTsKICAgaWYgKChyZXQgPSBpbnRlcnAtPmdldERPTU9iamVjdCh2KSkp
Ci0gICAgcmV0dXJuIFZhbHVlKHJldCk7CisgICAgcmV0dXJuIHJldDsKICAgZWxzZSB7CiAgICAg
aWYgKHYtPmlzVmFsdWVMaXN0KCkpCiAgICAgICByZXQgPSBuZXcgRE9NQ1NTVmFsdWVMaXN0KGV4
ZWMsIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdEltcGwgKj4odikpOwpAQCAtMTA2NSw3ICsxMDYz
LDcgQEAgYm9vbCBDU1NWYWx1ZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eQogICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PENTU1ZhbHVlQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywg
JkNTU1ZhbHVlQ29uc3RydWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
IAotVmFsdWUgQ1NTVmFsdWVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1ZhbHVlQ29uc3RydWN0b3I6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0
b2tlbikgewogICBjYXNlIENTU19JTkhFUklUOgpAQCAtMTA3NywxMCArMTA3NSwxMCBAQCBWYWx1
ZSBDU1NWYWx1ZUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlCiAgIGNhc2UgQ1NTX0NVU1RPTToK
ICAgICByZXR1cm4gTnVtYmVyKERPTTo6Q1NTVmFsdWU6OkNTU19DVVNUT00pOwogICB9Ci0gIHJl
dHVybiBWYWx1ZSgpOworICByZXR1cm4gTlVMTDsKIH0KIAotVmFsdWUgZ2V0Q1NTVmFsdWVDb25z
dHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0Q1NTVmFsdWVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJldHVybiBjYWNoZUdsb2JhbE9iamVjdDxDU1NWYWx1
ZUNvbnN0cnVjdG9yPiggZXhlYywgIltbY3NzVmFsdWUuY29uc3RydWN0b3JdXSIgKTsKIH0KQEAg
LTExMTIsNyArMTExMCw3IEBAIERPTUNTU1ByaW1pdGl2ZVZhbHVlOjpET01DU1NQcmltaXRpdmVW
YWwKICAgc2V0UHJvdG90eXBlKERPTUNTU1ByaW1pdGl2ZVZhbHVlUHJvdG86OnNlbGYoZXhlYykp
OwogfQogCi1WYWx1ZSBET01DU1NQcmltaXRpdmVWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikKK1ZhbHVlSW1wICpET01DU1NQcmltaXRpdmVWYWx1ZTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikKIHsKICAgYXNzZXJ0
KHRva2VuID09IFByaW1pdGl2ZVR5cGUpOwogICByZXR1cm4gTnVtYmVyKHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlSW1wbCAqPihpbXBsKCkpLT5wcmltaXRpdmVUeXBlKCkpOwpAQCAtMTEy
MywyMyArMTEyMSwyMyBAQCBib29sIERPTUNTU1ByaW1pdGl2ZVZhbHVlOjpnZXRPd25Qcm9wZXJ0
CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NQ1NTUHJpbWl0aXZlVmFsdWUsIERPTUNT
U1ZhbHVlPihleGVjLCAmRE9NQ1NTUHJpbWl0aXZlVmFsdWVUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotVmFsdWUgRE9NQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqRE9NQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ1NTUHJpbWl0aXZlVmFsdWU6OmluZm8p
KSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjppbmZvKSkg
eworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQogICBET01F
eGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgQ1NTUHJpbWl0aXZlVmFsdWVJ
bXBsICZ2YWwgPSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KHN0YXRpY19j
YXN0PERPTUNTU1ByaW1pdGl2ZVZhbHVlICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworICBD
U1NQcmltaXRpdmVWYWx1ZUltcGwgJnZhbCA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZUltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKj4odGhpc09iaiktPmlt
cGwoKSk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTUNTU1ByaW1pdGl2ZVZhbHVlOjpT
ZXRGbG9hdFZhbHVlOgotICAgICAgdmFsLnNldEZsb2F0VmFsdWUoYXJnc1swXS50b0ludDMyKGV4
ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgdmFsLnNldEZs
b2F0VmFsdWUoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyks
IGV4Y2VwdGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01DU1NQ
cmltaXRpdmVWYWx1ZTo6R2V0RmxvYXRWYWx1ZToKLSAgICAgIHJldHVybiBOdW1iZXIodmFsLmdl
dEZsb2F0VmFsdWUoYXJnc1swXS50b0ludDMyKGV4ZWMpKSk7CisgICAgICByZXR1cm4gTnVtYmVy
KHZhbC5nZXRGbG9hdFZhbHVlKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKICAgICBjYXNlIERP
TUNTU1ByaW1pdGl2ZVZhbHVlOjpTZXRTdHJpbmdWYWx1ZToKLSAgICAgIHZhbC5zZXRTdHJpbmdW
YWx1ZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIGV4Y2VwdGlvbik7CisgICAgICB2YWwuc2V0U3RyaW5nVmFsdWUoYXJnc1swXS0+dG9JbnQz
MihleGVjKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01DU1NQcmltaXRpdmVWYWx1ZTo6
R2V0U3RyaW5nVmFsdWU6CiAgICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKHZhbC5nZXRTdHJp
bmdWYWx1ZSgpKTsKQEAgLTExOTQsMTMgKzExOTIsMTMgQEAgYm9vbCBDU1NQcmltaXRpdmVWYWx1
ZUNvbnN0cnVjdG9yOjpnZXRPdwogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PENTU1ByaW1p
dGl2ZVZhbHVlQ29uc3RydWN0b3IsIENTU1ZhbHVlQ29uc3RydWN0b3I+KGV4ZWMsICZDU1NQcmlt
aXRpdmVWYWx1ZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NQcmltaXRpdmVWYWx1
ZUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAgIC8vIFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRvIHJldHVybiBkaXJl
Y3RseQogICByZXR1cm4gTnVtYmVyKHRva2VuKTsKIH0KIAotVmFsdWUgZ2V0Q1NTUHJpbWl0aXZl
VmFsdWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0Q1NTUHJpbWl0
aXZlVmFsdWVDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJldHVybiBjYWNoZUds
b2JhbE9iamVjdDxDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yPiggZXhlYywgIltbY3NzUHJp
bWl0aXZlVmFsdWUuY29uc3RydWN0b3JdXSIgKTsKIH0KQEAgLTEyMjIsMTMgKzEyMjAsMTMgQEAg
RE9NQ1NTVmFsdWVMaXN0OjpET01DU1NWYWx1ZUxpc3QoRXhlY1N0YQogeyAKIH0KIAotVmFsdWUg
RE9NQ1NTVmFsdWVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUNTU1ZhbHVlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgYXNzZXJ0KHRva2VuID09IExl
bmd0aCk7CiAgIHJldHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0SW1wbCAqPihp
bXBsKCkpLT5sZW5ndGgoKSk7CiB9CiAKLVZhbHVlIERPTUNTU1ZhbHVlTGlzdDo6aW5kZXhHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpET01DU1NWYWx1ZUxpc3Q6OmluZGV4R2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTUNTU1ZhbHVlTGlzdCAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PERPTUNTU1ZhbHVlTGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4g
Z2V0RE9NQ1NTVmFsdWUoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0SW1wbCAqPih0aGlz
T2JqLT5pbXBsKCkpLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwpAQCAtMTI1NSwxNyArMTI1MywxNyBA
QCBib29sIERPTUNTU1ZhbHVlTGlzdDo6Z2V0T3duUHJvcGVydHlTbG90CiAgIHJldHVybiBET01D
U1NWYWx1ZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIERPTUNTU1ZhbHVlTGlzdEZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NQ1NTVmFsdWVMaXN0
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01D
U1NWYWx1ZTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ1NTVmFsdWU6Omlu
Zm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0g
IENTU1ZhbHVlTGlzdEltcGwgJnZhbHVlTGlzdCA9ICpzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3RJ
bXBsICo+KHN0YXRpY19jYXN0PERPTUNTU1ZhbHVlTGlzdCAqPih0aGlzT2JqLmltcCgpKS0+aW1w
bCgpKTsKKyAgQ1NTVmFsdWVMaXN0SW1wbCAmdmFsdWVMaXN0ID0gKnN0YXRpY19jYXN0PENTU1Zh
bHVlTGlzdEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NQ1NTVmFsdWVMaXN0ICo+KHRoaXNPYmopLT5p
bXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01DU1NWYWx1ZUxpc3Q6Okl0ZW06
Ci0gICAgICByZXR1cm4gZ2V0RE9NQ1NTVmFsdWUoZXhlYyx2YWx1ZUxpc3QuaXRlbShhcmdzWzBd
LnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBnZXRET01DU1NWYWx1ZShleGVjLHZhbHVl
TGlzdC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKICAgICBkZWZhdWx0OgogICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogICB9CkBAIC0xMjkyLDcgKzEyOTAsNyBAQCBib29sIERPTVJH
QkNvbG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNs
b3Q8RE9NUkdCQ29sb3IsIERPTU9iamVjdD4oZXhlYywgJkRPTVJHQkNvbG9yVGFibGUsIHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTVJHQkNvbG9yOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVJH
QkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICBpbnQgY29sb3IgPSBtX2NvbG9yOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xMzA1
LDcgKzEzMDMsNyBAQCBWYWx1ZSBET01SR0JDb2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAg
IGNhc2UgQmx1ZToKICAgICByZXR1cm4gbmV3IERPTUNTU1ByaW1pdGl2ZVZhbHVlKGV4ZWMsIG5l
dyBDU1NQcmltaXRpdmVWYWx1ZUltcGwoY29sb3IgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOwogICBkZWZhdWx0OgotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVy
biBOVUxMOwogICB9CiB9CiAKQEAgLTEzMzYsNyArMTMzNCw3IEBAIGJvb2wgRE9NUmVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGEKICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01S
ZWN0LCBET01PYmplY3Q+KGV4ZWMsICAmRE9NUmVjdFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1WYWx1ZSBET01SZWN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVJlY3Q6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIFJlY3RJbXBsICZyZWN0
ID0gKm1fcmVjdDsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTM0OSw3ICsxMzQ3LDcgQEAgVmFs
dWUgRE9NUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogICBjYXNlIExlZnQ6CiAgICAg
cmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIHJlY3QubGVmdCgpKTsKICAgZGVmYXVsdDoKLSAg
ICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCkBAIC0xMzc5LDcg
KzEzNzcsNyBAQCBib29sIERPTUNvdW50ZXI6OmdldE93blByb3BlcnR5U2xvdChFeGVjCiAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NQ291bnRlciwgRE9NT2JqZWN0PihleGVjLCAmRE9N
Q291bnRlclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1ZSBET01D
b3VudGVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqRE9NQ291bnRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAogewogICBDb3VudGVySW1wbCAmY291bnRlciA9ICptX2NvdW50ZXI7CiAgIHN3
aXRjaCAodG9rZW4pIHsKQEAgLTEzOTAsNyArMTM4OCw3IEBAIFZhbHVlIERPTUNvdW50ZXI6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1MKICAgY2FzZSBzZXBhcmF0b3I6CiAgICAgcmV0dXJuIGdldFN0
cmluZ09yTnVsbChjb3VudGVyLnNlcGFyYXRvcigpKTsKICAgZGVmYXVsdDoKLSAgICByZXR1cm4g
VmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2Nzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEva2pzX2Nzcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXAgLXUg
LXIxLjE4IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfY3NzLmgJNyBBdWcgMjAwNSAwNjoxNzo0NSAtMDAwMAkxLjE4CisrKyBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2Nzcy5oCTggQXVnIDIwMDUgMDE6MDE6MTIgLTAwMDAKQEAgLTUwLDggKzUw
LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnMpOwogICAgIHZpcnR1YWwg
fkRPTUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pOworICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICBWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbik7CiAKICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC02MCw4ICs2MCw4IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICBHZXRQcm9wZXJ0eVByaW9yaXR5LCBTZXRQcm9wZXJ0eSwg
SXRlbSB9OwogICAgIERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKmltcGwoKSBjb25zdCB7
IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFsdWUgaW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgVmFsdWUgY3NzUHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgVmFsdWVJ
bXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICpjc3NQcm9wZXJ0eUdldHRlcihFeGVj
U3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAg
a2h0bWw6OlNoYXJlZFB0cjxET006OkNTU1N0eWxlRGVjbGFyYXRpb25JbXBsPiBtX2ltcGw7CiAg
IH07CkBAIC03Myw4ICs3Myw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIERPTVN0eWxlU2hlZXQo
RXhlY1N0YXRlICosIERPTTo6U3R5bGVTaGVldEltcGwgKnNzKSA6IG1faW1wbChzcykgeyB9CiAg
ICAgdmlydHVhbCB+RE9NU3R5bGVTaGVldCgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7
CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25l
KTsKICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAt
OTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIDogbV9pbXBsKHNzbCksIG1fZG9j
KGRvYykgeyB9CiAgICAgdmlydHVhbCB+RE9NU3R5bGVTaGVldExpc3QoKTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFk
LW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSogKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDMsOCArMTAzLDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgRE9NOjpTdHlsZVNoZWV0TGlzdEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwuZ2V0KCk7IH0KICAgICBlbnVtIHsgSXRlbSwgTGVuZ3RoIH07CiAgIHByaXZhdGU6Ci0gICAg
c3RhdGljIFZhbHVlIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIFZhbHVlIG5hbWVHZXR0ZXIoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAg
ICBraHRtbDo6U2hhcmVkUHRyPERPTTo6U3R5bGVTaGVldExpc3RJbXBsPiBtX2ltcGw7CiAgICAg
a2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gbV9kb2M7CkBAIC0xMTgsOCArMTE4
LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NTWVkaWFMaXN0KEV4ZWNTdGF0ZSAqLCBET006
Ok1lZGlhTGlzdEltcGwgKm1sKTsKICAgICB2aXJ0dWFsIH5ET01NZWRpYUxpc3QoKTsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBp
bnQgYXR0ciA9IE5vbmUpOworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3Rh
dGUqICkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgSXRl
bSwgRGVsZXRlTWVkaXVtLCBBcHBlbmRNZWRpdW0gfTsKICAgICBET006Ok1lZGlhTGlzdEltcGwg
KmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBz
dGF0aWMgVmFsdWUgaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006Ok1lZGlhTGlzdEltcGw+IG1f
aW1wbDsKICAgfTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIERP
TUNTU1N0eWxlU2hlZXQoRXhlY1N0YXRlICpleGVjLCBET006OkNTU1N0eWxlU2hlZXRJbXBsICpz
cyk7CiAgICAgdmlydHVhbCB+RE9NQ1NTU3R5bGVTaGVldCgpOwogICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQog
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTE1MCwxNCArMTUw
LDE0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIERPTUNTU1J1bGVMaXN0KEV4ZWNTdGF0ZSAqLCBE
T006OkNTU1J1bGVMaXN0SW1wbCAqcmwpIDogbV9pbXBsKHJsKSB7IH0KICAgICB2aXJ0dWFsIH5E
T01DU1NSdWxlTGlzdCgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgSXRlbSwgTGVuZ3RoIH07CiAgICAgRE9N
OjpDU1NSdWxlTGlzdEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0K
ICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFsdWUgaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0
aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRyPERP
TTo6Q1NTUnVsZUxpc3RJbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0xNjksOSArMTY5LDkgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgRE9NQ1NTUnVsZShFeGVjU3RhdGUgKiwgRE9NOjpDU1NSdWxlSW1w
bCAqcikgOiBtX2ltcGwocikgeyB9CiAgICAgdmlydHVhbCB+RE9NQ1NTUnVsZSgpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKTsKKyAgICBW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0cik7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0OwogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHN0eWxlX2luZm8sIG1lZGlhX2luZm8sIGZvbnRmYWNlX2luZm8s
IHBhZ2VfaW5mbywgaW1wb3J0X2luZm8sIGNoYXJzZXRfaW5mbzsKQEAgLTE5MSwyMiArMTkxLDIy
IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQ1NTUnVsZUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSAqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IFVOS05PV05fUlVMRSwgU1RZTEVfUlVMRSwg
Q0hBUlNFVF9SVUxFLCBJTVBPUlRfUlVMRSwgTUVESUFfUlVMRSwgRk9OVF9GQUNFX1JVTEUsIFBB
R0VfUlVMRSB9OwogICB9OwogCi0gIFZhbHVlIGdldENTU1J1bGVDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUgKmV4ZWMpOworICBWYWx1ZUltcCAqZ2V0Q1NTUnVsZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAq
ZXhlYyk7CiAKICAgY2xhc3MgRE9NQ1NTVmFsdWUgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgcHVi
bGljOgogICAgIERPTUNTU1ZhbHVlKEV4ZWNTdGF0ZSAqLCBET006OkNTU1ZhbHVlSW1wbCAqdikg
OiBtX2ltcGwodikgeyB9CiAgICAgdmlydHVhbCB+RE9NQ1NTVmFsdWUoKTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBp
bnQgYXR0ciA9IE5vbmUpOworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOwogICAgIGVudW0geyBDc3NUZXh0LCBDc3NWYWx1ZVR5cGUgfTsKQEAgLTIyNSwyMCArMjI1
LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQ1NTVmFsdWVDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUgKikgeyB9CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVl
IGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBDU1NfVkFMVUVfTElTVCwgQ1NTX1BS
SU1JVElWRV9WQUxVRSwgQ1NTX0NVU1RPTSwgQ1NTX0lOSEVSSVQgfTsKICAgfTsKIAotICBWYWx1
ZSBnZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpn
ZXRDU1NWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKICAgY2xhc3MgRE9NQ1NT
UHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgRE9NQ1NTVmFsdWUgewogICBwdWJsaWM6CiAgICAgRE9N
Q1NTUHJpbWl0aXZlVmFsdWUoRXhlY1N0YXRlICpleGVjLCBET006OkNTU1ByaW1pdGl2ZVZhbHVl
SW1wbCAqdik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUg
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pOworICAgIFZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKTsKICAgICAvLyBubyBwdXQg
LSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwpAQCAtMjUxLDI1ICsyNTEsMjUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBD
U1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykgOiBDU1NWYWx1ZUNv
bnN0cnVjdG9yKGV4ZWMpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgfTsKIAotICBWYWx1ZSBnZXRDU1NQcmltaXRpdmVW
YWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpnZXRDU1NQcmlt
aXRpdmVWYWx1ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKICAgY2xhc3MgRE9NQ1NT
VmFsdWVMaXN0IDogcHVibGljIERPTUNTU1ZhbHVlIHsKICAgcHVibGljOgogICAgIERPTUNTU1Zh
bHVlTGlzdChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Q1NTVmFsdWVMaXN0SW1wbCAqbCk7CiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBh
bGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
ICAgIGVudW0geyBMZW5ndGgsIEl0ZW0gfTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFsdWUg
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7
CiAgIH07CiAKICAgY2xhc3MgRE9NUkdCQ29sb3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET01SR0JDb2xvcih1bnNpZ25lZCBj
b2xvcikgOiBtX2NvbG9yKGNvbG9yKSB7IH0KICAgICB+RE9NUkdCQ29sb3IoKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCBy
ZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0y
OTMsNyArMjkzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NUmVjdChFeGVjU3RhdGUgKiwg
RE9NOjpSZWN0SW1wbCAqcikgOiBtX3JlY3QocikgeyB9CiAgICAgfkRPTVJlY3QoKTsKICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFs
bCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBA
IC0zMDksNyArMzA5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NQ291bnRlcihFeGVjU3Rh
dGUgKiwgRE9NOjpDb3VudGVySW1wbCAqYykgOiBtX2NvdW50ZXIoYykgeyB9CiAgICAgfkRPTUNv
dW50ZXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAg
IC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NQpkaWZmIC1wIC11IC1yMS44NSBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2RvbS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAk3IEF1
ZyAyMDA1IDE4OjQ2OjQ0IC0wMDAwCTEuODUKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9t
LmNwcAk4IEF1ZyAyMDA1IDAxOjAxOjE2IC0wMDAwCkBAIC04Nyw4ICs4Nyw3IEBAIGNsYXNzIERP
TU5vZGVMaXN0RnVuYyA6IHB1YmxpYyBET01GdW5jdGkKICAgICBmcmllbmQgY2xhc3MgRE9NTm9k
ZUxpc3Q7CiBwdWJsaWM6CiAgICAgRE9NTm9kZUxpc3RGdW5jKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IGlkLCBpbnQgbGVuKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJik7Ci0gICAgZW51bSB7IEl0ZW0gfTsKKyAgICB2
aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKTsKIHByaXZhdGU6CiAgICAgaW50IGlkOwogfTsKQEAg
LTI3Niw3ICsyNzUsNyBAQCBib29sIERPTU5vZGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NTm9kZSwgRE9NT2JqZWN0PihleGVjLCAm
RE9NTm9kZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1ZSBET01O
b2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkRPTU5vZGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAgIE5vZGVJbXBsICZub2RlID0gKm1faW1wbDsKICAgc3dpdGNoICh0
b2tlbikgewpAQCAtNDA4LDI1ICs0MDcsMjUgQEAgVmFsdWUgRE9NTm9kZTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdAogCiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgT2Zmc2V0TGVm
dDoKLSAgICAgIHJldHVybiByZW5kID8gc3RhdGljX2Nhc3Q8VmFsdWU+KE51bWJlcihyZW5kLT5v
ZmZzZXRMZWZ0KCkpKSA6IFZhbHVlKFVuZGVmaW5lZCgpKTsKKyAgICAgIHJldHVybiByZW5kID8g
anNOdW1iZXIocmVuZC0+b2Zmc2V0TGVmdCgpKSA6IHN0YXRpY19jYXN0PFZhbHVlSW1wICo+KGpz
VW5kZWZpbmVkKCkpOwogICAgIGNhc2UgT2Zmc2V0VG9wOgotICAgICAgcmV0dXJuIHJlbmQgPyBz
dGF0aWNfY2FzdDxWYWx1ZT4oTnVtYmVyKHJlbmQtPm9mZnNldFRvcCgpKSkgOiBWYWx1ZShVbmRl
ZmluZWQoKSk7CisgICAgICByZXR1cm4gcmVuZCA/IGpzTnVtYmVyKHJlbmQtPm9mZnNldFRvcCgp
KSA6IHN0YXRpY19jYXN0PFZhbHVlSW1wICo+KGpzVW5kZWZpbmVkKCkpOwogICAgIGNhc2UgT2Zm
c2V0V2lkdGg6Ci0gICAgICByZXR1cm4gcmVuZCA/IHN0YXRpY19jYXN0PFZhbHVlPihOdW1iZXIo
cmVuZC0+b2Zmc2V0V2lkdGgoKSkgKSA6IFZhbHVlKFVuZGVmaW5lZCgpKTsKKyAgICAgIHJldHVy
biByZW5kID8ganNOdW1iZXIocmVuZC0+b2Zmc2V0V2lkdGgoKSkgOiBzdGF0aWNfY2FzdDxWYWx1
ZUltcCAqPihqc1VuZGVmaW5lZCgpKTsKICAgICBjYXNlIE9mZnNldEhlaWdodDoKLSAgICAgIHJl
dHVybiByZW5kID8gc3RhdGljX2Nhc3Q8VmFsdWU+KE51bWJlcihyZW5kLT5vZmZzZXRIZWlnaHQo
KSApICkgOiBWYWx1ZShVbmRlZmluZWQoKSk7CisgICAgICByZXR1cm4gcmVuZCA/IGpzTnVtYmVy
KHJlbmQtPm9mZnNldEhlaWdodCgpKSA6IHN0YXRpY19jYXN0PFZhbHVlSW1wICo+KGpzVW5kZWZp
bmVkKCkpOwogICAgIGNhc2UgT2Zmc2V0UGFyZW50OiB7CiAgICAgICBraHRtbDo6UmVuZGVyT2Jq
ZWN0KiBwYXIgPSByZW5kID8gcmVuZC0+b2Zmc2V0UGFyZW50KCkgOiAwOwogICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYywgcGFyID8gcGFyLT5lbGVtZW50KCkgOiAwKTsKICAgICB9CiAgICAg
Y2FzZSBDbGllbnRXaWR0aDoKLSAgICAgIHJldHVybiByZW5kID8gc3RhdGljX2Nhc3Q8VmFsdWU+
KE51bWJlcihyZW5kLT5jbGllbnRXaWR0aCgpKSApIDogVmFsdWUoVW5kZWZpbmVkKCkpOworICAg
ICAgcmV0dXJuIHJlbmQgPyBqc051bWJlcihyZW5kLT5jbGllbnRXaWR0aCgpKSA6IHN0YXRpY19j
YXN0PFZhbHVlSW1wICo+KGpzVW5kZWZpbmVkKCkpOwogICAgIGNhc2UgQ2xpZW50SGVpZ2h0Ogot
ICAgICAgcmV0dXJuIHJlbmQgPyBzdGF0aWNfY2FzdDxWYWx1ZT4oTnVtYmVyKHJlbmQtPmNsaWVu
dEhlaWdodCgpKSApIDogVmFsdWUoVW5kZWZpbmVkKCkpOworICAgICAgcmV0dXJuIHJlbmQgPyBq
c051bWJlcihyZW5kLT5jbGllbnRIZWlnaHQoKSkgOiBzdGF0aWNfY2FzdDxWYWx1ZUltcCAqPihq
c1VuZGVmaW5lZCgpKTsKICAgICBjYXNlIFNjcm9sbFdpZHRoOgotICAgICAgICByZXR1cm4gcmVu
ZCA/IHN0YXRpY19jYXN0PFZhbHVlPihOdW1iZXIocmVuZC0+c2Nyb2xsV2lkdGgoKSkgKSA6IFZh
bHVlKFVuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIHJlbmQgPyBqc051bWJlcihyZW5kLT5z
Y3JvbGxXaWR0aCgpKSA6IHN0YXRpY19jYXN0PFZhbHVlSW1wICo+KGpzVW5kZWZpbmVkKCkpOwog
ICAgIGNhc2UgU2Nyb2xsSGVpZ2h0OgotICAgICAgICByZXR1cm4gcmVuZCA/IHN0YXRpY19jYXN0
PFZhbHVlPihOdW1iZXIocmVuZC0+c2Nyb2xsSGVpZ2h0KCkpICkgOiBWYWx1ZShVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiByZW5kID8ganNOdW1iZXIocmVuZC0+c2Nyb2xsSGVpZ2h0KCkp
IDogc3RhdGljX2Nhc3Q8VmFsdWVJbXAgKj4oanNVbmRlZmluZWQoKSk7CiAgICAgY2FzZSBTY3Jv
bGxMZWZ0OgogICAgICAgcmV0dXJuIE51bWJlcihyZW5kICYmIHJlbmQtPmxheWVyKCkgPyByZW5k
LT5sYXllcigpLT5zY3JvbGxYT2Zmc2V0KCkgOiAwKTsKICAgICBjYXNlIFNjcm9sbFRvcDoKQEAg
LTQzNywxMCArNDM2LDEwIEBAIFZhbHVlIERPTU5vZGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXQKICAgICB9CiAgIH0KIAotICByZXR1cm4gVmFsdWUoKTsKKyAgcmV0dXJuIE5VTEw7CiB9CiAK
LXZvaWQgRE9NTm9kZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQordm9pZCBET01Ob2RlOjpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2
MDcwKSA8PCAiRE9NTm9kZTo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OwpAQCAtNDQ5LDE2ICs0NDgsMTYgQEAgdm9pZCBET01Ob2RlOjpwdXQoRXhlY1N0YXRlICpleGVj
LCBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZET01Ob2Rl
VGFibGUsIHRoaXMgKTsKIH0KIAotdm9pZCBET01Ob2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLykK
K3ZvaWQgRE9NTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pCiB7CiAgIERPTUV4Y2VwdGlvblRyYW5z
bGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBOb2RlSW1wbCAmbm9kZSA9ICptX2ltcGw7CiAgIHN3
aXRjaCAodG9rZW4pIHsKICAgY2FzZSBOb2RlVmFsdWU6Ci0gICAgbm9kZS5zZXROb2RlVmFsdWUo
dmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgbm9kZS5zZXRO
b2RlVmFsdWUodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAg
IGJyZWFrOwogICBjYXNlIFByZWZpeDoKLSAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb24pOworICAgIG5vZGUu
c2V0UHJlZml4KHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigp
LCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIE9uQWJvcnQ6CiAgICAgc2V0TGlzdGVu
ZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsdmFsdWUpOwpAQCAtNTg5LDEzICs1
ODgsMTMgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZQogICBjYXNl
IFNjcm9sbFRvcDogewogICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKnJlbmQgPSBub2RlLnJlbmRl
cmVyKCk7CiAgICAgaWYgKHJlbmQgJiYgcmVuZC0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAg
IHJlbmQtPmxheWVyKCktPnNjcm9sbFRvWU9mZnNldCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAg
ICAgICAgcmVuZC0+bGF5ZXIoKS0+c2Nyb2xsVG9ZT2Zmc2V0KHZhbHVlLT50b0ludDMyKGV4ZWMp
KTsKICAgICBicmVhazsKICAgfQogICBjYXNlIFNjcm9sbExlZnQ6IHsKICAgICBraHRtbDo6UmVu
ZGVyT2JqZWN0ICpyZW5kID0gbm9kZS5yZW5kZXJlcigpOwogICAgIGlmIChyZW5kICYmIHJlbmQt
Pmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgcmVuZC0+bGF5ZXIoKS0+c2Nyb2xsVG9YT2Zmc2V0
KHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgcmVuZC0+bGF5ZXIoKS0+c2Nyb2xsVG9YT2Zm
c2V0KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsKICAgICBicmVhazsKICAgfQogICBkZWZhdWx0OgpA
QCAtNjAzLDcgKzYwMiw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUKICAgfQogfQogCi1WYWx1ZSBET01Ob2RlOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMs
IFR5cGUgLypwcmVmZXJyZWQqLykgY29uc3QKK1ZhbHVlSW1wICpET01Ob2RlOjp0b1ByaW1pdGl2
ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgLypwcmVmZXJyZWQqLykgY29uc3QKIHsKICAgaWYgKG1f
aW1wbC5pc051bGwoKSkKICAgICByZXR1cm4gTnVsbCgpOwpAQCAtNjIzLDcgKzYyMiw3IEBAIHZv
aWQgRE9NTm9kZTo6c2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGUKICAgbV9pbXBsLT5zZXRIVE1M
RXZlbnRMaXN0ZW5lcihldmVudElkLCBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRK
U0V2ZW50TGlzdGVuZXIoZnVuYywgdHJ1ZSkpOwogfQogCi1WYWx1ZSBET01Ob2RlOjpnZXRMaXN0
ZW5lcihpbnQgZXZlbnRJZCkgY29uc3QKK1ZhbHVlSW1wICpET01Ob2RlOjpnZXRMaXN0ZW5lcihp
bnQgZXZlbnRJZCkgY29uc3QKIHsKICAgICBET006OkV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyID0g
bV9pbXBsLT5nZXRIVE1MRXZlbnRMaXN0ZW5lcihldmVudElkKTsKICAgICBKU0V2ZW50TGlzdGVu
ZXIgKmpzTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU0V2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcik7
CkBAIC02MzcsMzggKzYzNiwzOCBAQCB2b2lkIERPTU5vZGU6OnB1c2hFdmVudEhhbmRsZXJTY29w
ZShFeGVjCiB7CiB9CiAKLVZhbHVlIERPTU5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NTm9k
ZVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmRE9N
Tm9kZTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7CisgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9CiAgIERPTUV4Y2VwdGlv
blRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBOb2RlSW1wbCAmbm9kZSA9ICpzdGF0aWNf
Y2FzdDxET01Ob2RlICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCk7CisgIE5vZGVJbXBsICZub2Rl
ID0gKnN0YXRpY19jYXN0PERPTU5vZGUgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dpdGNoIChp
ZCkgewogICAgIGNhc2UgRE9NTm9kZTo6SGFzQXR0cmlidXRlczoKICAgICAgIHJldHVybiBCb29s
ZWFuKG5vZGUuaGFzQXR0cmlidXRlcygpKTsKICAgICBjYXNlIERPTU5vZGU6Okhhc0NoaWxkTm9k
ZXM6CiAgICAgICByZXR1cm4gQm9vbGVhbihub2RlLmhhc0NoaWxkTm9kZXMoKSk7CiAgICAgY2Fz
ZSBET01Ob2RlOjpDbG9uZU5vZGU6Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG5vZGUu
Y2xvbmVOb2RlKGFyZ3NbMF0udG9Cb29sZWFuKGV4ZWMpKSk7CisgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLG5vZGUuY2xvbmVOb2RlKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKSkpOwogICAg
IGNhc2UgRE9NTm9kZTo6Tm9ybWFsaXplOgogICAgICAgbm9kZS5ub3JtYWxpemUoKTsKICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTU5vZGU6OklzU3VwcG9ydGVkOgotICAg
ICAgICByZXR1cm4gQm9vbGVhbihub2RlLmlzU3VwcG9ydGVkKGFyZ3NbMF0udG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCksCi0gICAgICAgICAgICAoYXJnc1sxXS50eXBlKCkgIT0gVW5kZWZpbmVkVHlw
ZSAmJiBhcmdzWzFdLnR5cGUoKSAhPSBOdWxsVHlwZSkgPyBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpIDogRE9NU3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIEJvb2xlYW4obm9kZS5p
c1N1cHBvcnRlZChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgICAg
IGFyZ3NbMV0tPmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBET01TdHJpbmcoKSA6IGFyZ3NbMV0tPnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAgY2FzZSBET01Ob2RlOjpBZGRFdmVudExpc3Rl
bmVyOiB7CiAgICAgICAgIEpTRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIgPSBXaW5kb3c6OnJldHJp
ZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU0V2ZW50TGlzdGVuZXIoYXJnc1sxXSk7CiAgICAgICAgIGlm
IChsaXN0ZW5lcikKLSAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpLGxpc3RlbmVyLGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSxsaXN0ZW5lcixhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGNhc2UgRE9NTm9kZTo6UmVtb3ZlRXZlbnRM
aXN0ZW5lcjogewogICAgICAgICBKU0V2ZW50TGlzdGVuZXIgKmxpc3RlbmVyID0gV2luZG93Ojpy
ZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pOwogICAgICAg
ICBpZiAobGlzdGVuZXIpCi0gICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJn
c1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxsaXN0ZW5lcixhcmdzWzJdLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsK
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KICAgICBjYXNlIERPTU5vZGU6OkRp
c3BhdGNoRXZlbnQ6CkBAIC02ODksNyArNjg4LDcgQEAgVmFsdWUgRE9NTm9kZVByb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgKgogICAgICAgLy8gd2hlbiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBhIG5v
ZGU/IFdoZW4gdGhlIG9iamVjdCBpcyBub3QgYW4gZWxlbWVudD8KICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICBjYXNlIERPTU5vZGU6Okl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLCBub2RlLmNoaWxkTm9kZXMoKS0+aXRlbShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsK
KyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG5vZGUuY2hpbGROb2RlcygpLT5pdGVtKGFy
Z3NbMF0tPnRvSW50MzIoZXhlYykpKTsKICAgfQogCiAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTcxOCw3ICs3MTcsNyBAQCBET01Ob2RlTGlzdDo6fkRPTU5vZGVMaXN0KCkKICAgU2NyaXB0SW50
ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1WYWx1ZSBET01O
b2RlTGlzdDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIC8qcHJlZmVycmVkKi8p
IGNvbnN0CitWYWx1ZUltcCAqRE9NTm9kZUxpc3Q6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhl
YywgVHlwZSAvKnByZWZlcnJlZCovKSBjb25zdAogewogICBpZiAobV9pbXBsLmlzTnVsbCgpKQog
ICAgIHJldHVybiBOdWxsKCk7CkBAIC03MjYsMTkgKzcyNSwxOSBAQCBWYWx1ZSBET01Ob2RlTGlz
dDo6dG9QcmltaXRpdmUoRXhlY1N0YXRlCiAgIHJldHVybiBTdHJpbmcodG9TdHJpbmcoZXhlYykp
OwogfQogCi1WYWx1ZSBET01Ob2RlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01Ob2RlTGlzdDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgYXNzZXJ0KHRva2Vu
ID09IExlbmd0aCk7CiAgIHJldHVybiBOdW1iZXIobV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAKLVZh
bHVlIERPTU5vZGVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAg
KkRPTU5vZGVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01Ob2Rl
TGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5vZGVMaXN0ICo+KHNsb3Quc2xvdEJhc2Uo
KSk7CiAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90
LmluZGV4KCkpKTsKIH0KIAotVmFsdWUgRE9NTm9kZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK1ZhbHVlSW1wICpET01Ob2RlTGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICBET01Ob2RlTGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5vZGVMaXN0
ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmot
Pm1faW1wbC0+aXRlbUJ5SWQocHJvcGVydHlOYW1lLnN0cmluZygpKSk7CkBAIC03NzUsMTAgKzc3
NCwxMCBAQCBib29sIERPTU5vZGVMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiB9CiAKIC8v
IE5lZWQgdG8gc3VwcG9ydCBib3RoIGdldCBhbmQgY2FsbCwgc28gdGhhdCBsaXN0WzBdIGFuZCBs
aXN0KDApIHdvcmsuCi1WYWx1ZSBET01Ob2RlTGlzdDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTU5vZGVMaXN0OjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqLCBjb25zdCBMaXN0ICZhcmdzKQog
ewogICAvLyBEbyBub3QgdXNlIHRoaXNPYmogaGVyZS4gU2VlIEhUTUxDb2xsZWN0aW9uLgotICBV
U3RyaW5nIHMgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOworICBVU3RyaW5nIHMgPSBhcmdzWzBd
LT50b1N0cmluZyhleGVjKTsKICAgYm9vbCBvazsKICAgdW5zaWduZWQgaW50IHUgPSBzLnRvVUxv
bmcoJm9rKTsKICAgaWYgKG9rKQpAQCAtNzg4LDI2ICs3ODcsMjUgQEAgVmFsdWUgRE9NTm9kZUxp
c3Q6OmNhbGwoRXhlY1N0YXRlICpleGVjLAogfQogCiBET01Ob2RlTGlzdEZ1bmM6OkRPTU5vZGVM
aXN0RnVuYyhFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKQotICA6IERPTUZ1bmN0aW9u
KCksIGlkKGkpCisgIDogaWQoaSkKIHsKLSAgVmFsdWUgcHJvdGVjdCh0aGlzKTsKICAgcHV0KGV4
ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLE51bWJlcihsZW4pLERvbnREZWxldGV8UmVhZE9ubHl8RG9u
dEVudW0pOwogfQogCiAvLyBOb3QgYSBwcm90b3R5cGUgY2xhc3MgY3VycmVudGx5LCBidXQgc2hv
dWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCB0byBvbmUKLVZhbHVlIERPTU5vZGVMaXN0RnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
K1ZhbHVlSW1wICpET01Ob2RlTGlzdEZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNP
YmouaW5oZXJpdHMoJktKUzo6RE9NTm9kZUxpc3Q6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRz
KCZLSlM6OkRPTU5vZGVMaXN0OjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAg
ICAgcmV0dXJuIGVycjsKICAgfQotICBET006Ok5vZGVMaXN0SW1wbCAmbGlzdCA9ICpzdGF0aWNf
Y2FzdDxET01Ob2RlTGlzdCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOwotICBWYWx1ZSByZXN1
bHQ7CisgIERPTTo6Tm9kZUxpc3RJbXBsICZsaXN0ID0gKnN0YXRpY19jYXN0PERPTU5vZGVMaXN0
ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAKLSAgaWYgKGlkID09IEl0ZW0pCi0gICAgcmVzdWx0ID0g
Z2V0RE9NTm9kZShleGVjLCBsaXN0Lml0ZW0oYXJnc1swXS50b0ludDMyKGV4ZWMpKSk7Ci0gIHJl
dHVybiByZXN1bHQ7CisgIGlmIChpZCA9PSBET01Ob2RlTGlzdDo6SXRlbSkKKyAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBsaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOworCisg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MzMs
NyArODMxLDcgQEAgYm9vbCBET01BdHRyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YQogICBy
ZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTUF0dHIsIERPTU5vZGU+KGV4ZWMsICZET01BdHRy
VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTUF0dHI6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqRE9NQXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKICAgQXR0ckltcGwgKmF0dHIgPSBzdGF0aWNfY2FzdDxBdHRySW1wbCAqPihpbXBs
KCkpOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC04NDYsMTAgKzg0NCwxMCBAQCBWYWx1ZSBET01B
dHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAgIGNhc2UgT3duZXJFbGVtZW50OiAvLyBE
T00yCiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgYXR0ci0+b3duZXJFbGVtZW50KCkpOwog
ICB9Ci0gIHJldHVybiBWYWx1ZSgpOyAvLyBub3QgcmVhY2hlZAorICByZXR1cm4gTlVMTDsgLy8g
bm90IHJlYWNoZWQKIH0KIAotdm9pZCBET01BdHRyOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIp
Cit2b2lkIERPTUF0dHI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVS
Qk9TRQogICBrZERlYnVnKDYwNzApIDw8ICJET01BdHRyOjpwdXQgIiA8PCBwcm9wZXJ0eU5hbWUu
cXN0cmluZygpIDw8IGVuZGw7CkBAIC04NTgsMTIgKzg1NiwxMiBAQCB2b2lkIERPTUF0dHI6OnB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZET01BdHRyVGFibGUsIHRoaXMgKTsKIH0KIAotdm9pZCBET01BdHRyOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGludCAvKmF0dHIqLykKK3ZvaWQgRE9NQXR0cjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pCiB7CiAgIERP
TUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBzd2l0Y2ggKHRva2VuKSB7
CiAgIGNhc2UgVmFsdWVQcm9wZXJ0eToKLSAgICBzdGF0aWNfY2FzdDxBdHRySW1wbCAqPihpbXBs
KCkpLT5zZXRWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBzdGF0aWNfY2FzdDxBdHRySW1wbCAqPihpbXBsKCkpLT5zZXRWYWx1ZSh2YWx1ZS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuOwogICBkZWZhdWx0
OgogICAgIGtkV2FybmluZygpIDw8ICJET01BdHRyOjpwdXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxl
ZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7CkBAIC05NDksNyArOTQ3LDcgQEAgYm9vbCBET01E
b2N1bWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVT
bG90PERPTURvY3VtZW50LCBET01Ob2RlPihleGVjLCAmRE9NRG9jdW1lbnRUYWJsZSwgdGhpcywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgRE9NRG9jdW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NRG9j
dW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAgIERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PERvY3VtZW50SW1wbCAqPihp
bXBsKCkpOwogCkBAIC05ODAsMTEgKzk3OCwxMSBAQCBWYWx1ZSBET01Eb2N1bWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGdldERPTUFic3RyYWN0VmlldyhleGVjLGRvYy5k
ZWZhdWx0VmlldygpKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiRE9NRG9jdW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsK
LSAgICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCi12b2lkIERP
TURvY3VtZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2b2lkIERPTURvY3VtZW50Ojpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2
MDcwKSA8PCAiRE9NRG9jdW1lbnQ6OnB1dCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwg
ZW5kbDsKQEAgLTk5MiwyOSArOTkwLDI5IEBAIHZvaWQgRE9NRG9jdW1lbnQ6OnB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGMKICAgbG9va3VwUHV0PERPTURvY3VtZW50LERPTU5vZGU+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHIsICZET01Eb2N1bWVudFRhYmxlLCB0aGlzICk7CiB9CiAKLXZv
aWQgRE9NRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKQordm9pZCBET01Eb2N1bWVudDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgLyphdHRyKi8pCiB7CiAgIERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0
PERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwogICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgY2FzZSBT
ZWxlY3RlZFN0eWxlc2hlZXRTZXQ6IHsKLSAgICAgIGRvYy5zZXRTZWxlY3RlZFN0eWxlc2hlZXRT
ZXQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgZG9jLnNldFNlbGVjdGVk
U3R5bGVzaGVldFNldCh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgYnJl
YWs7CiAgICAgfQogICB9CiB9CiAKLVZhbHVlIERPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKkRPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2Jq
LmluaGVyaXRzKCZLSlM6OkRPTU5vZGU6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6
OkRPTU5vZGU6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4g
ZXJyOwogICB9CiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBO
b2RlSW1wbCAmbm9kZSA9ICpzdGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmouaW1wKCkpLT5p
bXBsKCk7CisgIE5vZGVJbXBsICZub2RlID0gKnN0YXRpY19jYXN0PERPTU5vZGUgKj4odGhpc09i
aiktPmltcGwoKTsKICAgRG9jdW1lbnRJbXBsICZkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudElt
cGwgJj4obm9kZSk7Ci0gIFN0cmluZyBzdHIgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOwotICBE
T006OkRPTVN0cmluZyBzID0gc3RyLnZhbHVlKCkuc3RyaW5nKCk7CisgIFVTdHJpbmcgc3RyID0g
YXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CisgIERPTTo6RE9NU3RyaW5nIHMgPSBzdHIuc3RyaW5n
KCk7CiAKICAgc3dpdGNoKGlkKSB7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkNyZWF0ZUVsZW1lbnQ6
CkBAIC0xMDI4LDcyICsxMDI2LDcyIEBAIFZhbHVlIERPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGEKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlQ0RBVEFTZWN0aW9uOgogICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbihzKSk7ICAvKiBUT0RP
OiBva2F5ID8gKi8KICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0
aW9uOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbihhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzFd
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxk
b2MuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICBj
YXNlIERPTURvY3VtZW50OjpDcmVhdGVBdHRyaWJ1dGU6CiAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxkb2MuY3JlYXRlQXR0cmlidXRlKHMsIGV4Y2VwdGlvbikpOwogICBjYXNlIERPTURvY3Vt
ZW50OjpDcmVhdGVFbnRpdHlSZWZlcmVuY2U6CiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxk
b2MuY3JlYXRlRW50aXR5UmVmZXJlbmNlKHMpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6RWxlbWVu
dEZyb21Qb2ludDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5lbGVtZW50RnJvbVBv
aW50KChpbnQpYXJnc1swXS50b051bWJlcihleGVjKSwgKGludClhcmdzWzFdLnRvTnVtYmVyKGV4
ZWMpKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuZWxlbWVudEZyb21Qb2ludCgo
aW50KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCAoaW50KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
KSk7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkdldEVsZW1lbnRzQnlUYWdOYW1lOgogICAgIHJldHVy
biBnZXRET01Ob2RlTGlzdChleGVjLGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShzKS5nZXQoKSk7
CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkltcG9ydE5vZGU6IC8vIERPTTIKLSAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLGRvYy5pbXBvcnROb2RlKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS50b0Jv
b2xlYW4oZXhlYyksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9j
LmltcG9ydE5vZGUodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyksIGV4
Y2VwdGlvbikpOwogICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVFbGVtZW50TlM6IC8vIERPTTIK
LSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVFbGVtZW50TlMocywgYXJnc1sx
XS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxkb2MuY3JlYXRlRWxlbWVudE5TKHMsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlQXR0cmli
dXRlTlM6IC8vIERPTTIKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVBdHRy
aWJ1dGVOUyhzLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pKTsK
KyAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVBdHRyaWJ1dGVOUyhzLCBhcmdz
WzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKSk7CiAgIGNhc2UgRE9NRG9j
dW1lbnQ6OkdldEVsZW1lbnRzQnlUYWdOYW1lTlM6IC8vIERPTTIKLSAgICByZXR1cm4gZ2V0RE9N
Tm9kZUxpc3QoZXhlYyxkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhzLCBhcmdzWzFdLnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpKS5nZXQoKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4
ZWMsZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMocywgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYyku
c3RyaW5nKCkpLmdldCgpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6R2V0RWxlbWVudEJ5SWQ6Ci0g
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuZ2V0RWxlbWVudEJ5SWQoYXJnc1swXS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmdl
dEVsZW1lbnRCeUlkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgIGNhc2Ug
RE9NRG9jdW1lbnQ6OkNyZWF0ZVJhbmdlOgogICAgIHJldHVybiBnZXRET01SYW5nZShleGVjLGRv
Yy5jcmVhdGVSYW5nZSgpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlTm9kZUl0ZXJhdG9y
OiB7CiAgICAgTm9kZUZpbHRlckltcGwgKmZpbHRlciA9IDA7Ci0gICAgVmFsdWVJbXAgKmFyZzIg
PSBhcmdzLmltcEF0KDIpOworICAgIFZhbHVlSW1wICphcmcyID0gYXJnc1syXTsKICAgICBpZiAo
YXJnMi0+aXNPYmplY3QoKSkgewotICAgICAgT2JqZWN0IG8oc3RhdGljX2Nhc3Q8T2JqZWN0SW1w
ICo+KGFyZzIpKTsKKyAgICAgIE9iamVjdEltcCAqbyhzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
YXJnMikpOwogICAgICAgZmlsdGVyID0gbmV3IE5vZGVGaWx0ZXJJbXBsKG5ldyBKU05vZGVGaWx0
ZXJDb25kaXRpb24obykpOwogICAgIH0KLSAgICByZXR1cm4gZ2V0RE9NTm9kZUl0ZXJhdG9yKGV4
ZWMsZG9jLmNyZWF0ZU5vZGVJdGVyYXRvcih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0udG9VSW50
MzIoZXhlYyksCi0gICAgICAgIGZpbHRlciwgYXJnc1szXS50b0Jvb2xlYW4oZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgIHJldHVybiBnZXRET01Ob2RlSXRlcmF0b3IoZXhlYyxkb2MuY3JlYXRlTm9k
ZUl0ZXJhdG9yKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9VSW50MzIoZXhlYyksCisgICAg
ICAgIGZpbHRlciwgYXJnc1szXS0+dG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pKTsKICAgfQog
ICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVUcmVlV2Fsa2VyOiB7CiAgICAgTm9kZUZpbHRlcklt
cGwgKmZpbHRlciA9IDA7Ci0gICAgVmFsdWVJbXAgKmFyZzIgPSBhcmdzLmltcEF0KDIpOworICAg
IFZhbHVlSW1wICphcmcyID0gYXJnc1syXTsKICAgICBpZiAoYXJnMi0+aXNPYmplY3QoKSkgewot
ICAgICAgT2JqZWN0IG8oc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGFyZzIpKTsKKyAgICAgIE9i
amVjdEltcCAqbyhzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oYXJnMikpOwogICAgICAgZmlsdGVy
ID0gbmV3IE5vZGVGaWx0ZXJJbXBsKG5ldyBKU05vZGVGaWx0ZXJDb25kaXRpb24obykpOwogICAg
IH0KLSAgICByZXR1cm4gZ2V0RE9NVHJlZVdhbGtlcihleGVjLGRvYy5jcmVhdGVUcmVlV2Fsa2Vy
KHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS50b1VJbnQzMihleGVjKSwKLSAgICAgICAgZmlsdGVy
LCBhcmdzWzNdLnRvQm9vbGVhbihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIGdldERP
TVRyZWVXYWxrZXIoZXhlYyxkb2MuY3JlYXRlVHJlZVdhbGtlcih0b05vZGUoYXJnc1swXSksIGFy
Z3NbMV0tPnRvVUludDMyKGV4ZWMpLAorICAgICAgICBmaWx0ZXIsIGFyZ3NbM10tPnRvQm9vbGVh
bihleGVjKSwgZXhjZXB0aW9uKSk7CiAgIH0KICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlRXZl
bnQ6CiAgICAgcmV0dXJuIGdldERPTUV2ZW50KGV4ZWMsZG9jLmNyZWF0ZUV2ZW50KHMsIGV4Y2Vw
dGlvbikpOwogICBjYXNlIERPTURvY3VtZW50OjpHZXRPdmVycmlkZVN0eWxlOgogICAgIGlmIChF
bGVtZW50SW1wbCAqZWxlbWVudDAgPSB0b0VsZW1lbnQoYXJnc1swXSkpCi0gICAgICAgIHJldHVy
biBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZG9jLmdldE92ZXJyaWRlU3R5bGUoZWxl
bWVudDAsIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJu
IGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYyxkb2MuZ2V0T3ZlcnJpZGVTdHlsZShlbGVt
ZW50MCwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKICAgICAvLyBGSVhNRTog
SXMgdW5kZWZpbmVkIHJpZ2h0IGhlcmUsIG9yIHNob3VsZCB3ZSByYWlzZSBhbiBleGNlcHRpb24/
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICBjYXNlIERPTURvY3VtZW50OjpFeGVjQ29tbWFu
ZDogewotICAgIHJldHVybiBCb29sZWFuKGRvYy5leGVjQ29tbWFuZChhcmdzWzBdLnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpLCBhcmdzWzFdLnRvQm9vbGVhbihleGVjKSwgYXJnc1syXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSkpOworICAgIHJldHVybiBCb29sZWFuKGRvYy5leGVjQ29tbWFuZChh
cmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMp
LCBhcmdzWzJdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICB9CiAgIGNhc2UgRE9NRG9j
dW1lbnQ6OlF1ZXJ5Q29tbWFuZEVuYWJsZWQ6IHsKLSAgICByZXR1cm4gQm9vbGVhbihkb2MucXVl
cnlDb21tYW5kRW5hYmxlZChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAg
cmV0dXJuIEJvb2xlYW4oZG9jLnF1ZXJ5Q29tbWFuZEVuYWJsZWQoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpKTsKICAgfQogICBjYXNlIERPTURvY3VtZW50OjpRdWVyeUNvbW1hbmRJ
bmRldGVybTogewotICAgIHJldHVybiBCb29sZWFuKGRvYy5xdWVyeUNvbW1hbmRJbmRldGVybShh
cmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAgcmV0dXJuIEJvb2xlYW4oZG9j
LnF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7
CiAgIH0KICAgY2FzZSBET01Eb2N1bWVudDo6UXVlcnlDb21tYW5kU3RhdGU6IHsKLSAgICByZXR1
cm4gQm9vbGVhbihkb2MucXVlcnlDb21tYW5kU3RhdGUoYXJnc1swXS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSkpOworICAgIHJldHVybiBCb29sZWFuKGRvYy5xdWVyeUNvbW1hbmRTdGF0ZShhcmdz
WzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICB9CiAgIGNhc2UgRE9NRG9jdW1lbnQ6
OlF1ZXJ5Q29tbWFuZFN1cHBvcnRlZDogewotICAgIHJldHVybiBCb29sZWFuKGRvYy5xdWVyeUNv
bW1hbmRTdXBwb3J0ZWQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgIHJl
dHVybiBCb29sZWFuKGRvYy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpKTsKICAgfQogICBjYXNlIERPTURvY3VtZW50OjpRdWVyeUNvbW1hbmRW
YWx1ZTogewotICAgIERPTTo6RE9NU3RyaW5nIGNvbW1hbmRWYWx1ZShkb2MucXVlcnlDb21tYW5k
VmFsdWUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgIERPTTo6RE9NU3Ry
aW5nIGNvbW1hbmRWYWx1ZShkb2MucXVlcnlDb21tYW5kVmFsdWUoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpKTsKICAgICAvLyBNZXRob2QgcmV0dXJucyBudWxsIERPTVN0cmluZyB0
byBzaWduYWwgY29tbWFuZCBpcyB1bnN1cHBvcnRlZC4KICAgICAvLyBNaWNyb3NvZnQgZG9jdW1l
bnRhdGlvbiBmb3IgdGhpcyBtZXRob2Qgc2F5czoKICAgICAvLyAiSWYgbm90IHN1cHBvcnRlZCBb
Zm9yIGEgY29tbWFuZCBpZGVudGlmaWVyXSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIEJvb2xlYW4g
c2V0IHRvIGZhbHNlLiIKQEAgLTExNTgsNyArMTE1Niw3IEBAIERPTUVsZW1lbnQ6OkRPTUVsZW1l
bnQoRWxlbWVudEltcGwgKmUpCiB7IAogfQogCi1WYWx1ZSBET01FbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTE3Miw3ICsxMTcwLDcgQEAgVmFsdWUg
RE9NRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICB9CiB9CiAKLVZhbHVlIERPTUVs
ZW1lbnQ6OmF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkRPTUVs
ZW1lbnQ6OmF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01FbGVtZW50
ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NRWxlbWVudCAqPihzbG90LnNsb3RCYXNlKCkpOwog
CkBAIC0xMTk1LDggKzExOTMsOCBAQCBib29sIERPTUVsZW1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChFeGVjCiAgIGlmIChET01Ob2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICByZXR1cm4gdHJ1ZTsKIAotICBWYWx1ZUltcCAqcHJvdG8gPSBwcm90
b3R5cGUoKS5pbXAoKTsKLSAgaWYgKHByb3RvLT5kaXNwYXRjaFR5cGUoKSA9PSBPYmplY3RUeXBl
ICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihwcm90byktPmhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSkpCisgIFZhbHVlSW1wICpwcm90byA9IHByb3RvdHlwZSgpOworICBpZiAocHJv
dG8tPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHByb3RvKS0+aGFzUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICByZXR1cm4gZmFsc2U7CiAKICAgRWxlbWVu
dEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaW1wbCgpKTsKQEAg
LTEyMTIsNTcgKzEyMTAsNTcgQEAgYm9vbCBET01FbGVtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlYwogICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVsZW1lbnRQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqRE9NRWxlbWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhp
c09iai5pbmhlcml0cygmS0pTOjpET01Ob2RlOjppbmZvKSkgeyAvLyBub2RlIHNob3VsZCBiZSBl
bm91Z2ggaGVyZSwgZ2l2ZW4gdGhlIGNhc3QKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NTm9k
ZTo6aW5mbykpIHsgLy8gbm9kZSBzaG91bGQgYmUgZW5vdWdoIGhlcmUsIGdpdmVuIHRoZSBjYXN0
CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9CiAgIERPTUV4
Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBOb2RlSW1wbCAmbm9kZSA9ICpz
dGF0aWNfY2FzdDxET01Ob2RlICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCk7CisgIE5vZGVJbXBs
ICZub2RlID0gKnN0YXRpY19jYXN0PERPTU5vZGUgKj4odGhpc09iaiktPmltcGwoKTsKICAgRWxl
bWVudEltcGwgJmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAmPihub2RlKTsKIAog
ICBzd2l0Y2goaWQpIHsKICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEF0dHJpYnV0ZToKICAgICAg
IC8vIGdldFN0cmluZ09yTnVsbCBzaG91bGQgYmUgdXNlZCBoZXJlLCBzaW5jZSBpZiB0aGUgYXR0
cmlidXRlIGlzbid0IHByZXNlbnQgYXQgYWxsLCB5b3Ugc2hvdWxkCiAgICAgICAvLyByZXR1cm4g
bnVsbCBhbmQgbm90ICIiLgotICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50Lmdl
dEF0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAgICByZXR1
cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpKSk7CiAgICAgY2FzZSBET01FbGVtZW50OjpTZXRBdHRyaWJ1dGU6Ci0g
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
LCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOworICAgICAgZWxl
bWVudC5zZXRBdHRyaWJ1dGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3Nb
MV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6UmVtb3ZlQXR0cmlidXRlOgotICAgICAg
ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwg
ZXhjZXB0aW9uKTsKKyAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogICAgIGNhc2UgRE9NRWxlbWVudDo6R2V0QXR0cmlidXRlTm9kZToKLSAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5n
ZXRBdHRyaWJ1dGVOb2RlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAgICAg
Y2FzZSBET01FbGVtZW50OjpTZXRBdHRyaWJ1dGVOb2RlOgogICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyxlbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUodG9BdHRyKGFyZ3NbMF0pLCBleGNlcHRp
b24pLmdldCgpKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OlJlbW92ZUF0dHJpYnV0ZU5vZGU6CiAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZSh0
b0F0dHIoYXJnc1swXSksIGV4Y2VwdGlvbikuZ2V0KCkpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6
R2V0RWxlbWVudHNCeVRhZ05hbWU6Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhlYywg
ZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpKS5nZXQoKSk7CisgICAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhlYywgZWxlbWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuZ2V0
KCkpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6SGFzQXR0cmlidXRlOiAvLyBET00yCi0gICAgICBy
ZXR1cm4gQm9vbGVhbihlbGVtZW50Lmhhc0F0dHJpYnV0ZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpKSk7CisgICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50Lmhhc0F0dHJpYnV0ZShh
cmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgIGNhc2UgRE9NRWxlbWVudDo6
R2V0QXR0cmlidXRlTlM6IC8vIERPTTIKLSAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5nZXRB
dHRyaWJ1dGVOUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGFyZ3NbMV0udG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpLnN0cmluZygpKTsKKyAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVu
dC5nZXRBdHRyaWJ1dGVOUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxhcmdzWzFd
LT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuc3RyaW5nKCkpOwogICAgIGNhc2UgRE9NRWxlbWVu
dDo6U2V0QXR0cmlidXRlTlM6IC8vIERPTTIKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMo
YXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgYXJnc1sxXS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSwgYXJnc1syXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAg
ICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdzWzJdLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAg
ICBjYXNlIERPTUVsZW1lbnQ6OlJlbW92ZUF0dHJpYnV0ZU5TOiAvLyBET00yCi0gICAgICBlbGVt
ZW50LnJlbW92ZUF0dHJpYnV0ZU5TKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFy
Z3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgICBlbGVtZW50
LnJlbW92ZUF0dHJpYnV0ZU5TKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdz
WzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU5vZGVOUzogLy8g
RE9NMgotICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50LmdldEF0dHJpYnV0ZU5v
ZGVOUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLGFyZ3NbMV0udG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCkpKTsKKyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5nZXRB
dHRyaWJ1dGVOb2RlTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksYXJnc1sxXS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKICAgICBjYXNlIERPTUVsZW1lbnQ6OlNldEF0dHJp
YnV0ZU5vZGVOUzogLy8gRE9NMgogICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZWxlbWVu
dC5zZXRBdHRyaWJ1dGVOb2RlTlModG9BdHRyKGFyZ3NbMF0pLCBleGNlcHRpb24pLmdldCgpKTsK
ICAgICBjYXNlIERPTUVsZW1lbnQ6OkdldEVsZW1lbnRzQnlUYWdOYW1lTlM6IC8vIERPTTIKLSAg
ICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lTlMoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSAsYXJnc1sxXS50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSkuZ2V0KCkpOworICAgICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4ZWMs
IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSAsYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLmdldCgpKTsKICAgICBj
YXNlIERPTUVsZW1lbnQ6Okhhc0F0dHJpYnV0ZU5TOiAvLyBET00yCi0gICAgICByZXR1cm4gQm9v
bGVhbihlbGVtZW50Lmhhc0F0dHJpYnV0ZU5TKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAgICAgcmV0dXJuIEJvb2xl
YW4oZWxlbWVudC5oYXNBdHRyaWJ1dGVOUyhhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmco
KSxhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgIGNhc2UgRE9NRWxlbWVu
dDo6U2Nyb2xsSW50b1ZpZXc6IAotICAgIChhcmdzWzBdLnR5cGUoKSAhPSBVbmRlZmluZWRUeXBl
ICYmIGFyZ3NbMF0udHlwZSgpICE9IE51bGxUeXBlKSA/IGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXco
YXJnc1swXS50b0Jvb2xlYW4oZXhlYykpIDogZWxlbWVudC5zY3JvbGxJbnRvVmlldyh0cnVlKTsK
LSAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXco
YXJnc1swXS0+aXNVbmRlZmluZWRPck51bGwoKSB8fCBhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykp
OworICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01FbGVtZW50OjpTY3Jv
bGxCeUxpbmVzOgogICAgIGNhc2UgRE9NRWxlbWVudDo6U2Nyb2xsQnlQYWdlczoKICAgICAgIGlm
IChEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQuZ2V0RG9jdW1lbnQoKSkgewpAQCAtMTI3MCw3
ICsxMjY4LDcgQEAgVmFsdWUgRE9NRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdAogICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0ICpyZW5kID0gZWxlbWVudC5yZW5kZXJlcigpKQogICAgICAg
ICAgIGlmIChyZW5kLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICAgICAgS1dRU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IEtXUVNjcm9sbERvd247Ci0gICAgICAgICAgICBpbnQgbXVs
dGlwbGllciA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsKKyAgICAgICAgICAgIGludCBtdWx0aXBs
aWVyID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVy
IDwgMCkgewogICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IEtXUVNjcm9sbFVwOwogICAgICAg
ICAgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKQEAgLTEzMjEsMzAgKzEzMTksMzAg
QEAgRE9NRE9NSW1wbGVtZW50YXRpb246On5ET01ET01JbXBsZW1lbnRhdAogICBTY3JpcHRJbnRl
cnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVlIERPTURP
TUltcGxlbWVudGF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTURPTUltcGxlbWVudGF0aW9u
UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6
OkRPTURPTUltcGxlbWVudGF0aW9uOjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpE
T01ET01JbXBsZW1lbnRhdGlvbjo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwog
ICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24o
ZXhlYyk7Ci0gIERPTUltcGxlbWVudGF0aW9uSW1wbCAmaW1wbGVtZW50YXRpb24gPSAqc3RhdGlj
X2Nhc3Q8RE9NRE9NSW1wbGVtZW50YXRpb24gKj4odGhpc09iai5pbXAoKSktPmltcGwoKTsKKyAg
RE9NSW1wbGVtZW50YXRpb25JbXBsICZpbXBsZW1lbnRhdGlvbiA9ICpzdGF0aWNfY2FzdDxET01E
T01JbXBsZW1lbnRhdGlvbiAqPih0aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRjaChpZCkgewog
ICBjYXNlIERPTURPTUltcGxlbWVudGF0aW9uOjpIYXNGZWF0dXJlOgotICAgIHJldHVybiBCb29s
ZWFuKGltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwKLSAgICAgICAgKGFyZ3NbMV0udHlwZSgpICE9IFVuZGVmaW5lZFR5cGUgJiYgYXJnc1sx
XS50eXBlKCkgIT0gTnVsbFR5cGUpID8gYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSA6
IERPTVN0cmluZygpKSk7CisgICAgcmV0dXJuIEJvb2xlYW4oaW1wbGVtZW50YXRpb24uaGFzRmVh
dHVyZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgYXJnc1sxXS0+
aXNVbmRlZmluZWRPck51bGwoKSA/IERPTVN0cmluZygpIDogYXJnc1sxXS0+dG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCkpKTsKICAgY2FzZSBET01ET01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRlRG9jdW1l
bnRUeXBlOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaW1wbGVtZW50YXRp
b24uY3JlYXRlRG9jdW1lbnRUeXBlKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksCi0g
ICAgICAgIGFyZ3NbMV0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMl0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50VHlwZShhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwKKyAgICAgICAgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFy
Z3NbMl0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pKTsKICAgY2FzZSBET01E
T01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRlRG9jdW1lbnQ6IC8vIERPTTIKLSAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBpbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudChhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpLAotICAgICAgICBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpLCB0b0RvY3VtZW50VHlwZShhcmdzWzJdKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYywgaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksCisgICAgICAgIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpLCB0b0RvY3VtZW50VHlwZShhcmdzWzJdKSwgZXhjZXB0aW9uKSk7CiAgIGNhc2UgRE9N
RE9NSW1wbGVtZW50YXRpb246OkNyZWF0ZUNTU1N0eWxlU2hlZXQ6IC8vIERPTTIKLSAgICByZXR1
cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBpbXBsZW1lbnRhdGlvbi5jcmVhdGVDU1NTdHlsZVNo
ZWV0KGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0udG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4
ZWMsIGltcGxlbWVudGF0aW9uLmNyZWF0ZUNTU1N0eWxlU2hlZXQoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRp
b24pKTsKICAgY2FzZSBET01ET01JbXBsZW1lbnRhdGlvbjo6Q3JlYXRlSFRNTERvY3VtZW50OiAv
LyBET00yLUhUTUwKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpbXBsZW1lbnRhdGlvbi5j
cmVhdGVIVE1MRG9jdW1lbnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOworICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVu
dChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICBkZWZhdWx0OgogICAgIGJy
ZWFrOwogICB9CkBAIC0xMzc0LDcgKzEzNzIsNyBAQCBib29sIERPTURvY3VtZW50VHlwZTo6Z2V0
T3duUHJvcGVydHlTbG90CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NRG9jdW1lbnRU
eXBlLCBET01Ob2RlPihleGVjLCAmRE9NRG9jdW1lbnRUeXBlVGFibGUsIHRoaXMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTURvY3VtZW50VHlwZTo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01Eb2N1bWVu
dFR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAgIERvY3VtZW50VHlwZUltcGwgJnR5cGUgPSAqc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBl
SW1wbCAqPihpbXBsKCkpOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xMzkyLDcgKzEzOTAsNyBA
QCBWYWx1ZSBET01Eb2N1bWVudFR5cGU6OmdldFZhbHVlUHJvcGVydHkoCiAgICAgcmV0dXJuIGdl
dFN0cmluZ09yTnVsbCh0eXBlLmludGVybmFsU3Vic2V0KCkpOwogICBkZWZhdWx0OgogICAgIGtk
V2FybmluZygpIDw8ICJET01Eb2N1bWVudFR5cGU6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVk
IHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1
cm4gTlVMTDsKICAgfQogfQogCkBAIC0xNDM0LDEzICsxNDMyLDEzIEBAIERPTU5hbWVkTm9kZU1h
cDo6fkRPTU5hbWVkTm9kZU1hcCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmpl
Y3QobV9pbXBsLmdldCgpKTsKIH0KIAotVmFsdWUgRE9NTmFtZWROb2RlTWFwOjpsZW5ndGhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpET01OYW1lZE5vZGVNYXA6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01OYW1lZE5vZGVNYXAgKnRoaXNPYmogPSBz
dGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJu
IE51bWJlcih0aGlzT2JqLT5tX2ltcGwtPmxlbmd0aCgpKTsKIH0KIAotVmFsdWUgRE9NTmFtZWRO
b2RlTWFwOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkRPTU5hbWVk
Tm9kZU1hcDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWROb2Rl
TWFwICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShz
bG90LmluZGV4KCkpKTsKQEAgLTE0NjUsMzEgKzE0NjMsMzEgQEAgYm9vbCBET01OYW1lZE5vZGVN
YXA6OmdldE93blByb3BlcnR5U2xvdAogICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgRE9NTmFtZWROb2Rl
TWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTU5hbWVkTm9kZU1hcFByb3RvRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01OYW1lZE5vZGVNYXA6
OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkRPTU5hbWVkTm9kZU1hcDo6aW5mbykp
IHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwog
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIE5hbWVkTm9kZU1hcEltcGwg
Jm1hcCA9ICpzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4odGhpc09iai5pbXAoKSktPmlt
cGwoKTsKKyAgTmFtZWROb2RlTWFwSW1wbCAmbWFwID0gKnN0YXRpY19jYXN0PERPTU5hbWVkTm9k
ZU1hcCAqPih0aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRjaChpZCkgewogICAgIGNhc2UgRE9N
TmFtZWROb2RlTWFwOjpHZXROYW1lZEl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LCBtYXAuZ2V0TmFtZWRJdGVtKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKKyAg
ICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG1hcC5nZXROYW1lZEl0ZW0oYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpKTsKICAgICBjYXNlIERPTU5hbWVkTm9kZU1hcDo6U2V0TmFt
ZWRJdGVtOgogICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFwLnNldE5hbWVkSXRlbSh0
b05vZGUoYXJnc1swXSksIGV4Y2VwdGlvbikuZ2V0KCkpOwogICAgIGNhc2UgRE9NTmFtZWROb2Rl
TWFwOjpSZW1vdmVOYW1lZEl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAu
cmVtb3ZlTmFtZWRJdGVtKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlv
bikuZ2V0KCkpOworICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFwLnJlbW92ZU5hbWVk
SXRlbShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKS5nZXQoKSk7
CiAgICAgY2FzZSBET01OYW1lZE5vZGVNYXA6Okl0ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLCBtYXAuaXRlbShhcmdzWzBdLnRvSW50MzIoZXhlYykpKTsKKyAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIG1hcC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKICAgICBj
YXNlIERPTU5hbWVkTm9kZU1hcDo6R2V0TmFtZWRJdGVtTlM6IC8vIERPTTIKLSAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIG1hcC5nZXROYW1lZEl0ZW1OUyhhcmdzWzBdLnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CisgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuZ2V0TmFtZWRJdGVtTlMoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKSk7CiAg
ICAgY2FzZSBET01OYW1lZE5vZGVNYXA6OlNldE5hbWVkSXRlbU5TOiAvLyBET00yCiAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuc2V0TmFtZWRJdGVtTlModG9Ob2RlKGFyZ3NbMF0p
LCBleGNlcHRpb24pLmdldCgpKTsKICAgICBjYXNlIERPTU5hbWVkTm9kZU1hcDo6UmVtb3ZlTmFt
ZWRJdGVtTlM6IC8vIERPTTIKLSAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG1hcC5yZW1v
dmVOYW1lZEl0ZW1OUyhhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdzWzFdLnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pLmdldCgpKTsKKyAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIG1hcC5yZW1vdmVOYW1lZEl0ZW1OUyhhcmdzWzBdLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlv
bikuZ2V0KCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQpAQCAtMTUxOSw3ICsx
NTE3LDcgQEAgYm9vbCBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldE93blBybwogICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgRE9NTm9kZT4o
ZXhlYywgJkRPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1WYWx1ZSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICpwaSA9IHN0YXRp
Y19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwgKj4oaW1wbCgpKTsKICAgc3dpdGNoICh0
b2tlbikgewpAQCAtMTUzMSwxNyArMTUyOSwxNyBAQCBWYWx1ZSBET01Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OmdldFZhbHVlCiAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYyxwaS0+c2hl
ZXQoKSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIkRPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBl
bmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAKLXZv
aWQgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2
b2lkIERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewog
ICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICpwaSA9IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbkltcGwgKj4oaW1wbCgpKTsKICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CiAgIC8vIE5vdCB3b3J0aCB1c2luZyB0aGUgaGFzaHRhYmxlIGZvciB0aGlz
IG9uZSA7KQogICBpZiAocHJvcGVydHlOYW1lID09ICJkYXRhIikKLSAgICBwaS0+c2V0RGF0YSh2
YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICBwaS0+c2V0RGF0
YSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgIGVsc2UKICAg
ICBET01Ob2RlOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CiB9CkBAIC0x
NTY3LDcgKzE1NjUsNyBAQCBib29sIERPTU5vdGF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NTm90YXRpb24sIERPTU5vZGU+KGV4ZWMs
ICZET01Ob3RhdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1
ZSBET01Ob3RhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkRPTU5vdGF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgY2FzZSBQdWJsaWNJ
ZDoKQEAgLTE1NzYsNyArMTU3NCw3IEBAIFZhbHVlIERPTU5vdGF0aW9uOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWMKICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKHN0YXRpY19jYXN0PE5vdGF0aW9u
SW1wbCAqPihpbXBsKCkpLT5zeXN0ZW1JZCgpKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmco
KSA8PCAiRE9NTm90YXRpb246OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwg
dG9rZW4gPDwgZW5kbDsKLSAgICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAg
fQogfQogCkBAIC0xNjAyLDcgKzE2MDAsNyBAQCBib29sIERPTUVudGl0eTo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NRW50aXR5LCBET01O
b2RlPihleGVjLCAmRE9NRW50aXR5VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIERPTUVudGl0eTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUVudGl0eTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUHVi
bGljSWQ6CkBAIC0xNjEzLDcgKzE2MTEsNyBAQCBWYWx1ZSBET01FbnRpdHk6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdGF0aWNfY2FzdDxFbnRp
dHlJbXBsICo+KGltcGwoKSktPm5vdGF0aW9uTmFtZSgpKTsKICAgZGVmYXVsdDoKICAgICBrZFdh
cm5pbmcoKSA8PCAiRE9NRW50aXR5OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAi
IDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7
CiAgIH0KIH0KIApAQCAtMTc3Niw3ICsxNzc0LDcgQEAgYm9vbCBOb2RlQ29uc3RydWN0b3I6Omdl
dE93blByb3BlcnR5U2xvdAogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PE5vZGVDb25zdHJ1
Y3RvciwgRE9NT2JqZWN0PihleGVjLCAmTm9kZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVDb25zdHJ1
Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewog
ICAvLyBXZSB1c2UgdGhlIHRva2VuIGFzIHRoZSB2YWx1ZSB0byByZXR1cm4gZGlyZWN0bHkKICAg
cmV0dXJuIE51bWJlcigodW5zaWduZWQgaW50KXRva2VuKTsKQEAgLTE4MDgsNyArMTgwNiw3IEBA
IFZhbHVlIE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eSgKICAgICByZXR1cm4gTnVt
YmVyKCh1bnNpZ25lZCBpbnQpRE9NOjpOb2RlOjpOT1RBVElPTl9OT0RFKTsKICAgZGVmYXVsdDoK
ICAgICBrZFdhcm5pbmcoKSA8PCAiTm9kZUNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5IHVu
aGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7Cisg
ICAgcmV0dXJuIE5VTEw7CiAgIH0KICNlbmRpZgogfQpAQCAtMTg0Nyw3ICsxODQ1LDcgQEAgYm9v
bCBET01FeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcAogICByZXR1cm4gZ2V0U3RhdGlj
VmFsdWVTbG90PERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZET01F
eGNlcHRpb25Db25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci1WYWx1ZSBET01FeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUV4Y2VwdGlvbkNvbnN0cnVjdG9y
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8v
IFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRvIHJldHVybiBkaXJlY3RseQogICByZXR1
cm4gTnVtYmVyKCh1bnNpZ25lZCBpbnQpdG9rZW4pOwpAQCAtMTg4NSw3ICsxODgzLDcgQEAgVmFs
dWUgRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OmdldFZhbHVlUAogICAgIHJldHVybiBOdW1iZXIo
KHVuc2lnbmVkIGludClET006OkRPTUV4Y2VwdGlvbjo6SU5WQUxJRF9BQ0NFU1NfRVJSKTsKICAg
ZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6Omdl
dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgICBy
ZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogI2VuZGlmCiB9CkBAIC0xOTA1
LDEzICsxOTAzLDEzIEBAIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpET01OYW1lZE5vZGVzQ28K
IHsKIH0KIAotVmFsdWUgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxlbmd0aEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkRPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24gKnRo
aXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAqPihzbG90LnNsb3RC
YXNlKCkpOwogICByZXR1cm4gTnVtYmVyKHRoaXNPYmotPm1fbm9kZXMuY291bnQoKSk7CiB9CiAK
LVZhbHVlIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorVmFsdWVJbXAgKkRPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICBET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmotPm1fbm9kZXNbc2xvdC5pbmRleCgpXS5n
ZXQoKSk7CkBAIC0xOTg2LDcgKzE5ODQsNyBAQCBib29sIERPTUNoYXJhY3RlckRhdGE6OmdldE93
blByb3BlcnR5U2xvCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NQ2hhcmFjdGVyRGF0
YSwgRE9NTm9kZT4oZXhlYywgJkRPTUNoYXJhY3RlckRhdGFUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAotVmFsdWUgRE9NQ2hhcmFjdGVyRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUNoYXJhY3RlckRh
dGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAg
Q2hhcmFjdGVyRGF0YUltcGwgJmRhdGEgPSAqc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwg
Kj4oaW1wbCgpKTsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTk5Niw1NiArMTk5NCw1NiBAQCBW
YWx1ZSBET01DaGFyYWN0ZXJEYXRhOjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgcmV0dXJuIE51bWJl
cihkYXRhLmxlbmd0aCgpKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiVW5oYW5k
bGVkIHRva2VuIGluIERPTUNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8IHRv
a2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0K
IH0KIAotdm9pZCBET01DaGFyYWN0ZXJEYXRhOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2
b2lkIERPTUNoYXJhY3RlckRhdGE6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgRE9NRXhj
ZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CiAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ImRhdGEiKQotICAgIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KGltcGwoKSktPnNl
dERhdGEodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgc3Rh
dGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwgKj4oaW1wbCgpKS0+c2V0RGF0YSh2YWx1ZS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgIGVsc2UKICAgICBET01Ob2RlOjpw
dXQoZXhlYywgcHJvcGVydHlOYW1lLHZhbHVlLGF0dHIpOwogfQogCi1WYWx1ZSBET01DaGFyYWN0
ZXJEYXRhUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NQ2hhcmFjdGVy
RGF0YTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9NQ2hhcmFjdGVyRGF0YTo6
aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJy
b3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0K
ICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIENoYXJhY3RlckRh
dGFJbXBsICZkYXRhID0gKnN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KHN0YXRpY19j
YXN0PERPTUNoYXJhY3RlckRhdGEgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisgIENoYXJh
Y3RlckRhdGFJbXBsICZkYXRhID0gKnN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsICo+KHN0
YXRpY19jYXN0PERPTUNoYXJhY3RlckRhdGEgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRj
aChpZCkgewogICAgIGNhc2UgRE9NQ2hhcmFjdGVyRGF0YTo6U3Vic3RyaW5nRGF0YTogewotICAg
ICAgY29uc3QgaW50IGNvdW50ID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworICAgICAgY29uc3Qg
aW50IGNvdW50ID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKICAgICAgIGlmIChjb3VudCA8IDAp
CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBET01FeGNlcHRpb246OklOREVYX1NJWkVf
RVJSKTsKICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChkYXRhLnN1
YnN0cmluZ0RhdGEoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBjb3VudCwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoZGF0YS5zdWJzdHJpbmdEYXRhKGFyZ3NbMF0t
PnRvSW50MzIoZXhlYyksIGNvdW50LCBleGNlcHRpb24pKTsKICAgICB9CiAgICAgY2FzZSBET01D
aGFyYWN0ZXJEYXRhOjpBcHBlbmREYXRhOgotICAgICAgZGF0YS5hcHBlbmREYXRhKGFyZ3NbMF0u
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgICBkYXRhLmFwcGVuZERh
dGEoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBET01DaGFyYWN0ZXJEYXRhOjpJbnNlcnREYXRh
OgotICAgICAgZGF0YS5pbnNlcnREYXRhKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50
b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgIGRhdGEuaW5zZXJ0RGF0
YShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmco
KSwgZXhjZXB0aW9uKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICBjYXNlIERPTUNo
YXJhY3RlckRhdGE6OkRlbGV0ZURhdGE6IHsKLSAgICAgIGNvbnN0IGludCBjb3VudCA9IGFyZ3Nb
MV0udG9JbnQzMihleGVjKTsKKyAgICAgIGNvbnN0IGludCBjb3VudCA9IGFyZ3NbMV0tPnRvSW50
MzIoZXhlYyk7CiAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUik7CiAgICAgICBlbHNlCi0gICAgICAg
IGRhdGEuZGVsZXRlRGF0YShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGNvdW50LCBleGNlcHRpb24p
OworICAgICAgICBkYXRhLmRlbGV0ZURhdGEoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgY291bnQs
IGV4Y2VwdGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGNhc2Ug
RE9NQ2hhcmFjdGVyRGF0YTo6UmVwbGFjZURhdGE6IHsKLSAgICAgIGNvbnN0IGludCBjb3VudCA9
IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICAgIGNvbnN0IGludCBjb3VudCA9IGFyZ3NbMV0t
PnRvSW50MzIoZXhlYyk7CiAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgRE9NRXhjZXB0aW9uOjpJTkRFWF9TSVpFX0VSUik7CiAgICAgICBlbHNlCi0g
ICAgICAgIGRhdGEucmVwbGFjZURhdGEoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBjb3VudCwgYXJn
c1syXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZGF0YS5y
ZXBsYWNlRGF0YShhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBjb3VudCwgYXJnc1syXS0+dG9TdHJp
bmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0yMDcyLDE4ICsyMDcwLDE4IEBAIERPTVRleHQ6OkRP
TVRleHQoRXhlY1N0YXRlICpleGVjLCBUZXh0SW0KICAgc2V0UHJvdG90eXBlKERPTVRleHRQcm90
bzo6c2VsZihleGVjKSk7CiB9CiAKLVZhbHVlIERPTVRleHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
RE9NVGV4dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0
cygmS0pTOjpET01UZXh0OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01UZXh0
OjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAg
fQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgVGV4dEltcGwg
JnRleHQgPSAqc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NVGV4dCAqPih0
aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKKyAgVGV4dEltcGwgJnRleHQgPSAqc3RhdGljX2Nhc3Q8
VGV4dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NVGV4dCAqPih0aGlzT2JqKS0+aW1wbCgpKTsKICAg
c3dpdGNoKGlkKSB7CiAgICAgY2FzZSBET01UZXh0OjpTcGxpdFRleHQ6Ci0gICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCB0ZXh0LnNwbGl0VGV4dChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOworICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGV4dC5zcGxpdFRleHQo
YXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CiAgIH0KICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC1wIC11IC1yMS40NyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2RvbS5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCTcgQXVnIDIwMDUgMTg6
NDY6NDQgLTAwMDAJMS40NworKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAk4IEF1ZyAy
MDA1IDAxOjAxOjE2IC0wMDAwCkBAIC01MCwxOCArNTAsMTggQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdmlydHVhbCB+RE9NTm9kZSgpOwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0
YXRlICopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKICAgICBET006Ok5vZGVJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
Ci0gICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJl
ZmVycmVkID0gVW5kZWZpbmVkVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdG9Q
cmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuZGVmaW5lZFR5cGUp
IGNvbnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNv
bnN0OwogICAgIHZvaWQgc2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCwg
VmFsdWVJbXAgKmZ1bmMpIGNvbnN0OwotICAgIFZhbHVlIGdldExpc3RlbmVyKGludCBldmVudElk
KSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0TGlzdGVuZXIoaW50IGV2ZW50SWQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlICpleGVjLCBT
Y29wZUNoYWluICZzY29wZSkgY29uc3Q7CiAKICAgICBlbnVtIHsgTm9kZU5hbWUsIE5vZGVWYWx1
ZSwgTm9kZVR5cGUsIFBhcmVudE5vZGUsIFBhcmVudEVsZW1lbnQsCkBAIC05Miw4ICs5Miw4IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIERPTU5vZGVMaXN0KEV4ZWNTdGF0ZSAqLCBET006Ok5vZGVM
aXN0SW1wbCAqbCkgOiBtX2ltcGwobCkgeyB9CiAgICAgfkRPTU5vZGVMaXN0KCk7CiAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKKyAgICBWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QmYXJncyk7CiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDYWxsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIC8vIG5vIHB1dCAtIGFsbCBy
ZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KQEAgLTEwMiwxMSArMTAyLDExIEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgIGVudW0geyBMZW5ndGgsIEl0ZW0gfTsKICAgICBET006Ok5vZGVMaXN0SW1wbCAqaW1wbCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBWYWx1ZSB0b1By
aW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkID0gVW5kZWZpbmVkVHlwZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVj
LCBUeXBlIHByZWZlcnJlZCA9IFVuZGVmaW5lZFR5cGUpIGNvbnN0OwogCiAgIHByaXZhdGU6Ci0g
ICAgc3RhdGljIFZhbHVlIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIFZhbHVlIG5hbWVH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAg
c3RhdGljIFZhbHVlSW1wICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRy
PERPTTo6Tm9kZUxpc3RJbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0xMTYsOSArMTE2LDkgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgRE9NRG9jdW1lbnQoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3Vt
ZW50SW1wbCAqZCk7CiAgICAgfkRPTURvY3VtZW50KCk7CiAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBO
b25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpOworICAgIFZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyKTsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51
bSB7IERvY1R5cGUsIEltcGxlbWVudGF0aW9uLCBEb2N1bWVudEVsZW1lbnQsCkBAIC0xNDIsOSAr
MTQyLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01BdHRyKEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpBdHRySW1wbCAqYSk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICBW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1
ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IE5h
bWUsIFNwZWNpZmllZCwgVmFsdWVQcm9wZXJ0eSwgT3duZXJFbGVtZW50IH07CkBAIC0xNTYsNyAr
MTU2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01FbGVtZW50KEV4ZWNT
dGF0ZSAqZXhlYywgRE9NOjpFbGVtZW50SW1wbCAqZSk7CiAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMTcwLDcgKzE3MCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIC8vIENvbnN0cnVjdG9yIGZvciBpbmhlcml0ZWQgY2xhc3Nl
czsgZG9lc24ndCBzZXQgdXAgYSBwcm90b3R5cGUuCiAgICAgRE9NRWxlbWVudChET006OkVsZW1l
bnRJbXBsICplKTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFsdWUgYXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICphdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAgfTsK
IAogICBET006OkVsZW1lbnRJbXBsICp0b0VsZW1lbnQoVmFsdWVJbXAgKik7IC8vIHJldHVybnMg
MCBpZiBwYXNzZWQtaW4gdmFsdWUgaXMgbm90IGEgRE9NRWxlbWVudCBvYmplY3QKQEAgLTE5NCw3
ICsxOTQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTURvY3VtZW50VHlw
ZShFeGVjU3RhdGUgKmV4ZWMsIERPTTo6RG9jdW1lbnRUeXBlSW1wbCAqZHQpOwogICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJl
YWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTIx
Niw4ICsyMTYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgR2V0TmFtZWRJdGVtTlMs
IFNldE5hbWVkSXRlbU5TLCBSZW1vdmVOYW1lZEl0ZW1OUyB9OwogICAgIERPTTo6TmFtZWROb2Rl
TWFwSW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICBwcml2YXRl
OgotICAgIHN0YXRpYyBWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgVmFsdWUg
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmxlbmd0aEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OworICAgIHN0YXRpYyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAogICAgIGtodG1sOjpT
aGFyZWRQdHI8RE9NOjpOYW1lZE5vZGVNYXBJbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0yMjYsOCAr
MjI2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBET006OlByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwg
KnBpKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29u
c3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIFZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBUYXJnZXQsIERhdGEsIFNoZWV0IH07
CkBAIC0yMzcsNyArMjM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01O
b3RhdGlvbihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Tm90YXRpb25JbXBsICpuKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCBy
ZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0y
NDgsNyArMjQ4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01FbnRpdHko
RXhlY1N0YXRlICpleGVjLCBET006OkVudGl0eUltcGwgKmUpOwogICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQog
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTI2MCw3ICsyNjAs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIE5vZGVDb25zdHJ1Y3RvcihFeGVj
U3RhdGUgKikgeyB9CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIFZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
ICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwpAQCAtMjcxLDcgKzI3MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBw
dWJsaWM6CiAgICAgRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0g
YWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
QEAgLTI5NCw4ICsyOTQsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET01OYW1lZE5vZGVzQ29s
bGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFFWYWx1ZUxpc3Q8IGtodG1sOjpTaGFyZWRQ
dHI8RE9NOjpOb2RlSW1wbD4gPiYgbm9kZXMgKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIFZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0
YXRpYyBWYWx1ZSBpbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqbGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAg
ICAgUVZhbHVlTGlzdDwga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJbXBsPiA+IG1fbm9kZXM7
CiAgIH07CkBAIC0zMDQsOCArMzA0LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAg
ICBET01DaGFyYWN0ZXJEYXRhKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDaGFyYWN0ZXJEYXRhSW1w
bCAqZCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CiAgICAgRE9NOjpDaGFyYWN0ZXJEYXRhSW1wbCAqdG9EYXRhKCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS41MwpkaWZmIC1wIC11IC1yMS41MyBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX2V2ZW50cy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAk3
IEF1ZyAyMDA1IDA2OjE3OjQ1IC0wMDAwCTEuNTMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
ZXZlbnRzLmNwcAk4IEF1ZyAyMDA1IDAxOjAxOjE3IC0wMDAwCkBAIC03Myw1NiArNzMsNTYgQEAg
dm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICBFdmVudEltcGwgKmV2
dCA9IGVsZS5oYW5kbGUoKTsKICNlbmRpZgogCi0gIE9iamVjdCBsaXN0ZW5lciA9IGxpc3RlbmVy
T2JqKCk7Ci0gIE9iamVjdCB3aW4gPSB3aW5kb3dPYmooKTsKKyAgT2JqZWN0SW1wICpsaXN0ZW5l
ciA9IGxpc3RlbmVyT2JqKCk7CisgIE9iamVjdEltcCAqd2luID0gd2luZG93T2JqKCk7CiAKLSAg
S0hUTUxQYXJ0ICpwYXJ0ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+cGFydCgp
OworICBLSFRNTFBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4pLT5wYXJ0KCk7
CiAgIEtKU1Byb3h5ICpwcm94eSA9IDA7CiAgIGlmIChwYXJ0KQogICAgICAgcHJveHkgPSBLSlNQ
cm94eTo6cHJveHkoIHBhcnQgKTsKIAotICBpZiAocHJveHkgJiYgbGlzdGVuZXIuaW1wbGVtZW50
c0NhbGwoKSkgeworICBpZiAocHJveHkgJiYgbGlzdGVuZXItPmltcGxlbWVudHNDYWxsKCkpIHsK
ICAgICByZWYoKTsKIAotICAgIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0g
c3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlciAqPihwcm94eS0+aW50ZXJwcmV0ZXIo
KSk7CisgICAgU2NyaXB0SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gc3RhdGljX2Nhc3Q8U2Ny
aXB0SW50ZXJwcmV0ZXIgKj4ocHJveHktPmludGVycHJldGVyKCkpOwogICAgIEV4ZWNTdGF0ZSAq
ZXhlYyA9IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7CiAKICAgICBMaXN0IGFyZ3M7CiAgICAg
YXJncy5hcHBlbmQoZ2V0RE9NRXZlbnQoZXhlYyxldnQpKTsKIAotICAgIFdpbmRvdyAqd2luZG93
ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKTsKKyAgICBXaW5kb3cgKndpbmRvdyA9
IHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbik7CiAgICAgLy8gU2V0IHRoZSBldmVudCB3ZSdyZSBo
YW5kbGluZyBpbiB0aGUgV2luZG93IG9iamVjdAogICAgIHdpbmRvdy0+c2V0Q3VycmVudEV2ZW50
KGV2dCk7CiAgICAgLy8gLi4uIGFuZCBpbiB0aGUgaW50ZXJwcmV0ZXIKICAgICBpbnRlcnByZXRl
ci0+c2V0Q3VycmVudEV2ZW50KGV2dCk7CiAKLSAgICBPYmplY3QgdGhpc09iajsKKyAgICBPYmpl
Y3RJbXAgKnRoaXNPYmo7CiAgICAgaWYgKGlzV2luZG93RXZlbnQpIHsKICAgICAgICAgdGhpc09i
aiA9IHdpbjsKICAgICB9IGVsc2UgewotICAgICAgICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7
Ci0gICAgICAgIHRoaXNPYmogPSBPYmplY3Q6OmR5bmFtaWNDYXN0KGdldERPTU5vZGUoZXhlYywg
ZXZ0LT5jdXJyZW50VGFyZ2V0KCkpKTsKLSAgICAgICAgS0pTOjpJbnRlcnByZXRlcjo6dW5sb2Nr
KCk7CisgICAgICAgIEludGVycHJldGVyOjpsb2NrKCk7CisgICAgICAgIHRoaXNPYmogPSBzdGF0
aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBldnQtPmN1cnJlbnRUYXJnZXQo
KSkpOworICAgICAgICBJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAgICAgfQogCi0gICAgS0pTOjpJ
bnRlcnByZXRlcjo6bG9jaygpOwotICAgIFZhbHVlIHJldHZhbCA9IGxpc3RlbmVyLmNhbGwoZXhl
YywgdGhpc09iaiwgYXJncyk7Ci0gICAgS0pTOjpJbnRlcnByZXRlcjo6dW5sb2NrKCk7CisgICAg
SW50ZXJwcmV0ZXI6OmxvY2soKTsKKyAgICBWYWx1ZUltcCAqcmV0dmFsID0gbGlzdGVuZXItPmNh
bGwoZXhlYywgdGhpc09iaiwgYXJncyk7CisgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAg
ICAgd2luZG93LT5zZXRDdXJyZW50RXZlbnQoIDAgKTsKICAgICBpbnRlcnByZXRlci0+c2V0Q3Vy
cmVudEV2ZW50KCAwICk7CiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgIGlmICggZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgKSB7Ci0gICAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgICAgICAg
Y2hhciAqbWVzc2FnZSA9IGV4ZWMtPmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVj
LCBtZXNzYWdlUHJvcGVydHlOYW1lKS50b1N0cmluZyhleGVjKS5hc2NpaSgpOwotICAgICAgICBp
bnQgbGluZU51bWJlciA9ICBleGVjLT5leGNlcHRpb24oKS50b09iamVjdChleGVjKS5nZXQoZXhl
YywgImxpbmUiKS50b0ludDMyKGV4ZWMpOworICAgICAgICBJbnRlcnByZXRlcjo6bG9jaygpOwor
ICAgICAgICBjaGFyICptZXNzYWdlID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMp
LT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSktPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCk7
CisgICAgICAgIGludCBsaW5lTnVtYmVyID0gIGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChl
eGVjKS0+Z2V0KGV4ZWMsICJsaW5lIiktPnRvSW50MzIoZXhlYyk7CiAgICAgICAgIFFTdHJpbmcg
c291cmNlVVJMOwogICAgICAgICB7CiAgICAgICAgICAgLy8gcHV0IHRoaXMgaW4gYSBibG9jayB0
byBtYWtlIHN1cmUgVVN0cmluZyBpcyBkZWFsbG9jYXRlZCBpbnNpZGUgdGhlIGxvY2sKLSAgICAg
ICAgICBVU3RyaW5nIHVTb3VyY2VVUkwgPSBleGVjLT5leGNlcHRpb24oKS50b09iamVjdChleGVj
KS5nZXQoZXhlYywgInNvdXJjZVVSTCIpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgIFVTdHJp
bmcgdVNvdXJjZVVSTCA9IGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKS0+Z2V0KGV4
ZWMsICJzb3VyY2VVUkwiKS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgICAgc291cmNlVVJMID0g
dVNvdXJjZVVSTC5xc3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgS0pTOjpJbnRlcnByZXRl
cjo6dW5sb2NrKCk7CisgICAgICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKICAgICAgICAgaWYg
KEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkgewogCSAgICBwcmludGYoIihl
dmVudCBoYW5kbGVyKTolc1xuIiwgbWVzc2FnZSk7CiAJfQpAQCAtMTU1LDc1ICsxNTUsNzMgQEAg
RE9NOjpET01TdHJpbmcgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OgogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcihPYmplY3QgX2xpc3RlbmVyLCBjb25zdCBPYmplY3QgJl93aW4sIGJvb2wgX2h0bWwp
CitKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIo
T2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVjdEltcCAqX3dpbiwgYm9vbCBfaHRtbCkKICAgOiBK
U0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihfaHRtbCkKICAgLCBsaXN0ZW5lcihfbGlzdGVuZXIpCiAg
ICwgd2luKF93aW4pCiB7Ci0gICAgaWYgKF9saXN0ZW5lci5pbXAoKSkgewotICAgICAgc3RhdGlj
X2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzLmlu
c2VydChfbGlzdGVuZXIuaW1wKCksIHRoaXMpOworICAgIGlmIChfbGlzdGVuZXIpIHsKKyAgICAg
IHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbiktPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVycy5p
bnNlcnQoX2xpc3RlbmVyLCB0aGlzKTsKICAgICB9CiB9CiAKIEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoKQogewotICAgIGlmIChsaXN0ZW5l
ci5pbXAoKSkgewotICAgICAgc3RhdGljX2Nhc3Q8V2luZG93Kj4od2luLmltcCgpKS0+anNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lci5pbXAoKSk7CisgICAgaWYgKGxp
c3RlbmVyKSB7CisgICAgICBzdGF0aWNfY2FzdDxXaW5kb3cqPih3aW4pLT5qc1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKICAgICB9CiB9CiAKLU9iamVjdCBKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAorT2JqZWN0SW1wICpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAogeyAKICAgICBy
ZXR1cm4gbGlzdGVuZXI7IAogfQogCi1PYmplY3QgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6
OndpbmRvd09iaigpIGNvbnN0CitPYmplY3RJbXAgKkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
Ojp3aW5kb3dPYmooKSBjb25zdAogewogICAgIHJldHVybiB3aW47CiB9CiAKIHZvaWQgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI6Om1hcmsoKQogewotICBPYmplY3RJbXAgKmxpc3RlbmVySW1w
ID0gbGlzdGVuZXIuaW1wKCk7CisgIE9iamVjdEltcCAqbGlzdGVuZXJJbXAgPSBsaXN0ZW5lcjsK
ICAgaWYgKGxpc3RlbmVySW1wICYmICFsaXN0ZW5lckltcC0+bWFya2VkKCkpCiAgICAgbGlzdGVu
ZXJJbXAtPm1hcmsoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1KU0V2ZW50TGlzdGVu
ZXI6OkpTRXZlbnRMaXN0ZW5lcihPYmplY3QgX2xpc3RlbmVyLCBjb25zdCBPYmplY3QgJl93aW4s
IGJvb2wgX2h0bWwpCitKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcihPYmplY3RJbXAg
Kl9saXN0ZW5lciwgT2JqZWN0SW1wICpfd2luLCBib29sIF9odG1sKQogICA6IEpTQWJzdHJhY3RF
dmVudExpc3RlbmVyKF9odG1sKQogICAsIGxpc3RlbmVyKF9saXN0ZW5lcikKICAgLCB3aW4oX3dp
bikKIHsKLSAgICAvL2ZwcmludGYoc3RkZXJyLCJKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0
ZW5lciB0aGlzPSVwIGxpc3RlbmVyPSVwXG4iLHRoaXMsbGlzdGVuZXIuaW1wKCkpOwotICAgIGlm
IChfbGlzdGVuZXIuaW1wKCkpIHsKLSAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbi5pbXAo
KSktPmpzRXZlbnRMaXN0ZW5lcnMuaW5zZXJ0KF9saXN0ZW5lci5pbXAoKSwgdGhpcyk7Ci0gICAg
fQorICAgIGlmIChfbGlzdGVuZXIpCisgICAgICBzdGF0aWNfY2FzdDxXaW5kb3cqPihfd2luKS0+
anNFdmVudExpc3RlbmVycy5pbnNlcnQoX2xpc3RlbmVyLCB0aGlzKTsKIH0KIAogSlNFdmVudExp
c3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKCkKIHsKLSAgICBpZiAobGlzdGVuZXIuaW1wKCkpIHsK
LSAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbi5pbXAoKSktPmpzRXZlbnRMaXN0ZW5lcnMu
cmVtb3ZlKGxpc3RlbmVyLmltcCgpKTsKKyAgICBpZiAoT2JqZWN0SW1wICpsID0gbGlzdGVuZXIp
IHsKKyAgICAgICAgT2JqZWN0SW1wICp3ID0gd2luOworICAgICAgICBzdGF0aWNfY2FzdDxXaW5k
b3cgKj4odyktPmpzRXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGwpOwogICAgIH0KLSAgICAvL2Zwcmlu
dGYoc3RkZXJyLCJKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlzdGVuZXIgdGhpcz0lcCBsaXN0
ZW5lcj0lcFxuIix0aGlzLGxpc3RlbmVyLmltcCgpKTsKIH0KIAotT2JqZWN0IEpTRXZlbnRMaXN0
ZW5lcjo6bGlzdGVuZXJPYmooKSBjb25zdAorT2JqZWN0SW1wICpKU0V2ZW50TGlzdGVuZXI6Omxp
c3RlbmVyT2JqKCkgY29uc3QKIHsgCiAgICAgcmV0dXJuIGxpc3RlbmVyOyAKIH0KIAotT2JqZWN0
IEpTRXZlbnRMaXN0ZW5lcjo6d2luZG93T2JqKCkgY29uc3QKK09iamVjdEltcCAqSlNFdmVudExp
c3RlbmVyOjp3aW5kb3dPYmooKSBjb25zdAogewogICAgIHJldHVybiB3aW47CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0ZW5l
cihRU3RyaW5nIF9jb2RlLCBjb25zdCBPYmplY3QgJl93aW4sIE5vZGVJbXBsICpfb3JpZ2luYWxO
b2RlLCBpbnQgbGluZW5vKQotICA6IEpTRXZlbnRMaXN0ZW5lcihPYmplY3QoKSwgX3dpbiwgdHJ1
ZSksCitKU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKFFTdHJpbmcgX2Nv
ZGUsIE9iamVjdEltcCAqX3dpbiwgTm9kZUltcGwgKl9vcmlnaW5hbE5vZGUsIGludCBsaW5lbm8p
CisgIDogSlNFdmVudExpc3RlbmVyKE5VTEwsIF93aW4sIHRydWUpLAogICAgIGNvZGUoX2NvZGUp
LAogICAgIHBhcnNlZChmYWxzZSkKIHsKQEAgLTI0MCwxNCArMjM4LDE0IEBAIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIKIAogdm9pZCBKU0xhenlFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChFdmVudExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQp
CiB7Ci0gIHBhcnNlQ29kZSgpOwotICBpZiAoIWxpc3RlbmVyLmlzTnVsbCgpKSB7IAotICAgIEpT
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoZXZ0LCBpc1dpbmRvd0V2ZW50KTsKLSAgfQorICAg
IHBhcnNlQ29kZSgpOworICAgIE9iamVjdEltcCAqbGlzdGVuZXJPYmogPSBsaXN0ZW5lcjsKKyAg
ICBpZiAobGlzdGVuZXJPYmopCisgICAgICAgIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQo
ZXZ0LCBpc1dpbmRvd0V2ZW50KTsKIH0KIAogCi1PYmplY3QgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6
bGlzdGVuZXJPYmooKSBjb25zdAorT2JqZWN0SW1wICpKU0xhenlFdmVudExpc3RlbmVyOjpsaXN0
ZW5lck9iaigpIGNvbnN0CiB7CiAgIHBhcnNlQ29kZSgpOwogICByZXR1cm4gbGlzdGVuZXI7CkBA
IC0yNTYsNDggKzI1NCw0OSBAQCBPYmplY3QgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6bGlzdGVuZXJP
YmooCiB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvbnN0CiB7CiAgIGlm
ICghcGFyc2VkKSB7Ci0gICAgS0hUTUxQYXJ0ICpwYXJ0ID0gc3RhdGljX2Nhc3Q8V2luZG93Kj4o
d2luLmltcCgpKS0+cGFydCgpOworICAgIE9iamVjdEltcCAqdyA9IHdpbjsKKyAgICBLSFRNTFBh
cnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4odyktPnBhcnQoKTsKICAgICBLSlNQcm94
eSAqcHJveHkgPSAwTDsKICAgICBpZiAocGFydCkKICAgICAgIHByb3h5ID0gS0pTUHJveHk6OnBy
b3h5KCBwYXJ0ICk7CiAKICAgICBpZiAocHJveHkpIHsKLSAgICAgIEtKUzo6U2NyaXB0SW50ZXJw
cmV0ZXIgKmludGVycHJldGVyID0gc3RhdGljX2Nhc3Q8S0pTOjpTY3JpcHRJbnRlcnByZXRlciAq
Pihwcm94eS0+aW50ZXJwcmV0ZXIoKSk7CisgICAgICBTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJw
cmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihwcm94eS0+aW50ZXJwcmV0
ZXIoKSk7CiAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygp
OwogCi0gICAgICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAvL0tKUzo6Q29uc3Ry
dWN0b3IgY29uc3RyKEtKUzo6R2xvYmFsOjpjdXJyZW50KCkuZ2V0KCJGdW5jdGlvbiIpLmltcCgp
KTsKLSAgICAgIEtKUzo6T2JqZWN0IGNvbnN0ciA9IGludGVycHJldGVyLT5idWlsdGluRnVuY3Rp
b24oKTsKLSAgICAgIEtKUzo6TGlzdCBhcmdzOworICAgICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsK
KyAgICAgIC8vQ29uc3RydWN0b3IgY29uc3RyKEdsb2JhbDo6Y3VycmVudCgpLmdldCgiRnVuY3Rp
b24iKSk7CisgICAgICBPYmplY3RJbXAgKmNvbnN0ciA9IGludGVycHJldGVyLT5idWlsdGluRnVu
Y3Rpb24oKTsKKyAgICAgIExpc3QgYXJnczsKIAotICAgICAgc3RhdGljIFByb3RlY3RlZFZhbHVl
IGV2ZW50U3RyaW5nID0gS0pTOjpTdHJpbmcoImV2ZW50Iik7CisgICAgICBzdGF0aWMgUHJvdGVj
dGVkVmFsdWUgZXZlbnRTdHJpbmcgPSBTdHJpbmcoImV2ZW50Iik7CiAgICAgICBVU3RyaW5nIHNv
dXJjZVVSTChwYXJ0LT5tX3VybC51cmwoKSk7CiAgICAgICBhcmdzLmFwcGVuZChldmVudFN0cmlu
Zyk7Ci0gICAgICBhcmdzLmFwcGVuZChLSlM6OlN0cmluZyhjb2RlKSk7Ci0gICAgICBsaXN0ZW5l
ciA9IGNvbnN0ci5jb25zdHJ1Y3QoZXhlYywgYXJncywgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsg
Ly8gIyMjIGlzIGdsb2JhbEV4ZWMgb2sgPworICAgICAgYXJncy5hcHBlbmQoU3RyaW5nKGNvZGUp
KTsKKyAgICAgIGxpc3RlbmVyID0gY29uc3RyLT5jb25zdHJ1Y3QoZXhlYywgYXJncywgc291cmNl
VVJMLCBsaW5lTnVtYmVyKTsgLy8gIyMjIGlzIGdsb2JhbEV4ZWMgb2sgPwogCi0gICAgICBLSlM6
OkludGVycHJldGVyOjp1bmxvY2soKTsKKyAgICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKIAog
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAJZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKIAogCS8vIGZhaWxlZCB0byBwYXJzZSwgc28gbGV0J3MganVzdCBtYWtlIHRoaXMgbGlzdGVu
ZXIgYSBuby1vcAotCWxpc3RlbmVyID0gT2JqZWN0KCk7CisJbGlzdGVuZXIgPSBOVUxMOwogICAg
ICAgfSBlbHNlIGlmIChvcmlnaW5hbE5vZGUpIHsKICAgICAgICAgLy8gQWRkIHRoZSBldmVudCdz
IGhvbWUgZWxlbWVudCB0byB0aGUgc2NvcGUKLSAgICAgICAgLy8gKGFuZCB0aGUgZG9jdW1lbnQs
IGFuZCB0aGUgZm9ybSAtIHNlZSBLSlM6OkhUTUxFbGVtZW50OjpldmVudEhhbmRsZXJTY29wZSkK
LSAgICAgICAgU2NvcGVDaGFpbiBzY29wZSA9IGxpc3RlbmVyLnNjb3BlKCk7CisgICAgICAgIC8v
IChhbmQgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGZvcm0gLSBzZWUgSFRNTEVsZW1lbnQ6OmV2ZW50
SGFuZGxlclNjb3BlKQorICAgICAgICBTY29wZUNoYWluIHNjb3BlID0gbGlzdGVuZXItPnNjb3Bl
KCk7CiAgICAgICAgIAotICAgICAgICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAg
IE9iamVjdCB0aGlzT2JqID0gT2JqZWN0OjpkeW5hbWljQ2FzdChnZXRET01Ob2RlKGV4ZWMsIG9y
aWdpbmFsTm9kZSkpOwotICAgICAgICBLSlM6OkludGVycHJldGVyOjp1bmxvY2soKTsKKyAgICAg
ICAgSW50ZXJwcmV0ZXI6OmxvY2soKTsKKyAgICAgICAgT2JqZWN0SW1wICp0aGlzT2JqID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUoZXhlYywgb3JpZ2luYWxOb2RlKSk7Cisg
ICAgICAgIEludGVycHJldGVyOjp1bmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIGlmICghdGhp
c09iai5pc051bGwoKSkgewotICAgICAgICAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAg
ICAgICAgICBzdGF0aWNfY2FzdDxET01Ob2RlKj4odGhpc09iai5pbXAoKSktPnB1c2hFdmVudEhh
bmRsZXJTY29wZShleGVjLCBzY29wZSk7Ci0gICAgICAgICAgS0pTOjpJbnRlcnByZXRlcjo6dW5s
b2NrKCk7CisgICAgICAgIGlmICh0aGlzT2JqKSB7CisgICAgICAgICAgSW50ZXJwcmV0ZXI6Omxv
Y2soKTsKKyAgICAgICAgICBzdGF0aWNfY2FzdDxET01Ob2RlKj4odGhpc09iaiktPnB1c2hFdmVu
dEhhbmRsZXJTY29wZShleGVjLCBzY29wZSk7CisgICAgICAgICAgSW50ZXJwcmV0ZXI6OnVubG9j
aygpOwogICAgICAgICAgIAotICAgICAgICAgIGxpc3RlbmVyLnNldFNjb3BlKHNjb3BlKTsKKyAg
ICAgICAgICBsaXN0ZW5lci0+c2V0U2NvcGUoc2NvcGUpOwogICAgICAgICB9CiAgICAgICB9CiAg
ICAgfQpAQCAtMzA1LDkgKzMwNCw5IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VD
b2RlKCkgY28KICAgICAvLyBubyBtb3JlIG5lZWQgdG8ga2VlcCB0aGUgdW5wYXJzZWQgY29kZSBh
cm91bmQKICAgICBjb2RlID0gUVN0cmluZygpOwogICAgIAotICAgIGlmICghbGlzdGVuZXIuaXNO
dWxsKCkpIHsKLSAgICAgIHN0YXRpY19jYXN0PFdpbmRvdyo+KHdpbi5pbXAoKSktPmpzRXZlbnRM
aXN0ZW5lcnMuaW5zZXJ0KGxpc3RlbmVyLmltcCgpLCAKLQkJCQkJCQkgICAgICAgKEtKUzo6SlNF
dmVudExpc3RlbmVyICopKHRoaXMpKTsKKyAgICBpZiAoT2JqZWN0SW1wICpsID0gbGlzdGVuZXIp
IHsKKyAgICAgICAgT2JqZWN0SW1wICp3ID0gd2luOworICAgICAgICBzdGF0aWNfY2FzdDxXaW5k
b3cgKj4odyktPmpzRXZlbnRMaXN0ZW5lcnMuaW5zZXJ0KGwsIGNvbnN0X2Nhc3Q8SlNMYXp5RXZl
bnRMaXN0ZW5lciAqPih0aGlzKSk7CiAgICAgfQogICAgIAogICAgIHBhcnNlZCA9IHRydWU7CkBA
IC0zMjAsNyArMzE5LDcgQEAgVmFsdWVJbXAgKmdldE5vZGVFdmVudExpc3RlbmVyKE5vZGVJbXBs
IAogICBpZiAobGlzdGVuZXIpCiAgICAgaWYgKFZhbHVlSW1wICpvYmogPSBsaXN0ZW5lci0+bGlz
dGVuZXJPYmpJbXAoKSkKICAgICAgIHJldHVybiBvYmo7Ci0gIHJldHVybiBudWxsKCk7CisgIHJl
dHVybiBqc051bGwoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU2LDEzICszNTUs
MTMgQEAgYm9vbCBFdmVudENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsbwogICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PEV2ZW50Q29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgJkV2
ZW50Q29uc3RydWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFs
dWUgRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50Q29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgLy8gV2UgdXNlIHRoZSB0b2tlbiBh
cyB0aGUgdmFsdWUgdG8gcmV0dXJuIGRpcmVjdGx5CiAgIHJldHVybiBOdW1iZXIodG9rZW4pOwog
fQogCi1WYWx1ZSBnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1w
ICpnZXRFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgcmV0dXJuIGNhY2hl
R2xvYmFsT2JqZWN0PEV2ZW50Q29uc3RydWN0b3I+KGV4ZWMsICJbW2V2ZW50LmNvbnN0cnVjdG9y
XV0iKTsKIH0KQEAgLTQxOSw3ICs0MTgsNyBAQCBib29sIERPTUV2ZW50OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NRXZlbnQsIERPTU9i
amVjdD4oZXhlYywgJkRPTUV2ZW50VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIERPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBFdmVudEltcGwgJmV2ZW50ID0gKm1f
aW1wbDsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtNDQ5LDcgKzQ0OCw3IEBAIFZhbHVlIERPTUV2
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgICAgIGlmICghY2xpcGJvYXJkKSB7CiAg
ICAgICAgIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoZXhlYywgaW1wbC0+Y2xpcGJvYXJkKCkp
OwogICAgICAgfQotICAgICAgcmV0dXJuIE9iamVjdChjbGlwYm9hcmQpOworICAgICAgcmV0dXJu
IGNsaXBib2FyZDsKICAgICB9IGVsc2UgewogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
IH0KQEAgLTQ2MSw0NyArNDYwLDQ3IEBAIFZhbHVlIERPTUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKICAgICAgIGlmICghY2xpcGJvYXJkKSB7CiAgICAgICAgIGNsaXBib2FyZCA9IG5l
dyBDbGlwYm9hcmQoZXhlYywgaW1wbC0+Y2xpcGJvYXJkKCkpOwogICAgICAgfQotICAgICAgcmV0
dXJuIE9iamVjdChjbGlwYm9hcmQpOworICAgICAgcmV0dXJuIGNsaXBib2FyZDsKICAgICB9IGVs
c2UgewogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0KICAgfQogICBkZWZhdWx0Ogog
ICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9NRXZlbnQ6OmdldFZhbHVl
UHJvcGVydHkgOiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAg
cmV0dXJuIE5VTEw7CiAgIH0KIH0KIAogdm9pZCBET01FdmVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgICAgICAgICAgICAgICAgVmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgbG9va3VwUHV0PERPTUV2ZW50LCBET01PYmpl
Y3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmRE9NRXZlbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQg
RE9NRXZlbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgaW50KQordm9pZCBET01FdmVudDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAgIEV2
ZW50SW1wbCAmZXZlbnQgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmV0
dXJuVmFsdWU6Ci0gICAgZXZlbnQuc2V0RGVmYXVsdFByZXZlbnRlZCghdmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICBldmVudC5zZXREZWZhdWx0UHJldmVudGVkKCF2YWx1ZS0+dG9Cb29sZWFu
KGV4ZWMpKTsKICAgICBicmVhazsKICAgY2FzZSBDYW5jZWxCdWJibGU6Ci0gICAgZXZlbnQuc2V0
Q2FuY2VsQnViYmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgZXZlbnQuc2V0Q2FuY2Vs
QnViYmxlKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIGJyZWFrOwogICBkZWZhdWx0Ogog
ICAgIGJyZWFrOwogICB9CiB9CiAKLVZhbHVlIERPTUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICYgdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1w
ICpET01FdmVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKiB0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5o
ZXJpdHMoJktKUzo6RE9NRXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01FdmVu
dDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAg
IH0KLSAgRXZlbnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2FzdDxET01FdmVudCAqPiggdGhpc09i
ai5pbXAoKSApLT5pbXBsKCk7CisgIEV2ZW50SW1wbCAmZXZlbnQgPSAqc3RhdGljX2Nhc3Q8RE9N
RXZlbnQgKj4oIHRoaXNPYmogKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBE
T01FdmVudDo6U3RvcFByb3BhZ2F0aW9uOgogICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CkBAIC01MDksNyArNTA4LDcgQEAgVmFsdWUgRE9NRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlIAogICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKICAgICBjYXNlIERPTUV2ZW50OjpJbml0RXZlbnQ6Ci0gICAgICBldmVudC5pbml0RXZl
bnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSxhcmdzWzFdLnRvQm9vbGVhbihleGVj
KSxhcmdzWzJdLnRvQm9vbGVhbihleGVjKSk7CisgICAgICBldmVudC5pbml0RXZlbnQoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLGFyZ3Nb
Ml0tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIH07CiAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUyMSw3ICs1MjAsNyBAQCBWYWx1ZUltcCAqZ2V0RE9N
RXZlbnQoRXhlY1N0YXRlICpleGVjLCBFCiAgICAgcmV0dXJuIE51bGwoKTsKICAgU2NyaXB0SW50
ZXJwcmV0ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMt
PmR5bmFtaWNJbnRlcnByZXRlcigpKTsKIAotICBLSlM6OkludGVycHJldGVyOjpsb2NrKCk7Cisg
IEludGVycHJldGVyOjpsb2NrKCk7CiAKICAgRE9NT2JqZWN0ICpyZXQgPSBpbnRlcnAtPmdldERP
TU9iamVjdChlKTsKICAgaWYgKCFyZXQpIHsKQEAgLTU0MSw3ICs1NDAsNyBAQCBWYWx1ZUltcCAq
Z2V0RE9NRXZlbnQoRXhlY1N0YXRlICpleGVjLCBFCiAgICAgaW50ZXJwLT5wdXRET01PYmplY3Qo
ZSwgcmV0KTsKICAgfQogCi0gIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOworICBJbnRlcnBy
ZXRlcjo6dW5sb2NrKCk7CiAKICAgcmV0dXJuIHJldDsKIH0KQEAgLTU2NywxMyArNTY2LDEzIEBA
IGJvb2wgRXZlbnRFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0T3duUHIKICAgcmV0dXJuIGdldFN0
YXRpY1ZhbHVlU2xvdDxFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMs
ICZFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uQ29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFdmVudEV4Y2VwdGlv
bkNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAgIC8vIFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRvIHJldHVybiBkaXJl
Y3RseQogICByZXR1cm4gTnVtYmVyKHRva2VuKTsKIH0KIAotVmFsdWUgZ2V0RXZlbnRFeGNlcHRp
b25Db25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCitWYWx1ZUltcCAqZ2V0RXZlbnRFeGNlcHRp
b25Db25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIHJldHVybiBjYWNoZUdsb2JhbE9i
amVjdDxFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yPihleGVjLCAiW1tldmVudEV4Y2VwdGlvbi5j
b25zdHJ1Y3Rvcl1dIik7CiB9CkBAIC02MTYsNyArNjE1LDcgQEAgYm9vbCBET01VSUV2ZW50Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlYwogICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PERPTVVJ
RXZlbnQsIERPTUV2ZW50PihleGVjLCAmRE9NVUlFdmVudFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1WYWx1ZSBET01VSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVVJRXZlbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIFVJRXZl
bnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2FzdDxVSUV2ZW50SW1wbCAqPihpbXBsKCkpOwogICBz
d2l0Y2ggKHRva2VuKSB7CkBAIC02NDQsMjEgKzY0MywyMSBAQCBWYWx1ZSBET01VSUV2ZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgIH0KIH0KIAotVmFsdWUgRE9NVUlFdmVudFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKK1ZhbHVlSW1wICpET01VSUV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYg
KCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTVVJRXZlbnQ6OmluZm8pKSB7Ci0gICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZET01VSUV2ZW50OjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAg
ICAgcmV0dXJuIGVycjsKICAgfQotICBVSUV2ZW50SW1wbCAmdWlFdmVudCA9ICpzdGF0aWNfY2Fz
dDxVSUV2ZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01VSUV2ZW50ICo+KHRoaXNPYmouaW1wKCkp
LT5pbXBsKCkpOworICBVSUV2ZW50SW1wbCAmdWlFdmVudCA9ICpzdGF0aWNfY2FzdDxVSUV2ZW50
SW1wbCAqPihzdGF0aWNfY2FzdDxET01VSUV2ZW50ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBz
d2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01VSUV2ZW50OjpJbml0VUlFdmVudDoKLSAgICAgIHVp
RXZlbnQuaW5pdFVJRXZlbnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpLAorICAgICAgdWlFdmVudC5p
bml0VUlFdmVudChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRvQWJzdHJhY3RWaWV3KGFyZ3NbM10pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmdzWzRdLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzRdLT50b0ludDMyKGV4ZWMpKTsKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgfQogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03MzMsNyArNzMyLDcgQEAgc3RhdGljIFFQb2ludCBvZmZz
ZXRGcm9tVGFyZ2V0KGNvbnN0IE1vdQogICAgIHJldHVybiBRUG9pbnQoeCwgeSk7CiB9CiAKLVZh
bHVlIERPTU1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgTW91c2VFdmVudEltcGwgJmV2
ZW50ID0gKnN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+KGltcGwoKSk7CiAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTc4MiwzNCArNzgxLDM0IEBAIFZhbHVlIERPTU1vdXNlRXZlbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXgKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBldmVudC5yZWxhdGVk
VGFyZ2V0KCkpOwogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9r
ZW4gaW4gRE9NTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eSA6ICIgPDwgdG9rZW4gPDwgZW5k
bDsKLSAgICByZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCi1WYWx1
ZSBET01Nb3VzZUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTU1vdXNlRXZlbnRQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6RE9NTW91
c2VFdmVudDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTU1vdXNlRXZlbnQ6OmluZm8p
KSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsK
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIE1v
dXNlRXZlbnRJbXBsICZtb3VzZUV2ZW50ID0gKnN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsICo+
KHN0YXRpY19jYXN0PERPTU1vdXNlRXZlbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7Cisg
IE1vdXNlRXZlbnRJbXBsICZtb3VzZUV2ZW50ID0gKnN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBs
ICo+KHN0YXRpY19jYXN0PERPTU1vdXNlRXZlbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3
aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU1vdXNlRXZlbnQ6OkluaXRNb3VzZUV2ZW50OgotICAg
ICAgbW91c2VFdmVudC5pbml0TW91c2VFdmVudChhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpLCAvLyB0eXBlQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0u
dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1syXS50b0Jvb2xlYW4oZXhlYyksIC8vIGNhbmNlbGFibGVBcmcKKyAgICAg
IG1vdXNlRXZlbnQuaW5pdE1vdXNlRXZlbnQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIC8vIHR5cGVBcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS0+
dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5jZWxhYmxlQXJnCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQWJzdHJhY3RWaWV3KGFyZ3NbM10pLCAvLyB2
aWV3QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNF0udG9JbnQzMihl
eGVjKSwgLy8gZGV0YWlsQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb
NV0udG9JbnQzMihleGVjKSwgLy8gc2NyZWVuWEFyZwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzWzZdLnRvSW50MzIoZXhlYyksIC8vIHNjcmVlbllBcmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1s3XS50b0ludDMyKGV4ZWMpLCAvLyBjbGllbnRYQXJn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbOF0udG9JbnQzMihleGVjKSwg
Ly8gY2xpZW50WUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzldLnRv
Qm9vbGVhbihleGVjKSwgLy8gY3RybEtleUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzWzEwXS50b0Jvb2xlYW4oZXhlYyksIC8vIGFsdEtleUFyZwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzWzExXS50b0Jvb2xlYW4oZXhlYyksIC8vIHNoaWZ0S2V5
QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMTJdLnRvQm9vbGVhbihl
eGVjKSwgLy8gbWV0YUtleUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzEzXS50b0ludDMyKGV4ZWMpLCAvLyBidXR0b25BcmcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1s0XS0+dG9JbnQzMihleGVjKSwgLy8gZGV0YWlsQXJnCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNV0tPnRvSW50MzIoZXhlYyksIC8vIHNjcmVlblhB
cmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s2XS0+dG9JbnQzMihleGVj
KSwgLy8gc2NyZWVuWUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzdd
LT50b0ludDMyKGV4ZWMpLCAvLyBjbGllbnRYQXJnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3NbOF0tPnRvSW50MzIoZXhlYyksIC8vIGNsaWVudFlBcmcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1s5XS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjdHJsS2V5
QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMTBdLT50b0Jvb2xlYW4o
ZXhlYyksIC8vIGFsdEtleUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzExXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBzaGlmdEtleUFyZworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzEyXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBtZXRhS2V5QXJnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMTNdLT50b0ludDMyKGV4ZWMpLCAv
LyBidXR0b25BcmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Ob2RlKGFyZ3Nb
MTRdKSk7IC8vIHJlbGF0ZWRUYXJnZXRBcmcKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAg
fQpAQCAtODU4LDcgKzg1Nyw3IEBAIGJvb2wgRE9NS2V5Ym9hcmRFdmVudDo6Z2V0T3duUHJvcGVy
dHlTbG8KICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxET01LZXlib2FyZEV2ZW50LCBET01V
SUV2ZW50PihleGVjLCAmRE9NS2V5Ym9hcmRFdmVudFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1WYWx1ZSBET01LZXlib2FyZEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUtleWJvYXJkRXZl
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAgIEtleWJvYXJkRXZlbnRJbXBsICZldmVudCA9ICpzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50
SW1wbCAqPihpbXBsKCkpOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC04NzgsMzEgKzg3NywzMSBA
QCBWYWx1ZSBET01LZXlib2FyZEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5CiAgICAgcmV0dXJuIEJv
b2xlYW4oZXZlbnQuYWx0R3JhcGhLZXkoKSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkg
PDwgIlVuaGFuZGxlZCB0b2tlbiBpbiBET01LZXlib2FyZEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
IDogIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBO
VUxMOwogICB9CiB9CiAKLVZhbHVlIERPTUtleWJvYXJkRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqRE9NS2V5Ym9hcmRFdmVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhp
c09iai5pbmhlcml0cygmRE9NS2V5Ym9hcmRFdmVudDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJkRPTUtleWJvYXJkRXZlbnQ6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICByZXR1cm4gZXJyOwogICB9Ci0gIEtleWJvYXJkRXZlbnRJbXBsICZldmVudCA9ICpzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01VSUV2ZW50ICo+KHRo
aXNPYmouaW1wKCkpLT5pbXBsKCkpOworICBLZXlib2FyZEV2ZW50SW1wbCAmZXZlbnQgPSAqc3Rh
dGljX2Nhc3Q8S2V5Ym9hcmRFdmVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NVUlFdmVudCAqPih0
aGlzT2JqKS0+aW1wbCgpKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNhc2UgRE9NS2V5Ym9hcmRF
dmVudDo6SW5pdEtleWJvYXJkRXZlbnQ6Ci0gICAgICBldmVudC5pbml0S2V5Ym9hcmRFdmVudChh
cmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCAvLyB0eXBlQXJnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzWzFdLnRvQm9vbGVhbihleGVjKSwgLy8gY2FuQnViYmxlQXJn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLnRvQm9vbGVhbihleGVjKSwg
Ly8gY2FuY2VsYWJsZUFyZworICAgICAgZXZlbnQuaW5pdEtleWJvYXJkRXZlbnQoYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIHR5cGVBcmcKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwgLy8gY2FuQnViYmxlQXJnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyksIC8vIGNh
bmNlbGFibGVBcmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQWJzdHJhY3RWaWV3
KGFyZ3NbM10pLCAvLyB2aWV3QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzRdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCAvLyBrZXlJZGVudGlmaWVyCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzWzVdLnRvSW50MzIoZXhlYyksIC8vIGtleUxvY2F0aW9u
QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzZdLnRvQm9vbGVhbihleGVj
KSwgLy8gY3RybEtleUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s3XS50
b0Jvb2xlYW4oZXhlYyksIC8vIGFsdEtleUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnc1s4XS50b0Jvb2xlYW4oZXhlYyksIC8vIHNoaWZ0S2V5QXJnCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzWzldLnRvQm9vbGVhbihleGVjKSwgLy8gbWV0YUtleUFyZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxMF0udG9Cb29sZWFuKGV4ZWMpKTsg
Ly8gYWx0R3JhcGhLZXlBcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNF0t
PnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCAvLyBrZXlJZGVudGlmaWVyCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzWzVdLT50b0ludDMyKGV4ZWMpLCAvLyBrZXlMb2NhdGlvbkFy
ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s2XS0+dG9Cb29sZWFuKGV4ZWMp
LCAvLyBjdHJsS2V5QXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzddLT50
b0Jvb2xlYW4oZXhlYyksIC8vIGFsdEtleUFyZworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnc1s4XS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBzaGlmdEtleUFyZworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnc1s5XS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBtZXRhS2V5QXJn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzEwXS0+dG9Cb29sZWFuKGV4ZWMp
KTsgLy8gYWx0R3JhcGhLZXlBcmcKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgfQogICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC05MjMsMTMgKzkyMiwxMyBAQCBib29sIE11dGF0aW9uRXZl
bnRDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TXV0
YXRpb25FdmVudENvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZNdXRhdGlvbkV2ZW50Q29u
c3RydWN0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgTXV0
YXRpb25FdmVudENvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTXV0YXRpb25FdmVudENvbnN0cnVjdG9yOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8vIFdlIHVzZSB0
aGUgdG9rZW4gYXMgdGhlIHZhbHVlIHRvIHJldHVybiBkaXJlY3RseQogICByZXR1cm4gTnVtYmVy
KHRva2VuKTsKIH0KIAotVmFsdWUgZ2V0TXV0YXRpb25FdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSAqZXhlYykKK1ZhbHVlSW1wICpnZXRNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRl
ICpleGVjKQogewogICByZXR1cm4gY2FjaGVHbG9iYWxPYmplY3Q8TXV0YXRpb25FdmVudENvbnN0
cnVjdG9yPihleGVjLCAiW1ttdXRhdGlvbkV2ZW50LmNvbnN0cnVjdG9yXV0iKTsKIH0KQEAgLTk2
OCw3ICs5NjcsNyBAQCBib29sIERPTU11dGF0aW9uRXZlbnQ6OmdldE93blByb3BlcnR5U2xvCiAg
IHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NTXV0YXRpb25FdmVudCwgRE9NRXZlbnQ+KGV4
ZWMsICZET01NdXRhdGlvbkV2ZW50VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIERPTU11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NTXV0YXRpb25FdmVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgTXV0YXRp
b25FdmVudEltcGwgJmV2ZW50ID0gKnN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsICo+KGlt
cGwoKSk7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTk4NCwyOCArOTgzLDI4IEBAIFZhbHVlIERP
TU11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkKICAgICByZXR1cm4gTnVtYmVyKGV2ZW50
LmF0dHJDaGFuZ2UoKSk7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxl
ZCB0b2tlbiBpbiBET01NdXRhdGlvbkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5IDogIiA8PCB0b2tl
biA8PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9
CiAKLVZhbHVlIERPTU11dGF0aW9uRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9NTXV0YXRp
b25FdmVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0
cygmS0pTOjpET01NdXRhdGlvbkV2ZW50OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRE9N
TXV0YXRpb25FdmVudDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJl
dHVybiBlcnI7CiAgIH0KLSAgTXV0YXRpb25FdmVudEltcGwgJm11dGF0aW9uRXZlbnQgPSAqc3Rh
dGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRXZlbnQgKj4odGhp
c09iai5pbXAoKSktPmltcGwoKSk7CisgIE11dGF0aW9uRXZlbnRJbXBsICZtdXRhdGlvbkV2ZW50
ID0gKnN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTUV2ZW50
ICo+KHRoaXNPYmopLT5pbXBsKCkpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBET01NdXRh
dGlvbkV2ZW50OjpJbml0TXV0YXRpb25FdmVudDoKLSAgICAgIG11dGF0aW9uRXZlbnQuaW5pdE11
dGF0aW9uRXZlbnQoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gdHlwZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b0Jvb2xlYW4o
ZXhlYyksIC8vIGNhbkJ1YmJsZUFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcmdzWzJdLnRvQm9vbGVhbihleGVjKSwgLy8gY2FuY2VsYWJsZUFyZworICAgICAgbXV0
YXRpb25FdmVudC5pbml0TXV0YXRpb25FdmVudChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKSwgLy8gdHlwZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5CdWJibGVBcmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpLCAvLyBjYW5j
ZWxhYmxlQXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvTm9kZShh
cmdzWzNdKSwgLy8gcmVsYXRlZE5vZGVBcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1s0XS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgLy8gcHJldlZhbHVlQXJn
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNV0udG9TdHJpbmco
ZXhlYykuc3RyaW5nKCksIC8vIG5ld1ZhbHVlQXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3NbNl0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIGF0dHJOYW1l
QXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbN10udG9JbnQz
MihleGVjKSk7IC8vIGF0dHJDaGFuZ2VBcmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnc1s0XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIHByZXZWYWx1ZUFy
ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzVdLT50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwgLy8gbmV3VmFsdWVBcmcKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1s2XS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIC8vIGF0dHJO
YW1lQXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbN10tPnRv
SW50MzIoZXhlYykpOyAvLyBhdHRyQ2hhbmdlQXJnCiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiAgIH0KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTA0Nyw3ICsxMDQ2LDcgQEAgYm9vbCBE
T01XaGVlbEV2ZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgIHJldHVybiBnZXRTdGF0aWNW
YWx1ZVNsb3Q8RE9NV2hlZWxFdmVudCwgRE9NRXZlbnQ+KGV4ZWMsICZET01XaGVlbEV2ZW50VGFi
bGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTVdoZWVsRXZlbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NV2hlZWxFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKICAgICBET006OldoZWVsRXZlbnRJbXBsICplID0gc3RhdGljX2Nh
c3Q8RE9NOjpXaGVlbEV2ZW50SW1wbCAqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsK
QEAgLTEwNzksMTAgKzEwNzgsMTAgQEAgVmFsdWUgRE9NV2hlZWxFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9NV2hlZWxFdmVu
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01XaGVlbEV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkRPTVdoZWVsRXZlbnQ6OmluZm8pKSB7
Ci0gICAgICAgIE9iamVjdCBlcnJvciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwor
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRPTVdoZWVsRXZlbnQ6OmluZm8pKSB7CisgICAg
ICAgIE9iamVjdEltcCAqZXJyb3IgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycm9yKTsKICAgICAgICAgcmV0dXJuIGVycm9yOwog
ICAgIH0KQEAgLTExMjYsNyArMTEyNSw3IEBAIENsaXBib2FyZDo6fkNsaXBib2FyZCgpCiAgICAg
ICAgIGNsaXBib2FyZC0+ZGVyZWYoKTsKIH0KIAotc3RhdGljIFZhbHVlIHN0cmluZ09yVW5kZWZp
bmVkKGNvbnN0IERPTTo6RE9NU3RyaW5nICZzdHIpCitzdGF0aWMgVmFsdWVJbXAgKnN0cmluZ09y
VW5kZWZpbmVkKGNvbnN0IERPTTo6RE9NU3RyaW5nICZzdHIpCiB7CiAgICAgaWYgKHN0ci5pc051
bGwoKSkgewogICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMTQwLDcgKzExMzksNyBA
QCBib29sIENsaXBib2FyZDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiAgICAgcmV0dXJuIGdl
dFN0YXRpY1ZhbHVlU2xvdDxDbGlwYm9hcmQsIERPTU9iamVjdD4oZXhlYywgJkNsaXBib2FyZFRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1ZSBDbGlwYm9hcmQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqQ2xpcGJvYXJkOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgY2FzZSBEcm9wRWZmZWN0
OgpAQCAtMTE1OSw1NyArMTE1OCw1NyBAQCBWYWx1ZSBDbGlwYm9hcmQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0CiAgICAgICAgICAgICAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaXQg
PSBxVHlwZXMuYmVnaW4oKTsgaXQgIT0gcVR5cGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKFN0cmluZyhVU3RyaW5nKCppdCkpKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXkoKS5jb25zdHJ1Y3QoZXhlYywgbGlzdCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXkoKS0+Y29uc3Ry
dWN0KGV4ZWMsIGxpc3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBrZFdhcm5pbmcoKSA8PCAiQ2xpcGJvYXJkOjpnZXRWYWx1ZVByb3Bl
cnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgICAgICAgICByZXR1
cm4gVmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KIAotdm9pZCBD
bGlwYm9hcmQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgQ2xpcGJvYXJkOjpwdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAgICAgbG9va3VwUHV0PENsaXBib2FyZCxET01PYmplY3Q+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZDbGlwYm9hcmRUYWJsZSwgdGhpcyAp
OwogfQogCi12b2lkIENsaXBib2FyZDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIENsaXBi
b2FyZDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pCiB7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAg
ICBjYXNlIERyb3BFZmZlY3Q6CiAgICAgICAgICAgICAvLyBjYW4gbmV2ZXIgc2V0IHRoaXMgd2hl
biBub3QgZm9yIGRyYWdnaW5nLCB0aHVzIGdldHRpbmcgYWx3YXlzIHJldHVybnMgTlVMTCBzdHJp
bmcKICAgICAgICAgICAgIGlmIChjbGlwYm9hcmQtPmlzRm9yRHJhZ2dpbmcoKSkKLSAgICAgICAg
ICAgICAgICBjbGlwYm9hcmQtPnNldERyb3BFZmZlY3QodmFsdWUudG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0RHJvcEVmZmVjdCh2YWx1ZS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRWZmZWN0QWxsb3dlZDoKICAgICAgICAgICAgIC8vIGNhbiBuZXZlciBzZXQgdGhpcyB3aGVu
IG5vdCBmb3IgZHJhZ2dpbmcsIHRodXMgZ2V0dGluZyBhbHdheXMgcmV0dXJucyBOVUxMIHN0cmlu
ZwogICAgICAgICAgICAgaWYgKGNsaXBib2FyZC0+aXNGb3JEcmFnZ2luZygpKQotICAgICAgICAg
ICAgICAgIGNsaXBib2FyZC0+c2V0RWZmZWN0QWxsb3dlZCh2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRFZmZlY3RBbGxvd2VkKHZh
bHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGtkV2FybmluZygpIDw8ICJDbGlwYm9hcmQ6OnB1dFZh
bHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKICAgICB9CiB9
CiAKLVZhbHVlIENsaXBib2FyZFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDbGlwYm9hcmRQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpDbGlw
Ym9hcmQ6OmluZm8pKSB7Ci0gICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
VHlwZUVycm9yKTsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZDbGlwYm9hcmQ6OmluZm8p
KSB7CisgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICByZXR1cm4gZXJy
OwogICAgIH0KIAotICAgIENsaXBib2FyZCAqY2IgPSBzdGF0aWNfY2FzdDxDbGlwYm9hcmQgKj4o
dGhpc09iai5pbXAoKSk7CisgICAgQ2xpcGJvYXJkICpjYiA9IHN0YXRpY19jYXN0PENsaXBib2Fy
ZCAqPih0aGlzT2JqKTsKICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgIGNhc2UgQ2xpcGJvYXJk
OjpDbGVhckRhdGE6CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkgewogICAgICAg
ICAgICAgICAgIGNiLT5jbGlwYm9hcmQtPmNsZWFyQWxsRGF0YSgpOwogICAgICAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5zaXplKCkg
PT0gMSkgewotICAgICAgICAgICAgICAgIGNiLT5jbGlwYm9hcmQtPmNsZWFyRGF0YShhcmdzWzBd
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBjYi0+Y2xpcGJvYXJk
LT5jbGVhckRhdGEoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvciwiY2xl
YXJEYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICBP
YmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvciwiY2xlYXJEYXRh
OiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKICAgICAgICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAg
ICAgfQpAQCAtMTIxNywyMyArMTIxNiwyMyBAQCBWYWx1ZSBDbGlwYm9hcmRQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAx
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzOwotICAgICAgICAgICAgICAgIERPTTo6
RE9NU3RyaW5nIHJlc3VsdCA9IGNiLT5jbGlwYm9hcmQtPmdldERhdGEoYXJnc1swXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSwgc3VjY2Vzcyk7CisgICAgICAgICAgICAgICAgRE9NOjpET01TdHJp
bmcgcmVzdWx0ID0gY2ItPmNsaXBib2FyZC0+Z2V0RGF0YShhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwgc3VjY2Vzcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IsImdldERhdGE6IEludmFsaWQg
bnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yLCJnZXREYXRhOiBJbnZhbGlkIG51bWJlciBv
ZiBhcmd1bWVudHMiKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ2xpcGJvYXJkOjpTZXREYXRhOgogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6
ZSgpID09IDIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihjYi0+Y2xpcGJvYXJk
LT5zZXREYXRhKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGFyZ3NbMV0udG9TdHJp
bmcoZXhlYykuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihjYi0+
Y2xpcGJvYXJkLT5zZXREYXRhKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBhcmdz
WzFdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9y
LCJzZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvciwic2V0RGF0
YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIik7CiAgICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAg
ICAgIH0KQEAgLTEyNDQsMTMgKzEyNDMsMTMgQEAgVmFsdWUgQ2xpcGJvYXJkUHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMykgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsIFN5bnRheEVycm9yLCJzZXREcmFnSW1hZ2U6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50
cyIpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVj
LCBTeW50YXhFcnJvciwic2V0RHJhZ0ltYWdlOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMi
KTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgeCA9IChp
bnQpYXJnc1sxXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGludCB5ID0gKGludClhcmdz
WzJdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgaW50IHggPSAoaW50KWFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgaW50IHkgPSAoaW50KWFyZ3NbMl0tPnRvTnVtYmVy
KGV4ZWMpOwogCiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhleSBwYXNzZWQgdXMgYSBub2RlCiAg
ICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IHRvTm9kZShhcmdzWzBdKTsKQEAgLTEyNTksMjAg
KzEyNTgsMjAgQEAgVmFsdWUgQ2xpcGJvYXJkUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogICAg
ICAgICAgICAgICAgICAgICBjYi0+Y2xpcGJvYXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KG5vZGUs
IFFQb2ludCh4LHkpKTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYywgU3ludGF4RXJyb3IsInNl
dERyYWdJbWFnZUZyb21FbGVtZW50OiBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7CisgICAgICAg
ICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhF
cnJvciwic2V0RHJhZ0ltYWdlRnJvbUVsZW1lbnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQiKTsK
ICAgICAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhleSBwYXNzZWQgdXMgYW4gSW1hZ2Ugb2JqZWN0Ci0g
ICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBd
LmltcCgpKTsKKyAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdElt
cCo+KGFyZ3NbMF0pOwogICAgICAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZJbWFnZTo6aW5mbykp
IHsKICAgICAgICAgICAgICAgICBJbWFnZSAqSlNJbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlKj4o
byk7CiAgICAgICAgICAgICAgICAgY2ItPmNsaXBib2FyZC0+c2V0RHJhZ0ltYWdlKEpTSW1hZ2Ut
PmltYWdlKCktPnBpeG1hcCgpLCBRUG9pbnQoeCx5KSk7ICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwor
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWNtYS9ranNfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAt
cCAtdSAtcjEuMjkgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuaAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19ldmVudHMuaAk3IEF1ZyAyMDA1IDA2OjE3OjQ1IC0wMDAwCTEuMjkKKysr
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmgJOCBBdWcgMjAwNSAwMTowMToxNyAtMDAw
MApAQCAtNDgsMzEgKzQ4LDMxIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgfkpTQWJz
dHJhY3RFdmVudExpc3RlbmVyKCk7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KERPTTo6
RXZlbnRMaXN0ZW5lckV2ZW50IGV2dCwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKICAgICB2aXJ0dWFs
IERPTTo6RE9NU3RyaW5nIGV2ZW50TGlzdGVuZXJUeXBlKCk7Ci0gICAgdmlydHVhbCBPYmplY3Qg
bGlzdGVuZXJPYmooKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBPYmplY3Qgd2luZG93T2JqKCkg
Y29uc3QgPSAwOwotICAgIE9iamVjdEltcCAqbGlzdGVuZXJPYmpJbXAoKSBjb25zdCB7IHJldHVy
biBsaXN0ZW5lck9iaigpLmltcCgpOyB9CisgICAgdmlydHVhbCBPYmplY3RJbXAgKmxpc3RlbmVy
T2JqKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICp3aW5kb3dPYmooKSBjb25z
dCA9IDA7CisgICAgT2JqZWN0SW1wICpsaXN0ZW5lck9iakltcCgpIGNvbnN0IHsgcmV0dXJuIGxp
c3RlbmVyT2JqKCk7IH0KICAgcHJvdGVjdGVkOgogICAgIGJvb2wgaHRtbDsKICAgfTsKIAogICBj
bGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRM
aXN0ZW5lciB7CiAgIHB1YmxpYzoKLSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihPYmpl
Y3QgX2xpc3RlbmVyLCBjb25zdCBPYmplY3QgJl93aW4sIGJvb2wgX2h0bWwgPSBmYWxzZSk7Cisg
ICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVj
dEltcCAqX3dpbiwgYm9vbCBfaHRtbCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5KU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcigpOwotICAgIHZpcnR1YWwgT2JqZWN0IGxpc3RlbmVyT2JqKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBPYmplY3Qgd2luZG93T2JqKCkgY29uc3Q7CisgICAgdmlydHVhbCBP
YmplY3RJbXAgKmxpc3RlbmVyT2JqKCkgY29uc3Q7CisgICAgdmlydHVhbCBPYmplY3RJbXAgKndp
bmRvd09iaigpIGNvbnN0OwogICAgIHZvaWQgbWFyaygpOwogICBwcm90ZWN0ZWQ6Ci0gICAgT2Jq
ZWN0IGxpc3RlbmVyOwotICAgIE9iamVjdCB3aW47CisgICAgT2JqZWN0SW1wICpsaXN0ZW5lcjsK
KyAgICBPYmplY3RJbXAgKndpbjsKICAgfTsKIAogICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIgOiBw
dWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICBwdWJsaWM6Ci0gICAgSlNFdmVudExp
c3RlbmVyKE9iamVjdCBfbGlzdGVuZXIsIGNvbnN0IE9iamVjdCAmX3dpbiwgYm9vbCBfaHRtbCA9
IGZhbHNlKTsKKyAgICBKU0V2ZW50TGlzdGVuZXIoT2JqZWN0SW1wICpfbGlzdGVuZXIsIE9iamVj
dEltcCAqX3dpbiwgYm9vbCBfaHRtbCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlz
dGVuZXIoKTsKLSAgICB2aXJ0dWFsIE9iamVjdCBsaXN0ZW5lck9iaigpIGNvbnN0OwotICAgIHZp
cnR1YWwgT2JqZWN0IHdpbmRvd09iaigpIGNvbnN0OworICAgIHZpcnR1YWwgT2JqZWN0SW1wICps
aXN0ZW5lck9iaigpIGNvbnN0OworICAgIHZpcnR1YWwgT2JqZWN0SW1wICp3aW5kb3dPYmooKSBj
b25zdDsKICAgcHJvdGVjdGVkOgogICAgIG11dGFibGUgUHJvdGVjdGVkT2JqZWN0IGxpc3RlbmVy
OwogICAgIFByb3RlY3RlZE9iamVjdCB3aW47CkBAIC04MCw5ICs4MCw5IEBAIG5hbWVzcGFjZSBL
SlMgewogCiAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNFdmVudExpc3Rl
bmVyIHsKICAgcHVibGljOgotICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoUVN0cmluZyBfY29kZSwg
Y29uc3QgT2JqZWN0ICZfd2luLCBET006Ok5vZGVJbXBsICpub2RlLCBpbnQgbGluZW5vID0gMCk7
CisgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihRU3RyaW5nIF9jb2RlLCBPYmplY3RJbXAgKl93aW4s
IERPTTo6Tm9kZUltcGwgKm5vZGUsIGludCBsaW5lbm8gPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoRE9NOjpFdmVudExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZl
bnQpOwotICAgIE9iamVjdCBsaXN0ZW5lck9iaigpIGNvbnN0OworICAgIE9iamVjdEltcCAqbGlz
dGVuZXJPYmooKSBjb25zdDsKICAgICAKICAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQ29kZSgp
IGNvbnN0OwpAQCAtMTAwLDIzICsxMDAsMjMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoK
ICAgICBFdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmly
dHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCi0gIFZhbHVlIGdldEV2
ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKKyAgVmFsdWVJbXAgKmdldEV2ZW50Q29u
c3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKIAogICBjbGFzcyBET01FdmVudCA6IHB1YmxpYyBE
T01PYmplY3QgewogICBwdWJsaWM6CiAgICAgRE9NRXZlbnQoRXhlY1N0YXRlICpleGVjLCBET006
OkV2ZW50SW1wbCAqZSk7CiAgICAgfkRPTUV2ZW50KCk7CiAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLQkJCWNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0
dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KTsKKwkJCVZhbHVlSW1wICp2YWx1ZSwg
aW50IGF0dHIgPSBOb25lKTsKKyAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KTsKICAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgZW51bSB7IFR5cGUsIFRhcmdldCwgQ3VycmVu
dFRhcmdldCwgRXZlbnRQaGFzZSwgQnViYmxlcywKQEAgLTEzOCwyMCArMTM4LDIwIEBAIG5hbWVz
cGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRXZlbnRFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVj
U3RhdGUgKikgeyB9CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8g
bm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKICAgfTsKIAotICBWYWx1ZSBnZXRFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSAqZXhlYyk7CisgIFZhbHVlSW1wICpnZXRFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSAqZXhlYyk7CiAKICAgY2xhc3MgRE9NVUlFdmVudCA6IHB1YmxpYyBET01FdmVu
dCB7CiAgIHB1YmxpYzoKICAgICBET01VSUV2ZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpVSUV2
ZW50SW1wbCAqdWUpOwogICAgIH5ET01VSUV2ZW50KCk7CiAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTE2Myw3ICsxNjMsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBET01Nb3VzZUV2ZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpNb3VzZUV2
ZW50SW1wbCAqbWUpOwogICAgIH5ET01Nb3VzZUV2ZW50KCk7CiAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tl
bikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKICAgICAvLyBubyBwdXQg
LSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0xNzksNyArMTc5LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgRE9NS2V5Ym9hcmRFdmVudChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6S2V5Ym9hcmRF
dmVudEltcGwgKmtlKTsKICAgICB+RE9NS2V5Ym9hcmRFdmVudCgpOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7CiAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMTkxLDIwICsxOTEsMjAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIHB1YmxpYzoKICAgICBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsg
fQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFs
bCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAg
IH07CiAKLSAgVmFsdWUgZ2V0TXV0YXRpb25FdmVudENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhl
Yyk7CisgIFZhbHVlSW1wICpnZXRNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IoRXhlY1N0YXRlICpl
eGVjKTsKIAogICBjbGFzcyBET01NdXRhdGlvbkV2ZW50IDogcHVibGljIERPTUV2ZW50IHsKICAg
cHVibGljOgogICAgIERPTU11dGF0aW9uRXZlbnQoRXhlY1N0YXRlICpleGVjLCBET006Ok11dGF0
aW9uRXZlbnRJbXBsICptZSk7CiAgICAgfkRPTU11dGF0aW9uRXZlbnQoKTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZp
bmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMjE2LDcgKzIxNiw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHB1YmxpYzoKICAgICAgICAgRE9NV2hlZWxFdmVudChF
eGVjU3RhdGUgKiwgRE9NOjpXaGVlbEV2ZW50SW1wbCAqKTsKICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5U2xvdCYpOwotICAgICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgICAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQt
b25seQogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpA
QCAtMjMwLDkgKzIzMCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIENsaXBib2FyZChFeGVjU3Rh
dGUgKmV4ZWMsIERPTTo6Q2xpcGJvYXJkSW1wbCAqZHMpOwogICAgIH5DbGlwYm9hcmQoKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUm
IHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8p
OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9u
ZSk7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLyk7CiAgICAgdmlydHVhbCBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
aHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNt
YS9ranNfaHRtbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMyCmRpZmYgLXAgLXUgLXIx
LjEzMiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX2h0bWwuY3BwCTcgQXVnIDIwMDUgMDY6MTc6NDUgLTAwMDAJMS4xMzIKKysrIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJOCBBdWcgMjAwNSAwMTowMToyMyAtMDAwMApAQCAt
MTQyLDIxICsxNDIsMjEgQEAgbmFtZXNwYWNlIEtKUyB7CiBjbGFzcyBIVE1MRWxlbWVudEZ1bmN0
aW9uIDogcHVibGljIERPTUZ1bmN0aW9uIHsKIHB1YmxpYzoKICAgSFRNTEVsZW1lbnRGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKTsKLSAgdmlydHVhbCBWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0JmFyZ3MpOworICB2
aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKIHByaXZhdGU6CiAgIGludCBpZDsKIH07CiAK
IElNUExFTUVOVF9QUk9UT0ZVTkMoSFRNTERvY0Z1bmN0aW9uKQogCi1WYWx1ZSBLSlM6OkhUTUxE
b2NGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpLSlM6OkhUTUxEb2NGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmSFRNTERvY3VtZW50OjppbmZvKSkgewotICAg
IE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmSFRNTERvY3VtZW50OjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQotICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAq
c3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisgIEhUTUxEb2N1bWVudEltcGwgJmRvYyA9ICpz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCAq
Pih0aGlzT2JqKS0+aW1wbCgpKTsKIAogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgSFRNTERvY3Vt
ZW50OjpDbGVhcjogLy8gZXZlbiBJRSBkb2Vzbid0IHN1cHBvcnQgdGhhdCBvbmUuLi4KQEAgLTE2
OSwxNCArMTY5LDEzIEBAIFZhbHVlIEtKUzo6SFRNTERvY0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGEK
ICAgICAgIGlmIChwYXJ0KSB7CiAJV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2lu
ZG93KHBhcnQpOwogCWlmICh3aW5kb3cpIHsKLQkgIE9iamVjdCBmdW5jdGlvbk9iamVjdCA9IE9i
amVjdDo6ZHluYW1pY0Nhc3Qod2luZG93LT5nZXQoZXhlYywgIm9wZW4iKSk7Ci0JICBpZiAoZnVu
Y3Rpb25PYmplY3QuaXNOdWxsKCkgfHwgIWZ1bmN0aW9uT2JqZWN0LmltcGxlbWVudHNDYWxsKCkp
IHsKLQkgICAgT2JqZWN0IGV4Y2VwdGlvbiA9IEVycm9yOjpjcmVhdGUoZXhlYywgVHlwZUVycm9y
KTsKKwkgIE9iamVjdEltcCAqZnVuY3Rpb25PYmplY3QgPSB3aW5kb3ctPmdldChleGVjLCAib3Bl
biIpLT5nZXRPYmplY3QoKTsKKwkgIGlmICghZnVuY3Rpb25PYmplY3QgfHwgIWZ1bmN0aW9uT2Jq
ZWN0LT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisJICAgIE9iamVjdEltcCAqZXhjZXB0aW9uID0gRXJy
b3I6OmNyZWF0ZShleGVjLCBUeXBlRXJyb3IpOwogCSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhj
ZXB0aW9uKTsKIAkgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIAkgIH0KLQkgIE9iamVjdCB3aW5kb3dP
YmplY3Qod2luZG93KTsKLQkgIHJldHVybiBmdW5jdGlvbk9iamVjdC5jYWxsKGV4ZWMsIHdpbmRv
d09iamVjdCwgYXJncyk7CisJICByZXR1cm4gZnVuY3Rpb25PYmplY3QtPmNhbGwoZXhlYywgd2lu
ZG93LCBhcmdzKTsKIAl9CiAgICAgICB9CiAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0x
OTQsNyArMTkzLDcgQEAgVmFsdWUgS0pTOjpIVE1MRG9jRnVuY3Rpb246OmNhbGwoRXhlY1N0YQog
ICAgIC8vIG9yIG5vIGFyZ3VtZW50cwogICAgIFVTdHJpbmcgc3RyID0gIiI7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQotICAgICAgc3RyICs9IGFyZ3NbaV0udG9T
dHJpbmcoZXhlYyk7CisgICAgICBzdHIgKz0gYXJnc1tpXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAg
aWYgKGlkID09IEhUTUxEb2N1bWVudDo6V3JpdGVMbikKICAgICAgIHN0ciArPSAiXG4iOwogICAg
IC8va2REZWJ1ZygpIDw8ICJkb2N1bWVudC53cml0ZTogIiA8PCBzdHIuYXNjaWkoKSA8PCBlbmRs
OwpAQCAtMjAyLDcgKzIwMSw3IEBAIFZhbHVlIEtKUzo6SFRNTERvY0Z1bmN0aW9uOjpjYWxsKEV4
ZWNTdGEKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIH0KICAgY2FzZSBIVE1MRG9jdW1lbnQ6
OkdldEVsZW1lbnRzQnlOYW1lOgotICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBkb2Mu
Z2V0RWxlbWVudHNCeU5hbWUoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuZ2V0KCkp
OworICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLCBkb2MuZ2V0RWxlbWVudHNCeU5hbWUo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLmdldCgpKTsKICAgY2FzZSBIVE1MRG9j
dW1lbnQ6OkNhcHR1cmVFdmVudHM6CiAgIGNhc2UgSFRNTERvY3VtZW50OjpSZWxlYXNlRXZlbnRz
OgogICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdy4gVGhlc2UgYXJlIE5TLXNwZWNpZmljIGxlZ2Fj
eSBjYWxscy4KQEAgLTI2OSw3ICsyNjgsNyBAQCBIVE1MRG9jdW1lbnQ6OkhUTUxEb2N1bWVudChF
eGVjU3RhdGUgKmV4CiB7CiB9CiAKLVZhbHVlIEhUTUxEb2N1bWVudDo6bmFtZWRJdGVtR2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAqSFRNTERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgSFRNTERvY3VtZW50ICp0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIEhUTUxEb2N1bWVudElt
cGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwo
KSk7CkBAIC0yOTAsNyArMjg5LDcgQEAgVmFsdWUgSFRNTERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0
ZXIoRXhlYwogICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgY29sbGVjdGlvbi5nZXQo
KSk7CiB9CiAKLVZhbHVlIEhUTUxEb2N1bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRG9jdW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIEhUTUxEb2N1
bWVudEltcGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KGltcGwoKSk7
CiAKQEAgLTMxMiwxMiArMzExLDggQEAgVmFsdWUgSFRNTERvY3VtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZQogICBjYXNlIEJvZHk6CiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgYm9keSk7
CiAgIGNhc2UgTG9jYXRpb246Ci0gICAgaWYgKHBhcnQpIHsKLSAgICAgIFdpbmRvdyogd2luID0g
V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKLSAgICAgIGlmICh3aW4pCi0gICAgICAgIHJl
dHVybiBWYWx1ZSh3aW4tPmxvY2F0aW9uKCkpOwotICAgIH0KLQorICAgIGlmIChXaW5kb3cqIHdp
biA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCkpCisgICAgICByZXR1cm4gd2luLT5sb2Nh
dGlvbigpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgY2FzZSBDb29raWU6CiAgICAgcmV0
dXJuIFN0cmluZyhkb2MuY29va2llKCkpOwpAQCAtMzM3LDggKzMzMiw4IEBAIFZhbHVlIEhUTUxE
b2N1bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKICAgICB7CiAgICAgICAvLyBUbyBiZSBpbXBs
ZW1lbnRlZC4gTWVhbndoaWxlLCByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBsZW5ndGggcHJvcGVy
dHkgc2V0IHRvIDAKICAgICAgIGtkV2FybmluZygpIDw8ICJLSlM6OkhUTUxEb2N1bWVudCBkb2N1
bWVudC5zY3JpcHRzIGNhbGxlZCAtIG5vdCBpbXBsZW1lbnRlZCIgPDwgZW5kbDsKLSAgICAgIE9i
amVjdCBvYmoobmV3IE9iamVjdEltcCgpKTsKLSAgICAgIG9iai5wdXQoZXhlYywgbGVuZ3RoUHJv
cGVydHlOYW1lLCBOdW1iZXIoMCkpOworICAgICAgT2JqZWN0SW1wICpvYmogPSBuZXcgT2JqZWN0
SW1wOworICAgICAgb2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIoMCkp
OwogICAgICAgcmV0dXJuIG9iajsKICAgICB9CiAgIGNhc2UgQWxsOgpAQCAtNDA2LDcgKzQwMSw3
IEBAIGJvb2wgSFRNTERvY3VtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgcmV0dXJuIERP
TURvY3VtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAotdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQor
dm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogI2lmZGVm
IEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTERvY3VtZW50OjpwdXQg
IiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7CkBAIC00MTQsNyArNDA5LDcgQEAg
dm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0KEV4ZWNTdGF0ZSAqZQogICBsb29rdXBQdXQ8SFRN
TERvY3VtZW50LCBET01Eb2N1bWVudD4oIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIs
ICZIVE1MRG9jdW1lbnRUYWJsZSwgdGhpcyApOwogfQogCi12b2lkIEtKUzo6SFRNTERvY3VtZW50
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
IC8qYXR0ciovKQogewogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsK
ICAgSFRNTERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwg
Kj4oaW1wbCgpKTsKQEAgLTQyMywyMiArNDE4LDIyIEBAIHZvaWQgS0pTOjpIVE1MRG9jdW1lbnQ6
OnB1dFZhbHVlUHJvcGVydHkKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6Ci0g
ICAgZG9jLnNldFRpdGxlKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICBkb2Mu
c2V0VGl0bGUodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICBicmVhazsKICAg
Y2FzZSBCb2R5OgogICAgIGRvYy5zZXRCb2R5KHRvSFRNTEVsZW1lbnQodmFsdWUpLCBleGNlcHRp
b24pOwogICAgIGJyZWFrOwogICBjYXNlIERvbWFpbjogLy8gbm90IHBhcnQgb2YgdGhlIERPTQot
ICAgIGRvYy5zZXREb21haW4odmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgIGRv
Yy5zZXREb21haW4odmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICBicmVhazsK
ICAgY2FzZSBDb29raWU6Ci0gICAgZG9jLnNldENvb2tpZSh2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSk7CisgICAgZG9jLnNldENvb2tpZSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpOwogICAgIGJyZWFrOwogICBjYXNlIExvY2F0aW9uOiB7CiAgICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gZG9jLnBhcnQoKTsKICAgICBpZiAocGFydCkKICAgICB7Ci0gICAgICBRU3RyaW5nIHN0ciA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgIFFTdHJpbmcgc3RyID0gdmFs
dWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKIAogICAgICAgLy8gV2hlbiBhc3NpZ25pbmcg
bG9jYXRpb24sIElFIGFuZCBNb3ppbGxhIGJvdGggcmVzb2x2ZSB0aGUgVVJMCiAgICAgICAvLyBy
ZWxhdGl2ZSB0byB0aGUgZnJhbWUgd2hlcmUgdGhlIEphdmFTY3JpcHQgaXMgZXhlY3V0aW5nIG5v
dApAQCAtNDU1LDE4ICs0NTAsMTggQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQ
cm9wZXJ0eQogICB9CiAgIGNhc2UgQmdDb2xvcjoKICAgICBpZiAoYm9keUVsZW1lbnQpCi0gICAg
ICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7
CisgICAgICBib2R5RWxlbWVudC0+c2V0QmdDb2xvcih2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpOwogICAgIGJyZWFrOwogICBjYXNlIEZnQ29sb3I6CiAgICAgaWYgKGJvZHlFbGVtZW50
KQotICAgICAgYm9keUVsZW1lbnQtPnNldFRleHQodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5n
KCkpOworICAgICAgYm9keUVsZW1lbnQtPnNldFRleHQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0
cmluZygpKTsKICAgICBicmVhazsKICAgY2FzZSBBbGlua0NvbG9yOgogICAgIGlmIChib2R5RWxl
bWVudCkgewogICAgICAgLy8gdGhpcyBjaGVjayBpcyBhIGJpdCBzaWxseSwgYnV0IHNvbWUgYmVu
Y2htYXJrcyBsaWtlIHRvIHNldCB0aGUKICAgICAgIC8vIGRvY3VtZW50J3MgbGluayBjb2xvcnMg
b3ZlciBhbmQgb3ZlciB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgd2UKICAgICAgIC8vIGRvbid0IHdh
bnQgdG8gaW5jdXIgYSBzdHlsZSB1cGRhdGUgZWFjaCB0aW1lLgotICAgICAgRE9NU3RyaW5nIG5l
d0NvbG9yID0gdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgICAgICBET01TdHJpbmcg
bmV3Q29sb3IgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAgICAgICBpZiAoYm9k
eUVsZW1lbnQtPmFMaW5rKCkgIT0gbmV3Q29sb3IpCiAgICAgICAgIGJvZHlFbGVtZW50LT5zZXRB
TGluayhuZXdDb2xvcik7CiAgICAgfQpAQCAtNDc2LDcgKzQ3MSw3IEBAIHZvaWQgS0pTOjpIVE1M
RG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkKICAgICAgIC8vIHRoaXMgY2hlY2sgaXMgYSBiaXQg
c2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCiAgICAgICAvLyBkb2N1
bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIHdl
CiAgICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRlIGVhY2ggdGltZS4K
LSAgICAgIERPTVN0cmluZyBuZXdDb2xvciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
OworICAgICAgRE9NU3RyaW5nIG5ld0NvbG9yID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmlu
ZygpOwogICAgICAgaWYgKGJvZHlFbGVtZW50LT5saW5rKCkgIT0gbmV3Q29sb3IpCiAJYm9keUVs
ZW1lbnQtPnNldExpbmsobmV3Q29sb3IpOwogICAgIH0KQEAgLTQ4NiwxNyArNDgxLDE3IEBAIHZv
aWQgS0pTOjpIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkKICAgICAgIC8vIHRoaXMgY2hl
Y2sgaXMgYSBiaXQgc2lsbHksIGJ1dCBzb21lIGJlbmNobWFya3MgbGlrZSB0byBzZXQgdGhlCiAg
ICAgICAvLyBkb2N1bWVudCdzIGxpbmsgY29sb3JzIG92ZXIgYW5kIG92ZXIgdG8gdGhlIHNhbWUg
dmFsdWUgYW5kIHdlCiAgICAgICAvLyBkb24ndCB3YW50IHRvIGluY3VyIGEgc3R5bGUgdXBkYXRl
IGVhY2ggdGltZS4KLSAgICAgIERPTVN0cmluZyBuZXdDb2xvciA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLnN0cmluZygpOworICAgICAgRE9NU3RyaW5nIG5ld0NvbG9yID0gdmFsdWUtPnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpOwogICAgICAgaWYgKGJvZHlFbGVtZW50LT52TGluaygpICE9IG5ld0Nv
bG9yKQogCWJvZHlFbGVtZW50LT5zZXRWTGluayhuZXdDb2xvcik7CiAgICAgfQogICAgIGJyZWFr
OwogICBjYXNlIERpcjoKLSAgICBib2R5LT5zZXREaXIodmFsdWUudG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpOworICAgIGJvZHktPnNldERpcih2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkp
OwogICAgIGJyZWFrOwogICBjYXNlIERlc2lnbk1vZGU6CiAgICAgewotICAgICAgRE9NU3RyaW5n
IG1vZGVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAgICAgIERPTVN0
cmluZyBtb2RlU3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogICAgICAg
RG9jdW1lbnRJbXBsOjpJbmhlcml0ZWRCb29sIG1vZGU7CiAgICAgICBpZiAoIXN0cmNhc2VjbXAo
bW9kZVN0cmluZywgIm9uIikpCiAgICAgICAgIG1vZGUgPSBEb2N1bWVudEltcGw6Om9uOwpAQCAt
MTI2OCw3ICsxMjYzLDcgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhl
YwogewogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZvcm1JbmRleEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpOwpA
QCAtMTI3Niw3ICsxMjcxLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1JbmRleEdldHRlcihF
eGVjUwogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZvcm0tPmVsZW1lbnRzKCktPml0ZW0o
c2xvdC5pbmRleCgpKSk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojpmb3JtTmFtZUdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkhUTUxFbGVtZW50Ojpmb3JtTmFtZUdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPih0aGlzT2JqLT5p
bXBsKCkpOwpAQCAtMTI4NCw3ICsxMjc5LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1OYW1l
R2V0dGVyKEV4ZWNTdAogICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLT5lbGVt
ZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLVZh
bHVlIEhUTUxFbGVtZW50OjpzZWxlY3RJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFs
dWVJbXAgKkhUTUxFbGVtZW50OjpzZWxlY3RJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4o
c2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgKnNlbGVjdCA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAt
MTI5Miw0NCArMTI4NywzMSBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0SW5kZXhHZXR0ZXIo
RXhlCiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0LT5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS0+aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmZy
YW1lc2V0TmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkhUTUxFbGVtZW50
OjpmcmFtZXNldE5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVu
dCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7
CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsICo+KHRoaXNPYmotPmltcGwoKSk7CiAKICAgICBOb2RlSW1wbCAqZnJhbWUgPSBlbGVtZW50
LT5jaGlsZHJlbigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAgICBEb2N1
bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICo+KGZyYW1l
KS0+Y29udGVudERvY3VtZW50KCk7Ci0gICAgaWYgKGRvYykgewotICAgICAgICBLSFRNTFBhcnQq
IHBhcnQgPSBkb2MtPnBhcnQoKTsKLSAgICAgICAgaWYgKHBhcnQpIHsKLSAgICAgICAgICAgIFdp
bmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKLSAgICAgICAgICAg
IGlmICh3aW5kb3cpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWUod2luZG93KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2Mg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpKQorICAgICAgICBpZiAoV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2lu
ZG93KGRvYy0+cGFydCgpKSkKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZVdpbmRvd1Byb3Bl
cnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZyYW1l
V2luZG93UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVu
dCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7
Ci0gICAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1w
bCAqPih0aGlzT2JqLT5pbXBsKCkpLT5jb250ZW50RG9jdW1lbnQoKTsKIAotICAgIGlmIChkb2Mp
IHsKLSAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7Ci0gICAgICAgIGlmIChw
YXJ0KSB7Ci0gICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5k
b3cocGFydCk7Ci0gICAgICAgICAgICBpZiAod2luZG93KQotICAgICAgICAgICAgICAgIHJldHVy
biB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9Ci0gICAgfQorICAg
IGlmIChEb2N1bWVudEltcGwgKmRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBs
ICo+KHRoaXNPYmotPmltcGwoKSktPmNvbnRlbnREb2N1bWVudCgpKQorICAgICAgICBpZiAoV2lu
ZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KGRvYy0+cGFydCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6cnVudGltZU9iamVjdEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjpydW50aW1lT2Jq
ZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRNTEVsZW1lbnQgKnRoaXNPYmog
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEhUTUxF
bGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPih0aGlz
T2JqLT5pbXBsKCkpOwpAQCAtMTMzNywxNCArMTMxOSwxMyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6
cnVudGltZU9iamVjdEdldHRlcihFCiAgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywg
ZWxlbWVudCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpydW50aW1lT2JqZWN0UHJvcGVydHlH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cnVudGltZU9i
amVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRNTEVsZW1lbnQg
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihzbG90LnNsb3RCYXNlKCkpOwog
ICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCAqPih0aGlzT2JqLT5pbXBsKCkpOwogCi0gICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1
bnRpbWVPYmplY3QoZXhlYywgZWxlbWVudCk7Ci0gICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmpl
Y3QuaW1wKCkpLT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoVmFsdWVJbXAgKnJ1
bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsIGVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QpLT5nZXQoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEzODMsMTUg
KzEzNjQsMTEgQEAgYm9vbCBIVE1MRWxlbWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgZnJhbWVzZXROYW1lR2V0dGVyKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQuaGFzTG9jYWxOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgRG9jdW1lbnRJbXBsKiBk
b2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50
RG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKGRvYykgewotICAgICAgICAgIEtIVE1MUGFydCogcGFy
dCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKHBhcnQpIHsKLSAgICAgICAgICAgICAg
ICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgZnJhbWVX
aW5kb3dQcm9wZXJ0eUdldHRlcik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhk
b2MtPnBhcnQoKSk7CisgICAgICAgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIGZyYW1lV2luZG93UHJvcGVydHlHZXR0ZXIpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQwMiw5ICsxMzc5
LDkgQEAgYm9vbCBIVE1MRWxlbWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpcywgcnVudGltZU9iamVjdEdldHRlcik7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50
aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwotCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkg
ewotCSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1l
T2JqZWN0LmltcCgpKTsKKwlWYWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmpl
Y3QoZXhlYywmZWxlbWVudCk7CisJaWYgKHJ1bnRpbWVPYmplY3QpIHsKKwkgICAgT2JqZWN0SW1w
ICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdCk7CiAJICAgIGlm
IChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzLCBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ0NywzNyArMTQyNCwyNyBAQCBib29sIEhU
TUxFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6
OmltcGxlbWVudHNDYWxsKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwKLSAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpIHx8Ci0gICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgewor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7CiAgICAg
ICAgIERvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKICAgICAgICAg
S0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKICAgICAgICAg
RXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50
KTsKLSAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBP
YmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0Lmlt
cCgpKTsKLSAgICAgICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwotICAgICAg
ICB9CisgICAgICAgIGlmIChWYWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmpl
Y3QoZXhlYywgZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KHJ1bnRpbWVPYmplY3QpLT5pbXBsZW1lbnRzQ2FsbCgpOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKK1ZhbHVlSW1wICpLSlM6OkhU
TUxFbGVtZW50OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCZhcmdzKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fAotICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykgfHwKLSAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7Ci0g
ICAgICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVu
dCk7Ci0gICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewotICAgICAgICAgICAg
T2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5p
bXAoKSk7Ci0gICAgICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdz
KTsKLSAgICAgICAgfQorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpKSB7CisgICAgICAgIGlmIChWYWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRp
bWVPYmplY3QoZXhlYywgZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QpLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwog
ICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojpo
dG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhU
TUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3RhdGljX2Nhc3Q8SFRNTEh0bWxF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEh0bWxWZXJzaW9uKQpAQCAt
MTQ4NSw3ICsxNDUyLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIoRXhlY1N0YXRl
KgogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVs
ZW1lbnQ6OmhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAg
ICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpCkBAIC0xNDkz
LDcgKzE0NjAsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6aGVhZEdldHRlcihFeGVjU3RhdGUqCiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6bGlua0dldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVu
dDo6bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBI
VE1MTGlua0VsZW1lbnRJbXBsICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE1MjEsNyArMTQ4OCw3IEBA
IFZhbHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojp0aXRsZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6dGl0bGVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFRpdGxlRWxl
bWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQpAQCAtMTUyOSw3ICsxNDk2LDcgQEAg
VmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTE1ldGFFbGVtZW50
SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xNTQxLDcgKzE1MDgsNyBAQCBWYWx1ZSBIVE1MRWxl
bWVudDo6bWV0YUdldHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0g
KnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKQEAgLTE1NTEsNyArMTUxOCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpiYXNlR2V0
dGVyKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxF
bGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAq
c3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewpAQCAtMTU2MSw3ICsxNTI4LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmlzSW5k
ZXhHZXR0ZXIoRXhlY1N0YQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRN
TEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkhUTUxFbGVtZW50OjpzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4p
IHsKQEAgLTE1NzMsNyArMTU0MCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpzdHlsZUdldHRlcihF
eGVjU3RhdGUKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50
Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICAgIEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJv
ZHlFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTYwNCw3
ICsxNTcxLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIoRXhlY1N0YXRlKgogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6
OmZvcm1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xNjIwLDcgKzE1ODcsNyBAQCBW
YWx1ZSBIVE1MRWxlbWVudDo6Zm9ybUdldHRlcihFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjpzZWxlY3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xNjM5LDcgKzE2MDYsNyBAQCBWYWx1
ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3JvdXBHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om9wdEdyb3VwR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50
SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTY0OSw3ICsxNjE2LDcg
QEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdAogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTY2NSwyMSArMTYzMiwyMSBA
QCBWYWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgVmFsdWUgZ2V0SW5wdXRTZWxlY3Rpb25TdGFydChIVE1M
SW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCitzdGF0aWMgVmFsdWVJbXAgKmdldElucHV0U2VsZWN0
aW9uU3RhcnQoSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0KQogewogICAgIGlmIChpbnB1dC5j
YW5IYXZlU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQuc2VsZWN0aW9u
U3RhcnQoKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgVmFsdWUgZ2V0
SW5wdXRTZWxlY3Rpb25FbmQoSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0KQorc3RhdGljIFZh
bHVlSW1wICpnZXRJbnB1dFNlbGVjdGlvbkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQp
CiB7CiAgICAgaWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBIVE1MRWxlbWVudDo6aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1
dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewpAQCAtMTcwNyw3ICsxNjc0LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Omlu
cHV0R2V0dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUg
SFRNTEVsZW1lbnQ6OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4
dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE3MjgsNyArMTY5NSw3IEBAIFZhbHVlIEhUTUxFbGVt
ZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIEhUTUxFbGVtZW50OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKQEAgLTE3NDMsNyArMTcxMCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50
OjpidXR0b25HZXR0ZXIoRXhlY1N0YXQKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIEhUTUxFbGVtZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0g
KnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7CkBAIC0xNzU0LDcgKzE3MjEsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxH
ZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1M
RWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNl
dCA9ICpzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAg
aWYgKHRva2VuID09IEZpZWxkU2V0Rm9ybSkKQEAgLTE3NjIsNyArMTcyOSw3IEBAIFZhbHVlIEhU
TUxFbGVtZW50OjpmaWVsZFNldEdldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MTGVnZW5kRWxlbWVudElt
cGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE3NzMsNyArMTc0MCw3IEBAIFZhbHVlIEhUTUxF
bGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXQKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLVZhbHVlIEhUTUxFbGVtZW50Ojp1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFVMaXN0RWxlbWVudEltcGwmIHVM
aXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBz
d2l0Y2ggKHRva2VuKSB7CkBAIC0xNzgzLDcgKzE3NTAsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6
dUxpc3RHZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpz
dGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewpAQCAtMTc5NCw3ICsxNzYxLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om9MaXN0R2V0
dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVs
ZW1lbnQ6OmRMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKkhUTUxFbGVtZW50OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nh
c3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBETGlz
dENvbXBhY3QpCkBAIC0xODAyLDcgKzE3NjksNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RH
ZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1M
RWxlbWVudDo6ZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKkhUTUxFbGVtZW50OjpkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXIgPSAqc3RhdGljX2Nh
c3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0g
RGlyZWN0b3J5Q29tcGFjdCkKQEAgLTE4MTAsNyArMTc3Nyw3IEBAIFZhbHVlIEhUTUxFbGVtZW50
OjpkaXJHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIEhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3Rh
dGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09
IE1lbnVDb21wYWN0KQpAQCAtMTgxOCw3ICsxNzg1LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om1l
bnVHZXR0ZXIoRXhlY1N0YXRlKgogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUg
SFRNTEVsZW1lbnQ6OmxpR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRN
TExJRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE4Mjgs
NyArMTc5NSw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGUKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6
OmRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1M
RGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKQEAgLTE4MzYsNyArMTgwMyw3IEBA
IFZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiAKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnBhcmFn
cmFwaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1M
UGFyYWdyYXBoRWxlbWVudEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCkBAIC0x
ODQ0LDcgKzE4MTEsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6cGFyYWdyYXBoR2V0dGVyKEV4ZWNT
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6aGVhZGlu
Z0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1M
RWxlbWVudDo6aGVhZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKICAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsJiBoID0gKnN0YXRpY19jYXN0PEhUTUxIZWFk
aW5nRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24p
CkBAIC0xODUyLDcgKzE4MTksNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRlcihF
eGVjU3RhCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6
YmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpIVE1MRWxlbWVudDo6YmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKICAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsJiBibG9ja1F1b3Rl
ID0gKnN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IGlmICh0b2tlbiA9PSBCbG9ja1F1b3RlQ2l0ZSkKQEAgLTE4NjAsNyArMTgyNyw3IEBAIFZhbHVl
IEhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyKEV4ZWMKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cXVvdGVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTFF1b3RlRWxlbWVudElt
cGwmIHF1b3RlID0gKnN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gUXVvdGVDaXRlKQpAQCAtMTg2OCw3ICsxODM1LDcgQEAgVmFsdWUg
SFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZQogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6cHJlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgJ3dyYXAnIHdoZW4gd2hpdGUtc3BhY2U6IHByZS13cmFwIGlzIGltcGxlbWVudGVkLgogICAg
IEhUTUxQcmVFbGVtZW50SW1wbCYgcHJlID0gKnN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CkBAIC0xODc3LDcgKzE4NDQsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6cHJl
R2V0dGVyKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBI
VE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1M
QlJFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCkBAIC0x
ODg1LDcgKzE4NTIsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBl
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZv
bnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRN
TEVsZW1lbnQ6OmJhc2VGb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsJiBiYXNlRm9udCA9ICpzdGF0aWNfY2Fz
dDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtMTg5Niw3ICsxODYzLDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmJhc2VGb250R2V0dGVy
KEV4ZWNTdAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6
OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
SFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAgICAgSFRNTEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9u
dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0xOTA3LDcg
KzE4NzQsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6Zm9udEdldHRlcihFeGVjU3RhdGUqCiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6aHJHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Omhy
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxIUkVs
ZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMTkxOSw3ICsxODg2LDcgQEAgVmFsdWUgSFRNTEVs
ZW1lbnQ6OmhyR2V0dGVyKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotVmFsdWUgSFRNTEVsZW1lbnQ6Om1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0
YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewpAQCAtMTkyOSw3ICsxODk2LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6Om1vZEdldHRlcihF
eGVjU3RhdGUqIAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1l
bnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpIVE1MRWxlbWVudDo6YW5jaG9yR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCYgYW5jaG9yID0gKnN0YXRpY19j
YXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewpAQCAtMTk2Nyw3ICsxOTM0LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihF
eGVjU3RhdAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6
OmltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KkhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTE5
ODksNyArMTk1Niw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVjU3RhdGUK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVs
ZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
ICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2Jq
ZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIwMTcs
NyArMTk4NCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIoRXhlY1N0YXQKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVu
dDo6cGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAg
SFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMDI5LDcgKzE5OTYs
NyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIoRXhlY1N0YXRlCiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjphcHBs
ZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEFw
cGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMDQ4LDcgKzIwMTUsNyBA
QCBWYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50OjptYXBHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTE1hcEVsZW1lbnRJ
bXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMDU4LDcgKzIwMjUsNyBAQCBWYWx1ZSBIVE1MRWxlbWVu
dDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1W
YWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVhID0gKnN0
YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKQEAgLTIwODgsNyArMjA1NSw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjphcmVhR2V0dGVy
KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVt
ZW50OjpzY3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqSFRNTEVsZW1lbnQ6OnNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKICAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4p
IHsKQEAgLTIxMDMsNyArMjA3MCw3IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRHZXR0ZXIo
RXhlY1N0YXQKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50
Ojp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhU
TUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0y
MTI1LDcgKzIwOTIsNyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIoRXhlY1N0YXRl
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVD
YXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsJiB0YWJsZUNhcHRp
b24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gVGFibGVDYXB0aW9uQWxpZ24pCkBAIC0yMTMzLDcgKzIxMDAsNyBA
QCBWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnRhYmxl
Q29sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjE0Nyw3ICsy
MTE0LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVyKEV4ZWNTdAogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxl
bWVudDo6dGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0
YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewpAQCAtMjE2MCw3ICsyMTI3LDcgQEAgVmFsdWUgSFRNTEVsZW1lbnQ6OnRh
YmxlU2VjdGlvbkdldHRlcihFeAogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUg
SFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFi
bGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIxNzYsNyArMjE0Myw3IEBAIFZhbHVlIEhUTUxFbGVt
ZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3QKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwq
PihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIxOTksNyArMjE2Niw3IEBAIFZh
bHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1MKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZVNldEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpIVE1MRWxlbWVudDo6ZnJhbWVTZXRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yMjA5LDcgKzIxNzYs
NyBAQCBWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmZyYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIyMzEsNyArMjE5OCw3
IEBAIFZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZUdldHRlcihFeGVjU3RhdGUKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6OmlGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgICBIVE1MSUZy
YW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTIyNTYsMTMgKzIyMjMsMTMg
QEAgVmFsdWUgSFRNTEVsZW1lbnQ6OmlGcmFtZUdldHRlcihFeGVjU3RhdAogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotVmFsdWUgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSFRNTEVsZW1lbnQ6Om1hcnF1
ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBpbXBsZW1l
bnQgdGhpcy4KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEhUTUxFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0
aWVzIGZpcnN0LgogICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKQEAgLTIzNTcsMjAgKzIzMjQsMTkgQEAgdm9pZCBL
SlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyUwogSFRNTEVsZW1lbnRGdW5jdGlvbjo6
SFRNTEVsZW1lbnRGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVuKQogICA6
IERPTUZ1bmN0aW9uKCksIGlkKGkpCiB7Ci0gIFZhbHVlIHByb3RlY3QodGhpcyk7CiAgIHB1dChl
eGVjLGxlbmd0aFByb3BlcnR5TmFtZSxOdW1iZXIobGVuKSxEb250RGVsZXRlfFJlYWRPbmx5fERv
bnRFbnVtKTsKIH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
KktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlz
T2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgewotICAgICAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsKKyAgICAgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIGtkRGVidWcoKSA8
PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5kbDsKICAgICBET01F
eGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgICBIVE1MRWxlbWVudEltcGwg
JmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1w
bCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQgKj4odGhpc09iaiktPmltcGwoKSk7CiAKICAgICBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoZm9ybVRhZykpIHsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CkBAIC0yMzkwLDcg
KzIzNTYsNyBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGwoRXhlCiAgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgICAgICBzZWxl
Y3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgICAgICBzZWxl
Y3QucmVtb3ZlKGludChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKQEAgLTI0MjEsNyArMjM4Nyw3IEBAIFZhbHVlIEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpJbnB1dFNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICBpbnB1dC5zZXRTZWxl
Y3Rpb25SYW5nZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLT50b0ludDMyKGV4
ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0NjUsNyArMjQzMSw3IEBAIFZhbHVlIEtKUzo6
SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgICAgICB0ZXh0YXJlYS5zZXRT
ZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVj
KSk7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLT50b0lu
dDMyKGV4ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0ODAsNyArMjQ0Niw3IEBAIFZhbHVl
IEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUKICAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpBbmNob3JUb1N0cmluZykKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpc09i
ai50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXNPYmotPnRv
U3RyaW5nKGV4ZWMpKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUo
dGFibGVUYWcpKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwpAQCAtMjUwMyw5ICsyNDY5
LDkgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4ZQogICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQotICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNl
cHRpb24pKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuaW5zZXJ0
Um93KGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwogICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewotICAgICAgICAgICAg
dGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24p
OwogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjUxNCwxOCArMjQ4MCwxOCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGwo
RXhlCiAgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUodGZvb3RUYWcpKSB7CiAgICAg
ICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwogICAgICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBd
LnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBl
eGNlcHRpb24pKTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVTZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHRhYmxlU2Vj
dGlvbi5kZWxldGVSb3coYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc0xvY2FsTmFtZSh0clRhZykpIHsKICAgICAgICAgSFRNTFRhYmxlUm93RWxl
bWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJv
d0luc2VydENlbGwpCi0gICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93
Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAg
ICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChhcmdzWzBdLT50
b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgICAgICB0YWJsZVJvdy5k
ZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAg
IHRhYmxlUm93LmRlbGV0ZUNlbGwoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsK
ICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1
NDYsOCArMjUxMiw4IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbChFeGUK
ICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoY2Fu
dmFzVGFnKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4
dCkgewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09
IDEgJiYgYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkp
OworICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEg
JiYgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRleHQyRCgmZWxlbWVudCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KQEAgLTI1
NTcsMTAgKzI1MjMsMTAgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsKEV4
ZQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojpw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQotICAgIERPTTo6RE9NU3RyaW5n
IHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCk7CisgICAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNO
dWxsKCkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
OwogI2VuZGlmCiAgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCkBAIC0yNTc0LDIx
ICsyNTQwLDE3IEBAIHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXgKICAg
ICAgICAgYm9vbCBvazsKICAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50b1VMb25n
KCZvayk7CiAgICAgICAgIGlmIChvaykgewotICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0
aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Ci0gICAgICAgICAgICBpZiAo
IWNvbGwuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5h
bWUsdmFsdWUpOworICAgICAgICAgICAgT2JqZWN0SW1wICpjb2xsID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRN
TENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkpOworICAgICAgICAgICAgY29sbC0+cHV0KGV4
ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoZW1iZWRUYWcpIHx8Ci0gICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUob2JqZWN0
VGFnKSB8fAotICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKGFwcGxldFRhZykpIHsK
LQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsK
LQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkgICAgT2JqZWN0SW1wICppbXAgPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7CisgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1l
KG9iamVjdFRhZykgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSkgeworCWlmIChW
YWx1ZUltcCAqcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywgJmVsZW1lbnQp
KSB7CisJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRp
bWVPYmplY3QpOwogCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKLQkJ
cmV0dXJuIGltcC0+cHV0IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKwkJcmV0dXJuIGlt
cC0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwogCX0KICAgICB9CiAjZW5kaWYKQEAg
LTI2MDksMjUgKzI1NzEsMjUgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXQoRXhlY1N0YXRl
ICpleAogICAgIGxvb2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAK
LXZvaWQgSFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRN
TEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MSGVhZEVsZW1l
bnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCiAgICAgICAgIGhlYWQuc2V0UHJvZmls
ZShzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit2b2lkIEhUTUxFbGVtZW50OjpoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAg
SFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpIAogICAgICAgICBo
ZWFkLnNldFByb2ZpbGUoc3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQogewogICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRN
TExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
ICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAg
ICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQog
ICAgICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7
IHJldHVybjsgfQogICAgICAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRI
cmVmKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsg
bGluay5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KQEAgLTI2MzksMTQgKzI2MDEsMTQgQEAg
dm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6dGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OnRpdGxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgIEhUTUxUaXRsZUVsZW1l
bnRJbXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgIGlmICh0b2tlbiA9PSBUaXRsZVRleHQpCiAgICAgICAgIHRpdGxlLnNldFRleHQo
c3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhU
TUxNZXRhRWxlbWVudEltcGwmIG1ldGEgPSAqc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjY1Nyw3ICsyNjE5LDcgQEAg
dm9pZCBIVE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxl
bWVudDo6YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxCYXNlRWxlbWVudElt
cGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAg
ICAgc3dpdGNoICh0b2tlbikgewpAQCAtMjY2NiwyNCArMjYyOCwyNCBAQCB2b2lkIEhUTUxFbGVt
ZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqCiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50
Ojppc0luZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojppc0lu
ZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYg
aXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gSXNJbmRleFByb21wdCkKICAgICAgICAgaXNpbmRleC5zZXRQcm9t
cHQoc3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAg
ICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxTdHlsZUVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2Ug
U3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsg
c3R5bGUuc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQogICAg
ICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJl
dHVybjsgfQogICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCiB7CiAgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBA
IC0yNzAxLDE2ICsyNjYzLDE2IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0
YXRlICoKICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBib2R5LmdldERv
Y3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlTY3Jv
bGxMZWZ0KQotICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3ModmFsdWUu
dG9JbnQzMihleGVjKSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLT50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVu
dHNZKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3ZpZXct
PnNldENvbnRlbnRzUG9zKHN2aWV3LT5jb250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVu
dHNYKCksIHZhbHVlLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQogewogICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpA
QCAtMjcyNSwxMTYgKzI2ODcsMTE1IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmZvcm1TZXR0ZXIoRXhl
Y1N0YXRlICoKICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAg
ICAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5k
ZXg6ICAgeyBzZWxlY3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRT
ZWxlY3RlZEluZGV4KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNh
c2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47
IH0KICAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFj
Y29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2Jq
ZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFBy
b3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmpl
Y3RJbXAgKmNvbGwgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0U2VsZWN0SFRNTENvbGxl
Y3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC0+cHV0KGV4
ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQogICAgICAgICAvLyByZWFkLW9ubHk6IG9w
dGlvbnMKLSAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERp
c2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIFNl
bGVjdE11bHRpcGxlOiAgICAgICAgeyBzZWxlY3Quc2V0TXVsdGlwbGUodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7
IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0aXBsZSh2
YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgU2VsZWN0TmFt
ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgICBj
YXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7
IHNlbGVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLT50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAg
ICAgICB7IHNlbGVjdC5zZXRUYWJJbmRleCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
CiB7CiAgICAgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0
PEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlz
YWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAg
ICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxF
bGVtZW50OjpvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBET01FeGNlcHRpb25U
cmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICAgIGNh
c2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVs
dFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUtPnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQogICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4Ci0gICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLT50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAg
ICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIE9w
dGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICB7
IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAg
ICAgICAgIGNhc2UgT3B0aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIp
OyByZXR1cm47IH0KICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmlucHV0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQogewogICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAg
ICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1bHRWYWx1ZShz
dHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1
dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tl
ZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25s
eTogZm9ybQogICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7IGlucHV0LnNldEFj
Y2VwdChzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAg
eyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRB
bGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0cik7IHJldHVybjsg
fQotICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0LnNldENoZWNrZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW5wdXREaXNh
YmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0
TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bnB1dENoZWNrZWQ6ICAgICAgICAgeyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLT50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgeyBp
bnB1dC5zZXREaXNhYmxlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVl
LT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAg
ICAgICAgIHsgaW5wdXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbnB1
dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1
dC5zZXRTaXplKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJ
bnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rpb25TdGFydCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAg
IHsgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2
YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTaXpl
OiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZSh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6ICB7IGlucHV0LnNldFNlbGVj
dGlvblN0YXJ0KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHsgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLT50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAg
IHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIElucHV0VGFiSW5k
ZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJ
bmRleCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIElucHV0
VHlwZTogICAgICAgICAgICB7IGlucHV0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVl
KHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBz
d2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsg
dGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KICAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0
YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgVGV4dEFyZWFD
b2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFy
ZWEuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS0+
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6
ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KICAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJl
YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6
ICAgICAgICB7IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVh
LnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIFRl
eHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlv
bkVuZDogICAgeyB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1
ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dz
OiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICB7IHRleHRhcmVh
LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEuc2V0U2VsZWN0aW9u
RW5kKHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUtPnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCiAgICAgICAgIGNh
c2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpidXR0b25TZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQogewogICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhU
TUxCdXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAg
ICAgICAvLyByZWFkLW9ubHk6IGZvcm0KICAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAg
ICAgIHsgYnV0dG9uLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBC
dXR0b25EaXNhYmxlZDogICAgICAgIHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbkRpc2FibGVkOiAgICAgICAg
eyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQog
ICAgICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0b24uc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9u
LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLT50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25seTogdHlwZQogICAgICAg
ICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpsYWJlbFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
IHsKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nhc3Q8SFRNTExh
YmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI4NDQs
MTEgKzI4MDUsMTEgQEAgdm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIoRXhlY1N0YXRlIAog
ICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7
CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
dm9pZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yODU4LDEwNiArMjgx
OSwxMDYgQEAgdm9pZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZQogICAgIH0K
IH0KIAotdm9pZCBIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3Zv
aWQgSFRNTEVsZW1lbnQ6OnVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFVM
aXN0RWxlbWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgVUxpc3RDb21w
YWN0OiAgICAgICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRD
b21wYWN0KHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBV
TGlzdFR5cGU6ICAgICAgICAgICAgeyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAg
IH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3ZvaWQgSFRNTEVsZW1lbnQ6Om9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRN
TE9MaXN0RWxlbWVudEltcGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgT0xpc3RD
b21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5z
ZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xp
c3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xp
c3Quc2V0U3RhcnQodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2Fz
ZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQog
ICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAg
SFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0KQotICAgICAg
ICBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgIGRMaXN0
LnNldENvbXBhY3QodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1l
bnQ6OmRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6ZGlyU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXJl
Y3RvcnkgPSAqc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gRGlyZWN0b3J5Q29tcGFjdCkKLSAgICAgICAgZGlyZWN0b3J5LnNl
dENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgZGlyZWN0b3J5LnNldENv
bXBhY3QodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6Om1l
bnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0gKnN0YXRp
Y19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBN
ZW51Q29tcGFjdCkKLSAgICAgICAgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7CisgICAgICAgIG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTExJRWxlbWVudElt
cGwmIGxpID0gKnN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBz
d2l0Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHsgbGkuc2V0
VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBs
aS5zZXRWYWx1ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
TElWYWx1ZTogICAgICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUtPnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmRpdlNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7
CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCiAgICAgICAgIGRp
di5zZXRBbGlnbihzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQogewogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0g
KnN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYg
KHRva2VuID09IFBhcmFncmFwaEFsaWduKQogICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3Ry
KTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAg
IEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRp
bmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikK
ICAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50Ojpi
bG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpibG9j
a1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50
SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCiAgICAgICAgIGJs
b2NrUXVvdGUuc2V0Q2l0ZShzdHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpxdW90ZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKIHsKICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nh
c3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBRdW90
ZUNpdGUpCiAgICAgICAgIHF1b3RlLnNldENpdGUoc3RyKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVu
dDo6cHJlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKIHsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFw
JyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KICAgICBIVE1MUHJl
RWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKLSAgICAgICAgcHJlLnNldFdpZHRoKHZh
bHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICBwcmUuc2V0V2lkdGgodmFsdWUtPnRvSW50MzIo
ZXhlYykpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6YnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1M
QlJFbGVtZW50SW1wbCYgYnIgPSAqc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIGlmICh0b2tlbiA9PSBCUkNsZWFyKQogICAgICAgICBici5zZXRDbGVhcihzdHIp
OwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAg
ICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEJh
c2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI5
NjcsNyArMjkyOCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGEK
ICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBI
VE1MRm9udEVsZW1lbnRJbXBsJiBmb250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI5NzcsMTggKzI5MzgsMTgg
QEAgdm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUgKgogICAgIH0KIH0KIAot
dm9pZCBIVE1MRWxlbWVudDo6aHJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTEhSRWxlbWVudEltcGwm
IGhyID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0
Y2ggKHRva2VuKSB7CiAgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxp
Z24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIu
c2V0Tm9TaGFkZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBIUk5vU2hhZGU6ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLT50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBoci5zZXRT
aXplKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICB7IGhy
LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6
bW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MTW9kRWxlbWVudEltcGwmIG1vZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsK
QEAgLTI5OTcsNyArMjk1OCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3Rh
dGUgKmUKICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
CiB7CiAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRN
TEFuY2hvckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0z
MDEwLDMyICsyOTcxLDMyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3Rh
dGUKICAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJlbChz
dHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHsgYW5j
aG9yLnNldFJldihzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAg
ICAgICAgIHsgYW5jaG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIEFu
Y2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBh
bmNob3Iuc2V0VGFiSW5kZXgodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICAg
ICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyBy
ZXR1cm47IH0KICAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNl
dFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjppbWFn
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKICAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1l
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGlt
YWdlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAg
ICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbWFn
ZUJvcmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNl
dEhlaWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgSW1h
Z2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5z
ZXRJc01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bWFnZUJvcmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUtPnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFn
ZS5zZXRIZWlnaHQodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbWFnZUhzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUtPnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBp
bWFnZS5zZXRJc01hcCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0
dXJuOyB9CiAgICAgICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3Jj
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGlt
YWdlLnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBJbWFnZVZzcGFjZTog
ICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVZzcGFjZTog
ICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0aCh2
YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxl
bWVudDo6b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50Ojpv
YmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwm
IG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTMwNDgsMTIgKzMwMDksMTIgQEAgdm9pZCBIVE1MRWxl
bWVudDo6b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZQogICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBl
OiAgICAgICAgeyBvYmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIC8v
IHJlYWQtb25seTogT2JqZWN0Q29udGVudERvY3VtZW50CiAgICAgICAgIGNhc2UgT2JqZWN0RGF0
YTogICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQotICAgICAgICBj
YXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAg
ICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQogICAgICAgICBjYXNlIE9iamVjdEhlaWdodDogICAgICAgICAgeyBvYmplY3Quc2V0SGVpZ2h0
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBv
YmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9iamVjdE5hbWU6
ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2Fz
ZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5kYnkoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJ
bmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0
VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS0+dG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmpl
Y3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAg
ICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBP
YmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0K
QEAgLTMwNjEsNyArMzAyMiw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlcihFeGVj
U3RhdGUKICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhbVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQog
ewogICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzA3Miw3
ICszMDMzLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIoRXhlY1N0YXRlIAogICAg
IH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit2b2lkIEhUTUxFbGVtZW50OjphcHBsZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBI
VE1MQXBwbGV0RWxlbWVudEltcGwmIGFwcGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxl
bWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTMwOTAsNyArMzA1
MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlcihFeGVjU3RhdGUKICAgICB9CiB9
CiAKLXZvaWQgSFRNTEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBI
VE1MRWxlbWVudDo6bWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTE1hcEVsZW1l
bnRJbXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBpZiAodG9rZW4gPT0gTWFwTmFtZSkKQEAgLTMwOTgsNyArMzA1OSw3IEBAIHZvaWQgSFRN
TEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmUKICAgICAgICAgbWFwLnNldE5hbWUoc3Ry
KTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
dm9pZCBIVE1MRWxlbWVudDo6YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxB
cmVhRWxlbWVudEltcGwmIGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+
KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAtMzEwNiwxNCArMzA2NywxNCBAQCB2
b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqCiAgICAgICAgIGNhc2UgQXJl
YUFsdDogICAgICAgICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KICAgICAgICAg
Y2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsg
fQogICAgICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7
IHJldHVybjsgfQotICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXRO
b0hyZWYodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJl
YU5vSHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgeyBhcmVhLnNl
dFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAg
IHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLT50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAg
ICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9CiB9CiAKLXZvaWQgSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVu
dDo6c2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJ
bXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0zMTIxLDEzICszMDgyLDEzIEBAIHZvaWQgSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlcihFeGVjU3RhdGUKICAgICAgICAgY2FzZSBTY3JpcHRIdG1s
Rm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICB7IHNjcmlwdC5zZXRFdmVudChzdHIpOyByZXR1
cm47IH0KICAgICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHsgc2NyaXB0LnNldENo
YXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAg
ICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVl
LT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBTY3JpcHRTcmM6ICAg
ICAgICAgICAgIHsgc2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBT
Y3JpcHRUeXBlOiAgICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKICAgICBI
VE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTMxNDgsMjcgKzMxMDks
MjcgQEAgdm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZXR0ZXIoRXhlY1N0YXRlIAogICAgIH0KIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsK
ICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tl
biA9PSBUYWJsZUNhcHRpb25BbGlnbikKICAgICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0
cik7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewog
ICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAg
ICAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0
cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRh
YmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6
ICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgICBj
YXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
ICAgICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxp
Z24oc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAg
IHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhU
TUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRN
TEVsZW1lbnQ6OnRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpA
QCAtMzE4MCw3ICszMTQxLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVy
KEV4ZQogICAgIH0KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCiB7CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRpY19j
YXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CkBAIC0zMTk1LDcgKzMxNTYsNyBAQCB2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRl
cihFeGVjU3RhCiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQogewogICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0g
KnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewpAQCAtMzIwNiwxOCArMzE2NywxOCBAQCB2b2lkIEhUTUxFbGVtZW50Ojp0
YWJsZUNlbGxTZXR0ZXIoRXhlY1N0CiAgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAg
ICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNl
IFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJu
OyB9CiAgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5z
ZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAg
ICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Q29sU3Bhbih2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNl
IFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyBy
ZXR1cm47IH0KICAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dy
YXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHsgdGFi
bGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZh
bHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxS
b3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUtPnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldFNjb3BlKHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIFRhYmxlQ2Vs
bFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQog
ICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lk
dGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNl
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKIHsKICAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVT
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKQEAgLTMyMjYsNyArMzE4Nyw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6
OmZyYW1lU2V0U2V0dGVyKEV4ZWNTdGEKICAgICB9CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmZy
YW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQogewogICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKQEAgLTMyMzYsMTQgKzMxOTcsMTQgQEAgdm9pZCBIVE1MRWxlbWVudDo6
ZnJhbWVTZXR0ZXIoRXhlY1N0YXRlIAogICAgICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAg
ICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAg
IGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRo
KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZy
YW1lRWxlbWVudC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgICBjYXNlIEZyYW1lTm9S
ZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgeyBm
cmFtZUVsZW1lbnQuc2V0Tm9SZXNpemUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQogICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRT
Y3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAg
ICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBG
cmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQogewogICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewpAQCAt
MzI2MSwxNSArMzIyMiwxNSBAQCB2b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0
YXRlCiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit2b2lkIEhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
CiB7CiAgICAgLy8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxl
bWVudCBpdC4KIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxF
bGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGludCkKIHsKICAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKLSAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8g
RE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERP
TTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKICAKICAg
ICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KICAgICBIVE1M
RWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGlt
cGwoKSk7CkBAIC0zMzYwLDE5ICszMzIxLDE5IEBAIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxl
Y3Rpb24oKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQo
KSk7CiB9CiAKLVZhbHVlIEhUTUxDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK1ZhbHVlSW1wICpIVE1MQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSFRNTENvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1M
Q29sbGVjdGlvbiAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBOdW1iZXIodGhpc09i
ai0+bV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAKLVZhbHVlIEhUTUxDb2xsZWN0aW9uOjppbmRleEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkhUTUxDb2xsZWN0aW9uOjppbmRleEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxDb2xsZWN0aW9uICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7
CiB9CiAKLVZhbHVlIEhUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitWYWx1ZUltcCAqSFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBIVE1MQ29sbGVjdGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0
aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIHRoaXNPYmotPmdldE5hbWVkSXRl
bXMoZXhlYywgcHJvcGVydHlOYW1lKTsKQEAgLTMzODUsOCArMzM0Niw4IEBAIGJvb2wgSFRNTENv
bGxlY3Rpb246OmdldE93blByb3BlcnR5U2xvdCgKICAgICAgIHJldHVybiB0cnVlOwogICB9IGVs
c2UgewogICAgIC8vIExvb2sgaW4gdGhlIHByb3RvdHlwZSAoZm9yIGZ1bmN0aW9ucykgYmVmb3Jl
IGFzc3VtaW5nIGl0J3MgYW4gaXRlbSdzIG5hbWUKLSAgICBPYmplY3QgcHJvdG8gPSBPYmplY3Q6
OmR5bmFtaWNDYXN0KHByb3RvdHlwZSgpKTsKLSAgICBpZiAoIXByb3RvLmlzTnVsbCgpICYmIHBy
b3RvLmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCisgICAgVmFsdWVJbXAgKnByb3Rv
ID0gcHJvdG90eXBlKCk7CisgICAgaWYgKHByb3RvLT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0
PE9iamVjdEltcCAqPihwcm90byktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBuYW1lIG9yIGluZGV4ID8KQEAgLTMzOTcsNyAr
MzM1OCw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5U2xvdCgKICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghZ2V0TmFtZWRJdGVtcyhleGVjLCBwcm9w
ZXJ0eU5hbWUpLmltcCgpLT5pc1VuZGVmaW5lZCgpKSB7CisgICAgaWYgKCFnZXROYW1lZEl0ZW1z
KGV4ZWMsIHByb3BlcnR5TmFtZSktPmlzVW5kZWZpbmVkKCkpIHsKICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzQw
OCwxNSArMzM2OSw5IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5U2xvdCgK
IAogLy8gSFRNTENvbGxlY3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBi
b3RoIGdldCBhbmQgY2FsbCwKIC8vIHNvIHRoYXQgZG9jdW1lbnQuZm9ybXMuaXRlbSgwKSBhbmQg
ZG9jdW1lbnQuZm9ybXMoMCkgYm90aCB3b3JrLgotVmFsdWUgS0pTOjpIVE1MQ29sbGVjdGlvbjo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKktKUzo6SFRNTENvbGxlY3Rpb246OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIC8vIERvIG5vdCB1c2UgdGhpc09i
aiBoZXJlLiBJdCBjYW4gYmUgdGhlIEhUTUxEb2N1bWVudCwgaW4gdGhlIGRvY3VtZW50LmZvcm1z
KGkpIGNhc2UuCi0gIC8qaWYoIHRoaXNPYmouaW1wKCkgIT0gdGhpcyApCi0gIHsKLSAgICBrZFdh
cm5pbmcoKSA8PCAidGhpc09iai5pbXAoKSAhPSB0aGlzIGluIEhUTUxDb2xsZWN0aW9uOjpjYWxs
IiA8PCBlbmRsOwotICAgIEtKUzo6cHJpbnRJbmZvKGV4ZWMsIktKUzo6SFRNTENvbGxlY3Rpb246
OmNhbGwgdGhpc09iaiIsdGhpc09iaiwtMSk7Ci0gICAgS0pTOjpwcmludEluZm8oZXhlYywiS0pT
OjpIVE1MQ29sbGVjdGlvbjo6Y2FsbCB0aGlzIixWYWx1ZSh0aGlzKSwtMSk7Ci0gIH0qLwogICBI
VE1MQ29sbGVjdGlvbkltcGwgJmNvbGxlY3Rpb24gPSAqbV9pbXBsOwogCiAgIC8vIEFsc28sIGRv
IHdlIG5lZWQgdGhlIFR5cGVFcnJvciB0ZXN0IGhlcmUgPwpAQCAtMzQyNCw3ICszMzc5LDcgQEAg
VmFsdWUgS0pTOjpIVE1MQ29sbGVjdGlvbjo6Y2FsbChFeGVjU3RhdAogICBpZiAoYXJncy5zaXpl
KCkgPT0gMSkgewogICAgIC8vIHN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMu
CiAgICAgYm9vbCBvazsKLSAgICBVU3RyaW5nIHMgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIFVTdHJpbmcgcyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAgIHVuc2lnbmVkIGlu
dCB1ID0gcy50b1VMb25nKCZvayk7CiAgICAgaWYgKG9rKQogICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgY29sbGVjdGlvbi5pdGVtKHUpKTsKQEAgLTM0MzQsOCArMzM4OSw4IEBAIFZhbHVl
IEtKUzo6SFRNTENvbGxlY3Rpb246OmNhbGwoRXhlY1N0YXQKICAgZWxzZSBpZiAoYXJncy5zaXpl
KCkgPj0gMSkgLy8gdGhlIHNlY29uZCBhcmcsIGlmIHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBp
dGVtIHdlIHdhbnQKICAgewogICAgIGJvb2wgb2s7Ci0gICAgVVN0cmluZyBzID0gYXJnc1swXS50
b1N0cmluZyhleGVjKTsKLSAgICB1bnNpZ25lZCBpbnQgdSA9IGFyZ3NbMV0udG9TdHJpbmcoZXhl
YykudG9VTG9uZygmb2spOworICAgIFVTdHJpbmcgcyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
OworICAgIHVuc2lnbmVkIGludCB1ID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykudG9VTG9uZygm
b2spOwogICAgIGlmIChvaykKICAgICB7CiAgICAgICBET006OkRPTVN0cmluZyBwc3RyID0gcy5z
dHJpbmcoKTsKQEAgLTM0NTEsNyArMzQwNiw3IEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246
OmNhbGwoRXhlY1N0YXQKICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6OkhU
TUxDb2xsZWN0aW9uOjpnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWVJbXAgKktKUzo6SFRNTENvbGxlY3Rpb246
OmdldE5hbWVkSXRlbXMoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0CiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcwKSA8PCAi
S0pTOjpIVE1MQ29sbGVjdGlvbjo6Z2V0TmFtZWRJdGVtcyAiIDw8IHByb3BlcnR5TmFtZS5hc2Np
aSgpIDw8IGVuZGw7CkBAIC0zNDcwLDI1ICszNDI1LDI1IEBAIFZhbHVlIEtKUzo6SFRNTENvbGxl
Y3Rpb246OmdldE5hbWVkSXRlbXMKICAgaWYgKG5hbWVkSXRlbXMuY291bnQoKSA9PSAxKQogICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG5hbWVkSXRlbXNbMF0uZ2V0KCkpOwogICAKLSAgcmV0
dXJuIFZhbHVlKG5ldyBET01OYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLG5hbWVkSXRlbXMpKTsK
KyAgcmV0dXJuIG5ldyBET01OYW1lZE5vZGVzQ29sbGVjdGlvbihleGVjLCBuYW1lZEl0ZW1zKTsK
IH0KIAotVmFsdWUgS0pTOjpIVE1MQ29sbGVjdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpLSlM6
OkhUTUxDb2xsZWN0aW9uUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2Jq
LmluaGVyaXRzKCZLSlM6OkhUTUxDb2xsZWN0aW9uOjppbmZvKSkgewotICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmS0pTOjpIVE1MQ29sbGVjdGlvbjo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgSFRNTENvbGxlY3Rpb25JbXBsICZjb2xsID0gKnN0
YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCk7CisgIEhU
TUxDb2xsZWN0aW9uSW1wbCAmY29sbCA9ICpzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbiAqPih0
aGlzT2JqKS0+aW1wbCgpOwogCiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBLSlM6OkhUTUxDb2xs
ZWN0aW9uOjpJdGVtOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsY29sbC5pdGVtKGFyZ3Nb
MF0udG9VSW50MzIoZXhlYykpKTsKKyAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGNvbGwuaXRl
bShhcmdzWzBdLT50b1VJbnQzMihleGVjKSkpOwogICBjYXNlIEtKUzo6SFRNTENvbGxlY3Rpb246
OlRhZ3M6Ci0gICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4ZWMsIGNvbGwuYmFzZSgpLT5nZXRF
bGVtZW50c0J5VGFnTmFtZShhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKS5nZXQoKSk7
CisgICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4ZWMsIGNvbGwuYmFzZSgpLT5nZXRFbGVtZW50
c0J5VGFnTmFtZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSkuZ2V0KCkpOwogICBj
YXNlIEtKUzo6SFRNTENvbGxlY3Rpb246Ok5hbWVkSXRlbToKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTENvbGxlY3Rpb24gKj4odGhpc09iai5pbXAoKSktPmdldE5hbWVkSXRlbXMoZXhlYywg
SWRlbnRpZmllcihhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxDb2xsZWN0aW9uICo+KHRoaXNPYmopLT5nZXROYW1lZEl0ZW1zKGV4ZWMsIElkZW50
aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKTsKICAgZGVmYXVsdDoKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiAgIH0KQEAgLTM1MDEsNyArMzQ1Niw3IEBAIEhUTUxTZWxlY3RDb2xsZWN0
aW9uOjpIVE1MU2VsZWN0Q29sbGVjdGkKIHsKIH0KIAotVmFsdWUgSFRNTFNlbGVjdENvbGxlY3Rp
b246OnNlbGVjdGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpIVE1M
U2VsZWN0Q29sbGVjdGlvbjo6c2VsZWN0ZWRJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEhUTUxTZWxlY3RDb2xsZWN0aW9uICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdENvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gTnVtYmVyKHRo
aXNPYmotPm1fZWxlbWVudC0+c2VsZWN0ZWRJbmRleCgpKTsKQEAgLTM1MTgsMTMgKzM0NzMsMTMg
QEAgYm9vbCBIVE1MU2VsZWN0Q29sbGVjdGlvbjo6Z2V0T3duUHJvcGVydAogICByZXR1cm4gSFRN
TENvbGxlY3Rpb246OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi12b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBp
bnQpCit2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MU2VsZWN0
Q29sbGVjdGlvbjo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2Vu
ZGlmCiAgIGlmICggcHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IiApIHsKLSAgICBtX2Vs
ZW1lbnQtPnNldFNlbGVjdGVkSW5kZXgoIHZhbHVlLnRvSW50MzIoIGV4ZWMgKSApOworICAgIG1f
ZWxlbWVudC0+c2V0U2VsZWN0ZWRJbmRleCggdmFsdWUtPnRvSW50MzIoIGV4ZWMgKSApOwogICAg
IHJldHVybjsKICAgfQogICAvLyByZXNpemUgPwpAQCAtMzUzMiw3ICszNDg3LDcgQEAgdm9pZCBL
SlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjpwdXQoRXhlYwogICAgIGludCBleGNlcHRpb24gPSAw
OwogCiAgICAgdW5zaWduZWQgbmV3TGVuOwotICAgIGJvb2wgY29udmVydGVkID0gdmFsdWUudG9V
SW50MzIobmV3TGVuKTsKKyAgICBib29sIGNvbnZlcnRlZCA9IHZhbHVlLT5nZXRVSW50MzIobmV3
TGVuKTsKIAogICAgIGlmICghY29udmVydGVkKSB7CiAgICAgICByZXR1cm47CkBAIC0zNTYxLDcg
KzM1MTYsNyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjCiAgIGlm
ICghb2spCiAgICAgcmV0dXJuOwogCi0gIGlmICh2YWx1ZS5pc0EoTnVsbFR5cGUpIHx8IHZhbHVl
LmlzQShVbmRlZmluZWRUeXBlKSkgeworICBpZiAodmFsdWUtPmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKICAgICAvLyBudWxsIGFuZCB1bmRlZmluZWQgZGVsZXRlLiBvdGhlcnMsIHRvbyA/CiAgICAg
bV9lbGVtZW50LT5yZW1vdmUodSk7CiAgICAgcmV0dXJuOwpAQCAtMzYxMyw3ICszNTY4LDcgQEAg
Ym9vbCBPcHRpb25Db25zdHJ1Y3RvckltcDo6aW1wbGVtZW50c0NvbgogICByZXR1cm4gdHJ1ZTsK
IH0KIAotT2JqZWN0IE9wdGlvbkNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzKQorT2JqZWN0SW1wICpPcHRpb25Db25zdHJ1Y3RvckltcDo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncykKIHsKICAgaW50IGV4
Y2VwdGlvbiA9IDA7CiAgIFNoYXJlZFB0cjxFbGVtZW50SW1wbD4gZWwobV9kb2MtPmNyZWF0ZUVs
ZW1lbnQoIm9wdGlvbiIsIGV4Y2VwdGlvbikpOwpAQCAtMzYyNSwxOCArMzU4MCwxOCBAQCBPYmpl
Y3QgT3B0aW9uQ29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFCiAgICAgdC0+cmVmKCk7CiAgICAg
b3B0LT5hcHBlbmRDaGlsZCh0LCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24gPT0gMCAm
JiBzeiA+IDApCi0gICAgICB0LT5zZXREYXRhKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5n
KCksIGV4Y2VwdGlvbik7IC8vIHNldCB0aGUgdGV4dAorICAgICAgdC0+c2V0RGF0YShhcmdzWzBd
LT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsgLy8gc2V0IHRoZSB0ZXh0CiAg
ICAgaWYgKGV4Y2VwdGlvbiA9PSAwICYmIHN6ID4gMSkKLSAgICAgIG9wdC0+c2V0VmFsdWUoYXJn
c1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgICBvcHQtPnNldFZhbHVlKGFyZ3Nb
MV0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICBpZiAoZXhjZXB0aW9uID09IDAgJiYg
c3ogPiAyKQotICAgICAgb3B0LT5zZXREZWZhdWx0U2VsZWN0ZWQoYXJnc1syXS50b0Jvb2xlYW4o
ZXhlYykpOworICAgICAgb3B0LT5zZXREZWZhdWx0U2VsZWN0ZWQoYXJnc1syXS0+dG9Cb29sZWFu
KGV4ZWMpKTsKICAgICBpZiAoZXhjZXB0aW9uID09IDAgJiYgc3ogPiAzKQotICAgICAgb3B0LT5z
ZXRTZWxlY3RlZChhcmdzWzNdLnRvQm9vbGVhbihleGVjKSk7CisgICAgICBvcHQtPnNldFNlbGVj
dGVkKGFyZ3NbM10tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgdC0+ZGVyZWYoKTsKICAgfQogCiAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwotICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChnZXRET01Ob2RlKGV4ZWMsb3B0KSk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxPYmpl
Y3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLG9wdCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEltYWdlIE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM2NTEsMjIgKzM2
MDYsMjIgQEAgYm9vbCBJbWFnZUNvbnN0cnVjdG9ySW1wOjppbXBsZW1lbnRzQ29ucwogICByZXR1
cm4gdHJ1ZTsKIH0KIAotT2JqZWN0IEltYWdlQ29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVj
U3RhdGUgKiBleGVjLCBjb25zdCBMaXN0ICYgbGlzdCkKK09iamVjdEltcCAqSW1hZ2VDb25zdHJ1
Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqIGV4ZWMsIGNvbnN0IExpc3QgJiBsaXN0KQog
ewogICAgIGJvb2wgd2lkdGhTZXQgPSBmYWxzZSwgaGVpZ2h0U2V0ID0gZmFsc2U7CiAgICAgaW50
IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBpZiAobGlzdC5zaXplKCkgPiAwKSB7CiAgICAg
ICAgIHdpZHRoU2V0ID0gdHJ1ZTsKLSAgICAgICAgVmFsdWUgdyA9IGxpc3QuYXQoMCk7Ci0gICAg
ICAgIHdpZHRoID0gdy50b0ludDMyKGV4ZWMpOworICAgICAgICBWYWx1ZUltcCAqdyA9IGxpc3Qu
YXQoMCk7CisgICAgICAgIHdpZHRoID0gdy0+dG9JbnQzMihleGVjKTsKICAgICB9CiAgICAgaWYg
KGxpc3Quc2l6ZSgpID4gMSkgewogICAgICAgICBoZWlnaHRTZXQgPSB0cnVlOwotICAgICAgICBW
YWx1ZSBoID0gbGlzdC5hdCgxKTsKLSAgICAgICAgaGVpZ2h0ID0gaC50b0ludDMyKGV4ZWMpOwor
ICAgICAgICBWYWx1ZUltcCAqaCA9IGxpc3QuYXQoMSk7CisgICAgICAgIGhlaWdodCA9IGgtPnRv
SW50MzIoZXhlYyk7CiAgICAgfQogICAgICAgICAKLSAgICBPYmplY3QgcmVzdWx0KG5ldyBJbWFn
ZShtX2RvYy5nZXQoKSwgd2lkdGhTZXQsIHdpZHRoLCBoZWlnaHRTZXQsIGhlaWdodCkpOworICAg
IE9iamVjdEltcCAqcmVzdWx0KG5ldyBJbWFnZShtX2RvYy5nZXQoKSwgd2lkdGhTZXQsIHdpZHRo
LCBoZWlnaHRTZXQsIGhlaWdodCkpOwogICAKICAgICAvKiBUT0RPOiBkbyB3ZSBuZWVkIGEgcHJv
dG90eXBlID8gKi8KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzY4OSw3ICszNjQ0LDcgQEAgYm9v
bCBJbWFnZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZQogICByZXR1cm4gZ2V0U3RhdGlj
VmFsdWVTbG90PEltYWdlLERPTU9iamVjdD4oZXhlYywgJkltYWdlVGFibGUsIHRoaXMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIEltYWdlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqSW1hZ2U6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0b2tlbikgewog
ICBjYXNlIFNyYzoKQEAgLTM3MjYsMjIgKzM2ODEsMjEgQEAgVmFsdWUgSW1hZ2U6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlIAogICB9CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwg
IkltYWdlOjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVu
ZGw7Ci0gICAgcmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotdm9p
ZCBJbWFnZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQordm9pZCBJbWFnZTo6cHV0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKQogewogICBsb29rdXBQdXQ8SW1hZ2UsRE9NT2JqZWN0PihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSW1hZ2VUYWJsZSwgdGhpcyApOwogfQogCi12b2lkIElt
YWdlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgSW1hZ2U6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciov
KQogewogICBzd2l0Y2godG9rZW4pIHsKICAgY2FzZSBTcmM6CiAgIHsKLSAgICBTdHJpbmcgc3Ry
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgc3JjID0gc3RyLnZhbHVlKCk7CisgICAgc3Jj
ID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmICggaW1nICkgaW1nLT5kZXJlZih0aGlz
KTsKICAgICBpbWcgPSBkb2MgPyBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoIHNyYy5z
dHJpbmcoKSApIDogMDsKICAgICBpZiAoIGltZyApIGltZy0+cmVmKHRoaXMpOwpAQCAtMzc1Mywx
MSArMzcwNywxMSBAQCB2b2lkIEltYWdlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqCiAg
ICAgYnJlYWs7CiAgIGNhc2UgV2lkdGg6CiAgICAgd2lkdGhTZXQgPSB0cnVlOwotICAgIHdpZHRo
ID0gdmFsdWUudG9JbnQzMihleGVjKTsKKyAgICB3aWR0aCA9IHZhbHVlLT50b0ludDMyKGV4ZWMp
OwogICAgIGJyZWFrOwogICBjYXNlIEhlaWdodDoKICAgICBoZWlnaHRTZXQgPSB0cnVlOwotICAg
IGhlaWdodCA9IHZhbHVlLnRvSW50MzIoZXhlYyk7CisgICAgaGVpZ2h0ID0gdmFsdWUtPnRvSW50
MzIoZXhlYyk7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAga2RXYXJuaW5nKCkgPDwgIkhU
TUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8
PCBlbmRsOwpAQCAtMzc5NiwzNCArMzc1MCwyOCBAQCBJbWFnZTo6fkltYWdlKCkKIAogSU1QTEVN
RU5UX1BST1RPRlVOQyhDb250ZXh0MkRGdW5jdGlvbikKIAotc3RhdGljIGJvb2wgaXNHcmFkaWVu
dChjb25zdCBWYWx1ZSAmdmFsdWUpCitzdGF0aWMgYm9vbCBpc0dyYWRpZW50KFZhbHVlSW1wICp2
YWx1ZSkKIHsKLSAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1
ZS5pbXAoKSk7Ci0gICAgaWYgKG8tPnR5cGUoKSA9PSBPYmplY3RUeXBlICYmIG8tPmluaGVyaXRz
KCZHcmFkaWVudDo6aW5mbykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdmFsdWUtPmlzT2JqZWN0KCZHcmFkaWVudDo6aW5mbyk7CiB9CiAKLXN0
YXRpYyBib29sIGlzSW1hZ2VQYXR0ZXJuKGNvbnN0IFZhbHVlICZ2YWx1ZSkKK3N0YXRpYyBib29s
IGlzSW1hZ2VQYXR0ZXJuKFZhbHVlSW1wICp2YWx1ZSkKIHsKLSAgICBPYmplY3RJbXAgKm8gPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZS5pbXAoKSk7Ci0gICAgaWYgKG8tPnR5cGUoKSA9
PSBPYmplY3RUeXBlICYmIG8tPmluaGVyaXRzKCZJbWFnZVBhdHRlcm46OmluZm8pKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhbHVlLT5pc09i
amVjdCgmSW1hZ2VQYXR0ZXJuOjppbmZvKTsKIH0KIAogI2RlZmluZSBCSVRTX1BFUl9DT01QT05F
TlQgOAogI2RlZmluZSBCWVRFU19QRVJfUk9XKHdpZHRoLGJpdHNQZXJDb21wb25lbnQsbnVtQ29t
cG9uZW50cykgKCh3aWR0aCAqIGJpdHNQZXJDb21wb25lbnQgKiBudW1Db21wb25lbnRzICsgNykv
OCkKIAotVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpLSlM6OkNvbnRl
eHQyREZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMo
JkNvbnRleHQyRDo6aW5mbykpIHsKLSAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkNvbnRleHQyRDo6
aW5mbykpIHsKKyAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVy
biBlcnI7CiAgICAgfQogCi0gICAgQ29udGV4dDJEICpjb250ZXh0T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8S0pTOjpDb250ZXh0MkQgKj4odGhpc09iai5pbXAoKSk7CisgICAgQ29udGV4dDJEICpjb250
ZXh0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8S0pTOjpDb250ZXh0MkQgKj4odGhpc09iaik7CiAgICAg
a2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PGtodG1sOjpS
ZW5kZXJDYW52YXNJbWFnZSo+KGNvbnRleHRPYmplY3QtPl9lbGVtZW50LT5yZW5kZXJlcigpKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zODM1
LDcgKzM3ODMsNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNTCiAg
ICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2F2ZTogewogICAgICAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cjsKICAgICAgICAgICAgIH0KQEAgLTM4NDcsNyArMzc5NSw3IEBAIFZhbHVlIEtKUzo6Q29udGV4
dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQy
RDo6UmVzdG9yZTogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAg
ICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KQEAgLTM4NTksNyArMzgwNyw3
IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENvbnRleHQyRDo6QmVnaW5QYXRoOiB7CiAgICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0g
RXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAg
ICAgfQpAQCAtMzg2OCw3ICszODE2LDcgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6
Y2FsbChFeGVjUwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpDbG9zZVBhdGg6
IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAg
ICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwog
ICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC0zODg1LDUwICszODMzLDUwIEBAIFZhbHVl
IEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgICAgIGludCBudW1B
cmdzID0gYXJncy5zaXplKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG51bUFyZ3MpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0udHlw
ZSgpID09IFN0cmluZ1R5cGUpIHsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0u
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1sw
XS0+aXNTdHJpbmcoKSkgeyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFj
KGNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNv
bG9yKGRyYXdpbmdDb250ZXh0LCBxYy5yZWQoKS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJs
dWUoKS8yNTUuLCBxYy5hbHBoYSgpLzI1NS4pOwogCiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBn
ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBnID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBn
LCAxLik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGEgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJnc1swXS50eXBlKCkgPT0gU3RyaW5nVHlwZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0u
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0g
YXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBd
LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBRUmdiIGNvbG9yID0gRE9N
OjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjKGNvbG9yKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBx
Yy5yZWQoKS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJsdWUoKS8yNTUuLCBhKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ryb2tlQ29s
b3IoZHJhd2luZ0NvbnRleHQsIGcsIGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
NDogewotICAgICAgICAgICAgICAgICAgICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1i
ZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1sxXS50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiA9IChmbG9hdClhcmdz
WzJdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0
KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIgPSAo
ZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGcgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGIgPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGEgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAg
ICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBy
LCBnLCBiLCBhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSA1OiB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGMgPSAo
ZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
bSA9IChmbG9hdClhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBm
bG9hdCB5ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGsgPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYSA9IChmbG9hdClhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBjID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwor
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBtID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVt
YmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBrID0gKGZsb2F0KWFyZ3NbM10t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFy
Z3NbNF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRD
TVlLU3Ryb2tlQ29sb3IoZHJhd2luZ0NvbnRleHQsIGMsIG0sIHksIGssIGEpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMs
U3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTM5NDUsNDkgKzM4OTMsNDkgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRG
dW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUo
KTsKICAgICAgICAgICAgIHN3aXRjaCAobnVtQXJncykgewogICAgICAgICAgICAgICAgIGNhc2Ug
MTogewotICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlKCkgPT0gU3RyaW5nVHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnc1swXS0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xvciBx
Yyhjb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29s
b3IoZHJhd2luZ0NvbnRleHQsIHFjLnJlZCgpLzI1NS4sIHFjLmdyZWVuKCkvMjU1LiwgcWMuYmx1
ZSgpLzI1NS4sIHFjLmFscGhhKCkvMjU1Lik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0g
KGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBnID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgZywgMS4p
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgMjogewotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBhID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFyZ3NbMF0udHlwZSgpID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFFSZ2IgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IGFyZ3Nb
MV0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS0+aXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBjb2xvciA9IERPTTo6Q1NT
UGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFFDb2xvciBxYyhjb2xvcik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoZHJhd2luZ0NvbnRleHQsIHFjLnJlZCgp
LzI1NS4sIHFjLmdyZWVuKCkvMjU1LiwgcWMuYmx1ZSgpLzI1NS4sIGEpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgZyA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgZyA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFNldEdyYXlGaWxsQ29sb3IoZHJhd2lu
Z0NvbnRleHQsIGcsIGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgNDogewotICAg
ICAgICAgICAgICAgICAgICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiA9IChmbG9hdClhcmdzWzJdLnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFyZ3NbM10u
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxv
YXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGIg
PSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGEgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAg
ICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgciwgZywgYiwgYSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgNTogewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBjID0gKGZsb2F0KWFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IG0gPSAoZmxvYXQp
YXJnc1sxXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSA9IChm
bG9hdClhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBr
ID0gKGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGEgPSAoZmxvYXQpYXJnc1s0XS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYyA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgbSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsK
KyAgICAgICAgICAgICAgICAgICAgZmxvYXQgayA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihl
eGVjKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IChmbG9hdClhcmdzWzRdLT50b051
bWJlcihleGVjKTsKICAgICAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS1N0cm9rZUNv
bG9yKGRyYXdpbmdDb250ZXh0LCBjLCBtLCB5LCBrLCBhKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAg
ICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgICAgICB9
CkBAIC0zOTk2LDIyICszOTQ0LDIyIEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNh
bGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGluZVdpZHRo
OiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAg
IE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
ICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9h
dClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClh
cmdzWzBdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0
aCAoZHJhd2luZ0NvbnRleHQsIHcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldExpbmVDYXA6IHsKICAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBDR0xpbmVDYXAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7Ci0gICAgICAg
ICAgICBRU3RyaW5nIGNhcFN0cmluZyA9IGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygp
Lmxvd2VyKCk7CisgICAgICAgICAgICBRU3RyaW5nIGNhcFN0cmluZyA9IGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAgICAgaWYgKGNhcFN0cmluZyA9
PSAicm91bmQiKQogICAgICAgICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBSb3VuZDsKICAgICAg
ICAgICAgIGVsc2UgaWYgKGNhcFN0cmluZyA9PSAic3F1YXJlIikKQEAgLTQwMjEsMTIgKzM5Njks
MTIgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRMaW5lSm9pbjogewogICAgICAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIENHTGluZUpvaW4gam9pbiA9IGtDR0xpbmVKb2luTWl0ZXI7
Ci0gICAgICAgICAgICBRU3RyaW5nIGpvaW5TdHJpbmcgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMp
LnFzdHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAgUVN0cmluZyBqb2luU3RyaW5nID0gYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAo
am9pblN0cmluZyA9PSAicm91bmQiKQogICAgICAgICAgICAgICAgIGpvaW4gPSBrQ0dMaW5lSm9p
blJvdW5kOwogICAgICAgICAgICAgZWxzZSBpZiAoam9pblN0cmluZyA9PSAiYmV2ZWwiKQpAQCAt
NDAzNiwxNyArMzk4NCwxNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4
ZWNTCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldE1pdGVyTGltaXQ6IHsK
ICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KWFy
Z3NbMF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAo
ZHJhd2luZ0NvbnRleHQsIGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDb250ZXh0MkQ6OkZpbGw6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC00
MDU4LDcgKzQwMDYsNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNT
CiAgICAgICAgICAgICAgICAgLy8gb3BlcmF0ZXMgb24gY2xpcHBpbiByZWdpb25zISAgT2RkLCBi
dXQgdHJ1ZS4KICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGRyYXdpbmdDb250ZXh0KTsK
IAotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+
KGNvbnRleHRPYmplY3QtPl9maWxsU3R5bGUuaW1wKCkpOworICAgICAgICAgICAgICAgIE9iamVj
dEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGNvbnRleHRPYmplY3QtPl9maWxsU3R5
bGUpOwogICAgICAgICAgICAgICAgIEdyYWRpZW50ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEdy
YWRpZW50Kj4obyk7CiAgICAgICAgICAgICAgICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBncmFk
aWVudC0+Z2V0U2hhZGluZygpOwogICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5n
KGRyYXdpbmdDb250ZXh0LCBzaGFkaW5nKTsKQEAgLTQwNzYsNyArNDAyNCw3IEBAIFZhbHVlIEtK
Uzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNl
IENvbnRleHQyRDo6U3Ryb2tlOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkg
ewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQpAQCAtNDA5MCw3
ICs0MDM4LDcgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAg
ICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGRyYXdpbmdD
b250ZXh0KTsKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGRyYXdpbmdDb250ZXh0KTsK
IAotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+
KGNvbnRleHRPYmplY3QtPl9zdHJva2VTdHlsZS5pbXAoKSk7CisgICAgICAgICAgICAgICAgT2Jq
ZWN0SW1wICpvID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wKj4oY29udGV4dE9iamVjdC0+X3N0cm9r
ZVN0eWxlKTsKICAgICAgICAgICAgICAgICBHcmFkaWVudCAqZ3JhZGllbnQgPSBzdGF0aWNfY2Fz
dDxHcmFkaWVudCo+KG8pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENHU2hh
ZGluZ1JlZiBzaGFkaW5nID0gZ3JhZGllbnQtPmdldFNoYWRpbmcoKTsKQEAgLTQxMDgsMTM3ICs0
MDU2LDEzNyBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsKEV4ZWNTCiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNjYWxlOiB7CiAgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZmxvYXQgc3ggPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgICAgICBmbG9hdCBzeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVj
KTsKKyAgICAgICAgICAgIGZsb2F0IHN5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0gKGRyYXdpbmdDb250ZXh0LCBzeCwgc3kp
OwogICAgICAgICAgICAgY29udGV4dE9iamVjdC0+X25lZWRzRmx1c2hSYXN0ZXJDYWNoZSA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQy
RDo6Um90YXRlOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewotICAgICAg
ICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwor
ICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRh
eEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQg
YW5nbGUgPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0
IGFuZ2xlID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dD
b250ZXh0Um90YXRlQ1RNIChkcmF3aW5nQ29udGV4dCwgYW5nbGUpOwogICAgICAgICAgICAgY29u
dGV4dE9iamVjdC0+X25lZWRzRmx1c2hSYXN0ZXJDYWNoZSA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6VHJhbnNsYXRlOiB7CiAg
ICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAg
IE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAg
ICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxvYXQgdHggPSAoZmxvYXQpYXJn
c1swXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3Nb
MV0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB0eCA9IChmbG9hdClhcmdzWzBd
LT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHR5ID0gKGZsb2F0KWFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNIChkcmF3
aW5nQ29udGV4dCwgdHgsIHR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ29udGV4dDJEOjpNb3ZlVG86IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUo
KSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAg
IENHQ29udGV4dE1vdmVUb1BvaW50IChkcmF3aW5nQ29udGV4dCwgeCwgeSk7CiAgICAgICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkxpbmVUbzogewogICAgICAgICAgICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJy
b3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAg
KmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS50b051bWJl
cihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihl
eGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
OwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQgKGRyYXdpbmdDb250ZXh0LCB4
LCB5KTsKICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UXVhZHJh
dGljQ3VydmVUbzogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAg
ICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsK
KyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0
IGNweCA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQg
Y3B5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4
ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0g
KGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcHggPSAo
ZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcHkgPSAo
ZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0gKGZs
b2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9h
dClhcmdzWzNdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFF1YWRD
dXJ2ZVRvUG9pbnQgKGRyYXdpbmdDb250ZXh0LCBjcHgsIGNweSwgeCwgeSk7CiAgICAgICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkJlemllckN1cnZlVG86IHsKICAgICAg
ICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBl
cnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDF5ID0gKGZsb2F0KWFyZ3Nb
MV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDJ4ID0gKGZsb2F0KWFyZ3Nb
Ml0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDJ5ID0gKGZsb2F0KWFyZ3Nb
M10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbNF0u
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbNV0udG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3NbMF0tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgY3AxeSA9IChmbG9hdClhcmdzWzFdLT50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGNwMnggPSAoZmxvYXQpYXJnc1syXS0+
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBjcDJ5ID0gKGZsb2F0KWFyZ3NbM10t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzRdLT50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1s1XS0+dG9O
dW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRDdXJ2ZVRvUG9pbnQgKGRyYXdp
bmdDb250ZXh0LCBjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTsKICAgICAgICAgICAgIHJl
bmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6QXJjVG86IHsKICAgICAgICAgICAgIGlmIChh
cmdzLnNpemUoKSAhPSA1KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpj
cmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmbG9hdCB4MSA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTEgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICBmbG9hdCB5MiA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgZmxvYXQgciA9IChmbG9hdClhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgICAgICBmbG9hdCB5MSA9IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZmxvYXQgeTIgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBmbG9hdCByID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0QWRkQXJjVG9Qb2ludCAoZHJhd2luZ0NvbnRleHQsIHgxLCB5MSwgeDIsIHky
LCByKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29udGV4
dDJEOjpBcmM6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA2KSB7Ci0gICAgICAg
ICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7Cisg
ICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCB4
ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0g
KGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCByID0gKGZs
b2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBzYSA9IChmbG9h
dClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZWEgPSAoZmxvYXQp
YXJnc1s0XS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGJvb2wgY2xvY2t3aXNlID0gYXJn
c1s1XS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFd
LT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJnc1syXS0+
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBzYSA9IChmbG9hdClhcmdzWzNdLT50
b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IGVhID0gKGZsb2F0KWFyZ3NbNF0tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgYm9vbCBjbG9ja3dpc2UgPSBhcmdzWzVdLT50b0Jv
b2xlYW4oZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRBcmMgKGRyYXdpbmdDb250ZXh0
LCB4LCB5LCByLCBzYSwgZWEsIGNsb2Nrd2lzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6UmVjdDogewogICAgICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQpYXJnc1syXS50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgIGZsb2F0IGggPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgZmxvYXQgdyA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
IGZsb2F0IGggPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBD
R0NvbnRleHRBZGRSZWN0IChkcmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6Q2xp
cDogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgICAg
ICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAg
ICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7
CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KQEAgLTQyNDgsMjggKzQxOTYsMjggQEAgVmFs
dWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogCiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpDbGVhclJlY3Q6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KSB7
Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhF
cnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIp
OwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBm
bG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCB3ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBo
ID0gKGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4ID0g
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9IChm
bG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxv
YXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBoID0gKGZsb2F0
KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0
IChkcmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSk7CiAgICAgICAgICAgICByZW5k
ZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkZpbGxSZWN0OiB7CiAgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gNCkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJy
ID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVj
LT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLnRvTnVtYmVyKGV4ZWMp
OwotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAg
ICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICBmbG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAg
IGlmIChpc0ltYWdlUGF0dGVybihjb250ZXh0T2JqZWN0LT5fZmlsbFN0eWxlKSkKICAgICAgICAg
ICAgICAgICBjb250ZXh0T2JqZWN0LT51cGRhdGVGaWxsSW1hZ2VQYXR0ZXJuKCk7CiAgICAgICAg
ICAgICBDR0NvbnRleHRGaWxsUmVjdCAoZHJhd2luZ0NvbnRleHQsIENHUmVjdE1ha2UoeCx5LHcs
aCkpOwpAQCAtNDI3OSwxOCArNDIyNywxOSBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9u
OjpjYWxsKEV4ZWNTCiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpTdHJva2VSZWN0OiB7CiAgICAg
ICAgICAgICBpbnQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOwogICAgICAgICAgICAgaWYgKHNpemUgPCA0
KSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50
YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBm
bG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCBoID0gKGZsb2F0KWFyZ3NbM10udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB4
ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeSA9
IChmbG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHcgPSAo
ZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBoID0gKGZs
b2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoaXNJbWFnZVBhdHRlcm4oY29udGV4dE9iamVjdC0+X3N0cm9rZVN0eWxlKSkKICAgICAgICAg
ICAgICAgICBjb250ZXh0T2JqZWN0LT51cGRhdGVTdHJva2VJbWFnZVBhdHRlcm4oKTsKICAgICAg
ICAgICAgIGlmIChzaXplID4gNCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRTdHJva2VSZWN0
V2l0aFdpZHRoIChkcmF3aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LHksdyxoKSwgKGZsb2F0KWFy
Z3NbNF0udG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgIENHQ29udGV4dFN0cm9rZVJl
Y3RXaXRoV2lkdGggKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKHgseSx3LGgpLCAoZmxvYXQp
YXJnc1s0XS0+dG9OdW1iZXIoZXhlYykpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIENHQ29udGV4dFN0cm9rZVJlY3QgKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKHgseSx3
LGgpKTsKICAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7CkBAIC00
MzAwLDE3ICs0MjQ5LDE3IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhl
Y1MKICAgICAgICAgICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChudW1BcmdzIDwgMykgewotICAgICAgICAgICAgICAgIE9iamVjdCBl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAg
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQ0dTaXplIG9mZnNldDsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgb2Zmc2V0LndpZHRoID0gKGZsb2F0KWFyZ3NbMF0udG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KWFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBibHVyID0gKGZsb2F0KWFyZ3NbMl0udG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgICAgICBvZmZzZXQud2lkdGggPSAoZmxvYXQpYXJnc1swXS0+dG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KWFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgYmx1ciA9IChmbG9hdClhcmdzWzJd
LT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgUUNvbG9yIGNvbG9y
ID0gUUNvbG9yKGFyZ3NbM10udG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgICAgICAgICAgICBR
Q29sb3IgY29sb3IgPSBRQ29sb3IoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAK
ICAgICAgICAgICAgICBpZiAobnVtQXJncyA9PSAzKSB7CiAgICAgICAgICAgICAgICAgQ0dDb250
ZXh0U2V0U2hhZG93IChkcmF3aW5nQ29udGV4dCwgb2Zmc2V0LCBibHVyKTsKQEAgLTQzMjAsOCAr
NDI2OSw4IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG51bUFyZ3MgLSAzKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3NbM10udHlwZSgpID09IFN0cmluZ1R5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1szXS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1szXS0+
aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFSZ2IgY29sb3IgPSBE
T006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdzWzNdLT50b1N0cmluZyhleGVjKS5zdHJpbmco
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHFjKGNvbG9yKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzBdID0gcWMucmVkKCkvMjU1LjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gcWMuZ3JlZW4oKS8yNTUu
OwpAQCAtNDMzMCwxNiArNDI3OSwxNiBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpj
YWxsKEV4ZWNTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcG9uZW50c1swXSA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMF0gPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IDEu
MGY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFj
ZUNyZWF0ZURldmljZUdyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhID0gYXJnc1s0
XS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzNdLnR5
cGUoKSA9PSBTdHJpbmdUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVJnYiBj
b2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbM10udG9TdHJpbmcoZXhlYyku
c3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IGFyZ3NbNF0tPnRv
TnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbM10tPmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUmdiIGNvbG9yID0gRE9NOjpD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xvciBxYyhjb2xvcik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1swXSA9IHFjLnJlZCgpLzI1NS47CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IHFjLmdyZWVuKCkvMjU1LjsKQEAg
LTQzNDgsMzIgKzQyOTcsMzIgQEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChF
eGVjUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBv
bmVudHNbMF0gPSAoZmxvYXQpYXJnc1szXS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRzWzBdID0gKGZsb2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4
ZWMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gPSBhOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VHcmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1swXSA9IChmbG9hdClh
cmdzWzNdLnRvTnVtYmVyKGV4ZWMpOyAvLyByCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21w
b25lbnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0udG9OdW1iZXIoZXhlYyk7IC8vIGcKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSAoZmxvYXQpYXJnc1s1XS50b051bWJlcihl
eGVjKTsgLy8gYgotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1szXSA9IChmbG9h
dClhcmdzWzZdLnRvTnVtYmVyKGV4ZWMpOyAvLyBhCisgICAgICAgICAgICAgICAgICAgICAgICBj
b21wb25lbnRzWzBdID0gKGZsb2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOyAvLyByCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVt
YmVyKGV4ZWMpOyAvLyBnCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzJdID0g
KGZsb2F0KWFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpOyAvLyBiCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wb25lbnRzWzNdID0gKGZsb2F0KWFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpOyAvLyBh
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogewotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcG9uZW50c1swXSA9IChmbG9hdClhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOyAvLyBj
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gKGZsb2F0KWFyZ3NbNF0u
dG9OdW1iZXIoZXhlYyk7IC8vIG0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNb
Ml0gPSAoZmxvYXQpYXJnc1s1XS50b051bWJlcihleGVjKTsgLy8geQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcG9uZW50c1szXSA9IChmbG9hdClhcmdzWzZdLnRvTnVtYmVyKGV4ZWMpOyAv
LyBrCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzRdID0gKGZsb2F0KWFyZ3Nb
N10udG9OdW1iZXIoZXhlYyk7IC8vIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVu
dHNbMF0gPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7IC8vIGMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gPSAoZmxvYXQpYXJnc1s0XS0+dG9OdW1iZXIoZXhl
Yyk7IC8vIG0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSAoZmxvYXQp
YXJnc1s1XS0+dG9OdW1iZXIoZXhlYyk7IC8vIHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudHNbM10gPSAoZmxvYXQpYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyk7IC8vIGsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbNF0gPSAoZmxvYXQpYXJnc1s3XS0+dG9OdW1i
ZXIoZXhlYyk7IC8vIGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZUNNWUsoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzODgsNyArNDMzNyw3IEBAIFZhbHVlIEtK
Uzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhlY1MKICAgICAgICAgfQogICAgICAgICBjYXNl
IENvbnRleHQyRDo6Q2xlYXJTaGFkb3c6IHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxT
eW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3Jl
YXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9CkBAIC00
NDA0LDE1ICs0MzUzLDE1IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhl
Y1MKICAgICAgICAgLy8gaW1nIHBhcmFtZXRlciBjYW4gYmUgYSBKYXZhU2NyaXB0IEltYWdlLCA8
aW1nPiwgb3IgYSA8Y2FudmFzPgogICAgICAgICBjYXNlIENvbnRleHQyRDo6RHJhd0ltYWdlOiB7
CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPCAzKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvYmplY3QuCi0gICAgICAgICAgICBPYmplY3RJ
bXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBdLmltcCgpKTsKLSAgICAgICAg
ICAgIGlmIChvLT50eXBlKCkgIT0gT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgICAgIE9iamVj
dEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGFyZ3NbMF0pOworICAgICAgICAgICAg
aWYgKCFvLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRF
eGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAg
fQpAQCAtNDQzNywxNCArNDM4NiwxNCBAQCBWYWx1ZSBLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpj
YWxsKEV4ZWNTCiAgICAgICAgICAgICAgICAgaCA9IHBpeG1hcC5oZWlnaHQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG8tPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50
OjppbWdfaW5mbykpewotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQgKj4oYXJnc1swXS5pbXAoKSktPmltcGwoKTsKKyAgICAgICAgICAgICAgICBO
b2RlSW1wbCAqbiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KGFyZ3NbMF0pLT5pbXBsKCk7
CiAgICAgICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgICAgIHBpeG1hcCA9IGUtPnBp
eG1hcCgpOwogICAgICAgICAgICAgICAgIHcgPSBwaXhtYXAud2lkdGgoKTsKICAgICAgICAgICAg
ICAgICBoID0gcGl4bWFwLmhlaWdodCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz
ZSBpZiAoby0+aW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmNhbnZhc19pbmZvKSl7Ci0gICAg
ICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihhcmdz
WzBdLmltcCgpKS0+aW1wbCgpOworICAgICAgICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQgKj4oYXJnc1swXSktPmltcGwoKTsKICAgICAgICAgICAgICAgICBI
VE1MQ2FudmFzRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudElt
cGwqPihuKTsKICAgICAgICAgICAgICAgICBraHRtbDo6UmVuZGVyQ2FudmFzSW1hZ2UgKnJlbmRl
cmVyID0gc3RhdGljX2Nhc3Q8a2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlKj4oZS0+cmVuZGVyZXIo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikgewpAQCAtNDQ1Nyw3ICs0NDA2LDcg
QEAgVmFsdWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAg
ICAgIGggPSAoZmxvYXQpQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KHNvdXJjZUNvbnRleHQpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0
IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgICAgICAgICAgICAgIE9i
amVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAgICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cjsKICAgICAgICAgICAgIH0KQEAgLTQ0NjYsMjcgKzQ0MTUsMjcgQEAgVmFsdWUgS0pTOjpDb250
ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAgZmxvYXQgc3ggPSAwLmYsIHN5
ID0gMC5mLCBzdyA9IHcsIHNoID0gaDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGFy
Z3Muc2l6ZSgpID09IDMpIHsKLSAgICAgICAgICAgICAgICBkeCA9IGFyZ3NbMV0udG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICAgICAgZHkgPSBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOworICAg
ICAgICAgICAgICAgIGR4ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAg
ICAgZHkgPSBhcmdzWzJdLT50b051bWJlcihleGVjKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGVsc2UgaWYgKGFyZ3Muc2l6ZSgpID09IDUpIHsKLSAgICAgICAgICAgICAgICBkeCA9IGFy
Z3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZHkgPSBhcmdzWzJdLnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGR3ID0gYXJnc1szXS50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgICAgICBkaCA9IGFyZ3NbNF0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAg
ICAgICAgZHggPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBkeSA9
IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGR3ID0gYXJnc1szXS0+
dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZGggPSBhcmdzWzRdLT50b051bWJlcihl
eGVjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3Muc2l6ZSgpID09
IDkpIHsKLSAgICAgICAgICAgICAgICBzeCA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgICAgICAgICAgc3kgPSBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAg
IHN3ID0gYXJnc1szXS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBzaCA9IGFyZ3Nb
NF0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZHggPSBhcmdzWzVdLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgICAgIGR5ID0gYXJnc1s2XS50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgICAgICBkdyA9IGFyZ3NbN10udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgZGggPSBhcmdzWzhdLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIHN4ID0gYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgc3kgPSBhcmdzWzJdLT50b051
bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBzdyA9IGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMp
OworICAgICAgICAgICAgICAgIHNoID0gYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAg
ICAgICAgICAgZHggPSBhcmdzWzVdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBk
eSA9IGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGR3ID0gYXJnc1s3
XS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZGggPSBhcmdzWzhdLT50b051bWJl
cihleGVjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOworICAgICAg
ICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9y
KTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQpAQCAtNDQ5NCw3ICs0NDQzLDcgQEAgVmFs
dWUgS0pTOjpDb250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICAgICAgaWYgKCFz
b3VyY2VDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIgcDsKICAgICAgICAgICAg
ICAgICBwLmRyYXdGbG9hdFBpeG1hcCAoZHgsIGR5LCBkdywgZGgsIHBpeG1hcCwgc3gsIHN5LCBz
dywgc2gsIAotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlcjo6Y29tcG9zaXRlT3BlcmF0b3JG
cm9tU3RyaW5nKGNvbnRleHRPYmplY3QtPl9nbG9iYWxDb21wb3NpdGUudG9TdHJpbmcoZXhlYyku
cXN0cmluZygpLmxvd2VyKCkpLCBkcmF3aW5nQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAg
IFFQYWludGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29udGV4dE9iamVjdC0+X2ds
b2JhbENvbXBvc2l0ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkpLCBkcmF3aW5n
Q29udGV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBDaGVhcCwgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYmFja2VkIGJ5IGNvcHktb24td3Jp
dGUgbWVtb3J5LCBhbmQgd2UncmUKQEAgLTQ1NDAsMjYgKzQ0ODksMjYgQEAgVmFsdWUgS0pTOjpD
b250ZXh0MkRGdW5jdGlvbjo6Y2FsbChFeGVjUwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpEcmF3SW1hZ2VGcm9tUmVjdDogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDEwKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPihhcmdzWzBd
LmltcCgpKTsKLSAgICAgICAgICAgIGlmIChvLT50eXBlKCkgIT0gT2JqZWN0VHlwZSB8fCAhby0+
aW5oZXJpdHMoJkltYWdlOjppbmZvKSkgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgICAgIE9iamVjdEltcCAqbyA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGFyZ3NbMF0pOworICAgICAgICAgICAgaWYgKCFvLT5p
c09iamVjdCgpIHx8ICFvLT5pbmhlcml0cygmSW1hZ2U6OmluZm8pKSB7CisgICAgICAgICAgICAg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAg
ICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSW1hZ2UgKmkgPSBzdGF0aWNfY2Fz
dDxJbWFnZSo+KG8pOwotICAgICAgICAgICAgZmxvYXQgc3ggPSBhcmdzWzFdLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgZmxvYXQgc3kgPSBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgZmxvYXQgc3cgPSBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
ZmxvYXQgc2ggPSBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZHgg
PSBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZHkgPSBhcmdzWzZd
LnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZHcgPSBhcmdzWzddLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZGggPSBhcmdzWzhdLnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgUVN0cmluZyBjb21wb3NpdGVPcGVyYXRvciA9IGFyZ3NbOV0udG9TdHJpbmco
ZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBmbG9hdCBzeCA9IGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgc3kgPSBhcmdzWzJdLT50b051bWJl
cihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHN3ID0gYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7
CisgICAgICAgICAgICBmbG9hdCBzaCA9IGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZmxvYXQgZHggPSBhcmdzWzVdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZs
b2F0IGR5ID0gYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCBkdyA9
IGFyZ3NbN10tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgZGggPSBhcmdzWzhd
LT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3Ig
PSBhcmdzWzldLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAg
IGtodG1sOjpDYWNoZWRJbWFnZSAqY2kgPSBpLT5pbWFnZSgpOwogICAgICAgICAgICAgaWYgKGNp
KSB7CiAgICAgICAgICAgICAgICAgUVBpeG1hcCBwaXhtYXAgPSBjaS0+cGl4bWFwKCk7CkBAIC00
NTc2LDc2ICs0NTI1LDc2IEBAIFZhbHVlIEtKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGwoRXhl
Y1MKICAgICAgICAgfQogICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0QWxwaGE6IHsKICAgICAg
ICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVy
ciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4RXJyb3IpOwogICAgICAgICAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBl
cnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdCBhID0gIChmbG9hdClhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgYSA9ICAoZmxvYXQpYXJnc1swXS0+
dG9OdW1iZXIoZXhlYyk7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRBbHBoYSAoZHJhd2luZ0Nv
bnRleHQsIGEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
b250ZXh0MkQ6OlNldENvbXBvc2l0ZU9wZXJhdGlvbjogewogICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVy
cm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0
RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFFTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3IgPSBhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAgUVN0cmluZyBjb21wb3Np
dGVPcGVyYXRvciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwog
ICAgICAgICAgICAgUVBhaW50ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiAoZHJhd2luZ0NvbnRl
eHQsY29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQ29udGV4dDJEOjpDcmVhdGVMaW5lYXJHcmFkaWVudDogewog
ICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgICAgICAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgICAg
ICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxTeW50YXhFcnJvcik7CiAgICAg
ICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsb2F0IHgwID0gYXJnc1swXS50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkwID0gYXJnc1sxXS50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHgxID0gYXJnc1syXS50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgIGZsb2F0IHkxID0gYXJnc1szXS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAg
IGZsb2F0IHgwID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB5
MCA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeDEgPSBhcmdz
WzJdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHkxID0gYXJnc1szXS0+dG9O
dW1iZXIoZXhlYyk7CiAKLSAgICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IEdyYWRpZW50KHgw
LCB5MCwgeDEsIHkxKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYWRpZW50KHgwLCB5MCwg
eDEsIHkxKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBDb250ZXh0MkQ6OkNy
ZWF0ZVJhZGlhbEdyYWRpZW50OiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gNikg
ewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsU3ludGF4
RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShl
eGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZmxvYXQgeDAgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQg
eTAgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgcjAgPSBhcmdz
WzJdLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeDEgPSBhcmdzWzNdLnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTEgPSBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMp
OwotICAgICAgICAgICAgZmxvYXQgcjEgPSBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICAgICAgZmxvYXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZs
b2F0IHkwID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCByMCA9
IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxvYXQgeDEgPSBhcmdzWzNd
LT50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIGZsb2F0IHkxID0gYXJnc1s0XS0+dG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCByMSA9IGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMp
OwogCi0gICAgICAgICAgICByZXR1cm4gT2JqZWN0KG5ldyBHcmFkaWVudCh4MCwgeTAsIHIwLCB4
MSwgeTEsIHIxKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYWRpZW50KHgwLCB5MCwgcjAs
IHgxLCB5MSwgcjEpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIENvbnRleHQy
RDo6Q3JlYXRlUGF0dGVybjogewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsK
LSAgICAgICAgICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFN5bnRheEVy
cm9yKTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhl
YyxTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KGFyZ3NbMF0uaW1wKCkpOwot
ICAgICAgICAgICAgaWYgKG8tPnR5cGUoKSAhPSBPYmplY3RUeXBlIHx8ICFvLT5pbmhlcml0cygm
SW1hZ2U6OmluZm8pKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVh
dGUoZXhlYyxUeXBlRXJyb3IpOworICAgICAgICAgICAgT2JqZWN0SW1wICpvID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wKj4oYXJnc1swXSk7CisgICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkg
fHwgIW8tPmluaGVyaXRzKCZJbWFnZTo6aW5mbykpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RJ
bXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgICAgICAgICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRl
cm46OlJlcGVhdDsKLSAgICAgICAgICAgIFFTdHJpbmcgcmVwZXRpdGlvblN0cmluZyA9IGFyZ3Nb
MV0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBRU3RyaW5n
IHJlcGV0aXRpb25TdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93
ZXIoKTsKICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBlYXQteCIpCiAg
ICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVhdFg7CiAg
ICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBlYXQteSIpCiAgICAg
ICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVhdFk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJuby1yZXBlYXQiKQogICAgICAg
ICAgICAgICAgIHJlcGV0aXRpb25UeXBlID0gSW1hZ2VQYXR0ZXJuOjpOb1JlcGVhdDsKLSAgICAg
ICAgICAgIHJldHVybiBPYmplY3QobmV3IEltYWdlUGF0dGVybihzdGF0aWNfY2FzdDxJbWFnZSo+
KG8pLCByZXBldGl0aW9uVHlwZSkpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZVBhdHRl
cm4oc3RhdGljX2Nhc3Q8SW1hZ2UqPihvKSwgcmVwZXRpdGlvblR5cGUpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC00NzEyLDcgKzQ2NjEsNyBAQCBib29sIENvbnRleHQyRDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTCiAgICAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxDb250ZXh0MkRG
dW5jdGlvbiwgQ29udGV4dDJELCBET01PYmplY3Q+KGV4ZWMsICZDb250ZXh0MkRUYWJsZSwgdGhp
cywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgQ29udGV4dDJEOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ29udGV4dDJE
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAg
c3dpdGNoKHRva2VuKSB7CiAgICAgICAgIGNhc2UgU3Ryb2tlU3R5bGU6IHsKQEAgLTQ3NzAsNyAr
NDcxOSw3IEBAIFZhbHVlIENvbnRleHQyRDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgQ29udGV4dDJEOjpwdXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
aW50IGF0dHIpCit2b2lkIENvbnRleHQyRDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICAg
IGxvb2t1cFB1dDxDb250ZXh0MkQsRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyLCAmQ29udGV4dDJEVGFibGUsIHRoaXMgKTsKIH0KQEAgLTQ3ODksMTMgKzQ3MzgsMTMg
QEAgQ0dDb250ZXh0UmVmIENvbnRleHQyRDo6ZHJhd2luZ0NvbnRleHQoKQogfQogCiAKLUNHQ29s
b3JSZWYgY29sb3JSZWZGcm9tVmFsdWUoRXhlY1N0YXRlICpleGVjLCBjb25zdCBWYWx1ZSAmdmFs
dWUpCitDR0NvbG9yUmVmIGNvbG9yUmVmRnJvbVZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgVmFsdWVJ
bXAgKnZhbHVlKQogewogICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwogICAgIGZsb2F0
IGNvbXBvbmVudHNbNF07CiAgICAgCi0gICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBTdHJpbmdUeXBl
KSB7Ci0gICAgICAgIFFSZ2IgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcih2YWx1
ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSk7CisgICAgaWYgKHZhbHVlLT5pc1N0cmluZygpKSB7
CisgICAgICAgIFFSZ2IgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcih2YWx1ZS0+
dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgICAgICBRQ29sb3IgcWMoY29sb3IpOwogICAg
ICAgICBjb21wb25lbnRzWzBdID0gcWMucmVkKCkvMjU1LjsKICAgICAgICAgY29tcG9uZW50c1sx
XSA9IHFjLmdyZWVuKCkvMjU1LjsKQEAgLTQ4MTIsOSArNDc2MSw5IEBAIENHQ29sb3JSZWYgY29s
b3JSZWZGcm9tVmFsdWUoRXhlY1N0YXRlICoKICAgICByZXR1cm4gY29sb3JSZWY7CiB9CiAKLVFD
b2xvciBjb2xvckZyb21WYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFZhbHVlICZ2YWx1ZSkK
K1FDb2xvciBjb2xvckZyb21WYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIFZhbHVlSW1wICp2YWx1ZSkK
IHsKLSAgICBRUmdiIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IodmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCkpOworICAgIFFSZ2IgY29sb3IgPSBET006OkNTU1BhcnNlcjo6
cGFyc2VDb2xvcih2YWx1ZS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpOwogICAgIHJldHVybiBR
Q29sb3IoY29sb3IpOwogfQogCkBAIC00ODI1LDkgKzQ3NzQsOSBAQCB2b2lkIENvbnRleHQyRDo6
c2V0U2hhZG93KEV4ZWNTdGF0ZSAqZXhlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBDR1Np
emUgb2Zmc2V0OwotICAgIG9mZnNldC53aWR0aCA9IChmbG9hdClfc2hhZG93T2Zmc2V0WC50b051
bWJlcihleGVjKTsKLSAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KV9zaGFkb3dPZmZzZXRZLnRv
TnVtYmVyKGV4ZWMpOwotICAgIGZsb2F0IGJsdXIgPSAoZmxvYXQpX3NoYWRvd0JsdXIudG9OdW1i
ZXIoZXhlYyk7CisgICAgb2Zmc2V0LndpZHRoID0gKGZsb2F0KV9zaGFkb3dPZmZzZXRYLT50b051
bWJlcihleGVjKTsKKyAgICBvZmZzZXQuaGVpZ2h0ID0gKGZsb2F0KV9zaGFkb3dPZmZzZXRZLT50
b051bWJlcihleGVjKTsKKyAgICBmbG9hdCBibHVyID0gKGZsb2F0KV9zaGFkb3dCbHVyLT50b051
bWJlcihleGVjKTsKICAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3JSZWZGcm9tVmFsdWUo
ZXhlYywgX3NoYWRvd0NvbG9yKTsKICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IgKGNv
bnRleHQsIG9mZnNldCwgYmx1ciwgY29sb3JSZWYpOwogICAgIENGUmVsZWFzZSAoY29sb3JSZWYp
OwpAQCAtNDgzOSw3ICs0Nzg4LDcgQEAgdm9pZCBDb250ZXh0MkQ6OnVwZGF0ZUZpbGxJbWFnZVBh
dHRlcm4oKQogICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQ29udGV4dEdldENU
TShjb250ZXh0KTsKICAgICAKICAgICBpZiAoIV92YWxpZEZpbGxJbWFnZVBhdHRlcm4gfHwgIUNH
QWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIF9sYXN0RmlsbEltYWdl
UGF0dGVybkNUTSkpIHsKLSAgICAgICAgSW1hZ2VQYXR0ZXJuICppbWFnZVBhdHRlcm4gPSBzdGF0
aWNfY2FzdDxJbWFnZVBhdHRlcm4gKj4oX2ZpbGxTdHlsZS5pbXAoKSk7CisgICAgICAgIEltYWdl
UGF0dGVybiAqaW1hZ2VQYXR0ZXJuID0gc3RhdGljX2Nhc3Q8SW1hZ2VQYXR0ZXJuICo+KF9maWxs
U3R5bGUpOwogICAgICAgICBDR1BhdHRlcm5SZWYgcGF0dGVybiA9IGltYWdlUGF0dGVybi0+Y3Jl
YXRlUGF0dGVybihDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpOwogICAgICAgICBmbG9hdCBwYXR0
ZXJuQWxwaGEgPSAxOwogICAgICAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKQEAgLTQ4NTgsNyArNDgwNyw3IEBAIHZvaWQgQ29u
dGV4dDJEOjp1cGRhdGVTdHJva2VJbWFnZVBhdHRlcm4KICAgICBDR0FmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY29udGV4dCk7CiAgICAgCiAgICAgaWYgKCFfdmFs
aWRTdHJva2VJbWFnZVBhdHRlcm4gfHwgIUNHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9y
bSh0cmFuc2Zvcm0sIF9sYXN0U3Ryb2tlSW1hZ2VQYXR0ZXJuQ1RNKSkgewotICAgICAgICBJbWFn
ZVBhdHRlcm4gKmltYWdlUGF0dGVybiA9IHN0YXRpY19jYXN0PEltYWdlUGF0dGVybiAqPihfZmls
bFN0eWxlLmltcCgpKTsKKyAgICAgICAgSW1hZ2VQYXR0ZXJuICppbWFnZVBhdHRlcm4gPSBzdGF0
aWNfY2FzdDxJbWFnZVBhdHRlcm4gKj4oX2ZpbGxTdHlsZSk7CiAgICAgICAgIENHUGF0dGVyblJl
ZiBwYXR0ZXJuID0gaW1hZ2VQYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKENHQ29udGV4dEdldENUTShj
b250ZXh0KSk7CiAgICAgICAgIGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7CiAgICAgICAgIENHQ29s
b3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwpA
QCAtNDg3MSw3ICs0ODIwLDcgQEAgdm9pZCBDb250ZXh0MkQ6OnVwZGF0ZVN0cm9rZUltYWdlUGF0
dGVybgogICAgIH0KIH0KIAotdm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKQor
dm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC00ODgwLDE4
ICs0ODI5LDE3IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAg
ICBzd2l0Y2godG9rZW4pIHsKICAgICAgICAgY2FzZSBTdHJva2VTdHlsZTogewogICAgICAgICAg
ICAgX3N0cm9rZVN0eWxlID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUudHlwZSgpID09
IFN0cmluZ1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkgewogICAg
ICAgICAgICAgICAgIFFDb2xvciBxYyA9IGNvbG9yRnJvbVZhbHVlKGV4ZWMsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBxYy5yZWQo
KS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJsdWUoKS8yNTUuLCBxYy5hbHBoYSgpLzI1NS4p
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
X3N0cm9rZVN0eWxlIGlzIHVzZWQgd2hlbiBzdHJva2UoKSBpcyBjYWxsZWQgb24gdGhlIGNvbnRl
eHQuCiAgICAgICAgICAgICAgICAgLy8gQ0cgZG9lc24ndCBoYXZlIHRoZSBub3Rpb24gb2YgYSBz
ZXR0aW5nIGEgc3Ryb2tlIGdyYWRpZW50LgotICAgICAgICAgICAgICAgIE9iamVjdEltcCAqbyA9
IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlLmltcCgpKTsKKyAgICAgICAgICAgICAgICBP
YmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAqPih2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG8tPnR5cGUoKSAhPSBPYmplY3RUeXBlIHx8IAot
ICAgICAgICAgICAgICAgICAgICAoIShvLT5pbmhlcml0cygmR3JhZGllbnQ6OmluZm8pIHx8IG8t
PmluaGVyaXRzKCZJbWFnZVBhdHRlcm46OmluZm8pKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAgICAgICAgICAg
ICAgIGlmICghby0+aXNPYmplY3QoKSB8fCAhKG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykg
fHwgby0+aW5oZXJpdHMoJkltYWdlUGF0dGVybjo6aW5mbykpKSB7CisgICAgICAgICAgICAgICAg
ICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAg
ICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtNDkwMSwxOCArNDg0OSwxNyBAQCB2
b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgICAgIAogICAgICAg
ICBjYXNlIEZpbGxTdHlsZTogewogICAgICAgICAgICAgX2ZpbGxTdHlsZSA9IHZhbHVlOwotICAg
ICAgICAgICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBTdHJpbmdUeXBlKSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgICAgICBRQ29sb3IgcWMgPSBjb2xv
ckZyb21WYWx1ZShleGVjLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdC
RmlsbENvbG9yKGNvbnRleHQsIHFjLnJlZCgpLzI1NS4sIHFjLmdyZWVuKCkvMjU1LiwgcWMuYmx1
ZSgpLzI1NS4sIHFjLmFscGhhKCkvMjU1Lik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBfZmlsbFN0eWxlIGlzIGNoZWNrZWQgd2hlbiBmaWxs
KCkgaXMgY2FsbGVkIG9uIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgICAgIC8vIENHIGRvZXNu
J3QgaGF2ZSB0aGUgbm90aW9uIG9mIHNldHRpbmcgYSBmaWxsIGdyYWRpZW50LgotICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqbyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCo+KHZhbHVlLmltcCgp
KTsKKyAgICAgICAgICAgICAgICBPYmplY3RJbXAgKm8gPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAq
Pih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG8tPnR5cGUo
KSAhPSBPYmplY3RUeXBlIHx8IAotICAgICAgICAgICAgICAgICAgICAoIShvLT5pbmhlcml0cygm
R3JhZGllbnQ6OmluZm8pIHx8IG8tPmluaGVyaXRzKCZJbWFnZVBhdHRlcm46OmluZm8pKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBl
RXJyb3IpOworICAgICAgICAgICAgICAgIGlmIChvLT50eXBlKCkgIT0gT2JqZWN0VHlwZSB8fCAh
KG8tPmluaGVyaXRzKCZHcmFkaWVudDo6aW5mbykgfHwgby0+aW5oZXJpdHMoJkltYWdlUGF0dGVy
bjo6aW5mbykpKSB7CisgICAgICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDkyNCw3ICs0ODcxLDcgQEAgdm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YQogICAgICAgICAKICAgICAgICAgY2FzZSBMaW5lV2lkdGg6IHsKICAgICAgICAg
ICAgIF9saW5lV2lkdGggPSB2YWx1ZTsKLSAgICAgICAgICAgIGZsb2F0IHcgPSAoZmxvYXQpdmFs
dWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0KXZhbHVlLT50
b051bWJlcihleGVjKTsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aCAoY29udGV4
dCwgdyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDkzMyw3ICs0ODgwLDcg
QEAgdm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogICAgICAgICAgICAg
X2xpbmVDYXAgPSB2YWx1ZTsKICAgICAgICAgCiAgICAgICAgICAgICBDR0xpbmVDYXAgY2FwID0g
a0NHTGluZUNhcEJ1dHQ7Ci0gICAgICAgICAgICBRU3RyaW5nIGNhcFN0cmluZyA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAgUVN0cmluZyBjYXBT
dHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAg
ICAgICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIpCiAgICAgICAgICAgICAgICAgY2FwID0ga0NH
TGluZUNhcFJvdW5kOwogICAgICAgICAgICAgZWxzZSBpZiAoY2FwU3RyaW5nID09ICJzcXVhcmUi
KQpAQCAtNDk0Niw3ICs0ODkzLDcgQEAgdm9pZCBDb250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YQogICAgICAgICAgICAgX2xpbmVKb2luID0gdmFsdWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIENHTGluZUpvaW4gam9pbiA9IGtDR0xpbmVKb2luTWl0ZXI7Ci0gICAgICAgICAg
ICBRU3RyaW5nIGpvaW5TdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93
ZXIoKTsKKyAgICAgICAgICAgIFFTdHJpbmcgam9pblN0cmluZyA9IHZhbHVlLT50b1N0cmluZyhl
eGVjKS5xc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAgIGlmIChqb2luU3RyaW5nID09ICJy
b3VuZCIpCiAgICAgICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2luUm91bmQ7CiAgICAgICAg
ICAgICBlbHNlIGlmIChqb2luU3RyaW5nID09ICJiZXZlbCIpCkBAIC00OTU4LDcgKzQ5MDUsNyBA
QCB2b2lkIENvbnRleHQyRDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgICAgIGNhc2Ug
TWl0ZXJMaW1pdDogewogICAgICAgICAgICAgX21pdGVyTGltaXQgPSB2YWx1ZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZmxvYXQgbCA9IChmbG9hdCl2YWx1ZS50b051bWJlcihleGVjKTsK
KyAgICAgICAgICAgIGZsb2F0IGwgPSAoZmxvYXQpdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdCAoY29udGV4dCwgbCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNDk4OSwxNCArNDkzNiwxNCBAQCB2b2lkIENvbnRleHQy
RDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgICAgIAogICAgICAgICBjYXNlIEdsb2Jh
bEFscGhhOiB7CiAgICAgICAgICAgICBfZ2xvYmFsQWxwaGEgPSB2YWx1ZTsKLSAgICAgICAgICAg
IGZsb2F0IGEgPSAgKGZsb2F0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgZmxv
YXQgYSA9ICAoZmxvYXQpdmFsdWUtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAgICAgQ0dDb250
ZXh0U2V0QWxwaGEgKGNvbnRleHQsIGEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGNhc2UgR2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOiB7CiAgICAg
ICAgICAgICBfZ2xvYmFsQ29tcG9zaXRlID0gdmFsdWU7Ci0gICAgICAgICAgICBRU3RyaW5nIGNv
bXBvc2l0ZU9wZXJhdG9yID0gdmFsdWUudG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7
CisgICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gdmFsdWUtPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAgICAgUVBhaW50ZXI6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbiAoY29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTUwNTQsNyArNTAwMSwxOSBAQCB2b2lkIENvbnRleHQyRDo6
cmVzdG9yZSgpCiAKIENvbnRleHQyRDo6Q29udGV4dDJEKEhUTUxFbGVtZW50SW1wbCAqZSkKICAg
OiBfdmFsaWRGaWxsSW1hZ2VQYXR0ZXJuKGZhbHNlKSwgX3ZhbGlkU3Ryb2tlSW1hZ2VQYXR0ZXJu
KGZhbHNlKSwKLSAgICBfZWxlbWVudChlKSwgX25lZWRzRmx1c2hSYXN0ZXJDYWNoZShmYWxzZSkK
KyAgICBfZWxlbWVudChlKSwgX25lZWRzRmx1c2hSYXN0ZXJDYWNoZShmYWxzZSksCisgICAgX3N0
cm9rZVN0eWxlKGpzVW5kZWZpbmVkKCkpLAorICAgIF9maWxsU3R5bGUoanNVbmRlZmluZWQoKSks
CisgICAgX2xpbmVXaWR0aChqc1VuZGVmaW5lZCgpKSwKKyAgICBfbGluZUNhcChqc1VuZGVmaW5l
ZCgpKSwKKyAgICBfbGluZUpvaW4oanNVbmRlZmluZWQoKSksCisgICAgX21pdGVyTGltaXQoanNV
bmRlZmluZWQoKSksCisgICAgX3NoYWRvd09mZnNldFgoanNVbmRlZmluZWQoKSksCisgICAgX3No
YWRvd09mZnNldFkoanNVbmRlZmluZWQoKSksCisgICAgX3NoYWRvd0JsdXIoanNVbmRlZmluZWQo
KSksCisgICAgX3NoYWRvd0NvbG9yKGpzVW5kZWZpbmVkKCkpLAorICAgIF9nbG9iYWxBbHBoYShq
c1VuZGVmaW5lZCgpKSwKKyAgICBfZ2xvYmFsQ29tcG9zaXRlKGpzVW5kZWZpbmVkKCkpCiB7CiAg
ICAgX2xpbmVXaWR0aCA9IE51bWJlciAoMS4pOwogICAgIF9zdHJva2VTdHlsZSA9IFN0cmluZyAo
ImJsYWNrIik7CkBAIC01MDg0LDUxICs1MDQzLDUxIEBAIHZvaWQgQ29udGV4dDJEOjptYXJrKCkK
ICAgICBWYWx1ZUltcCAqdjsKIAogICAgIHYgPSBfc3Ryb2tlU3R5bGU7Ci0gICAgaWYgKHYgJiYg
IXYtPm1hcmtlZCgpKQorICAgIGlmICghdi0+bWFya2VkKCkpCiAgICAgICAgIHYtPm1hcmsoKTsK
IAogICAgIHYgPSBfZmlsbFN0eWxlOwotICAgIGlmICh2ICYmICF2LT5tYXJrZWQoKSkKKyAgICBp
ZiAoIXYtPm1hcmtlZCgpKQogICAgICAgICB2LT5tYXJrKCk7CiAKICAgICB2ID0gX2xpbmVXaWR0
aDsKLSAgICBpZiAodiAmJiAhdi0+bWFya2VkKCkpCisgICAgaWYgKCF2LT5tYXJrZWQoKSkKICAg
ICAgICAgdi0+bWFyaygpOwogCiAgICAgdiA9IF9saW5lQ2FwOwotICAgIGlmICh2ICYmICF2LT5t
YXJrZWQoKSkKKyAgICBpZiAoIXYtPm1hcmtlZCgpKQogICAgICAgICB2LT5tYXJrKCk7CiAKICAg
ICB2ID0gX2xpbmVKb2luOwotICAgIGlmICh2ICYmICF2LT5tYXJrZWQoKSkKKyAgICBpZiAoIXYt
Pm1hcmtlZCgpKQogICAgICAgICB2LT5tYXJrKCk7CiAKICAgICB2ID0gX21pdGVyTGltaXQ7Ci0g
ICAgaWYgKHYgJiYgIXYtPm1hcmtlZCgpKQorICAgIGlmICghdi0+bWFya2VkKCkpCiAgICAgICAg
IHYtPm1hcmsoKTsKIAogICAgIHYgPSBfc2hhZG93T2Zmc2V0WDsKLSAgICBpZiAodiAmJiAhdi0+
bWFya2VkKCkpCisgICAgaWYgKCF2LT5tYXJrZWQoKSkKICAgICAgICAgdi0+bWFyaygpOwogCiAg
ICAgdiA9IF9zaGFkb3dPZmZzZXRZOwotICAgIGlmICh2ICYmICF2LT5tYXJrZWQoKSkKKyAgICBp
ZiAoIXYtPm1hcmtlZCgpKQogICAgICAgICB2LT5tYXJrKCk7CiAKICAgICB2ID0gX3NoYWRvd0Js
dXI7Ci0gICAgaWYgKHYgJiYgIXYtPm1hcmtlZCgpKQorICAgIGlmICghdi0+bWFya2VkKCkpCiAg
ICAgICAgIHYtPm1hcmsoKTsKIAogICAgIHYgPSBfc2hhZG93Q29sb3I7Ci0gICAgaWYgKHYgJiYg
IXYtPm1hcmtlZCgpKQorICAgIGlmICghdi0+bWFya2VkKCkpCiAgICAgICAgIHYtPm1hcmsoKTsK
IAogICAgIHYgPSBfZ2xvYmFsQWxwaGE7Ci0gICAgaWYgKHYgJiYgIXYtPm1hcmtlZCgpKQorICAg
IGlmICghdi0+bWFya2VkKCkpCiAgICAgICAgIHYtPm1hcmsoKTsKIAogICAgIHYgPSBfZ2xvYmFs
Q29tcG9zaXRlOwotICAgIGlmICh2ICYmICF2LT5tYXJrZWQoKSkKKyAgICBpZiAoIXYtPm1hcmtl
ZCgpKQogICAgICAgICB2LT5tYXJrKCk7CiAKICAgICBRUHRyTGlzdEl0ZXJhdG9yPExpc3Q+IGl0
KHN0YXRlU3RhY2spOwpAQCAtNTE1MSwyNiArNTExMCwyNiBAQCBjb25zdCBDbGFzc0luZm8gS0pT
OjpHcmFkaWVudDo6aW5mbyA9IHsgCiAKIElNUExFTUVOVF9QUk9UT0ZVTkMoR3JhZGllbnRGdW5j
dGlvbikKIAotVmFsdWUgR3JhZGllbnRGdW5jdGlvbjo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpHcmFkaWVudEZ1bmN0
aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkdyYWRpZW50
OjppbmZvKSkgewotICAgICAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVF
cnJvcik7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmR3JhZGllbnQ6OmluZm8pKSB7Cisg
ICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgICAgICByZXR1cm4gZXJyOwogICAg
IH0KIAotICAgIEdyYWRpZW50ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEtKUzo6R3JhZGllbnQg
Kj4odGhpc09iai5pbXAoKSk7CisgICAgR3JhZGllbnQgKmdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8
S0pTOjpHcmFkaWVudCAqPih0aGlzT2JqKTsKIAogICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAg
Y2FzZSBHcmFkaWVudDo6QWRkQ29sb3JTdG9wOiB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMikgewotICAgICAgICAgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4
ZWMsU3ludGF4RXJyb3IpOworICAgICAgICAgICAgICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFN5bnRheEVycm9yKTsKICAgICAgICAgICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBRQ29sb3IgY29sb3IgPSBjb2xvckZyb21WYWx1ZShleGVjLCBhcmdzWzFd
KTsKLSAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AgKChmbG9hdClhcmdzWzBdLnRv
TnVtYmVyKGV4ZWMpLCBjb2xvci5yZWQoKS8yNTUuZiwgY29sb3IuZ3JlZW4oKS8yNTUuZiwgY29s
b3IuYmx1ZSgpLzI1NS5mLCBjb2xvci5hbHBoYSgpLzI1NS5mKTsKKyAgICAgICAgICAgIGdyYWRp
ZW50LT5hZGRDb2xvclN0b3AgKChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKSwgY29sb3Iu
cmVkKCkvMjU1LmYsIGNvbG9yLmdyZWVuKCkvMjU1LmYsIGNvbG9yLmJsdWUoKS8yNTUuZiwgY29s
b3IuYWxwaGEoKS8yNTUuZik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyNzMsMTcgKzUyMzIs
MTcgQEAgYm9vbCBHcmFkaWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdAogICAgIHJldHVy
biBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8R3JhZGllbnRGdW5jdGlvbiwgR3JhZGllbnQsIERPTU9i
amVjdD4oZXhlYywgJkdyYWRpZW50VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLVZhbHVlIEdyYWRpZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqR3JhZGllbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3QKIHsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZv
aWQgR3JhZGllbnQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgR3JhZGllbnQ6OnB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBsb29rdXBQdXQ8R3JhZGllbnQsRE9NT2JqZWN0
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmR3JhZGllbnRUYWJsZSwgdGhpcyAp
OwogfQogCi12b2lkIEdyYWRpZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgR3JhZGll
bnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogfQogCkBAIC01NDY5LDE3ICs1NDI4LDE3IEBAIGJv
b2wgSW1hZ2VQYXR0ZXJuOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXgKICAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVTbG90PEltYWdlUGF0dGVybiwgRE9NT2JqZWN0PihleGVjLCAmSW1hZ2VQYXR0ZXJu
VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIEltYWdlUGF0dGVy
bjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkltYWdlUGF0dGVybjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdAogewogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBJbWFnZVBhdHRl
cm46OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSW1hZ2VQYXR0ZXJuOjpwdXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpCiB7CiAgICAgbG9va3VwUHV0PEltYWdlUGF0dGVybixET01PYmplY3Q+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZJbWFnZVBhdHRlcm5UYWJsZSwgdGhp
cyApOwogfQogCi12b2lkIEltYWdlUGF0dGVybjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lk
IEltYWdlUGF0dGVybjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41NApkaWZm
IC1wIC11IC1yMS41NCBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19odG1sLmgJNyBBdWcgMjAwNSAwNjoxNzo0NSAtMDAwMAkxLjU0CisrKyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAk4IEF1ZyAyMDA1IDAxOjAxOjIzIC0wMDAwCkBA
IC00OCw5ICs0OCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgSFRNTERvY3Vt
ZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MRG9jdW1lbnRJbXBsICpkKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVl
LCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pOworICAg
IFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Cisg
ICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLyk7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBUaXRsZSwgUmVmZXJyZXIsIERvbWFpbiwgVVJMLCBC
b2R5LCBMb2NhdGlvbiwgQ29va2llLApAQCAtNTgsMTkgKzU4LDE5IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICAgICBXcml0ZSwgV3JpdGVMbiwgR2V0RWxlbWVudHNCeU5hbWUsIENhcHR1cmVF
dmVudHMsIFJlbGVhc2VFdmVudHMsCiAgICAgICAgICAgIEJnQ29sb3IsIEZnQ29sb3IsIEFsaW5r
Q29sb3IsIExpbmtDb2xvciwgVmxpbmtDb2xvciwgTGFzdE1vZGlmaWVkLCBIZWlnaHQsIFdpZHRo
LCBEaXIsIERlc2lnbk1vZGUgfTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFsdWUgbmFtZWRJ
dGVtR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgfTsKIAogICBjbGFz
cyBIVE1MRWxlbWVudCA6IHB1YmxpYyBET01FbGVtZW50IHsKICAgcHVibGljOgogICAgIEhUTUxF
bGVtZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MRWxlbWVudEltcGwgKmUpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCk7CisgICAgVmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2b2lk
IHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2
YWx1ZSwgaW50KTsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVj
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0
ZSAqZXhlYywgU2NvcGVDaGFpbiAmc2NvcGUpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgY2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVt
ZW50c0NhbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3Q7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtODcsOCArODcs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZv
LCBmcmFtZV9pbmZvLCBpRnJhbWVfaW5mbywgbWFycXVlZV9pbmZvOwogCiAgICAgLy8gRklYTUU6
IE1pZ2h0IG1ha2Ugc2Vuc2UgdG8gY29tYmluZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5
LgotICAgIHR5cGVkZWYgVmFsdWUgKEhUTUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVt
ZW50OjoqU2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIHR5cGVkZWYgVmFs
dWVJbXAgKihIVE1MRWxlbWVudDo6KkdldHRlckZ1bmN0aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChIVE1MRWxlbWVudDo6KlNldHRlckZ1
bmN0aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKICAgICBzdHJ1Y3QgQWNjZXNzb3JzIHsgR2V0dGVyRnVu
Y3Rpb24gbV9nZXR0ZXI7IFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOyB9OwogICAgIGNvbnN0IEFj
Y2Vzc29ycyogZ2V0U2V0SW5mbygpIGNvbnN0OwogICAgIHN0YXRpYyBjb25zdCBBY2Nlc3NvcnMg
aHRtbF9hY2Nlc3NvcnMsIGhlYWRfYWNjZXNzb3JzLCBsaW5rX2FjY2Vzc29ycywgdGl0bGVfYWNj
ZXNzb3JzLApAQCAtMTAyLDExNCArMTAyLDExNCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNh
cHRpb25fYWNjZXNzb3JzLCBjb2xfYWNjZXNzb3JzLCB0YWJsZXNlY3Rpb25fYWNjZXNzb3JzLCB0
cl9hY2Nlc3NvcnMsCiAgICAgICB0YWJsZWNlbGxfYWNjZXNzb3JzLCBmcmFtZVNldF9hY2Nlc3Nv
cnMsIGZyYW1lX2FjY2Vzc29ycywgaUZyYW1lX2FjY2Vzc29ycywgbWFycXVlZV9hY2Nlc3NvcnM7
CiAKLSAgICBWYWx1ZSBodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGhl
YWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGhl
YWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgbGlua0dldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgbGlua1NldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKLSAgICBWYWx1ZSB0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0g
ICAgVmFsdWUgbWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgdm9pZCAgbWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBiYXNlR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBiYXNlU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgc3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwot
ICAgIFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
ICAgIHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgZm9ybUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgZm9ybVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBzZWxlY3RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHNlbGVjdFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBvcHRHcm91cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgb3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7Ci0gICAgVmFsdWUgb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLSAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFs
dWUgaW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZv
aWQgIGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHRleHRBcmVhR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICB0ZXh0QXJl
YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBidXR0b25HZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGJ1dHRvblNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgbGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
Ci0gICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotICAgIHZvaWQgIGZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZh
bHVlIGxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAg
dm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHVMaXN0R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICB1TGlzdFNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBvTGlzdEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgb0xpc3RTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7Ci0gICAgVmFsdWUgZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwotICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAg
IFZhbHVlIGRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAg
dm9pZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIG1lbnVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIG1lbnVTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgbGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwot
ICAgIFZhbHVlIGRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgdm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIHBhcmFncmFw
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgcGFy
YWdyYXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGhlYWRpbmdHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGhlYWRpbmdTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgYmxvY2tRdW90ZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgYmxvY2tRdW90ZVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgcXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7Ci0gICAgVmFsdWUgcHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgYnJH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGJyU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGJhc2VGb250R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBiYXNlRm9udFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwot
ICAgIFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAg
ICB2b2lkICBoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBtb2RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIG1vZFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBhbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKLSAgICBWYWx1ZSBpbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0gICAgdm9pZCAgaW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFs
dWUgb2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2
b2lkICBvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgcGFyYW1HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHBhcmFtU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGFwcGxldEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgYXBwbGV0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOwotICAgIFZhbHVlIG1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0gICAgdm9pZCAgbWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZh
bHVlIGFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZv
aWQgIGFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgc2NyaXB0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBzY3JpcHRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgdGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIHRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOwotICAgIFZhbHVlIHRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOwotICAgIFZhbHVlIHRhYmxlQ29sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLSAgICB2b2lkICB0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
LSAgICBWYWx1ZSB0YWJsZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwotICAgIHZvaWQgIHRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
LSAgICBWYWx1ZSB0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0gICAgdm9pZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFs
dWUgdGFibGVDZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAg
ICB2b2lkICB0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Ci0gICAgVmFsdWUgZnJh
bWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQg
IGZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwotICAgIFZhbHVlIGZyYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2b2lkICBmcmFtZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKLSAgICBWYWx1ZSBpRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZvaWQgIGlGcmFtZVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKLSAgICBWYWx1ZSBtYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLSAgICB2b2lkICBtYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlSW1wICpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpo
ZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBo
ZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpsaW5rR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlSW1wICp0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWVJbXAgKm1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIG1ldGFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmJh
c2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJh
c2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmlzSW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzdHlsZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZUltcCAqYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUlt
cCAqZm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgZm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqc2VsZWN0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzZWxlY3RTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKm9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWVJbXAgKmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBpbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUlt
cCAqdGV4dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpidXR0
b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJ1
dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqbGFiZWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxhYmVsU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWVJbXAgKmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlSW1wICp1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgdUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKm9M
aXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBv
TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqZExpc3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZUltcCAqbWVudUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgbWVudVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqbGlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxpU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpdlNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZUltcCAqcGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWVJbXAgKmhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJ
bXAgKmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAg
KnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqcHJlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZUltcCAqYmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1w
ICpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpockdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHJTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWVJbXAgKm1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlSW1wICphbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqaW1h
Z2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlt
YWdlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpvYmplY3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9iamVjdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
OworICAgIFZhbHVlSW1wICphcHBsZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZUltcCAqbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmFyZWFHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlSW1wICp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWVJbXAgKnRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBWYWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlSW1wICp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgdGFibGVDb2xTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAg
KnRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1w
ICp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKnRhYmxl
Q2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
dGFibGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlSW1wICpmcmFtZVNldEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZnJhbWVT
ZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWVJbXAgKmZyYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZUltcCAqaUZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpRnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWVJbXAgKm1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CiAKICAgICBl
bnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwgTGlua1JlbCwgTGlua01l
ZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVkLCBMaW5rSHJlZkxhbmcs
IExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLApAQCAtMjg3LDEzICsyODcsMTMgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgICAgIEVsZW1lbnRDbGFzc05hbWUsIEVsZW1lbnRJbm5lclRl
eHQsIEVsZW1lbnREb2N1bWVudCwgRWxlbWVudENoaWxkcmVuLCBFbGVtZW50Q29udGVudEVkaXRh
YmxlLAogICAgICAgICAgICBFbGVtZW50SXNDb250ZW50RWRpdGFibGUsIEVsZW1lbnRPdXRlckhU
TUwsIEVsZW1lbnRPdXRlclRleHR9OwogICBwcml2YXRlOgotICAgIHN0YXRpYyBWYWx1ZSBmb3Jt
SW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgVmFsdWUgZm9ybU5hbWVHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
LSAgICBzdGF0aWMgVmFsdWUgc2VsZWN0SW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgVmFs
dWUgZnJhbWVzZXROYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIFZhbHVlIGZyYW1lV2luZG93
UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgVmFsdWUgcnVudGltZU9iamVjdEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpOwotICAgIHN0YXRpYyBWYWx1ZSBydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmZvcm1JbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRp
YyBWYWx1ZUltcCAqZm9ybU5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKnNl
bGVjdEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpmcmFtZXNldE5hbWVH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmZyYW1lV2luZG93UHJvcGVydHlHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKnJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
KyAgICBzdGF0aWMgVmFsdWVJbXAgKnJ1bnRpbWVPYmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwog
ICB9OwogCiAgIERPTTo6SFRNTEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICop
OyAvLyByZXR1cm5zIDAgaWYgcGFzc2VkLWluIHZhbHVlIGlzIG5vdCBhIEhUTUxFbGVtZW50IG9i
amVjdApAQCAtMzA1LDI5ICszMDUsMjkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSFRNTENvbGxl
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBET006OkhUTUxDb2xsZWN0aW9uSW1wbCAqYyk7CiAgICAg
fkhUTUxDb2xsZWN0aW9uKCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1
YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCZhcmdzKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFs
IGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IGVudW0geyBJdGVtLCBOYW1lZEl0ZW0sIFRhZ3MgfTsKLSAgICBWYWx1ZSBnZXROYW1lZEl0ZW1z
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsK
KyAgICBWYWx1ZUltcCAqZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBpbmZvOwogICAgIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsICppbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAgIHByb3RlY3RlZDoKICAgICBraHRtbDo6U2hhcmVk
UHRyPERPTTo6SFRNTENvbGxlY3Rpb25JbXBsPiBtX2ltcGw7CiAgIHByaXZhdGU6Ci0gICAgc3Rh
dGljIFZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBWYWx1ZSBpbmRleEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpOwotICAgIHN0YXRpYyBWYWx1ZSBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIFZh
bHVlSW1wICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgIH07CiAK
ICAgY2xhc3MgSFRNTFNlbGVjdENvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewog
ICBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdENvbGxlY3Rpb24oRXhlY1N0YXRlICpleGVjLCBET006
OkhUTUxDb2xsZWN0aW9uSW1wbCAqYywgRE9NOjpIVE1MU2VsZWN0RWxlbWVudEltcGwgKmUpOwog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQg
YXR0ciA9IE5vbmUpOwogICBwcml2YXRlOgotICAgIHN0YXRpYyBWYWx1ZSBzZWxlY3RlZEluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpzZWxlY3RlZEluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRyPERPTTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsPiBt
X2VsZW1lbnQ7CiAgIH07CkBAIC0zMzgsNyArMzM4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1
YmxpYzoKICAgICBPcHRpb25Db25zdHJ1Y3RvckltcChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6RG9j
dW1lbnRJbXBsICpkKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgT2JqZWN0IGNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgT2JqZWN0SW1wICpjb25zdHJ1Y3QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKICAgcHJpdmF0ZToKICAgICBraHRtbDo6U2hhcmVk
UHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvYzsKICAgfTsKQEAgLTM0OSw3ICszNDksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEltYWdlQ29uc3RydWN0b3JJbXAoRXhlY1N0
YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAqZCk7CiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAq
Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAgIHByaXZhdGU6
CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4gbV9kb2M7CiAgIH07CkBA
IC0zNTksOSArMzU5LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSW1hZ2UoRE9NOjpEb2N1bWVu
dEltcGwgKmQsIGJvb2wgd3MsIGludCB3LCBib29sIGhzLCBpbnQgaCk7CiAgICAgfkltYWdlKCk7
CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0
ciovKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9
IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwogICAgIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoa2h0bWw6OkNhY2hlZE9iamVjdCAqKTsKICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0zODksOSAr
Mzg5LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQ29udGV4dDJEKERPTTo6SFRNTEVsZW1lbnRJ
bXBsICplKTsKICAgICB+Q29udGV4dDJEKCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsK
LSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyph
dHRyKi8pOwogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAtNDQ1
LDE4ICs0NDUsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICBRUHRyTGlzdDxMaXN0PiBzdGF0ZVN0
YWNrOwogICAgIAotICAgIFZhbHVlIF9zdHJva2VTdHlsZTsKLSAgICBWYWx1ZSBfZmlsbFN0eWxl
OwotICAgIFZhbHVlIF9saW5lV2lkdGg7Ci0gICAgVmFsdWUgX2xpbmVDYXA7Ci0gICAgVmFsdWUg
X2xpbmVKb2luOwotICAgIFZhbHVlIF9taXRlckxpbWl0OwotICAgIFZhbHVlIF9zaGFkb3dPZmZz
ZXRYOwotICAgIFZhbHVlIF9zaGFkb3dPZmZzZXRZOwotICAgIFZhbHVlIF9zaGFkb3dCbHVyOwot
ICAgIFZhbHVlIF9zaGFkb3dDb2xvcjsKLSAgICBWYWx1ZSBfZ2xvYmFsQWxwaGE7Ci0gICAgVmFs
dWUgX2dsb2JhbENvbXBvc2l0ZTsKKyAgICBWYWx1ZUltcCAqX3N0cm9rZVN0eWxlOworICAgIFZh
bHVlSW1wICpfZmlsbFN0eWxlOworICAgIFZhbHVlSW1wICpfbGluZVdpZHRoOworICAgIFZhbHVl
SW1wICpfbGluZUNhcDsKKyAgICBWYWx1ZUltcCAqX2xpbmVKb2luOworICAgIFZhbHVlSW1wICpf
bWl0ZXJMaW1pdDsKKyAgICBWYWx1ZUltcCAqX3NoYWRvd09mZnNldFg7CisgICAgVmFsdWVJbXAg
Kl9zaGFkb3dPZmZzZXRZOworICAgIFZhbHVlSW1wICpfc2hhZG93Qmx1cjsKKyAgICBWYWx1ZUlt
cCAqX3NoYWRvd0NvbG9yOworICAgIFZhbHVlSW1wICpfZ2xvYmFsQWxwaGE7CisgICAgVmFsdWVJ
bXAgKl9nbG9iYWxDb21wb3NpdGU7CiAgIH07CiAKICAgICAvLyBGSVhNRTogTWFjaW50b3NoIHNw
ZWNpZmljLCBhbmQgc2hvdWxkIGJlIGFic3RyYWN0ZWQgYnkgS1dRIGluIFFQYWludGVyLgpAQCAt
NDgxLDkgKzQ4MSw5IEBAIHByaXZhdGU6CiAgICAgR3JhZGllbnQoZmxvYXQgeDAsIGZsb2F0IHkw
LCBmbG9hdCByMCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCByMSk7CiAgICAgfkdyYWRpZW50
KCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBw
dXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8q
YXR0ciovKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
ICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC01MjcsOSArNTI3LDkgQEAgcHJp
dmF0ZTogICAgCiAgIHB1YmxpYzoKICAgICBJbWFnZVBhdHRlcm4oSW1hZ2UgKmksIGludCB0eXBl
KTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyph
dHRyKi8pOworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRy
ID0gTm9uZSk7CisgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIqLyk7CiAgICAgdmlydHVhbCBib29s
IHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQog
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfbmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMy
CmRpZmYgLXAgLXUgLXIxLjMyIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNwcAot
LS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCTcgQXVnIDIwMDUgMTg6NDY6
NDQgLTAwMDAJMS4zMgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCTgg
QXVnIDIwMDUgMDE6MDE6MjQgLTAwMDAKQEAgLTc1LDM5ICs3NSwzOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBsdWdpbnMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdp
bkJhc2UoZXhlYykge307CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAg
ICAgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAgICAgICAgIGVudW0geyBMZW5ndGgsIFJlZnJlc2ggfTsKICAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgVmFsdWUgaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIFZhbHVlIG5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgc3RhdGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgVmFsdWVJbXAg
Km5hbWVHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKICAgICB9OwogCiAgICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJh
c2UgewogICAgIHB1YmxpYzoKICAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSAqZXhlYykgOiBQ
bHVnaW5CYXNlKGV4ZWMpIHsgfTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgICAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKICAgICAgICAgZW51bSB7IExlbmd0aCB9OwogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0
YXRpYyBWYWx1ZSBpbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgVmFsdWUgbmFtZUdldHRlcihFeGVj
U3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBWYWx1ZUltcCAqbmFt
ZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwogICAgIH07CiAKICAgICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBQbHVnaW4oRXhlY1N0YXRlICpleGVjLCBQbHVnaW5JbmZvICpp
bmZvKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KICAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OworICAgICAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IE5hbWUsIEZpbGVuYW1l
LCBEZXNjcmlwdGlvbiwgTGVuZ3RoIH07CiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIFZh
bHVlIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBWYWx1ZSBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRp
YyBWYWx1ZUltcCAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAK
ICAgICAgICAgUGx1Z2luSW5mbyAqbV9pbmZvOwogICAgIH07CkBAIC0xMTYsNyArMTE2LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgcHVibGljOgogICAgICAgICBNaW1lVHlwZSggRXhlY1N0YXRl
ICpleGVjLCBNaW1lQ2xhc3NJbmZvICppbmZvICkgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8o
aW5mbykgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgVmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKKyAgICAgICAg
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
ICAgIGVudW0geyBUeXBlLCBTdWZmaXhlcywgRGVzY3JpcHRpb24sIEVuYWJsZWRQbHVnaW4gfTsK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIE5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTCiAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8TmF2aWdhdG9yRnVuYywgTmF2aWdh
dG9yLCBPYmplY3RJbXA+KGV4ZWMsICZOYXZpZ2F0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAotVmFsdWUgTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5hdmlnYXRvcjo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICNpZiBBUFBMRV9D
SEFOR0VTCiAgIFFTdHJpbmcgdXNlckFnZW50ID0gS1dRKG1fcGFydCktPnVzZXJBZ2VudCgpOwpA
QCAtMjQyLDkgKzI0Miw5IEBAIFZhbHVlIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3QKICAgICBlbHNlCiAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6OmZyb21MYXRpbjEoIlgx
MSIpKTsKICAgY2FzZSBfUGx1Z2luczoKLSAgICByZXR1cm4gVmFsdWUobmV3IFBsdWdpbnMoZXhl
YykpOworICAgIHJldHVybiBuZXcgUGx1Z2lucyhleGVjKTsKICAgY2FzZSBfTWltZVR5cGVzOgot
ICAgIHJldHVybiBWYWx1ZShuZXcgTWltZVR5cGVzKGV4ZWMpKTsKKyAgICByZXR1cm4gbmV3IE1p
bWVUeXBlcyhleGVjKTsKICAgY2FzZSBDb29raWVFbmFibGVkOgogI2lmIEFQUExFX0NIQU5HRVMK
ICAgICByZXR1cm4gQm9vbGVhbihLV1FLQ29va2llSmFyOjpjb29raWVFbmFibGVkKCkpOwpAQCAt
MjUzLDcgKzI1Myw3IEBAIFZhbHVlIE5hdmlnYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3QK
ICNlbmRpZgogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4g
aW4gRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkgOiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAg
cmV0dXJuIFZhbHVlKCk7CisgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIApAQCAtMzYxLDIyICsz
NjEsMjIgQEAgdm9pZCBQbHVnaW5CYXNlOjpyZWZyZXNoKGJvb2wgcmVsb2FkKQogKi8KIElNUExF
TUVOVF9QUk9UT0ZVTkMoUGx1Z2luc0Z1bmMpCiAKLVZhbHVlIFBsdWdpbnM6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqUGx1Z2lu
czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
ICAgYXNzZXJ0KHRva2VuID09IExlbmd0aCk7CiAgIHJldHVybiBOdW1iZXIocGx1Z2lucy0+Y291
bnQoKSk7CiB9CiAKLVZhbHVlIFBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitWYWx1ZUltcCAqUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICByZXR1cm4gVmFsdWUobmV3IFBsdWdpbihleGVjLCBwbHVnaW5zLT5hdChzbG90LmluZGV4KCkp
KSk7CisgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGx1Z2lucy0+YXQoc2xvdC5pbmRleCgp
KSk7CiB9CiAKLVZhbHVlIFBsdWdpbnM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1Zh
bHVlSW1wICpQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIGZvciAo
UGx1Z2luSW5mbyAqcGwgPSBwbHVnaW5zLT5maXJzdCgpOyBwbDsgcGwgPSBwbHVnaW5zLT5uZXh0
KCkpIHsKICAgICBpZiAocGwtPm5hbWUgPT0gcHJvcGVydHlOYW1lLnFzdHJpbmcoKSkgewotICAg
ICAgcmV0dXJuIFZhbHVlKG5ldyBQbHVnaW4oZXhlYywgcGwpKTsKKyAgICAgIHJldHVybiBuZXcg
UGx1Z2luKGV4ZWMsIHBsKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
NDIwLDIzICs0MjAsMjIgQEAgYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YQogQGVuZAogKi8KIAotVmFsdWUgTWltZVR5cGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk1pbWVUeXBlczo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgYXNzZXJ0KHRv
a2VuID09IExlbmd0aCk7CiAgIHJldHVybiBOdW1iZXIocGx1Z2lucy0+Y291bnQoKSk7CiB9CiAK
LVZhbHVlIE1pbWVUeXBlczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1w
ICpNaW1lVHlwZXM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJu
IFZhbHVlKG5ldyBNaW1lVHlwZShleGVjLCBtaW1lcy0+YXQoc2xvdC5pbmRleCgpKSkpOworICAg
IHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3QuaW5kZXgoKSkpOwogfQog
Ci1WYWx1ZSBNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1w
ICpNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgZm9yIChNaW1l
Q2xhc3NJbmZvICptID0gbWltZXMtPmZpcnN0KCk7IG07IG0gPSBtaW1lcy0+bmV4dCgpKSB7Ci0g
ICAgICBpZiAobS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUucXN0cmluZygpKSB7Ci0gICAgICAgICAg
cmV0dXJuIFZhbHVlKG5ldyBNaW1lVHlwZShleGVjLCBtKSk7Ci0gICAgICB9CisgICAgICBpZiAo
bS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUucXN0cmluZygpKQorICAgICAgICAgIHJldHVybiBuZXcg
TWltZVR5cGUoZXhlYywgbSk7CiAgIH0KICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNDgw
LDcgKzQ3OSw3IEBAIGJvb2wgTWltZVR5cGVzOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1MKIEBl
bmQKICovCiAKLVZhbHVlIFBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpQbHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0b2tlbikgewog
ICAgIGNhc2UgTmFtZToKQEAgLTQ5NywxOSArNDk2LDE4IEBAIFZhbHVlIFBsdWdpbjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUKICAgICB9CiB9CiAKLVZhbHVlIFBsdWdpbjo6aW5kZXhHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK1ZhbHVlSW1wICpQbHVnaW46OmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
ICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJuIFZhbHVlKG5ldyBNaW1lVHlwZShleGVj
LCB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmF0KHNsb3QuaW5kZXgoKSkpKTsKKyAgICByZXR1cm4g
bmV3IE1pbWVUeXBlKGV4ZWMsIHRoaXNPYmotPm1faW5mby0+bWltZXMuYXQoc2xvdC5pbmRleCgp
KSk7CiB9CiAKLVZhbHVlIFBsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFs
dWVJbXAgKlBsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFBsdWdp
biAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbiAqPihzbG90LnNsb3RCYXNlKCkpOwogICAg
IGZvciAoTWltZUNsYXNzSW5mbyAqbSA9IHRoaXNPYmotPm1faW5mby0+bWltZXMuZmlyc3QoKTsg
bTsgbSA9IHRoaXNPYmotPm1faW5mby0+bWltZXMubmV4dCgpKSB7Ci0gICAgICAgIGlmIChtLT50
eXBlID09IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBWYWx1
ZShuZXcgTWltZVR5cGUoZXhlYywgbSkpOwotICAgICAgICB9CisgICAgICAgIGlmIChtLT50eXBl
ID09IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVU
eXBlKGV4ZWMsIG0pOwogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC01NTMs
NyArNTUxLDcgQEAgYm9vbCBQbHVnaW46OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdAogQGVu
ZAogKi8KIAotVmFsdWUgTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0b2tlbikg
ewogICAgIGNhc2UgVHlwZToKQEAgLTU2Myw3ICs1NjEsNyBAQCBWYWx1ZSBNaW1lVHlwZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAgICAgY2FzZSBEZXNjcmlwdGlvbjoKICAgICAgICAgcmV0
dXJuIFN0cmluZyhtX2luZm8tPmRlc2MpOwogICAgIGNhc2UgRW5hYmxlZFBsdWdpbjoKLSAgICAg
ICAgcmV0dXJuIFZhbHVlKG5ldyBQbHVnaW4oZXhlYywgbV9pbmZvLT5wbHVnaW4pKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgbV9pbmZvLT5wbHVnaW4pOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICB9CkBAIC01NzQsMjAgKzU3MiwyMCBA
QCBib29sIE1pbWVUeXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgICAgcmV0dXJuIGdl
dFN0YXRpY1ZhbHVlU2xvdDxNaW1lVHlwZSwgUGx1Z2luQmFzZT4oZXhlYywgJk1pbWVUeXBlVGFi
bGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIFBsdWdpbnNGdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICYsIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqUGx1Z2luc0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gICAgUGx1Z2luQmFzZShleGVjKS5yZWZyZXNoKGFy
Z3NbMF0udG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBQbHVnaW5CYXNlKGV4ZWMpLnJlZnJlc2goYXJn
c1swXS0+dG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIE5hdmlnYXRvckZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpOYXZpZ2F0b3JGdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQogewotICBp
ZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6TmF2aWdhdG9yOjppbmZvKSkgewotICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmS0pTOjpOYXZpZ2F0b3I6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJy
KTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIE5hdmlnYXRvciAqbmF2ID0gc3RhdGljX2Nhc3Q8
TmF2aWdhdG9yICo+KHRoaXNPYmouaW1wKCkpOworICBOYXZpZ2F0b3IgKm5hdiA9IHN0YXRpY19j
YXN0PE5hdmlnYXRvciAqPih0aGlzT2JqKTsKICAgLy8gamF2YUVuYWJsZWQoKQogICByZXR1cm4g
Qm9vbGVhbihuYXYtPnBhcnQoKS0+amF2YUVuYWJsZWQoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX25hdmlnYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjcKZGlmZiAtcCAtdSAtcjEuNyBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5oCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5oCTcgQXVnIDIwMDUgMDY6MTc6NDUg
LTAwMDAJMS43CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5oCTggQXVnIDIw
MDUgMDE6MDE6MjQgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1
YmxpYzoKICAgICBOYXZpZ2F0b3IoRXhlY1N0YXRlICpleGVjLCBLSFRNTFBhcnQgKnApOwogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIGVudW0geyBBcHBDb2RlTmFtZSwgQXBwTmFt
ZSwgQXBwVmVyc2lvbiwgTGFuZ3VhZ2UsIFVzZXJBZ2VudCwgUGxhdGZvcm0sCkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19wcm94eS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEgV2ViQ29yZS9raHRtbC9lY21hL2tqc19wcm94eS5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCTEyIE1heSAyMDA1IDE3OjExOjIx
IC0wMDAwCTEuMjEKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCTggQXVnIDIw
MDUgMDE6MDE6MjQgLTAwMDAKQEAgLTExMiw3ICsxMTIsNyBAQCBRVmFyaWFudCBLSlNQcm94eUlt
cGw6OmV2YWx1YXRlKFFTdHJpbmcgCiAjZW5kaWYKIAogICBtX3NjcmlwdC0+c2V0SW5saW5lQ29k
ZShpbmxpbmVDb2RlKTsKLSAgS0pTOjpWYWx1ZSB0aGlzTm9kZSA9IG4gPyBXaW5kb3c6OnJldHJp
ZXZlKCBtX3BhcnQgKSA6IFZhbHVlKGdldERPTU5vZGUobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwg
bikpOworICBLSlM6OlZhbHVlSW1wICp0aGlzTm9kZSA9IG4gPyBXaW5kb3c6OnJldHJpZXZlKG1f
cGFydCkgOiBnZXRET01Ob2RlKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksIG4pOwogCiAgIEtKUzo6
SW50ZXJwcmV0ZXI6OmxvY2soKTsKICAgVVN0cmluZyBjb2RlKCBzdHIgKTsKQEAgLTEyNSwxNCAr
MTI1LDE0IEBAIFFWYXJpYW50IEtKU1Byb3h5SW1wbDo6ZXZhbHVhdGUoUVN0cmluZyAKICNlbmRp
ZgogCiAgIC8vIGxldCdzIHRyeSB0byBjb252ZXJ0IHRoZSByZXR1cm4gdmFsdWUKLSAgaWYgKHN1
Y2Nlc3MgJiYgIWNvbXAudmFsdWUoKS5pc051bGwoKSkKLSAgICByZXR1cm4gVmFsdWVUb1Zhcmlh
bnQoIG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksIGNvbXAudmFsdWUoKSk7CisgIGlmIChzdWNjZXNz
ICYmIGNvbXAudmFsdWUoKSkKKyAgICByZXR1cm4gVmFsdWVUb1ZhcmlhbnQobV9zY3JpcHQtPmds
b2JhbEV4ZWMoKSwgY29tcC52YWx1ZSgpKTsKIAogICBpZiAoIGNvbXAuY29tcGxUeXBlKCkgPT0g
VGhyb3cgKSB7CiAgICAgS0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwotICAgIFVTdHJpbmcgZXJy
b3JNZXNzYWdlID0gY29tcC52YWx1ZSgpLnRvU3RyaW5nKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkp
OwotICAgIGludCBsaW5lTnVtYmVyID0gIGNvbXAudmFsdWUoKS50b09iamVjdChtX3NjcmlwdC0+
Z2xvYmFsRXhlYygpKS5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgImxpbmUiKS50b0ludDMy
KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpOwotICAgIFVTdHJpbmcgc291cmNlVVJMID0gY29tcC52
YWx1ZSgpLnRvT2JqZWN0KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpLmdldChtX3NjcmlwdC0+Z2xv
YmFsRXhlYygpLCAic291cmNlVVJMIikudG9TdHJpbmcobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSk7
CisgICAgVVN0cmluZyBlcnJvck1lc3NhZ2UgPSBjb21wLnZhbHVlKCktPnRvU3RyaW5nKG1fc2Ny
aXB0LT5nbG9iYWxFeGVjKCkpOworICAgIGludCBsaW5lTnVtYmVyID0gIGNvbXAudmFsdWUoKS0+
dG9PYmplY3QobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSktPmdldChtX3NjcmlwdC0+Z2xvYmFsRXhl
YygpLCAibGluZSIpLT50b0ludDMyKG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpOworICAgIFVTdHJp
bmcgc291cmNlVVJMID0gY29tcC52YWx1ZSgpLT50b09iamVjdChtX3NjcmlwdC0+Z2xvYmFsRXhl
YygpKS0+Z2V0KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksICJzb3VyY2VVUkwiKS0+dG9TdHJpbmco
bV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSk7CiAgICAgS0pTOjpJbnRlcnByZXRlcjo6dW5sb2NrKCk7
CiAKICNpZiBBUFBMRV9DSEFOR0VTCkBAIC0yNTAsMTIgKzI1MCwxMiBAQCBjbGFzcyBUZXN0RnVu
Y3Rpb25JbXAgOiBwdWJsaWMgT2JqZWN0SW1wCiBwdWJsaWM6CiAgIFRlc3RGdW5jdGlvbkltcCgp
IDogT2JqZWN0SW1wKCkge30KICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQotICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICB2aXJ0dWFsIFZhbHVlSW1wICpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CiB9OwogCi1WYWx1ZSBUZXN0RnVuY3Rpb25JbXA6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
KlRlc3RGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKi8qdGhpc09iaiovLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBmcHJpbnRmKHN0ZGVyciwi
LS0+ICVzXG4iLGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CisgIGZwcmludGYoc3Rk
ZXJyLCItLT4gJXNcbiIsYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7CiAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIApAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgS0pTUHJveHlJbXBs
Ojppbml0U2NyaXB0KCkKIAogICAvLyBCdWlsZCB0aGUgZ2xvYmFsIG9iamVjdCAtIHdoaWNoIGlz
IGEgV2luZG93IGluc3RhbmNlCiAgIEtKUzo6SW50ZXJwcmV0ZXI6OmxvY2soKTsKLSAgT2JqZWN0
IGdsb2JhbE9iamVjdCggbmV3IFdpbmRvdyhtX3BhcnQpICk7CisgIE9iamVjdEltcCAqZ2xvYmFs
T2JqZWN0KCBuZXcgV2luZG93KG1fcGFydCkgKTsKICAgS0pTOjpJbnRlcnByZXRlcjo6dW5sb2Nr
KCk7CiAKICAgLy8gQ3JlYXRlIGEgS0pTIGludGVycHJldGVyIGZvciB0aGlzIHBhcnQKQEAgLTI3
Nyw4ICsyNzcsNyBAQCB2b2lkIEtKU1Byb3h5SW1wbDo6aW5pdFNjcmlwdCgpCiAjZW5kaWYKICAg
Ly9tX3NjcmlwdC0+ZW5hYmxlRGVidWcoKTsKICAgS0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwot
ICBnbG9iYWxPYmplY3QucHV0KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCksCi0JCSAgICJkZWJ1ZyIs
IFZhbHVlKG5ldyBUZXN0RnVuY3Rpb25JbXAoKSksIEludGVybmFsKTsKKyAgZ2xvYmFsT2JqZWN0
LT5wdXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgImRlYnVnIiwgbmV3IFRlc3RGdW5jdGlvbklt
cCgpLCBJbnRlcm5hbCk7CiAgIEtKUzo6SW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCiAjaWYgQVBQ
TEVfQ0hBTkdFUwpAQCAtMzAwLDcgKzI5OSw3IEBAIHZvaWQgS0pTUHJveHlJbXBsOjppbml0U2Ny
aXB0KCkKIC8vIGFzIGZyaWVuZCB0byBLSFRNTFBhcnQKIEtKU1Byb3h5ICogS0pTUHJveHk6OnBy
b3h5KCBLSFRNTFBhcnQgKnBhcnQgKQogewotICAgIHJldHVybiBwYXJ0LT5qU2NyaXB0KCk7Cisg
ICAgcmV0dXJuIHBhcnQgPyBwYXJ0LT5qU2NyaXB0KCkgOiBOVUxMOwogfQogCiAvLyBpbml0aWFs
aXplIEhUTUwgbW9kdWxlCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5n
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMKZGlmZiAtcCAtdSAtcjEuMTMgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19yYW5nZS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFu
Z2UuY3BwCTcgQXVnIDIwMDUgMDY6MTc6NDUgLTAwMDAJMS4xMworKysgV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19yYW5nZS5jcHAJOCBBdWcgMjAwNSAwMTowMToyNCAtMDAwMApAQCAtODgsNyArODgs
NyBAQCBib29sIERPTVJhbmdlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgIHJldHVybiBn
ZXRTdGF0aWNWYWx1ZVNsb3Q8RE9NUmFuZ2UsIERPTU9iamVjdD4oZXhlYywgJkRPTVJhbmdlVGFi
bGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTVJhbmdlOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KkRPTVJhbmdlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgUmFu
Z2VJbXBsICZyYW5nZSA9ICptX2ltcGw7CkBAIC05Niw3ICs5Niw3IEBAIFZhbHVlIERPTVJhbmdl
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKICAgY2FzZSBTdGFydENvbnRhaW5lcjoKICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCByYW5nZS5zdGFydENvbnRhaW5lcihleGNlcHRpb24pKTsK
ICAgY2FzZSBTdGFydE9mZnNldDoKLSAgICByZXR1cm4gbnVtYmVyKHJhbmdlLnN0YXJ0T2Zmc2V0
KGV4Y2VwdGlvbikpOworICAgIHJldHVybiBqc051bWJlcihyYW5nZS5zdGFydE9mZnNldChleGNl
cHRpb24pKTsKICAgY2FzZSBFbmRDb250YWluZXI6CiAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YywgcmFuZ2UuZW5kQ29udGFpbmVyKGV4Y2VwdGlvbikpOwogICBjYXNlIEVuZE9mZnNldDoKQEAg
LTEwNywyNyArMTA3LDI3IEBAIFZhbHVlIERPTVJhbmdlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGEKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCByYW5nZS5jb21tb25BbmNlc3RvckNvbnRh
aW5lcihleGNlcHRpb24pKTsKICAgZGVmYXVsdDoKICAgICBrZFdhcm5pbmcoKSA8PCAiVW5oYW5k
bGVkIHRva2VuIGluIERPTVJhbmdlOjpnZXRWYWx1ZVByb3BlcnR5IDogIiA8PCB0b2tlbiA8PCBl
bmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAKLVZh
bHVlIERPTVJhbmdlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTVJhbmdlUHJvdG9GdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTVJhbmdlOjppbmZv
KSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01SYW5nZTo6aW5mbykpIHsKKyAgICBPYmpl
Y3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgUmFuZ2VJbXBsICZyYW5n
ZSA9ICpzdGF0aWNfY2FzdDxET01SYW5nZSAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOwotICBW
YWx1ZSByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgUmFuZ2VJbXBsICZyYW5nZSA9ICpzdGF0aWNf
Y2FzdDxET01SYW5nZSAqPih0aGlzT2JqKS0+aW1wbCgpOworICBWYWx1ZUltcCAqcmVzdWx0ID0g
VW5kZWZpbmVkKCk7CiAgIGludCBleGNlcHRpb24gPSAwOwogCiAgIHN3aXRjaCAoaWQpIHsKICAg
ICBjYXNlIERPTVJhbmdlOjpTZXRTdGFydDoKLSAgICAgIHJhbmdlLnNldFN0YXJ0KHRvTm9kZShh
cmdzWzBdKSwgYXJncy5pbXBBdCgxKS0+dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAg
IHJhbmdlLnNldFN0YXJ0KHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSwg
ZXhjZXB0aW9uKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRE9NUmFuZ2U6OlNldEVuZDoKLSAg
ICAgIHJhbmdlLnNldEVuZCh0b05vZGUoYXJnc1swXSksIGFyZ3MuaW1wQXQoMSktPnRvSW50MzIo
ZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICByYW5nZS5zZXRFbmQodG9Ob2RlKGFyZ3NbMF0pLCBh
cmdzWzFdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwogICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBET01SYW5nZTo6U2V0U3RhcnRCZWZvcmU6CiAgICAgICByYW5nZS5zZXRTdGFydEJlZm9yZSh0
b05vZGUoYXJnc1swXSksIGV4Y2VwdGlvbik7CkBAIC0xNDIsNyArMTQyLDcgQEAgVmFsdWUgRE9N
UmFuZ2VQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIo
dG9Ob2RlKGFyZ3NbMF0pLCBleGNlcHRpb24pOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01S
YW5nZTo6Q29sbGFwc2U6Ci0gICAgICByYW5nZS5jb2xsYXBzZShhcmdzWzBdLnRvQm9vbGVhbihl
eGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgIHJhbmdlLmNvbGxhcHNlKGFyZ3NbMF0tPnRvQm9vbGVh
bihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRE9NUmFuZ2U6OlNl
bGVjdE5vZGU6CiAgICAgICByYW5nZS5zZWxlY3ROb2RlKHRvTm9kZShhcmdzWzBdKSwgZXhjZXB0
aW9uKTsKQEAgLTE1MSw4ICsxNTEsOCBAQCBWYWx1ZSBET01SYW5nZVByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgCiAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModG9Ob2RlKGFyZ3NbMF0p
LCBleGNlcHRpb24pOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01SYW5nZTo6Q29tcGFyZUJv
dW5kYXJ5UG9pbnRzOgotICAgICAgICByZXN1bHQgPSBudW1iZXIocmFuZ2UuY29tcGFyZUJvdW5k
YXJ5UG9pbnRzKHN0YXRpY19jYXN0PFJhbmdlOjpDb21wYXJlSG93PihhcmdzWzBdLnRvSW50MzIo
ZXhlYykpLCB0b1JhbmdlKGFyZ3NbMV0pLCBleGNlcHRpb24pKTsKLSAgICAgIGJyZWFrOworICAg
ICAgICByZXN1bHQgPSBqc051bWJlcihyYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoc3RhdGlj
X2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpLCB0b1Jhbmdl
KGFyZ3NbMV0pLCBleGNlcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01SYW5n
ZTo6RGVsZXRlQ29udGVudHM6CiAgICAgICByYW5nZS5kZWxldGVDb250ZW50cyhleGNlcHRpb24p
OwogICAgICAgYnJlYWs7CkBAIC0xNzgsOCArMTc4LDcgQEAgVmFsdWUgRE9NUmFuZ2VQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgcmFuZ2UuZGV0YWNoKGV4Y2VwdGlvbik7CiAgICAg
ICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpDcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQ6Ci0g
ICAgICBWYWx1ZSB2YWx1ZSA9IGFyZ3NbMF07Ci0gICAgICBET01TdHJpbmcgc3RyID0gdmFsdWUu
aXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKTsKKyAgICAgIERPTVN0cmluZyBzdHIgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5z
dHJpbmcoKTsKICAgICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywgcmFuZ2UuY3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KHN0ciwgZXhjZXB0aW9uKSk7CiAgICAgICBicmVhazsKICAgfTsKQEAg
LTIwOSw3ICsyMDgsNyBAQCBib29sIFJhbmdlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xv
CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8UmFuZ2VDb25zdHJ1Y3RvcixET01PYmplY3Q+
KGV4ZWMsICZSYW5nZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLVZhbHVlIFJhbmdlQ29uc3RydWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpSYW5nZUNvbnN0cnVjdG9yOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIHJldHVybiBOdW1i
ZXIodG9rZW4pOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfcmFuZ2UuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5oCTcgQXVn
IDIwMDUgMDY6MTc6NDUgLTAwMDAJMS44CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3Jhbmdl
LmgJOCBBdWcgMjAwNSAwMTowMToyNCAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBET01SYW5nZShFeGVjU3RhdGUgKmV4ZWMsIERPTTo6UmFuZ2VJbXBsICpyKTsK
ICAgICB+RE9NUmFuZ2UoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICBwdWJsaWM6CiAgICAgUmFuZ2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKikgeyB9CiAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25s
eQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE0CmRpZmYgLXAgLXUgLXIxLjE0IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJh
dmVyc2FsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCTcgQXVn
IDIwMDUgMDY6MTc6NDUgLTAwMDAJMS4xNAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2
ZXJzYWwuY3BwCTggQXVnIDIwMDUgMDE6MDE6MjUgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgYm9v
bCBET01Ob2RlSXRlcmF0b3I6OmdldE93blByb3BlcnR5U2xvdAogICByZXR1cm4gZ2V0U3RhdGlj
VmFsdWVTbG90PERPTU5vZGVJdGVyYXRvciwgRE9NT2JqZWN0PihleGVjLCAmRE9NTm9kZUl0ZXJh
dG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIERPTU5vZGVJ
dGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIE5vZGVJdGVyYXRvckltcGwgJm5pID0gKm1f
aW1wbDsKICAgc3dpdGNoICh0b2tlbikgewpAQCAtOTEsMTkgKzkxLDE5IEBAIFZhbHVlIERPTU5v
ZGVJdGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eSgKICAgICByZXR1cm4gQm9vbGVhbihuaS5wb2lu
dGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpKTsKICBkZWZhdWx0OgogICAga2RXYXJuaW5nKCkgPDwg
IlVuaGFuZGxlZCB0b2tlbiBpbiBET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHkgOiAi
IDw8IHRva2VuIDw8IGVuZGw7Ci0gICByZXR1cm4gVmFsdWUoKTsKKyAgIHJldHVybiBOVUxMOwog
ICB9CiB9CiAKLVZhbHVlIERPTU5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmKQorVmFsdWVJbXAgKkRPTU5vZGVJ
dGVyYXRvclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJikKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZL
SlM6OkRPTU5vZGVJdGVyYXRvcjo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNy
ZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJktKUzo6RE9N
Tm9kZUl0ZXJhdG9yOjppbmZvKSkgeworICAgIE9iamVjdEltcCAqZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgcmV0
dXJuIGVycjsKICAgfQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsK
LSAgTm9kZUl0ZXJhdG9ySW1wbCAmbm9kZUl0ZXJhdG9yID0gKnN0YXRpY19jYXN0PERPTU5vZGVJ
dGVyYXRvciAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOworICBOb2RlSXRlcmF0b3JJbXBsICZu
b2RlSXRlcmF0b3IgPSAqc3RhdGljX2Nhc3Q8RE9NTm9kZUl0ZXJhdG9yICo+KHRoaXNPYmopLT5p
bXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgY2FzZSBET01Ob2RlSXRlcmF0b3I6OlByZXZpb3Vz
Tm9kZToKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG5vZGVJdGVyYXRvci5wcmV2aW91c05v
ZGUoZXhjZXB0aW9uKSk7CkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBib29sIE5vZGVGaWx0ZXJDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVyCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8Tm9kZUZp
bHRlckNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsICZOb2RlRmlsdGVyQ29uc3RydWN0b3JU
YWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgTm9kZUZpbHRlckNv
bnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqTm9kZUZpbHRlckNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgIC8vIFdlIHVzZSB0aGUgdG9rZW4gYXMgdGhl
IHZhbHVlIHRvIHJldHVybiBkaXJlY3RseQogICByZXR1cm4gTnVtYmVyKHRva2VuKTsKIH0KIAot
VmFsdWUgZ2V0Tm9kZUZpbHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYykKK1ZhbHVlSW1w
ICpnZXROb2RlRmlsdGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKQogewogICByZXR1cm4g
Y2FjaGVHbG9iYWxPYmplY3Q8Tm9kZUZpbHRlckNvbnN0cnVjdG9yPihleGVjLCAiW1tub2RlRmls
dGVyLmNvbnN0cnVjdG9yXV0iKTsKIH0KQEAgLTE4NCwxNCArMTg0LDE0IEBAIERPTU5vZGVGaWx0
ZXI6On5ET01Ob2RlRmlsdGVyKCkKICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVj
dChtX2ltcGwuZ2V0KCkpOwogfQogCi1WYWx1ZSBET01Ob2RlRmlsdGVyUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkRPTU5vZGVGaWx0ZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRo
aXNPYmouaW5oZXJpdHMoJktKUzo6RE9NTm9kZUZpbHRlcjo6aW5mbykpIHsKLSAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5o
ZXJpdHMoJktKUzo6RE9NTm9kZUZpbHRlcjo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9
IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAgTm9kZUZpbHRlckltcGwgJm5vZGVGaWx0ZXIg
PSAqc3RhdGljX2Nhc3Q8RE9NTm9kZUZpbHRlciAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpOwor
ICBOb2RlRmlsdGVySW1wbCAmbm9kZUZpbHRlciA9ICpzdGF0aWNfY2FzdDxET01Ob2RlRmlsdGVy
ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQpIHsKICAgICBjYXNlIERPTU5vZGVG
aWx0ZXI6OkFjY2VwdE5vZGU6CiAgICAgICByZXR1cm4gTnVtYmVyKG5vZGVGaWx0ZXIuYWNjZXB0
Tm9kZSh0b05vZGUoYXJnc1swXSkpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIERPTVRyZWVX
YWxrZXI6OmdldE93blByb3BlcnR5U2xvdChFCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8
RE9NVHJlZVdhbGtlciwgRE9NT2JqZWN0PihleGVjLCAmRE9NVHJlZVdhbGtlclRhYmxlLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1WYWx1ZSBET01UcmVlV2Fsa2VyOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRP
TVRyZWVXYWxrZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAgIFRyZWVXYWxrZXJJbXBsICZ0dyA9ICptX2ltcGw7CiAgIHN3aXRjaCAodG9r
ZW4pIHsKQEAgLTI2OCwxMiArMjY4LDEyIEBAIFZhbHVlIERPTVRyZWVXYWxrZXI6OmdldFZhbHVl
UHJvcGVydHkoRXgKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHR3LmN1cnJlbnROb2RlKCkp
OwogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9N
VHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eSA6ICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgICBy
ZXR1cm4gVmFsdWUoKTsKKyAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCiB2b2lkIERPTVRyZWVX
YWxrZXI6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0
dHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRy
KQogewogICBpZiAocHJvcGVydHlOYW1lID09ICJjdXJyZW50Tm9kZSIpIHsKICAgICBET01FeGNl
cHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKQEAgLTI4MywxNCArMjgzLDE0IEBAIHZv
aWQgRE9NVHJlZVdhbGtlcjo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywKICAgICBPYmplY3RJbXA6OnB1
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKIH0KIAotVmFsdWUgRE9NVHJlZVdh
bGtlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29u
c3QgTGlzdCAmKQorVmFsdWVJbXAgKkRPTVRyZWVXYWxrZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYpCiB7
Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpET01UcmVlV2Fsa2VyOjppbmZvKSkgewot
ICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmS0pTOjpET01UcmVlV2Fsa2VyOjppbmZvKSkgeworICAgIE9iamVj
dEltcCAqZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CiAgICAgZXhlYy0+c2V0
RXhjZXB0aW9uKGVycik7CiAgICAgcmV0dXJuIGVycjsKICAgfQotICBUcmVlV2Fsa2VySW1wbCAm
dHJlZVdhbGtlciA9ICpzdGF0aWNfY2FzdDxET01UcmVlV2Fsa2VyICo+KHRoaXNPYmouaW1wKCkp
LT5pbXBsKCk7CisgIFRyZWVXYWxrZXJJbXBsICZ0cmVlV2Fsa2VyID0gKnN0YXRpY19jYXN0PERP
TVRyZWVXYWxrZXIgKj4odGhpc09iaiktPmltcGwoKTsKICAgc3dpdGNoIChpZCkgewogICAgIGNh
c2UgRE9NVHJlZVdhbGtlcjo6UGFyZW50Tm9kZToKICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdHJlZVdhbGtlci5wYXJlbnROb2RlKCkpOwpAQCAtMzE3LDcgKzMxNyw3IEBAIFZhbHVlSW1w
ICpnZXRET01UcmVlV2Fsa2VyKEV4ZWNTdGF0ZSAqZXgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1KU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRlckNvbmRpdGlvbihPYmplY3QgJiBf
ZmlsdGVyKSA6IGZpbHRlciggX2ZpbHRlciApCitKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9k
ZUZpbHRlckNvbmRpdGlvbihPYmplY3RJbXAgKiBfZmlsdGVyKSA6IGZpbHRlciggX2ZpbHRlciAp
CiB7CiB9CiAKQEAgLTMzMCwxMyArMzMwLDEzIEBAIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlv
bjo6YWNjZXB0Tm9kZSgKICNlbmRpZgogICAgIEtIVE1MUGFydCAqcGFydCA9IG5vZGUtPmdldERv
Y3VtZW50KCktPnBhcnQoKTsKICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHko
cGFydCk7Ci0gICAgaWYgKHByb3h5ICYmIGZpbHRlci5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAg
aWYgKHByb3h5ICYmIGZpbHRlci0+aW1wbGVtZW50c0NhbGwoKSkgewogICAgICAgICBFeGVjU3Rh
dGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBM
aXN0IGFyZ3M7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGdldERPTU5vZGUoZXhlYywgbm9kZSkpOwot
ICAgICAgICBPYmplY3Qgb2JqID0gY29uc3RfY2FzdDxQcm90ZWN0ZWRPYmplY3QgJj4oZmlsdGVy
KTsKLSAgICAgICAgVmFsdWUgcmVzdWx0ID0gb2JqLmNhbGwoZXhlYywgb2JqLCBhcmdzKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC50b0ludDMyKGV4ZWMpOworICAgICAgICBPYmplY3RJbXAgKm9i
aiA9IGZpbHRlcjsKKyAgICAgICAgVmFsdWVJbXAgKnJlc3VsdCA9IG9iai0+Y2FsbChleGVjLCBv
YmosIGFyZ3MpOworICAgICAgICByZXR1cm4gcmVzdWx0LT50b0ludDMyKGV4ZWMpOwogICAgIH0K
IAogICAgIHJldHVybiBET006Ok5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjkKZGlmZiAtcCAtdSAtcjEuOSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNh
bC5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCTcgQXVnIDIwMDUgMDY6
MTc6NDYgLTAwMDAJMS45CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCTgg
QXVnIDIwMDUgMDE6MDE6MjUgLTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgRE9NTm9kZUl0ZXJhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSXRlcmF0b3JJ
bXBsICpuaSk7CiAgICAgfkRPTU5vZGVJdGVyYXRvcigpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTU0LDcgKzU0LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBOb2RlRmlsdGVyQ29uc3RydWN0b3IoRXhl
Y1N0YXRlICopIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIFZhbHVl
IGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNzgsOSArNzgsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBET01UcmVlV2Fsa2VyKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpUcmVlV2Fsa2VySW1wbCAq
dHcpOwogICAgIH5ET01UcmVlV2Fsa2VyKCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYgc2xv
dCk7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgUm9vdCwgV2hhdFRvU2hvdywgRmlsdGVyLCBF
eHBhbmRFbnRpdHlSZWZlcmVuY2VzLCBDdXJyZW50Tm9kZSwKQEAgLTkyLDcgKzkxLDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIH07CiAKICAgVmFsdWVJbXAgKmdldERPTU5vZGVJdGVyYXRvcihFeGVj
U3RhdGUgKmV4ZWMsIERPTTo6Tm9kZUl0ZXJhdG9ySW1wbCAqbmkpOwotICBWYWx1ZSBnZXROb2Rl
RmlsdGVyQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKKyAgVmFsdWVJbXAgKmdldE5vZGVG
aWx0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpOwogICBWYWx1ZUltcCAqZ2V0RE9NTm9k
ZUZpbHRlcihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Tm9kZUZpbHRlckltcGwgKm5mKTsKICAgVmFs
dWVJbXAgKmdldERPTVRyZWVXYWxrZXIoRXhlY1N0YXRlICpleGVjLCBET006OlRyZWVXYWxrZXJJ
bXBsICp0dyk7CiAKQEAgLTEwMCw3ICs5OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNz
IEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBET006Ok5vZGVGaWx0ZXJDb25kaXRpb24g
ewogICBwdWJsaWM6Ci0gICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKE9iamVjdCAmIF9maWx0ZXIp
OworICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihPYmplY3RJbXAgKiBfZmlsdGVyKTsKICAgICB2
aXJ0dWFsIH5KU05vZGVGaWx0ZXJDb25kaXRpb24oKSB7fQogICAgIHZpcnR1YWwgc2hvcnQgYWNj
ZXB0Tm9kZShET006OkZpbHRlck5vZGUpIGNvbnN0OwogICBwcm90ZWN0ZWQ6CkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuOApkaWZmIC1wIC11IC1yMS44IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAk3IEF1ZyAyMDA1IDA2OjE3OjQ2IC0w
MDAwCTEuOAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5jcHAJOCBBdWcgMjAwNSAw
MTowMToyNSAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCBET01BYnN0cmFjdFZpZXc6On5ET01BYnN0
cmFjdFZpZXcoKQogICAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBs
LmdldCgpKTsKIH0KIAotVmFsdWUgRE9NQWJzdHJhY3RWaWV3OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKQorVmFsdWVJbXAgKkRPTUFic3RyYWN0Vmlldzo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikKIHsKICAgICBhc3NlcnQo
dG9rZW4gPT0gRG9jdW1lbnQpOwogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGltcGwoKS0+
ZG9jdW1lbnQoKSk7CkBAIC02NSwxNCArNjUsMTQgQEAgYm9vbCBET01BYnN0cmFjdFZpZXc6Omdl
dE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8RE9NQWJz
dHJhY3RWaWV3RnVuYywgRE9NQWJzdHJhY3RWaWV3LCBET01PYmplY3Q+KGV4ZWMsICZET01BYnN0
cmFjdFZpZXdUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgRE9N
QWJzdHJhY3RWaWV3RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01BYnN0cmFjdFZpZXdGdW5jOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZET01BYnN0cmFjdFZpZXc6OmluZm8p
KSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZET01BYnN0cmFjdFZpZXc6OmluZm8pKSB7CisgICAgT2Jq
ZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIEFic3RyYWN0Vmlld0lt
cGwgJmFic3RyYWN0VmlldyA9ICpzdGF0aWNfY2FzdDxET01BYnN0cmFjdFZpZXcgKj4odGhpc09i
ai5pbXAoKSktPmltcGwoKTsKKyAgQWJzdHJhY3RWaWV3SW1wbCAmYWJzdHJhY3RWaWV3ID0gKnN0
YXRpY19jYXN0PERPTUFic3RyYWN0VmlldyAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2gg
KGlkKSB7CiAgICAgY2FzZSBET01BYnN0cmFjdFZpZXc6OkdldENvbXB1dGVkU3R5bGU6IHsKICAg
ICAgICAgRWxlbWVudEltcGwgKmFyZzAgPSB0b0VsZW1lbnQoYXJnc1swXSk7CkBAIC04MSw3ICs4
MSw3IEBAIFZhbHVlIERPTUFic3RyYWN0Vmlld0Z1bmM6OmNhbGwoRXhlY1N0YXQKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYXJnMC0+Z2V0RG9jdW1l
bnQoKSkKICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7Ci0gICAgICAgICAgcmV0dXJuIGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYywg
YWJzdHJhY3RWaWV3LmdldENvbXB1dGVkU3R5bGUoYXJnMCwgYXJnc1sxXS50b1N0cmluZyhleGVj
KS5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpKSk7CisgICAgICAgICAgcmV0dXJuIGdldERPTUNT
U1N0eWxlRGVjbGFyYXRpb24oZXhlYywgYWJzdHJhY3RWaWV3LmdldENvbXB1dGVkU3R5bGUoYXJn
MCwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSkpOwog
ICAgICAgICB9CiAgICAgICB9CiAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmll
d3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tq
c192aWV3cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtcCAtdSAtcjEuNyBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmll
d3MuaAk3IEF1ZyAyMDA1IDA2OjE3OjQ2IC0wMDAwCTEuNworKysgV2ViQ29yZS9raHRtbC9lY21h
L2tqc192aWV3cy5oCTggQXVnIDIwMDUgMDE6MDE6MjUgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgRE9NQWJzdHJhY3RWaWV3KEV4ZWNTdGF0ZSAqLCBET006OkFi
c3RyYWN0Vmlld0ltcGwgKmF2KSA6IG1faW1wbChhdikgeyB9CiAgICAgfkRPTUFic3RyYWN0Vmll
dygpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKTsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbik7CiAgICAgLy8gbm8gcHV0IC0gYWxs
IHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5k
ZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE2OQpkaWZmIC1wIC11IC1yMS4xNjkgV2ViQ29yZS9raHRtbC9lY21hL2tq
c193aW5kb3cuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJNyBBdWcg
MjAwNSAwNjoxNzo0NiAtMDAwMAkxLjE2OQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCTggQXVnIDIwMDUgMDE6MDE6MjcgLTAwMDAKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBIaXN0b3J5KEV4ZWNTdGF0ZSAqZXhlYywgS0hUTUxQYXJ0ICpwKQog
ICAgICAgOiBPYmplY3RJbXAoZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKSksIHBhcnQocCkgeyB9CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CiAgICAgZW51bSB7IEJhY2ssIEZvcndhcmQsIEdvLCBMZW5ndGggfTsKQEAgLTExOSwxMiArMTE5
LDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEZyYW1lQXJyYXkoRXhlY1N0YXRlICpleGVjLCBL
SFRNTFBhcnQgKnApCiAgICAgICA6IE9iamVjdEltcChleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgcGFydChwKSB7IH0KICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbik7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pOwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUg
KmV4ZWMpIGNvbnN0OwogICAgIGVudW0geyBMZW5ndGgsIExvY2F0aW9uIH07CiAgIHByaXZhdGU6
Ci0gICAgc3RhdGljIFZhbHVlIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIFZhbHVlIG5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgVmFsdWVJbXAgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0xMzcsNyAr
MTM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBLb25xdWVyb3JGdW5jKGNv
bnN0IEtvbnF1ZXJvciogaywgY29uc3QgY2hhciogbmFtZSkKICAgICAgIDogRE9NRnVuY3Rpb24o
KSwga29ucXVlcm9yKGspLCBtX25hbWUobmFtZSkgeyB9Ci0gICAgdmlydHVhbCBWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAg
ICB2aXJ0dWFsIFZhbHVlSW1wICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKICAgcHJpdmF0ZToKICAgICBjb25z
dCBLb25xdWVyb3IqIGtvbnF1ZXJvcjsKQEAgLTE3OCw3ICsxNzgsNyBAQCBib29sIFNjcmVlbjo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0CiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8
U2NyZWVuLCBPYmplY3RJbXA+KGV4ZWMsICZTY3JlZW5UYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAotVmFsdWUgU2NyZWVuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNjcmVlbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgS1dpbk1vZHVsZSBpbmZv
OwogICBRV2lkZ2V0ICp0aGlzV2lkZ2V0ID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+
cGFydCgpLT52aWV3KCk7CkBAIC0zNjIsMjUgKzM2MiwyNSBAQCBLSlM6OkludGVycHJldGVyICpX
aW5kb3c6OmludGVycHJldGVyKCkgCiAKIFdpbmRvdyAqV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhL
SFRNTFBhcnQgKnApCiB7Ci0gIE9iamVjdCBvYmogPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCByZXRy
aWV2ZSggcCApICk7CisgIE9iamVjdEltcCAqb2JqID0gcmV0cmlldmUocCktPmdldE9iamVjdCgp
OwogI2lmbmRlZiBOREVCVUcKICAgLy8gb2JqIHNob3VsZCBuZXZlciBiZSBudWxsLCBleGNlcHQg
d2hlbiBqYXZhc2NyaXB0IGhhcyBiZWVuIGRpc2FibGVkIGluIHRoYXQgcGFydC4KICAgaWYgKCBw
ICYmIHAtPmpTY3JpcHRFbmFibGVkKCkgKQogICB7Ci0gICAgYXNzZXJ0KCAhb2JqLmlzTnVsbCgp
ICk7CisgICAgYXNzZXJ0KG9iaik7CiAjaWZuZGVmIFFXUwotICAgIC8vYXNzZXJ0KCBkeW5hbWlj
X2Nhc3Q8S0pTOjpXaW5kb3cqPihvYmouaW1wKCkpICk7IC8vIHR5cGUgY2hlY2tpbmcKKyAgICAv
L2Fzc2VydCggZHluYW1pY19jYXN0PEtKUzo6V2luZG93Kj4ob2JqKSApOyAvLyB0eXBlIGNoZWNr
aW5nCiAjZW5kaWYKICAgfQogI2VuZGlmCi0gIGlmICggb2JqLmlzTnVsbCgpICkgLy8gSlMgZGlz
YWJsZWQKKyAgaWYgKCFvYmopIC8vIEpTIGRpc2FibGVkCiAgICAgcmV0dXJuIDA7Ci0gIHJldHVy
biBzdGF0aWNfY2FzdDxLSlM6OldpbmRvdyo+KG9iai5pbXAoKSk7CisgIHJldHVybiBzdGF0aWNf
Y2FzdDxXaW5kb3cqPihvYmopOwogfQogCiBXaW5kb3cgKldpbmRvdzo6cmV0cmlldmVBY3RpdmUo
RXhlY1N0YXRlICpleGVjKQogewotICBWYWx1ZUltcCAqaW1wID0gZXhlYy0+ZHluYW1pY0ludGVy
cHJldGVyKCktPmdsb2JhbE9iamVjdCgpLmltcCgpOworICBWYWx1ZUltcCAqaW1wID0gZXhlYy0+
ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwogICBhc3NlcnQoIGltcCApOwog
I2lmbmRlZiBRV1MKICAgLy9hc3NlcnQoIGR5bmFtaWNfY2FzdDxLSlM6OldpbmRvdyo+KGltcCkg
KTsKQEAgLTM4OCwxMyArMzg4LDEzIEBAIFdpbmRvdyAqV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShF
eGVjU3RhdGUKICAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6V2luZG93Kj4oaW1wKTsKIH0KIAot
VmFsdWUgV2luZG93OjpyZXRyaWV2ZShLSFRNTFBhcnQgKnApCitWYWx1ZUltcCAqV2luZG93Ojpy
ZXRyaWV2ZShLSFRNTFBhcnQgKnApCiB7CiAgIGFzc2VydChwKTsKICAgS0pTUHJveHkgKnByb3h5
ID0gS0pTUHJveHk6OnByb3h5KCBwICk7CiAgIGlmIChwcm94eSkgewogI2lmZGVmIEtKU19WRVJC
T1NFCi0gICAga2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93OjpyZXRyaWV2ZSBwYXJ0PSIgPDwgcCA8
PCAiIGludGVycHJldGVyPSIgPDwgcHJveHktPmludGVycHJldGVyKCkgPDwgIiB3aW5kb3c9IiA8
PCBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCkgPDwgZW5kbDsKKyAg
ICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6OnJldHJpZXZlIHBhcnQ9IiA8PCBwIDw8ICIgaW50
ZXJwcmV0ZXI9IiA8PCBwcm94eS0+aW50ZXJwcmV0ZXIoKSA8PCAiIHdpbmRvdz0iIDw8IHByb3h5
LT5pbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSA8PCBlbmRsOwogI2VuZGlmCiAgICAgcmV0
dXJuIHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKTsgLy8gdGhlIEdsb2JhbCBv
YmplY3QgaXMgdGhlICJ3aW5kb3ciCiAgIH0gZWxzZQpAQCAtNTIxLDcgKzUyMSw3IEBAIHN0YXRp
YyBRTWFwPFFTdHJpbmcsIFFTdHJpbmc+IHBhcnNlRmVhdHUKIHsKICAgICBRTWFwPFFTdHJpbmcs
IFFTdHJpbmc+IG1hcDsKIAotICAgIFFTdHJpbmdMaXN0IGZlYXR1cmVzID0gUVN0cmluZ0xpc3Q6
OnNwbGl0KCc7JywgZmVhdHVyZXNBcmctPmRpc3BhdGNoVG9TdHJpbmcoZXhlYykucXN0cmluZygp
KTsKKyAgICBRU3RyaW5nTGlzdCBmZWF0dXJlcyA9IFFTdHJpbmdMaXN0OjpzcGxpdCgnOycsIGZl
YXR1cmVzQXJnLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogICAgIFFTdHJpbmdMaXN0OjpD
b25zdEl0ZXJhdG9yIGVuZCA9IGZlYXR1cmVzLmVuZCgpOwogICAgIGZvciAoUVN0cmluZ0xpc3Q6
OkNvbnN0SXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgUVN0cmluZyBzID0gKml0OwpAQCAtNjM2LDEwICs2MzYsMTAgQEAgc3RhdGljIGJv
b2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0IAogCiBzdGF0aWMgVmFsdWVJbXAgKnNob3dN
b2RhbERpYWxvZyhFeGVjU3RhdGUgKmV4ZWMsIFdpbmRvdyAqb3BlbmVyV2luZG93LCBjb25zdCBM
aXN0ICZhcmdzKQogewotICAgIFVTdHJpbmcgVVJMID0gYXJnc1swXS50b1N0cmluZyhleGVjKTsK
KyAgICBVU3RyaW5nIFVSTCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogCiAgICAgaWYgKCFj
YW5TaG93TW9kYWxEaWFsb2dOb3cob3BlbmVyV2luZG93KSB8fCAhYWxsb3dQb3BVcChleGVjLCBv
cGVuZXJXaW5kb3cpKQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCkuaW1wKCk7CisgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgICAKICAgICBjb25zdCBRTWFwPFFTdHJpbmcsIFFTdHJp
bmc+IGZlYXR1cmVzID0gcGFyc2VGZWF0dXJlcyhleGVjLCBhcmdzWzJdKTsKIApAQCAtNjg2LDE3
ICs2ODYsMTcgQEAgc3RhdGljIFZhbHVlSW1wICpzaG93TW9kYWxEaWFsb2coRXhlY1N0YQogCiAg
ICAgS0hUTUxQYXJ0ICpkaWFsb2dQYXJ0ID0gY3JlYXRlTmV3V2luZG93KGV4ZWMsIG9wZW5lcldp
bmRvdywgVVJMLnFzdHJpbmcoKSwgIiIsIHdhcmdzLCBhcmdzWzFdKTsKICAgICBpZiAoIWRpYWxv
Z1BhcnQpCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKS5pbXAoKTsKKyAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogCiAgICAgV2luZG93ICpkaWFsb2dXaW5kb3cgPSBXaW5kb3c6OnJldHJp
ZXZlV2luZG93KGRpYWxvZ1BhcnQpOwotICAgIFZhbHVlSW1wICpyZXR1cm5WYWx1ZSA9IFVuZGVm
aW5lZCgpLmltcCgpOworICAgIFZhbHVlSW1wICpyZXR1cm5WYWx1ZSA9IFVuZGVmaW5lZCgpOwog
ICAgIGRpYWxvZ1dpbmRvdy0+c2V0UmV0dXJuVmFsdWVTbG90KCZyZXR1cm5WYWx1ZSk7CiAgICAg
c3RhdGljX2Nhc3Q8S0hUTUxQYXJ0QnJvd3NlckV4dGVuc2lvbiAqPihkaWFsb2dQYXJ0LT5icm93
c2VyRXh0ZW5zaW9uKCkpLT5ydW5Nb2RhbCgpOwogICAgIGRpYWxvZ1dpbmRvdy0+c2V0UmV0dXJu
VmFsdWVTbG90KE5VTEwpOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIAotVmFsdWUgV2lu
ZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKICAgIGFzc2VydCh0b2tlbiA9PSBDbG9zZWQgfHwgbV9wYXJ0KTsKIApA
QCAtNzU1LDExICs3NTUsMTEgQEAgVmFsdWUgV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZQogICAgICAgLy8gdGhlIHNlY3VyaXR5IGNoZWNrIHRoZSBmaXJzdCB0aW1lLCBidXQgbm90
IHN1YnNlcXVlbnQgdGltZXMsIHNlZW1zIHdlaXJkLgogICAgICAgY29uc3RfY2FzdDxXaW5kb3cg
Kj4odGhpcyktPnB1dERpcmVjdCgibmF2aWdhdG9yIiwgbiwgRG9udERlbGV0ZXxSZWFkT25seSk7
CiAgICAgICBjb25zdF9jYXN0PFdpbmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJjbGllbnRJbmZv
cm1hdGlvbiIsIG4sIERvbnREZWxldGV8UmVhZE9ubHkpOwotICAgICAgcmV0dXJuIFZhbHVlKG4p
OworICAgICAgcmV0dXJuIG47CiAgICAgfQogI2lmZGVmIFFfV1NfUVdTCiAgICAgY2FzZSBfS29u
cXVlcm9yOgotICAgICAgcmV0dXJuIFZhbHVlKG5ldyBLb25xdWVyb3IobV9wYXJ0KSk7CisgICAg
ICByZXR1cm4gbmV3IEtvbnF1ZXJvcihtX3BhcnQpOwogI2VuZGlmCiAgICAgY2FzZSBMb2NhdGlv
bmJhcjoKICAgICAgIHJldHVybiBsb2NhdGlvbmJhcihleGVjKTsKQEAgLTc5Myw5ICs3OTMsOSBA
QCBWYWx1ZSBXaW5kb3c6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgICB1cGRhdGVM
YXlvdXQoKTsKICAgICAgIHJldHVybiBOdW1iZXIobV9wYXJ0LT52aWV3KCktPmNvbnRlbnRzWSgp
KTsKICAgICBjYXNlIFBhcmVudDoKLSAgICAgIHJldHVybiBWYWx1ZShyZXRyaWV2ZShtX3BhcnQt
PnBhcmVudFBhcnQoKSA/IG1fcGFydC0+cGFyZW50UGFydCgpIDogKEtIVE1MUGFydCopbV9wYXJ0
KSk7CisgICAgICByZXR1cm4gcmV0cmlldmUobV9wYXJ0LT5wYXJlbnRQYXJ0KCkgPyBtX3BhcnQt
PnBhcmVudFBhcnQoKSA6IChLSFRNTFBhcnQqKW1fcGFydCk7CiAgICAgY2FzZSBQZXJzb25hbGJh
cjoKLSAgICAgIHJldHVybiBWYWx1ZShwZXJzb25hbGJhcihleGVjKSk7CisgICAgICByZXR1cm4g
cGVyc29uYWxiYXIoZXhlYyk7CiAgICAgY2FzZSBTY3JlZW5MZWZ0OgogICAgIGNhc2UgU2NyZWVu
WDogewogICAgICAgaWYgKG1fcGFydC0+dmlldygpKSB7CkBAIC04MzYsMTQgKzgzNiwxNCBAQCBW
YWx1ZSBXaW5kb3c6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgICB1cGRhdGVMYXlv
dXQoKTsKICAgICAgIHJldHVybiBOdW1iZXIobV9wYXJ0LT52aWV3KCktPmNvbnRlbnRzWSgpKTsK
ICAgICBjYXNlIFNjcm9sbGJhcnM6Ci0gICAgICByZXR1cm4gVmFsdWUoc2Nyb2xsYmFycyhleGVj
KSk7CisgICAgICByZXR1cm4gc2Nyb2xsYmFycyhleGVjKTsKICAgICBjYXNlIFN0YXR1c2JhcjoK
LSAgICAgIHJldHVybiBWYWx1ZShzdGF0dXNiYXIoZXhlYykpOworICAgICAgcmV0dXJuIHN0YXR1
c2JhcihleGVjKTsKICAgICBjYXNlIFRvb2xiYXI6Ci0gICAgICByZXR1cm4gVmFsdWUodG9vbGJh
cihleGVjKSk7CisgICAgICByZXR1cm4gdG9vbGJhcihleGVjKTsKICAgICBjYXNlIFNlbGY6CiAg
ICAgY2FzZSBfV2luZG93OgotICAgICAgcmV0dXJuIFZhbHVlKHJldHJpZXZlKG1fcGFydCkpOwor
ICAgICAgcmV0dXJuIHJldHJpZXZlKG1fcGFydCk7CiAgICAgY2FzZSBUb3A6IHsKICAgICAgIEtI
VE1MUGFydCAqcCA9IG1fcGFydDsKICAgICAgIHdoaWxlIChwLT5wYXJlbnRQYXJ0KCkpCkBAIC05
NDgsMTkgKzk0OCwxOSBAQCBWYWx1ZSBXaW5kb3c6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
CiAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFdpbmRvdzo6Y2hpbGRGcmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKldpbmRvdzo6Y2hpbGRGcmFtZUdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICBXaW5kb3cgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxX
aW5kb3cgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIHJldHJpZXZlKHRoaXNPYmotPm1f
cGFydC0+Y2hpbGRGcmFtZU5hbWVkKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpKTsKIH0KIAotVmFs
dWUgV2luZG93OjpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitWYWx1ZUltcCAq
V2luZG93OjpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIFdpbmRvdyAq
dGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1
cm4gcmV0cmlldmUodGhpc09iai0+bV9wYXJ0LT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFzdHJp
bmcoKSkpOwogfQogCi1WYWx1ZSBXaW5kb3c6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitWYWx1ZUltcCAqV2luZG93OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBX
aW5kb3cgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgCkBAIC05NzEsNyArOTcxLDcgQEAgVmFsdWUgV2luZG93OjppbmRleEdldHRlcihFeGVjU3Rh
dGUgKmV4ZQogICByZXR1cm4gcmV0cmlldmUoc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0Kj4oZnJhbWUp
KTsKIH0KIAotVmFsdWUgV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
K1ZhbHVlSW1wICpXaW5kb3c6Om5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICBXaW5kb3cgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4oc2xvdC5zbG90QmFzZSgp
KTsKICAgRG9jdW1lbnRJbXBsICpkb2MgPSB0aGlzT2JqLT5tX3BhcnQtPnhtbERvY0ltcGwoKTsK
QEAgLTEwODIsNyArMTA4Miw3IEBAIGJvb2wgV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXQKICAgcmV0dXJuIE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpCit2b2lkIFdpbmRvdzo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogewogICAvLyBDYWxsZWQg
YnkgYW4gaW50ZXJuYWwgS0pTIGNhbGwgKGUuZy4gSW50ZXJwcmV0ZXJJbXAncyBjb25zdHJ1Y3Rv
cikgPwogICAvLyBJZiB5ZXMsIHNhdmUgdGltZSBhbmQganVtcCBkaXJlY3RseSB0byBPYmplY3RJ
bXAuCkBAIC0xMDk4LDIwICsxMDk4LDE2IEBAIHZvaWQgV2luZG93OjpwdXQoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCAKICAgaWYgKGVudHJ5KQogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUg
KSB7Ci0gICAgY2FzZSBTdGF0dXM6IHsKLSAgICAgIFN0cmluZyBzID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7Ci0gICAgICBtX3BhcnQtPnNldEpTU3RhdHVzQmFyVGV4dChzLnZhbHVlKCkucXN0cmlu
ZygpKTsKKyAgICBjYXNlIFN0YXR1czoKKyAgICAgIG1fcGFydC0+c2V0SlNTdGF0dXNCYXJUZXh0
KHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjYXNlIERlZmF1bHRTdGF0dXM6IHsKLSAgICAgIFN0cmluZyBzID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7Ci0gICAgICBtX3BhcnQtPnNldEpTRGVmYXVsdFN0YXR1c0JhclRleHQocy52YWx1
ZSgpLnFzdHJpbmcoKSk7CisgICAgY2FzZSBEZWZhdWx0U3RhdHVzOgorICAgICAgbV9wYXJ0LT5z
ZXRKU0RlZmF1bHRTdGF0dXNCYXJUZXh0KHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkp
OwogICAgICAgcmV0dXJuOwotICAgIH0KICAgICBjYXNlIF9Mb2NhdGlvbjogewogICAgICAgS0hU
TUxQYXJ0KiBwID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+bV9wYXJ0OwogICAgICAg
aWYgKHApIHsKLSAgICAgICAgUVN0cmluZyBkc3RVcmwgPSBwLT54bWxEb2NJbXBsKCktPmNvbXBs
ZXRlVVJMKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CisgICAgICAgIFFTdHJpbmcg
ZHN0VXJsID0gcC0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTCh2YWx1ZS0+dG9TdHJpbmcoZXhl
YykucXN0cmluZygpKTsKICAgICAgICAgaWYgKCFkc3RVcmwuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiLCBmYWxzZSkgfHwgaXNTYWZlU2NyaXB0KGV4ZWMpKQogICAgICAgICB7CiAgICAgICAgICAg
Ym9vbCB1c2VyR2VzdHVyZSA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMt
PmR5bmFtaWNJbnRlcnByZXRlcigpKS0+d2FzUnVuQnlVc2VyR2VzdHVyZSgpOwpAQCAtMTIzNCw5
ICsxMjMwLDkgQEAgdm9pZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAg
IGNhc2UgTmFtZToKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCiAjaWYgQVBQTEVfQ0hB
TkdFUwotICAgICAgICBtX3BhcnQtPnNldE5hbWUoIHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKSApOworICAgICAgICBtX3BhcnQtPnNldE5hbWUoIHZhbHVlLT50b1N0cmluZyhleGVjKS5x
c3RyaW5nKCkgKTsKICNlbHNlCi0gICAgICAgIG1fcGFydC0+c2V0TmFtZSggdmFsdWUudG9TdHJp
bmcoZXhlYykucXN0cmluZygpLmxvY2FsOEJpdCgpLmRhdGEoKSApOworICAgICAgICBtX3BhcnQt
PnNldE5hbWUoIHZhbHVlLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG9jYWw4Qml0KCkuZGF0
YSgpICk7CiAjZW5kaWYKICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgpAQCAtMTI1OCw3ICsx
MjU0LDcgQEAgaW50IFdpbmRvdzo6aW5zdGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZwogICByZXR1
cm4gd2lucS0+aW5zdGFsbFRpbWVvdXQoaGFuZGxlciwgdCwgc2luZ2xlU2hvdCk7CiB9CiAKLWlu
dCBXaW5kb3c6Omluc3RhbGxUaW1lb3V0KGNvbnN0IFZhbHVlICZmdW5jdGlvbiwgTGlzdCAmYXJn
cywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2ludCBXaW5kb3c6Omluc3RhbGxUaW1lb3V0KFZh
bHVlSW1wICpmdW5jdGlvbiwgTGlzdCAmYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKIHsK
ICAgcmV0dXJuIHdpbnEtPmluc3RhbGxUaW1lb3V0KGZ1bmN0aW9uLCBhcmdzLCB0LCBzaW5nbGVT
aG90KTsKIH0KQEAgLTE0MjYsNyArMTQyMiw3IEBAIGJvb2wgV2luZG93Ojppc1NhZmVTY3JpcHQo
RXhlY1N0YXRlICpleGUKICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdpbmRvdzo6c2V0TGlz
dGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCwgVmFsdWUgZnVuYykKK3ZvaWQgV2lu
ZG93OjpzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4ZWMsIGludCBldmVudElkLCBWYWx1ZUltcCAq
ZnVuYykKIHsKICAgaWYgKCFpc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgcmV0dXJuOwpAQCAtMTQz
Nyw3ICsxNDMzLDcgQEAgdm9pZCBXaW5kb3c6OnNldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYwog
ICBkb2MtPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50SWQsZ2V0SlNFdmVudExpc3Rl
bmVyKGZ1bmMsdHJ1ZSkpOwogfQogCi1WYWx1ZSBXaW5kb3c6OmdldExpc3RlbmVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IGV2ZW50SWQpIGNvbnN0CitWYWx1ZUltcCAqV2luZG93OjpnZXRMaXN0ZW5l
cihFeGVjU3RhdGUgKmV4ZWMsIGludCBldmVudElkKSBjb25zdAogewogICBpZiAoIWlzU2FmZVNj
cmlwdChleGVjKSkKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xNDUyLDI3ICsxNDQ4LDI1
IEBAIFZhbHVlIFdpbmRvdzo6Z2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGUKICAgICByZXR1cm4g
TnVsbCgpOwogfQogCi1KU0V2ZW50TGlzdGVuZXIgKldpbmRvdzo6Z2V0SlNFdmVudExpc3RlbmVy
KGNvbnN0IFZhbHVlJiB2YWwsIGJvb2wgaHRtbCkKK0pTRXZlbnRMaXN0ZW5lciAqV2luZG93Ojpn
ZXRKU0V2ZW50TGlzdGVuZXIoVmFsdWVJbXAgKnZhbCwgYm9vbCBodG1sKQogewotICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIHNvIGhvdCB0aGF0IGl0J3Mgd29ydGggY29kaW5nIGl0IGRpcmVjdGx5IHdp
dGggaW1wcy4KLSAgaWYgKHZhbC50eXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgaWYgKCF2YWwtPmlz
T2JqZWN0KCkpCiAgICAgcmV0dXJuIDA7Ci0gIE9iamVjdEltcCAqbGlzdGVuZXJPYmplY3QgPSBz
dGF0aWNfY2FzdDxPYmplY3RJbXAgKj4odmFsLmltcCgpKTsKKyAgT2JqZWN0SW1wICpsaXN0ZW5l
ck9iamVjdCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2YWwpOwogCiAgIEpTRXZlbnRMaXN0
ZW5lciAqZXhpc3RpbmdMaXN0ZW5lciA9IGpzRXZlbnRMaXN0ZW5lcnNbbGlzdGVuZXJPYmplY3Rd
OwogICBpZiAoZXhpc3RpbmdMaXN0ZW5lcikKICAgICByZXR1cm4gZXhpc3RpbmdMaXN0ZW5lcjsK
IAogICAvLyBOb3RlIHRoYXQgdGhlIEpTRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0
IHRvIG91ciBqc0V2ZW50TGlzdGVuZXJzIGxpc3QKLSAgcmV0dXJuIG5ldyBKU0V2ZW50TGlzdGVu
ZXIoT2JqZWN0KGxpc3RlbmVyT2JqZWN0KSwgT2JqZWN0KHRoaXMpLCBodG1sKTsKKyAgcmV0dXJu
IG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXJPYmplY3QsIHRoaXMsIGh0bWwpOwogfQogCi1K
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciAqV2luZG93OjpnZXRKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcihjb25zdCBWYWx1ZSYgdmFsLCBib29sIGh0bWwpCitKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciAqV2luZG93OjpnZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihWYWx1ZUltcCAq
dmFsLCBib29sIGh0bWwpCiB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gaXMgc28gaG90IHRoYXQgaXQn
cyB3b3J0aCBjb2RpbmcgaXQgZGlyZWN0bHkgd2l0aCBpbXBzLgotICBpZiAodmFsLnR5cGUoKSAh
PSBPYmplY3RUeXBlKQorICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKICAgICByZXR1cm4gMDsKLSAg
T2JqZWN0SW1wICpsaXN0ZW5lck9iamVjdCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2YWwu
aW1wKCkpOworICBPYmplY3RJbXAgKmxpc3RlbmVyT2JqZWN0ID0gc3RhdGljX2Nhc3Q8T2JqZWN0
SW1wICo+KHZhbCk7CiAKICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgKmV4aXN0aW5nTGlz
dGVuZXIgPSBqc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnNbbGlzdGVuZXJPYmplY3RdOwogICBp
ZiAoZXhpc3RpbmdMaXN0ZW5lcikKQEAgLTE0ODAsMTIgKzE0NzQsMTIgQEAgSlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIgKldpbmRvdzo6Z2V0SgogCiAgIC8vIE5vdGUgdGhhdCB0aGUgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIgY29uc3RydWN0b3IgYWRkcyBpdCB0bwogICAvLyBvdXIganNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzIGxpc3QKLSAgcmV0dXJuIG5ldyBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihPYmplY3QobGlzdGVuZXJPYmplY3QpLCBPYmplY3QodGhpcyksIGh0bWwp
OworICByZXR1cm4gbmV3IEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGxpc3RlbmVyT2JqZWN0
LCB0aGlzLCBodG1sKTsKIH0KIAogSlNMYXp5RXZlbnRMaXN0ZW5lciAqV2luZG93OjpnZXRKU0xh
enlFdmVudExpc3RlbmVyKGNvbnN0IFFTdHJpbmcmIGNvZGUsIERPTTo6Tm9kZUltcGwgKm5vZGUs
IGludCBsaW5lTnVtYmVyKQogewotICByZXR1cm4gbmV3IEpTTGF6eUV2ZW50TGlzdGVuZXIoY29k
ZSwgT2JqZWN0KHRoaXMpLCBub2RlLCBsaW5lTnVtYmVyKTsKKyAgcmV0dXJuIG5ldyBKU0xhenlF
dmVudExpc3RlbmVyKGNvZGUsIHRoaXMsIG5vZGUsIGxpbmVOdW1iZXIpOwogfQogCiB2b2lkIFdp
bmRvdzo6Y2xlYXIoIEV4ZWNTdGF0ZSAqZXhlYyApCkBAIC0xNTEzLDE0ICsxNTA3LDE0IEBAIHZv
aWQgV2luZG93OjpzZXRDdXJyZW50RXZlbnQoRXZlbnRJbXBsICoKICAgLy9rZERlYnVnKDYwNzAp
IDw8ICJXaW5kb3cgIiA8PCB0aGlzIDw8ICIgKHBhcnQ9IiA8PCBtX3BhcnQgPDwgIik6OnNldEN1
cnJlbnRFdmVudCBtX2V2dD0iIDw8IGV2dCA8PCBlbmRsOwogfQogCi1WYWx1ZSBXaW5kb3dGdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotICBpZiAoIXRoaXNPYmou
aW5oZXJpdHMoJldpbmRvdzo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJldpbmRvdzo6aW5m
bykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3Ip
OwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVybiBlcnI7CiAgIH0KLSAg
V2luZG93ICp3aW5kb3cgPSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4odGhpc09iai5pbXAoKSk7Cisg
IFdpbmRvdyAqd2luZG93ID0gc3RhdGljX2Nhc3Q8V2luZG93ICo+KHRoaXNPYmopOwogICBRU3Ry
aW5nIHN0ciwgc3RyMjsKIAogICBLSFRNTFBhcnQgKnBhcnQgPSB3aW5kb3ctPm1fcGFydDsKQEAg
LTE1MjgsOCArMTUyMiw4IEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCAKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAKICAgS0hUTUxWaWV3ICp3aWRnZXQgPSBwYXJ0
LT52aWV3KCk7Ci0gIFZhbHVlIHYgPSBhcmdzWzBdOwotICBVU3RyaW5nIHMgPSB2LnRvU3RyaW5n
KGV4ZWMpOworICBWYWx1ZUltcCAqdiA9IGFyZ3NbMF07CisgIFVTdHJpbmcgcyA9IHYtPnRvU3Ry
aW5nKGV4ZWMpOwogICBzdHIgPSBzLnFzdHJpbmcoKTsKIAogICBzd2l0Y2ggKGlkKSB7CkBAIC0x
NTU2LDEzICsxNTUwLDEzIEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCAKICAgICAgIHBhcnQtPnhtbERvY0ltcGwoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgYm9v
bCBvazsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgb2sgPSBLV1EocGFydCktPnJ1bkphdmFTY3Jp
cHRQcm9tcHQoc3RyLCBhcmdzLnNpemUoKSA+PSAyID8gYXJnc1sxXS50b1N0cmluZyhleGVjKS5x
c3RyaW5nKCkgOiBRU3RyaW5nOjpudWxsLCBzdHIyKTsKKyAgICBvayA9IEtXUShwYXJ0KS0+cnVu
SmF2YVNjcmlwdFByb21wdChzdHIsIGFyZ3Muc2l6ZSgpID49IDIgPyBhcmdzWzFdLT50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkgOiBRU3RyaW5nOjpudWxsLCBzdHIyKTsKICNlbHNlCiAgICAgaWYg
KGFyZ3Muc2l6ZSgpID49IDIpCiAgICAgICBzdHIyID0gUUlucHV0RGlhbG9nOjpnZXRUZXh0KGkx
OG4oIktvbnF1ZXJvcjogUHJvbXB0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFTdHlsZVNoZWV0Ojpjb252ZXJ0RnJvbVBsYWluVGV4dChzdHIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBRTGluZUVkaXQ6Ok5vcm1hbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCksICZv
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKSwgJm9rKTsKICAgICBlbHNlCiAgICAgICBzdHIyID0gUUlucHV0RGlh
bG9nOjpnZXRUZXh0KGkxOG4oIktvbnF1ZXJvcjogUHJvbXB0IiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFFTdHlsZVNoZWV0Ojpjb252ZXJ0RnJvbVBsYWluVGV4dChzdHIp
LApAQCAtMTYwMSwyMSArMTU5NSwxOSBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgCiAjZWxzZQogICAgICAgewogICAgICAgICBwb2xpY3kgPSAwOwotCUxPRyhQb3B1
cEJsb2NraW5nLCAiQWxsb3dlZCBKYXZhU2NyaXB0IHdpbmRvdyBvcGVuIG9mICVzIiwgYXJnc1sw
XS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkuYXNjaWkoKSk7CisJTE9HKFBvcHVwQmxvY2tpbmcs
ICJBbGxvd2VkIEphdmFTY3JpcHQgd2luZG93IG9wZW4gb2YgJXMiLCBhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkuYXNjaWkoKSk7CiAgICAgICB9IGVsc2UgewotCUxPRyhQb3B1cEJs
b2NraW5nLCAiQmxvY2tlZCBKYXZhU2NyaXB0IHdpbmRvdyBvcGVuIG9mICVzIiwgYXJnc1swXS50
b1N0cmluZyhleGVjKS5xc3RyaW5nKCkuYXNjaWkoKSk7CisJTE9HKFBvcHVwQmxvY2tpbmcsICJC
bG9ja2VkIEphdmFTY3JpcHQgd2luZG93IG9wZW4gb2YgJXMiLCBhcmdzWzBdLT50b1N0cmluZyhl
eGVjKS5xc3RyaW5nKCkuYXNjaWkoKSk7CiAgICAgICB9CiAjZW5kaWYKICAgICB9CiAKLSAgICBR
U3RyaW5nIGZyYW1lTmFtZSA9ICFhcmdzWzFdLmlzTnVsbCgpICYmIGFyZ3NbMV0udHlwZSgpICE9
IFVuZGVmaW5lZFR5cGUgPwotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXS50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogUVN0cmluZygiX2Js
YW5rIik7CisgICAgUVN0cmluZyBmcmFtZU5hbWUgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9yTnVs
bCgpID8gUVN0cmluZygiX2JsYW5rIikgOiBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5n
KCk7CiAKICAgICBpZiAoIHBvbGljeSAhPSAwICYmICEocGFydC0+ZmluZEZyYW1lKGZyYW1lTmFt
ZSkgfHwgZnJhbWVOYW1lID09ICJfdG9wIiB8fCBmcmFtZU5hbWUgPT0gIl9wYXJlbnQiIHx8IGZy
YW1lTmFtZSA9PSAiX3NlbGYiKSkgewogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICBpZiAodi50eXBlKCkgPT0gVW5kZWZpbmVkVHlwZSkKKyAgICAgIGlmICh2
LT5pc1VuZGVmaW5lZCgpKQogICAgICAgICBzdHIgPSBRU3RyaW5nKCk7CiAKICAgICAgIEtQYXJ0
czo6V2luZG93QXJncyB3aW5hcmdzOwpAQCAtMTYyMyw4ICsxNjE1LDggQEAgVmFsdWUgV2luZG93
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogICAgICAgLy8gc2NhbiBmZWF0dXJlIGFyZ3Vt
ZW50CiAgICAgICB2ID0gYXJnc1syXTsKICAgICAgIFFTdHJpbmcgZmVhdHVyZXM7Ci0gICAgICBp
ZiAoIXYuaXNOdWxsKCkgJiYgdi50eXBlKCkgIT0gVW5kZWZpbmVkVHlwZSAmJiB2LnRvU3RyaW5n
KGV4ZWMpLnNpemUoKSA+IDApIHsKLSAgICAgICAgZmVhdHVyZXMgPSB2LnRvU3RyaW5nKGV4ZWMp
LnFzdHJpbmcoKTsKKyAgICAgIGlmICghdi0+aXNVbmRlZmluZWRPck51bGwoKSAmJiB2LT50b1N0
cmluZyhleGVjKS5zaXplKCkgPiAwKSB7CisgICAgICAgIGZlYXR1cmVzID0gdi0+dG9TdHJpbmco
ZXhlYykucXN0cmluZygpOwogICAgICAgICAvLyBzcGVjaWZ5aW5nIHdpbmRvdyBwYXJhbXMgbWVh
bnMgZmFsc2UgZGVmYXVsdHMKICAgICAgICAgd2luYXJncy5tZW51QmFyVmlzaWJsZSA9IGZhbHNl
OwogICAgICAgICB3aW5hcmdzLnRvb2xCYXJzVmlzaWJsZSA9IGZhbHNlOwpAQCAtMTgyNywyMCAr
MTgxOSwyMCBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgIGNh
c2UgV2luZG93OjpTY3JvbGxCeToKICAgICB3aW5kb3ctPnVwZGF0ZUxheW91dCgpOwogICAgIGlm
KGFyZ3Muc2l6ZSgpID49IDIgJiYgd2lkZ2V0KQotICAgICAgd2lkZ2V0LT5zY3JvbGxCeShhcmdz
WzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7CisgICAgICB3aWRnZXQt
PnNjcm9sbEJ5KGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgY2FzZSBXaW5kb3c6OlNjcm9sbDoKICAgY2Fz
ZSBXaW5kb3c6OlNjcm9sbFRvOgogICAgIHdpbmRvdy0+dXBkYXRlTGF5b3V0KCk7CiAgICAgaWYo
YXJncy5zaXplKCkgPj0gMiAmJiB3aWRnZXQpCi0gICAgICB3aWRnZXQtPnNldENvbnRlbnRzUG9z
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgIHdp
ZGdldC0+c2V0Q29udGVudHNQb3MoYXJnc1swXS0+dG9JbnQzMihleGVjKSwgYXJnc1sxXS0+dG9J
bnQzMihleGVjKSk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICBjYXNlIFdpbmRvdzo6TW92
ZUJ5OgogICAgIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgd2lkZ2V0KQogICAgIHsKICAgICAgIFFX
aWRnZXQgKiB0bCA9IHdpZGdldC0+dG9wTGV2ZWxXaWRnZXQoKTsKIAkgIFFSZWN0IHNnID0gUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3Rv
cCgpLT5zY3JlZW5OdW1iZXIodGwpKTsKLSAgICAgIFFQb2ludCBkZXN0ID0gdGwtPnBvcygpICsg
UVBvaW50KCBhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSApOwor
ICAgICAgUVBvaW50IGRlc3QgPSB0bC0+cG9zKCkgKyBRUG9pbnQoIGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykgKTsKICAgICAgIC8vIFNlY3VyaXR5IGNoZWNr
ICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJzYWxCcm93c2VyV3JpdGUgdG8gZGlzYWJsZSB0
aGlzIGNoZWNrLi4uKQogICAgICAgaWYgKCBkZXN0LngoKSA+PSBzZy54KCkgJiYgZGVzdC55KCkg
Pj0gc2cueCgpICYmCiAgICAgICAgICAgIGRlc3QueCgpK3RsLT53aWR0aCgpIDw9IHNnLndpZHRo
KCkrc2cueCgpICYmCkBAIC0xODUzLDcgKzE4NDUsNyBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgewogICAgICAgUVdpZGdldCAqIHRsID0gd2lkZ2V0LT50
b3BMZXZlbFdpZGdldCgpOwogCSAgUVJlY3Qgc2cgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+
c2NyZWVuR2VvbWV0cnkoUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbk51bWJlcih0bCkp
OwotICAgICAgUVBvaW50IGRlc3QoIGFyZ3NbMF0udG9JbnQzMihleGVjKStzZy54KCksIGFyZ3Nb
MV0udG9JbnQzMihleGVjKStzZy55KCkgKTsKKyAgICAgIFFQb2ludCBkZXN0KCBhcmdzWzBdLT50
b0ludDMyKGV4ZWMpK3NnLngoKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKStzZy55KCkgKTsKICAg
ICAgIC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJzYWxCcm93
c2VyV3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgICAgaWYgKCBkZXN0LngoKSA+
PSBzZy54KCkgJiYgZGVzdC55KCkgPj0gc2cueSgpICYmCiAgICAgICAgICAgIGRlc3QueCgpK3Rs
LT53aWR0aCgpIDw9IHNnLndpZHRoKCkrc2cueCgpICYmCkBAIC0xODY1LDcgKzE4NTcsNyBAQCBW
YWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgaWYoYXJncy5zaXpl
KCkgPj0gMiAmJiB3aWRnZXQpCiAgICAgewogICAgICAgUVdpZGdldCAqIHRsID0gd2lkZ2V0LT50
b3BMZXZlbFdpZGdldCgpOwotICAgICAgUVNpemUgZGVzdCA9IHRsLT5zaXplKCkgKyBRU2l6ZSgg
YXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykgKTsKKyAgICAgIFFT
aXplIGRlc3QgPSB0bC0+c2l6ZSgpICsgUVNpemUoIGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGFy
Z3NbMV0tPnRvSW50MzIoZXhlYykgKTsKIAkgIFFSZWN0IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNr
dG9wKCktPnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1i
ZXIodGwpKTsKICAgICAgIC8vIFNlY3VyaXR5IGNoZWNrOiB3aXRoaW4gZGVza3RvcCBsaW1pdHMg
YW5kIGJpZ2dlciB0aGFuIDEwMHgxMDAgKHBlciBzcGVjKQogICAgICAgaWYgKCB0bC0+eCgpK2Rl
c3Qud2lkdGgoKSA8PSBzZy54KCkrc2cud2lkdGgoKSAmJgpAQCAtMTg4Myw3ICsxODc1LDcgQEAg
VmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogICAgIGlmKGFyZ3Muc2l6
ZSgpID49IDIgJiYgd2lkZ2V0KQogICAgIHsKICAgICAgIFFXaWRnZXQgKiB0bCA9IHdpZGdldC0+
dG9wTGV2ZWxXaWRnZXQoKTsKLSAgICAgIFFTaXplIGRlc3QgPSBRU2l6ZSggYXJnc1swXS50b0lu
dDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykgKTsKKyAgICAgIFFTaXplIGRlc3QgPSBR
U2l6ZSggYXJnc1swXS0+dG9JbnQzMihleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSApOwog
CSAgUVJlY3Qgc2cgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuR2VvbWV0cnkoUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbk51bWJlcih0bCkpOwogICAgICAgLy8gU2VjdXJp
dHkgY2hlY2s6IHdpdGhpbiBkZXNrdG9wIGxpbWl0cyBhbmQgYmlnZ2VyIHRoYW4gMTAweDEwMCAo
cGVyIHNwZWMpCiAgICAgICBpZiAoIHRsLT54KCkrZGVzdC53aWR0aCgpIDw9IHNnLngoKStzZy53
aWR0aCgpICYmCkBAIC0xOTAwLDE0ICsxODkyLDE0IEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCAKICAgY2FzZSBXaW5kb3c6OlNldFRpbWVvdXQ6CiAgICAgaWYgKCF3
aW5kb3ctPmlzU2FmZVNjcmlwdChleGVjKSkKICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgIGlmIChhcmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKFN0cmluZ1R5cGUpKSB7Ci0gICAgICBp
bnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKyAgICBpZiAoYXJncy5zaXplKCkgPj0gMiAm
JiB2LT5pc1N0cmluZygpKSB7CisgICAgICBpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7
CiAgICAgICBpbnQgciA9IChjb25zdF9jYXN0PFdpbmRvdyo+KHdpbmRvdykpLT5pbnN0YWxsVGlt
ZW91dChzLCBpLCB0cnVlIC8qc2luZ2xlIHNob3QqLyk7CiAgICAgICByZXR1cm4gTnVtYmVyKHIp
OwogICAgIH0KLSAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKE9iamVjdFR5
cGUpICYmIE9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1wbGVtZW50c0NhbGwoKSkgewotICAgICAg
VmFsdWUgZnVuYyA9IGFyZ3NbMF07Ci0gICAgICBpbnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVj
KTsKKyAgICBlbHNlIGlmIChhcmdzLnNpemUoKSA+PSAyICYmIHYtPmlzT2JqZWN0KCkgJiYgc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICBWYWx1
ZUltcCAqZnVuYyA9IGFyZ3NbMF07CisgICAgICBpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhl
Yyk7CiAKICAgICAgIC8vIEFsbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIHNlY29uZCBzaG91bGQgZ28g
dG8gdGhlIGZ1bmN0aW9uCiAgICAgICAvLyBGSVhNRTogY291bGQgYmUgbW9yZSBlZmZpY2llbnQK
QEAgLTE5MjEsMTUgKzE5MTMsMTQgQEAgVmFsdWUgV2luZG93RnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIAogICBjYXNlIFdpbmRvdzo6U2V0SW50ZXJ2YWw6CiAgICAgaWYgKCF3aW5kb3ctPmlz
U2FmZVNjcmlwdChleGVjKSkKICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgIGlmIChh
cmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKFN0cmluZ1R5cGUpKSB7Ci0gICAgICBpbnQgaSA9IGFy
Z3NbMV0udG9JbnQzMihleGVjKTsKKyAgICBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc1N0
cmluZygpKSB7CisgICAgICBpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAgICAgICBp
bnQgciA9IChjb25zdF9jYXN0PFdpbmRvdyo+KHdpbmRvdykpLT5pbnN0YWxsVGltZW91dChzLCBp
LCBmYWxzZSk7CiAgICAgICByZXR1cm4gTnVtYmVyKHIpOwogICAgIH0KLSAgICBlbHNlIGlmIChh
cmdzLnNpemUoKSA+PSAyICYmICFPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmlzTnVsbCgpICYmCi0J
ICAgICBPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmltcGxlbWVudHNDYWxsKCkpIHsKLSAgICAgIFZh
bHVlIGZ1bmMgPSBhcmdzWzBdOwotICAgICAgaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7
CisgICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc09iamVjdCgpICYmIHN0YXRp
Y19jYXN0PE9iamVjdEltcCAqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkgeworICAgICAgVmFsdWVJ
bXAgKmZ1bmMgPSBhcmdzWzBdOworICAgICAgaW50IGkgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMp
OwogCiAgICAgICAvLyBBbGwgYXJndW1lbnRzIGFmdGVyIHRoZSBzZWNvbmQgc2hvdWxkIGdvIHRv
IHRoZSBmdW5jdGlvbgogICAgICAgLy8gRklYTUU6IGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50CkBA
IC0xOTQ0LDcgKzE5MzUsNyBAQCBWYWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgCiAgIGNhc2UgV2luZG93OjpDbGVhckludGVydmFsOgogICAgIGlmICghd2luZG93LT5pc1Nh
ZmVTY3JpcHQoZXhlYykpCiAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAoY29uc3Rf
Y2FzdDxXaW5kb3cqPih3aW5kb3cpKS0+Y2xlYXJUaW1lb3V0KHYudG9JbnQzMihleGVjKSk7Cisg
ICAgKGNvbnN0X2Nhc3Q8V2luZG93Kj4od2luZG93KSktPmNsZWFyVGltZW91dCh2LT50b0ludDMy
KGV4ZWMpKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgIGNhc2UgV2luZG93OjpGb2N1czoK
ICAgICBpZiAod2lkZ2V0KQpAQCAtMTk1Myw3ICsxOTQ0LDcgQEAgVmFsdWUgV2luZG93RnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIAogICBjYXNlIFdpbmRvdzo6R2V0U2VsZWN0aW9uOgogICAg
IGlmICghd2luZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICByZXR1cm4gVmFsdWUod2luZG93LT5zZWxlY3Rpb24oKSk7CisgICAgcmV0dXJu
IHdpbmRvdy0+c2VsZWN0aW9uKCk7CiAgIGNhc2UgV2luZG93OjpCbHVyOgogI2lmIEFQUExFX0NI
QU5HRVMKICAgICBLV1EocGFydCktPnVuZm9jdXNXaW5kb3coKTsKQEAgLTE5NzcsNyArMTk2OCw3
IEBAIFZhbHVlIFdpbmRvd0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCAKICAgICAgIC8vIFRv
IGNvbmZvcm0gdG8gdGhlIFNQRUMsIHdlIG9ubHkgYXNrIGlmIHRoZSB3aW5kb3cKICAgICAgIC8v
IGhhcyBtb3JlIHRoYW4gb25lIGVudHJ5IGluIHRoZSBoaXN0b3J5IChOUyBkb2VzIHRoYXQgdG9v
KS4KICAgICAgIEhpc3RvcnkgaGlzdG9yeShleGVjLHBhcnQpOwotICAgICAgaWYgKCBoaXN0b3J5
LmdldCggZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lICkudG9JbnQzMihleGVjKSA8PSAxCisgICAg
ICBpZiAoIGhpc3RvcnkuZ2V0KCBleGVjLCBsZW5ndGhQcm9wZXJ0eU5hbWUgKS0+dG9JbnQzMihl
eGVjKSA8PSAxCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgICAvLyBGSVhNRTogSG93IGFy
ZSB3ZSBnb2luZyB0byBoYW5kbGUgdGhpcz8KICNlbHNlCkBAIC0yMDA2LDcgKzE5OTcsNyBAQCBW
YWx1ZSBXaW5kb3dGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgICAgIGlmIChsaXN0
ZW5lcikgewogCSAgICBEb2N1bWVudEltcGwqIGRvY2ltcGwgPSBwYXJ0LT54bWxEb2NJbXBsKCk7
CiAgICAgICAgICAgICBpZiAoZG9jaW1wbCkKLSAgICAgICAgICAgICAgICBkb2NpbXBsLT5hZGRX
aW5kb3dFdmVudExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjp0eXBlVG9JZChhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpLnN0cmluZygpKSxsaXN0ZW5lcixhcmdzWzJdLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgICAgICAgICAgICAgZG9jaW1wbC0+YWRkV2luZG93RXZlbnRMaXN0ZW5lcihET006OkV2ZW50
SW1wbDo6dHlwZVRvSWQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuc3RyaW5nKCkpLGxpc3RlbmVy
LGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogICAgIH0KQEAgLTIwMTcsNyArMjAwOCw3IEBAIFZhbHVlIFdpbmRvd0Z1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCAKICAgICAgICAgaWYgKGxpc3RlbmVyKSB7CiAJICAgIERv
Y3VtZW50SW1wbCogZG9jaW1wbCA9IHBhcnQtPnhtbERvY0ltcGwoKTsKICAgICAgICAgICAgIGlm
IChkb2NpbXBsKQotICAgICAgICAgICAgICAgIGRvY2ltcGwtPnJlbW92ZVdpbmRvd0V2ZW50TGlz
dGVuZXIoRE9NOjpFdmVudEltcGw6OnR5cGVUb0lkKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykuc3Ry
aW5nKCkpLGxpc3RlbmVyLGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAgICAgICAg
ICBkb2NpbXBsLT5yZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKERPTTo6RXZlbnRJbXBsOjp0eXBl
VG9JZChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmcoKSksbGlzdGVuZXIsYXJnc1syXS0+
dG9Cb29sZWFuKGV4ZWMpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiAgICAgfQpAQCAtMjAzNyw3ICsyMDI4LDcgQEAgdm9pZCBXaW5kb3c6OnVwZGF0ZUxheW91dCgp
IGNvbnN0CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU2NoZWR1bGVkQWN0aW9uIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogCi1TY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihPYmpl
Y3QgX2Z1bmMsIExpc3QgX2FyZ3MsIGJvb2wgX3NpbmdsZVNob3QpCitTY2hlZHVsZWRBY3Rpb246
OlNjaGVkdWxlZEFjdGlvbihPYmplY3RJbXAgKl9mdW5jLCBMaXN0IF9hcmdzLCBib29sIF9zaW5n
bGVTaG90KQogewogICAvL2tkRGVidWcoNjA3MCkgPDwgIlNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1
bGVkQWN0aW9uKGlzRnVuY3Rpb24pICIgPDwgdGhpcyA8PCBlbmRsOwogICBmdW5jID0gX2Z1bmM7
CkBAIC0yMDY1LDIzICsyMDU2LDIzIEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFdp
bmRvdyAqd2kKIAogICAvL2tkRGVidWcoNjA3MCkgPDwgIlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0
ZSAiIDw8IHRoaXMgPDwgZW5kbDsKICAgaWYgKGlzRnVuY3Rpb24pIHsKLSAgICBpZiAoZnVuYy5p
bXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgaWYgKGZ1bmMtPmltcGxlbWVudHNDYWxsKCkpIHsKICAg
ICAgIC8vICMjIyMgY2hlY2sgdGhpcwogICAgICAgUV9BU1NFUlQoIHdpbmRvdy0+bV9wYXJ0ICk7
CiAgICAgICBpZiAoIHdpbmRvdy0+bV9wYXJ0ICkKICAgICAgIHsKICAgICAgICAgS0pTOjpJbnRl
cnByZXRlciAqaW50ZXJwcmV0ZXIgPSBLSlNQcm94eTo6cHJveHkoIHdpbmRvdy0+bV9wYXJ0ICkt
PmludGVycHJldGVyKCk7CiAgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycHJldGVyLT5n
bG9iYWxFeGVjKCk7Ci0gICAgICAgIFFfQVNTRVJUKCB3aW5kb3cgPT0gaW50ZXJwcmV0ZXItPmds
b2JhbE9iamVjdCgpLmltcCgpICk7Ci0gICAgICAgIE9iamVjdCBvYmooIHdpbmRvdyApOworICAg
ICAgICBRX0FTU0VSVCggd2luZG93ID09IGludGVycHJldGVyLT5nbG9iYWxPYmplY3QoKSApOwor
ICAgICAgICBPYmplY3RJbXAgKm9iaiggd2luZG93ICk7CiAJSW50ZXJwcmV0ZXI6OmxvY2soKTsK
LSAgICAgICAgZnVuYy5jYWxsKGV4ZWMsb2JqLGFyZ3MpOyAvLyBub3RlIHRoYXQgY2FsbCgpIGNy
ZWF0ZXMgaXRzIG93biBleGVjdXRpb24gc3RhdGUgZm9yIHRoZSBmdW5jIGNhbGwKKyAgICAgICAg
ZnVuYy0+Y2FsbChleGVjLG9iaixhcmdzKTsgLy8gbm90ZSB0aGF0IGNhbGwoKSBjcmVhdGVzIGl0
cyBvd24gZXhlY3V0aW9uIHN0YXRlIGZvciB0aGUgZnVuYyBjYWxsCiAJSW50ZXJwcmV0ZXI6OnVu
bG9jaygpOwogCWlmICggZXhlYy0+aGFkRXhjZXB0aW9uKCkgKSB7CiAjaWYgQVBQTEVfQ0hBTkdF
UwogICAgICAgICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgICAgY2hhciAqbWVzc2Fn
ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVjLCBtZXNzYWdlUHJv
cGVydHlOYW1lKS50b1N0cmluZyhleGVjKS5hc2NpaSgpOwotICAgICAgICAgIGludCBsaW5lTnVt
YmVyID0gIGV4ZWMtPmV4Y2VwdGlvbigpLnRvT2JqZWN0KGV4ZWMpLmdldChleGVjLCAibGluZSIp
LnRvSW50MzIoZXhlYyk7CisgICAgICAgICAgY2hhciAqbWVzc2FnZSA9IGV4ZWMtPmV4Y2VwdGlv
bigpLT50b09iamVjdChleGVjKS0+Z2V0KGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0eU5hbWUpLT50b1N0
cmluZyhleGVjKS5hc2NpaSgpOworICAgICAgICAgIGludCBsaW5lTnVtYmVyID0gIGV4ZWMtPmV4
Y2VwdGlvbigpLT50b09iamVjdChleGVjKS0+Z2V0KGV4ZWMsICJsaW5lIiktPnRvSW50MzIoZXhl
Yyk7CiAgICAgICAgICAgSW50ZXJwcmV0ZXI6OnVubG9jaygpOwogCSAgaWYgKEludGVycHJldGVy
OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkgewogCSAgICBwcmludGYoIih0aW1lcik6JXNcbiIs
IG1lc3NhZ2UpOwpAQCAtMjE0NCw5ICsyMTM1LDkgQEAgaW50IFdpbmRvd1FPYmplY3Q6Omluc3Rh
bGxUaW1lb3V0KGNvbnN0IAogICByZXR1cm4gaWQ7CiB9CiAKLWludCBXaW5kb3dRT2JqZWN0Ojpp
bnN0YWxsVGltZW91dChjb25zdCBWYWx1ZSAmZnVuYywgTGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBz
aW5nbGVTaG90KQoraW50IFdpbmRvd1FPYmplY3Q6Omluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpm
dW5jLCBMaXN0IGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gIE9iamVjdCBvYmpG
dW5jID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZnVuYyApOworICBPYmplY3RJbXAgKm9iakZ1bmMg
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZnVuYyk7CiAgIGludCBpZCA9IHN0YXJ0VGltZXIo
dCk7CiAgIHNjaGVkdWxlZEFjdGlvbnMuaW5zZXJ0KGlkLCBuZXcgU2NoZWR1bGVkQWN0aW9uKG9i
akZ1bmMsYXJncyxzaW5nbGVTaG90KSk7CiAgIHJldHVybiBpZDsKQEAgLTIyNDYsNyArMjIzNyw3
IEBAIGxvY2F0aW9uCUZyYW1lQXJyYXk6OkxvY2F0aW9uCURvbnREZWxldGUKICovCiAKIAotVmFs
dWUgRnJhbWVBcnJheTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikKK1ZhbHVlSW1wICpGcmFtZUFycmF5OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKQogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgTGVuZ3RoOiB7CkBA
IC0yMjU0LDIwICsyMjQ1LDE4IEBAIFZhbHVlIEZyYW1lQXJyYXk6OmdldFZhbHVlUHJvcGVydHko
RXhlY1MKICAgICB1bnNpZ25lZCBpbnQgbGVuID0gZnJhbWVzLmNvdW50KCk7CiAgICAgcmV0dXJu
IE51bWJlcihsZW4pOwogICB9Ci0gIGNhc2UgTG9jYXRpb246IHsKKyAgY2FzZSBMb2NhdGlvbjoK
ICAgICAvLyBub24tc3RhbmRhcmQgcHJvcGVydHksIGJ1dCB3b3JrcyBpbiBOUyBhbmQgSUUKLSAg
ICBPYmplY3Qgb2JqID0gT2JqZWN0OjpkeW5hbWljQ2FzdChXaW5kb3c6OnJldHJpZXZlKHBhcnQp
KTsKLSAgICBpZiAoIW9iai5pc051bGwoKSkKLSAgICAgIHJldHVybiBvYmouZ2V0KGV4ZWMsICJs
b2NhdGlvbiIpOworICAgIGlmIChPYmplY3RJbXAgKm9iaiA9IFdpbmRvdzo6cmV0cmlldmVXaW5k
b3cocGFydCkpCisgICAgICByZXR1cm4gb2JqLT5nZXQoZXhlYywgImxvY2F0aW9uIik7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICB9CiAgIGRlZmF1bHQ6CiAgICAgYXNzZXJ0KDApOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgfQogfQogCi1WYWx1ZSBGcmFtZUFycmF5OjppbmRleEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkZyYW1lQXJyYXk6OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEZyYW1lQXJyYXkgKnRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxGcmFtZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0
ICpmcmFtZSA9IHRoaXNPYmotPnBhcnQtPmZyYW1lcygpLmF0KHNsb3QuaW5kZXgoKSk7CkBAIC0y
MjgwLDcgKzIyNjksNyBAQCBWYWx1ZSBGcmFtZUFycmF5OjppbmRleEdldHRlcihFeGVjU3RhdGUg
CiAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRnJhbWVBcnJheTo6bmFtZUdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorVmFsdWVJbXAgKkZyYW1lQXJyYXk6Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgRnJhbWVBcnJheSAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEZy
YW1lQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKmZy
YW1lID0gdGhpc09iai0+cGFydC0+ZmluZEZyYW1lKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpOwpA
QCAtMjM1Myw3ICsyMzQyLDcgQEAgTG9jYXRpb246OkxvY2F0aW9uKEtIVE1MUGFydCAqcCkgOiBt
X3BhcgogewogfQogCi1WYWx1ZSBMb2NhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpMb2NhdGlvbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgS1VSTCB1cmwgPSBt
X3BhcnQtPnVybCgpOwogICBzd2l0Y2ggKHRva2VuKSB7CkBAIC0yNDAzLDEyICsyMzkyLDEyIEBA
IGJvb2wgTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjU3QKICAgcmV0dXJuIGdldFN0
YXRpY1Byb3BlcnR5U2xvdDxMb2NhdGlvbkZ1bmMsIExvY2F0aW9uLCBPYmplY3RJbXA+KGV4ZWMs
ICZMb2NhdGlvblRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIExv
Y2F0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwLCBjb25zdCBW
YWx1ZSAmdiwgaW50IGF0dHIpCit2b2lkIExvY2F0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwLCBWYWx1ZUltcCAqdiwgaW50IGF0dHIpCiB7CiAgIGlmIChtX3Bh
cnQuaXNOdWxsKCkpCiAgICAgcmV0dXJuOwogCi0gIFFTdHJpbmcgc3RyID0gdi50b1N0cmluZyhl
eGVjKS5xc3RyaW5nKCk7CisgIFFTdHJpbmcgc3RyID0gdi0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpOwogICBLVVJMIHVybCA9IG1fcGFydC0+dXJsKCk7CiAgIGNvbnN0IEhhc2hFbnRyeSAqZW50
cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTG9jYXRpb25UYWJsZSwgcCk7CiAgIGlmIChlbnRyeSkK
QEAgLTI0NjUsNyArMjQ1NCw3IEBAIHZvaWQgTG9jYXRpb246OnB1dChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnMKICAgfQogfQogCi1WYWx1ZSBMb2NhdGlvbjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpl
eGVjLCBUeXBlKSBjb25zdAorVmFsdWVJbXAgKkxvY2F0aW9uOjp0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUgKmV4ZWMsIFR5cGUpIGNvbnN0CiB7CiAgIHJldHVybiBTdHJpbmcodG9TdHJpbmcoZXhlYykp
OwogfQpAQCAtMjQ3OCwxNCArMjQ2NywxNCBAQCBVU3RyaW5nIExvY2F0aW9uOjp0b1N0cmluZyhF
eGVjU3RhdGUgKikgCiAgICAgcmV0dXJuIG1fcGFydC0+dXJsKCkucHJldHR5VVJMKCk7CiB9CiAK
LVZhbHVlIExvY2F0aW9uRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpMb2NhdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJkxvY2F0aW9uOjppbmZvKSkgewotICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmTG9jYXRpb246OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJv
cjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsK
ICAgICByZXR1cm4gZXJyOwogICB9Ci0gIExvY2F0aW9uICpsb2NhdGlvbiA9IHN0YXRpY19jYXN0
PExvY2F0aW9uICo+KHRoaXNPYmouaW1wKCkpOworICBMb2NhdGlvbiAqbG9jYXRpb24gPSBzdGF0
aWNfY2FzdDxMb2NhdGlvbiAqPih0aGlzT2JqKTsKICAgS0hUTUxQYXJ0ICpwYXJ0ID0gbG9jYXRp
b24tPnBhcnQoKTsKICAgaWYgKHBhcnQpIHsKICAgICAgIApAQCAtMjQ5Niw3ICsyNDg1LDcgQEAg
VmFsdWUgTG9jYXRpb25GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYwogICAgIHN3aXRjaCAoaWQp
IHsKICAgICBjYXNlIExvY2F0aW9uOjpSZXBsYWNlOgogICAgIHsKLSAgICAgIFFTdHJpbmcgc3Ry
ID0gYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICBRU3RyaW5nIHN0ciA9
IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKICAgICAgIEtIVE1MUGFydCogcCA9
IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPnBhcnQoKTsKICAgICAgIGlmICggcCApIHsK
ICAgICAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBh
cnQpOwpAQCAtMjUyMiw3ICsyNTExLDcgQEAgVmFsdWUgTG9jYXRpb25GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYwogICAgICAgICBLSFRNTFBhcnQgKnAgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZl
KGV4ZWMpLT5wYXJ0KCk7CiAgICAgICAgIGlmIChwKSB7CiAgICAgICAgICAgICBjb25zdCBXaW5k
b3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7Ci0gICAgICAgICAgICBR
U3RyaW5nIGRzdFVybCA9IHAtPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoYXJnc1swXS50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAgICAgICAgICAgUVN0cmluZyBkc3RVcmwgPSBwLT54
bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmco
KSk7CiAgICAgICAgICAgICBpZiAoIWRzdFVybC5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSB8fCAod2luZG93ICYmIHdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpKSkgewogICAgICAg
ICAgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRl
ciAqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSktPndhc1J1bkJ5VXNlckdlc3R1cmUoKTsK
ICNpZiBBUFBMRV9DSEFOR0VTCkBAIC0yNTc0LDcgKzI1NjMsNyBAQCBTZWxlY3Rpb246OlNlbGVj
dGlvbihLSFRNTFBhcnQgKnApIDogbV9wCiB7CiB9CiAKLVZhbHVlIFNlbGVjdGlvbjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
ZWxlY3Rpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAgIGNvbnN0IFdpbmRvdyogd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyht
X3BhcnQpOwogICBpZiAoIXdpbmRvdykgewpAQCAtMjYyNCw3ICsyNjEzLDcgQEAgYm9vbCBTZWxl
Y3Rpb246OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogICByZXR1cm4gZ2V0U3RhdGljUHJvcGVy
dHlTbG90PFNlbGVjdGlvbkZ1bmMsIFNlbGVjdGlvbiwgT2JqZWN0SW1wPihleGVjLCAmU2VsZWN0
aW9uVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIFNlbGVjdGlv
bjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlKSBjb25zdAorVmFsdWVJbXAgKlNl
bGVjdGlvbjo6dG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlKSBjb25zdAogewogICBy
ZXR1cm4gU3RyaW5nKHRvU3RyaW5nKGV4ZWMpKTsKIH0KQEAgLTI2MzcsMTQgKzI2MjYsMTQgQEAg
VVN0cmluZyBTZWxlY3Rpb246OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKQogICAgIHJldHVybiBVU3Ry
aW5nKG1fcGFydC0+c2VsZWN0aW9uKCkudG9SYW5nZSgpLT50b1N0cmluZyhleGNlcHRpb24pKTsK
IH0KIAotVmFsdWUgU2VsZWN0aW9uRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTZWxlY3Rpb25GdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJlNlbGVjdGlvbjo6aW5mbykp
IHsKLSAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwor
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlNlbGVjdGlvbjo6aW5mbykpIHsKKyAgICAgICAg
T2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAg
IFNlbGVjdGlvbiAqc2VsZWN0aW9uID0gc3RhdGljX2Nhc3Q8U2VsZWN0aW9uICo+KHRoaXNPYmou
aW1wKCkpOworICAgIFNlbGVjdGlvbiAqc2VsZWN0aW9uID0gc3RhdGljX2Nhc3Q8U2VsZWN0aW9u
ICo+KHRoaXNPYmopOwogICAgIEtIVE1MUGFydCAqcGFydCA9IHNlbGVjdGlvbi0+cGFydCgpOwog
ICAgIGlmIChwYXJ0KSB7CiAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jaW1wbCA9IHBhcnQtPnht
bERvY0ltcGwoKTsKQEAgLTI2NTQsNyArMjY0Myw3IEBAIFZhbHVlIFNlbGVjdGlvbkZ1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGUKICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICAgICAgY2Fz
ZSBTZWxlY3Rpb246OkNvbGxhcHNlOgogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNs
b3NlVHlwaW5nKHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgpKTsKLSAgICAgICAgICAgICAgICBwYXJ0
LT5zZXRTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlvbihQb3NpdGlvbih0b05vZGUoYXJnc1swXSks
IGFyZ3NbMV0udG9JbnQzMihleGVjKSksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOwor
ICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9uKFBvc2l0
aW9uKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSksIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBTZWxlY3Rpb246OkNvbGxhcHNlVG9FbmQ6CiAgICAgICAgICAgICAgICAgVHlwaW5nQ29t
bWFuZDo6Y2xvc2VUeXBpbmcocGFydC0+bGFzdEVkaXRDb21tYW5kKCkpOwpAQCAtMjY3MCwyMiAr
MjY1OSwyMiBAQCBWYWx1ZSBTZWxlY3Rpb25GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6U2V0QmFzZUFu
ZEV4dGVudDogewogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBh
cnQtPmxhc3RFZGl0Q29tbWFuZCgpKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBiYXNlKHRv
Tm9kZShhcmdzWzBdKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBQ
b3NpdGlvbiBleHRlbnQodG9Ob2RlKGFyZ3NbMl0pLCBhcmdzWzNdLnRvSW50MzIoZXhlYykpOwor
ICAgICAgICAgICAgICAgIFBvc2l0aW9uIGJhc2UodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50
b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBQb3NpdGlvbiBleHRlbnQodG9Ob2RlKGFy
Z3NbMl0pLCBhcmdzWzNdLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgICAgICBwYXJ0LT5z
ZXRTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlvbihiYXNlLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZG
SU5JVFksIGV4dGVudCwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6
U2V0UG9zaXRpb246CiAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBpbmco
cGFydC0+bGFzdEVkaXRDb21tYW5kKCkpOwotICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVj
dGlvbihraHRtbDo6U2VsZWN0aW9uKFBvc2l0aW9uKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS50
b0ludDMyKGV4ZWMpKSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgICAg
ICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpTZWxlY3Rpb24oUG9zaXRpb24odG9Ob2Rl
KGFyZ3NbMF0pLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKSwga2h0bWw6OlNFTF9ERUZBVUxUX0FG
RklOSVRZKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6TW9kaWZ5OiB7CiAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcocGFydC0+bGFzdEVkaXRDb21tYW5kKCkpOwogICAgICAgICAgICAgICAgIGtodG1sOjpTZWxl
Y3Rpb24gcyhwYXJ0LT5zZWxlY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAga2h0bWw6OlNlbGVj
dGlvbjo6RUFsdGVyIGFsdGVyID0ga2h0bWw6OlNlbGVjdGlvbjo6TU9WRTsKLSAgICAgICAgICAg
ICAgICBpZiAoYXJnc1swXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5sb3dlcigpID09ICJleHRl
bmQiKQorICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdLT50b1N0cmluZyhleGVjKS5zdHJpbmco
KS5sb3dlcigpID09ICJleHRlbmQiKQogICAgICAgICAgICAgICAgICAgICBhbHRlciA9IGtodG1s
OjpTZWxlY3Rpb246OkVYVEVORDsKLSAgICAgICAgICAgICAgICBET01TdHJpbmcgZGlyZWN0aW9u
U3RyaW5nID0gYXJnc1sxXS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5sb3dlcigpOworICAgICAg
ICAgICAgICAgIERPTVN0cmluZyBkaXJlY3Rpb25TdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhl
eGVjKS5zdHJpbmcoKS5sb3dlcigpOwogICAgICAgICAgICAgICAgIGtodG1sOjpTZWxlY3Rpb246
OkVEaXJlY3Rpb24gZGlyZWN0aW9uID0ga2h0bWw6OlNlbGVjdGlvbjo6Rk9SV0FSRDsKICAgICAg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uU3RyaW5nID09ICJiYWNrd2FyZCIpCiAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdGlvbiA9IGtodG1sOjpTZWxlY3Rpb246OkJBQ0tXQVJEOwpAQCAtMjY5
NCw3ICsyNjgzLDcgQEAgVmFsdWUgU2VsZWN0aW9uRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZQog
ICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gInJpZ2h0IikKICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uID0ga2h0bWw6OlNlbGVjdGlvbjo6UklHSFQ7CiAgICAgICAg
ICAgICAgICAga2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBraHRtbDo6Q0hB
UkFDVEVSOwotICAgICAgICAgICAgICAgIERPTVN0cmluZyBncmFudWxhcml0eVN0cmluZyA9IGFy
Z3NbMl0udG9TdHJpbmcoZXhlYykuc3RyaW5nKCkubG93ZXIoKTsKKyAgICAgICAgICAgICAgICBE
T01TdHJpbmcgZ3JhbnVsYXJpdHlTdHJpbmcgPSBhcmdzWzJdLT50b1N0cmluZyhleGVjKS5zdHJp
bmcoKS5sb3dlcigpOwogICAgICAgICAgICAgICAgIGlmIChncmFudWxhcml0eVN0cmluZyA9PSAi
d29yZCIpCiAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5ID0ga2h0bWw6OldPUkQ7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZ3JhbnVsYXJpdHlTdHJpbmcgPT0gImxpbmUiKQpAQCAt
MjcyNiw3ICsyNzE1LDcgQEAgQmFySW5mbzo6QmFySW5mbyhFeGVjU3RhdGUgKmV4ZWMsIEtIVE1M
UAogewogfQogCi1WYWx1ZSBCYXJJbmZvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkJhckluZm86OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgYXNzZXJ0KHRva2VuID09
IFZpc2libGUpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CkBAIC0yNzc1LDcgKzI3NjQsNyBAQCBi
b29sIEhpc3Rvcnk6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhCiAgIHJldHVybiBnZXRTdGF0
aWNQcm9wZXJ0eVNsb3Q8SGlzdG9yeUZ1bmMsIEhpc3RvcnksIE9iamVjdEltcD4oZXhlYywgJkhp
c3RvcnlUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotVmFsdWUgSGlzdG9y
eTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkhpc3Rvcnk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIExlbmd0aDoKQEAgLTI4MDYsMTQgKzI3
OTUsMTQgQEAgVVN0cmluZyBIaXN0b3J5Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZQogICByZXR1
cm4gIltvYmplY3QgSGlzdG9yeV0iOwogfQogCi1WYWx1ZSBIaXN0b3J5RnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1w
ICpIaXN0b3J5RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygm
SGlzdG9yeTo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5
cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkhpc3Rvcnk6OmluZm8pKSB7Cisg
ICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKICAgICBl
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwogICB9Ci0gIEhpc3Rvcnkg
Kmhpc3RvcnkgPSBzdGF0aWNfY2FzdDxIaXN0b3J5ICo+KHRoaXNPYmouaW1wKCkpOworICBIaXN0
b3J5ICpoaXN0b3J5ID0gc3RhdGljX2Nhc3Q8SGlzdG9yeSAqPih0aGlzT2JqKTsKIAogICBpbnQg
c3RlcHM7CiAgIHN3aXRjaCAoaWQpIHsKQEAgLTI4MjQsNyArMjgxMyw3IEBAIFZhbHVlIEhpc3Rv
cnlGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywKICAgICBzdGVwcyA9IDE7CiAgICAgYnJlYWs7
CiAgIGNhc2UgSGlzdG9yeTo6R286Ci0gICAgc3RlcHMgPSBhcmdzWzBdLnRvSW50MzIoZXhlYyk7
CisgICAgc3RlcHMgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpOwogICAgIGJyZWFrOwogICBkZWZh
dWx0OgogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTI4NDcsNyArMjgzNiw3IEBAIGJvb2wg
S29ucXVlcm9yOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUKICAgcmV0dXJuIHRydWU7CiB9CiAK
LVZhbHVlIEtvbnF1ZXJvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cCkgY29uc3QKK1ZhbHVlSW1wICpLb25xdWVyb3I6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnApIGNvbnN0CiB7CiAgIGlmICggcCA9PSAiZ29IaXN0b3J5IiB8fCBwYXJ0
LT51cmwoKS5wcm90b2NvbCgpICE9ICJodHRwIiB8fCBwYXJ0LT51cmwoKS5ob3N0KCkgIT0gImxv
Y2FsaG9zdCIgKQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTI4NjMsNyArMjg1Miw3IEBA
IFZhbHVlIEtvbnF1ZXJvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY28KICAgICAgICAgY2FzZSBR
VmFyaWFudDo6SW50OgogICAgICAgICAgIHJldHVybiBOdW1iZXIoIHByb3AudG9JbnQoKSApOwog
ICAgICAgICBjYXNlIFFWYXJpYW50OjpTdHJpbmc6Ci0gICAgICAgICAgcmV0dXJuIFN0cmluZygg
cHJvcC50b1N0cmluZygpICk7CisgICAgICAgICAgcmV0dXJuIFN0cmluZyggcHJvcC0+dG9TdHJp
bmcoKSApOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yODc0LDcgKzI4NjMsNyBAQCBWYWx1ZSBLb25xdWVyb3I6OmdldChFeGVjU3RhdGUgKmV4ZWMs
IGNvCiAgIHJldHVybiAvKkZ1bmN0aW9uKi8oIG5ldyBLb25xdWVyb3JGdW5jKHRoaXMsIHAucXN0
cmluZygpLmxhdGluMSgpICkgKTsKIH0KIAotVmFsdWUgS29ucXVlcm9yRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKktvbnF1
ZXJvckZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAgIEtQYXJ0czo6QnJvd3NlckV4dGVuc2lvbiAqZXh0ID0ga29u
cXVlcm9yLT5wYXJ0LT5icm93c2VyRXh0ZW5zaW9uKCk7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWNtYS9ranNfd2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWNtYS9ranNfd2luZG93LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAt
cCAtdSAtcjEuNDkgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaAotLS0gV2ViQ29yZS9r
aHRtbC9lY21hL2tqc193aW5kb3cuaAk3IEF1ZyAyMDA1IDA2OjE3OjQ2IC0wMDAwCTEuNDkKKysr
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgJOCBBdWcgMjAwNSAwMTowMToyNyAtMDAw
MApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIEF2YWlsV2lkdGgKICAg
ICB9OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgIHByaXZh
dGU6CiAgICAgS0hUTUxWaWV3ICp2aWV3OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAtODIsNyArODIsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgKiBmb3IgdGhlIHNwZWNpZmllZCBwYXJ0IHAgdGhpcyB3aWxsIGJl
IHJldHVybmVkIGluIG9yZGVyIHRvIGhhdmUgdW5pcXVlCiAgICAgICogYmluZGluZ3MuCiAgICAg
ICovCi0gICAgc3RhdGljIFZhbHVlIHJldHJpZXZlKEtIVE1MUGFydCAqcCk7CisgICAgc3RhdGlj
IFZhbHVlSW1wICpyZXRyaWV2ZShLSFRNTFBhcnQgKnApOwogICAgIC8qKgogICAgICAqIFJldHVy
bnMgdGhlIFdpbmRvdyBvYmplY3QgZm9yIGEgZ2l2ZW4gSFRNTCBwYXJ0CiAgICAgICovCkBAIC05
NSwxMSArOTUsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUUd1YXJkZWRQdHI8S0hUTUxQYXJ0
PiBwYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0OyB9CiAgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3Qg
VmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIGludCBpbnN0YWxsVGltZW91dChjb25z
dCBVU3RyaW5nICZoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLSAgICBpbnQgaW5z
dGFsbFRpbWVvdXQoY29uc3QgVmFsdWUgJmZ1bmN0aW9uLCBMaXN0ICZhcmdzLCBpbnQgdCwgYm9v
bCBzaW5nbGVTaG90KTsKKyAgICBpbnQgaW5zdGFsbFRpbWVvdXQoVmFsdWVJbXAgKmZ1bmN0aW9u
LCBMaXN0ICZhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKICAgICB2b2lkIGNsZWFyVGlt
ZW91dChpbnQgdGltZXJJZCk7CiAjaWZkZWYgQVBQTEVfQ0hBTkdFUwogICAgIGJvb2wgaGFzVGlt
ZW91dHMoKTsKQEAgLTEyMSw4ICsxMjEsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBCYXJJbmZv
ICpzY3JvbGxiYXJzKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgQmFySW5mbyAqc3RhdHVz
YmFyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgQmFySW5mbyAqdG9vbGJhcihFeGVjU3Rh
dGUgKmV4ZWMpIGNvbnN0OwotICAgIEpTRXZlbnRMaXN0ZW5lciAqZ2V0SlNFdmVudExpc3RlbmVy
KGNvbnN0IFZhbHVlICZ2YWwsIGJvb2wgaHRtbCA9IGZhbHNlKTsKLSAgICBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lciAqZ2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoY29uc3QgVmFsdWUg
JnZhbCwgYm9vbCBodG1sID0gZmFsc2UpOworICAgIEpTRXZlbnRMaXN0ZW5lciAqZ2V0SlNFdmVu
dExpc3RlbmVyKFZhbHVlSW1wICp2YWwsIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lciAqZ2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoVmFsdWVJ
bXAgKnZhbCwgYm9vbCBodG1sID0gZmFsc2UpOwogICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIgKmdl
dEpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgUVN0cmluZyAmY29kZSwgRE9NOjpOb2RlSW1wbCAq
bm9kZSwgaW50IGxpbmVubyA9IDApOwogICAgIHZvaWQgY2xlYXIoIEV4ZWNTdGF0ZSAqZXhlYyAp
OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwpA
QCAtMTUzLDEzICsxNTMsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgIE9uc2VsZWN0
LCBPbnN1Ym1pdCwgT251bmxvYWQsCiAgICAgICAgICAgIFN0YXR1c2JhciwgVG9vbGJhciwgRnJh
bWVFbGVtZW50LCBTaG93TW9kYWxEaWFsb2cgfTsKICAgcHJvdGVjdGVkOgotICAgIFZhbHVlIGdl
dExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQpIGNvbnN0OwotICAgIHZvaWQg
c2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCwgVmFsdWUgZnVuYyk7Cisg
ICAgVmFsdWVJbXAgKmdldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IGV2ZW50SWQpIGNv
bnN0OworICAgIHZvaWQgc2V0TGlzdGVuZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgZXZlbnRJZCwg
VmFsdWVJbXAgKmZ1bmMpOwogICBwcml2YXRlOgotICAgIHN0YXRpYyBWYWx1ZSBjaGlsZEZyYW1l
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIFZhbHVlIG5hbWVkRnJhbWVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAg
ICBzdGF0aWMgVmFsdWUgaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgVmFsdWUgbmFtZWRJ
dGVtR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpjaGlsZEZyYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCk7CisgICAgc3RhdGljIFZhbHVlSW1wICpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3Rh
dGljIFZhbHVlSW1wICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBWYWx1ZUltcCAqbmFt
ZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheW91dCgpIGNvbnN0OwogCkBA
IC0xODcsNyArMTg3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqLwogICBjbGFzcyBTY2hlZHVs
ZWRBY3Rpb24gewogICBwdWJsaWM6Ci0gICAgU2NoZWR1bGVkQWN0aW9uKE9iamVjdCBfZnVuYywg
TGlzdCBfYXJncywgYm9vbCBfc2luZ2xlU2hvdCk7CisgICAgU2NoZWR1bGVkQWN0aW9uKE9iamVj
dEltcCAqX2Z1bmMsIExpc3QgX2FyZ3MsIGJvb2wgX3NpbmdsZVNob3QpOwogICAgIFNjaGVkdWxl
ZEFjdGlvbihjb25zdCBRU3RyaW5nICZfY29kZSwgYm9vbCBfc2luZ2xlU2hvdCk7CiAgICAgdm9p
ZCBleGVjdXRlKFdpbmRvdyAqd2luZG93KTsKIApAQCAtMjA0LDcgKzIwNCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIFdpbmRvd1FPYmplY3QoV2luZG93ICp3KTsKICAgICB+V2luZG93UU9iamVj
dCgpOwogICAgIGludCBpbnN0YWxsVGltZW91dChjb25zdCBVU3RyaW5nICZoYW5kbGVyLCBpbnQg
dCwgYm9vbCBzaW5nbGVTaG90KTsKLSAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3QgVmFsdWUg
JmZ1bmMsIExpc3QgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgaW50IGluc3Rh
bGxUaW1lb3V0KFZhbHVlSW1wICpmdW5jLCBMaXN0IGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNo
b3QpOwogICAgIHZvaWQgY2xlYXJUaW1lb3V0KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9
IHRydWUpOwogI2lmZGVmIEFQUExFX0NIQU5HRVMKICAgICBib29sIGhhc1RpbWVvdXRzKCk7CkBA
IC0yMjcsOSArMjI3LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIExvY2F0aW9uIDogcHVi
bGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwot
ICAgIHZpcnR1YWwgVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZl
cnJlZCkgY29uc3Q7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIFZhbHVlSW1wICp0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUgKmV4ZWMsIFR5cGUgcHJlZmVycmVkKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9T
dHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBlbnVtIHsgSGFzaCwgSHJlZiwgSG9z
dG5hbWUsIEhvc3QsIFBhdGhuYW1lLCBQb3J0LCBQcm90b2NvbCwgU2VhcmNoLCBFcXVhbEVxdWFs
LAogICAgICAgICAgICBSZXBsYWNlLCBSZWxvYWQsIFRvU3RyaW5nLCBBc3NpZ24gfTsKQEAgLTI0
NSw4ICsyNDUsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgU2VsZWN0aW9uIDogcHVibGlj
IE9iamVjdEltcCB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAg
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0gICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJl
ZmVycmVkKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZUltcCAqdG9QcmltaXRp
dmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCkgY29uc3Q7CiAgICAgdmlydHVhbCBV
U3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgZW51bSB7IEFuY2hv
ck5vZGUsIEFuY2hvck9mZnNldCwgRm9jdXNOb2RlLCBGb2N1c09mZnNldCwgQmFzZU5vZGUsIEJh
c2VPZmZzZXQsIEV4dGVudE5vZGUsIEV4dGVudE9mZnNldCwgCiAgICAgICAgICAgIElzQ29sbGFw
c2VkLCBfVHlwZSwgRXF1YWxFcXVhbCwgQ29sbGFwc2UsIENvbGxhcHNlVG9FbmQsIENvbGxhcHNl
VG9TdGFydCwgRW1wdHksIFRvU3RyaW5nLCAKQEAgLTI2Myw3ICsyNjMsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgY2xhc3MgQmFySW5mbyA6IHB1YmxpYyBPYmplY3RJbXAgewogICBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICBlbnVtIHsgVmlz
aWJsZSB9OwogICAgIGVudW0gVHlwZSB7IExvY2F0aW9uYmFyLCBNZW51YmFyLCBQZXJzb25hbGJh
ciwgU2Nyb2xsYmFycywgU3RhdHVzYmFyLCBUb29sYmFyIH07CiAgICAgS0hUTUxQYXJ0ICpwYXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0OyB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEveG1s
aHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRp
ZmYgLXAgLXUgLXIxLjM0IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKLS0t
IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJNyBBdWcgMjAwNSAwNjoxNzo0
NiAtMDAwMAkxLjM0CisrKyBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCTgg
QXVnIDIwMDUgMDE6MDE6MjggLTAwMDAKQEAgLTEwOCw5ICsxMDgsOSBAQCBib29sIFhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmltcGxlCiAgIHJldHVybiB0cnVlOwogfQogCi1PYmplY3Qg
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgTGlzdCAmKQorT2JqZWN0SW1wICpYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpj
b25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICYpCiB7Ci0gIHJldHVybiBPYmpl
Y3QobmV3IFhNTEh0dHBSZXF1ZXN0KGV4ZWMsIGRvYy5nZXQoKSkpOworICByZXR1cm4gbmV3IFhN
TEh0dHBSZXF1ZXN0KGV4ZWMsIGRvYy5nZXQoKSk7CiB9CiAKIGNvbnN0IENsYXNzSW5mbyBYTUxI
dHRwUmVxdWVzdDo6aW5mbyA9IHsgIlhNTEh0dHBSZXF1ZXN0IiwgMCwgJlhNTEh0dHBSZXF1ZXN0
VGFibGUsIDAgfTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoCiAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8WE1MSHR0cFJlcXVl
c3QsIERPTU9iamVjdD4oZXhlYywgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlhNTEh0dHBSZXF1
ZXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmVhZHlTdGF0ZToKQEAgLTE0NywxMSArMTQ3
LDExIEBAIFZhbHVlIFhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5KEUKICAgICAgIFFT
dHJpbmcgbWltZVR5cGU7CiAgICAgICAKICAgICAgIGlmIChNSU1FVHlwZU92ZXJyaWRlLmlzRW1w
dHkoKSkgewotICAgICAgICBWYWx1ZSBoZWFkZXIgPSBnZXRSZXNwb25zZUhlYWRlcigiQ29udGVu
dC1UeXBlIik7Ci0gICAgICAgIGlmIChoZWFkZXIudHlwZSgpID09IFVuZGVmaW5lZFR5cGUpIHsK
KyAgICAgICAgVmFsdWVJbXAgKmhlYWRlciA9IGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5
cGUiKTsKKyAgICAgICAgaWYgKGhlYWRlci0+aXNVbmRlZmluZWQoKSkgewogICAgICAgICAgIG1p
bWVUeXBlID0gInRleHQveG1sIjsKICAgICAgICAgfSBlbHNlIHsKLQkgIG1pbWVUeXBlID0gUVN0
cmluZ0xpc3Q6OnNwbGl0KCI7IiwgaGVhZGVyLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSlbMF0u
c3RyaXBXaGl0ZVNwYWNlKCk7CisJICBtaW1lVHlwZSA9IFFTdHJpbmdMaXN0OjpzcGxpdCgiOyIs
IGhlYWRlci0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKVswXS5zdHJpcFdoaXRlU3BhY2UoKTsK
ICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKICAgICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZU92
ZXJyaWRlOwpAQCAtMTk3LDE2ICsxOTcsMTYgQEAgVmFsdWUgWE1MSHR0cFJlcXVlc3Q6OmdldFZh
bHVlUHJvcGVydHkoRQogICAgfQogICBkZWZhdWx0OgogICAgIGtkV2FybmluZygpIDw8ICJYTUxI
dHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8
PCBlbmRsOwotICAgIHJldHVybiBWYWx1ZSgpOworICAgIHJldHVybiBOVUxMOwogICB9CiB9CiAK
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgbG9va3VwUHV0PFhNTEh0
dHBSZXF1ZXN0LERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJlhN
TEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMgKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCAvKmF0dHIq
LykKIHsKICAgc3dpdGNoKHRva2VuKSB7CiAgIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgpAQCAt
NDI2LDcgKzQyNiw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY28K
ICAgcmVxdWVzdEhlYWRlcnMgKz0gdmFsdWU7CiB9CiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0Ojpn
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdAorVmFsdWVJbXAgKlhNTEh0dHBSZXF1ZXN0Ojpn
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdAogewogICBpZiAocmVzcG9uc2VIZWFkZXJzLmlz
RW1wdHkoKSkgewogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQ0MSw3ICs0NDEsNyBAQCBW
YWx1ZSBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkCiAgIHJldHVybiBTdHJpbmco
cmVzcG9uc2VIZWFkZXJzLm1pZChlbmRPZkxpbmUgKyAxKSArICJcbiIpOwogfQogCi1WYWx1ZSBY
TUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29u
c3QKK1ZhbHVlSW1wICpYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgUVN0
cmluZyYgbmFtZSkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpIHsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00NjksNyArNDY5LDcgQEAgVmFsdWUgWE1MSHR0
cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKAogICByZXR1cm4gU3RyaW5nKHJlc3BvbnNlSGVh
ZGVycy5taWQoaGVhZGVyTGluZVBvcyArIG1hdGNoTGVuZ3RoLCBlbmRPZkxpbmUgLSAoaGVhZGVy
TGluZVBvcyArIG1hdGNoTGVuZ3RoKSkuc3RyaXBXaGl0ZVNwYWNlKCkpOwogfQogCi1WYWx1ZSBY
TUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzKCkgY29uc3QKK1ZhbHVlSW1wICpYTUxIdHRwUmVxdWVz
dDo6Z2V0U3RhdHVzKCkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkp
IHsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00OTUsNyArNDk1LDcgQEAgVmFsdWUgWE1M
SHR0cFJlcXVlc3Q6OmdldFN0YXR1cygpIGNvbnN0CiAgIHJldHVybiBOdW1iZXIoY29kZSk7CiB9
CiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKK1ZhbHVlSW1w
ICpYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0CiB7CiAgIGlmIChyZXNwb25z
ZUhlYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNjUyLDE1
ICs2NTIsMTUgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoRE9NOgogICAg
IFFQdHJEaWN0SXRlcmF0b3I8WE1MSHR0cFJlcXVlc3Q+KCpyZXF1ZXN0cykuY3VycmVudCgpLT5h
Ym9ydCgpOwogfQogCi1WYWx1ZSBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpY
TUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5p
bmhlcml0cygmWE1MSHR0cFJlcXVlc3Q6OmluZm8pKSB7Ci0gICAgT2JqZWN0IGVyciA9IEVycm9y
OjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZYTUxI
dHRwUmVxdWVzdDo6aW5mbykpIHsKKyAgICBPYmplY3RJbXAgKmVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOwogICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOwogICAgIHJldHVy
biBlcnI7CiAgIH0KIAotICBYTUxIdHRwUmVxdWVzdCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PFhN
TEh0dHBSZXF1ZXN0ICo+KHRoaXNPYmouaW1wKCkpOworICBYTUxIdHRwUmVxdWVzdCAqcmVxdWVz
dCA9IHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0ICo+KHRoaXNPYmopOwogCiAgIHN3aXRjaCAo
aWQpIHsKICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6QWJvcnQ6IHsKQEAgLTY3OSw3ICs2NzksNyBA
QCBWYWx1ZSBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbChFeGVjCiAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlcXVlc3QtPmdldFJlc3BvbnNlSGVh
ZGVyKGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKKyAgICByZXR1cm4gcmVxdWVz
dC0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsK
ICAgfQogICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPcGVuOgogICAgIHsKQEAgLTY4NywyMCArNjg3
LDIwIEBAIFZhbHVlIFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWMKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiAgICAgICB9CiAgICAgCi0gICAgICBRU3RyaW5nIG1ldGhvZCA9IGFyZ3Nb
MF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpOwotICAgICAgS1VSTCB1cmwgPSBLVVJMKFdpbmRv
dzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPnBhcnQoKS0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVS
TChhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSkpOworICAgICAgUVN0cmluZyBtZXRo
b2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICBLVVJMIHVybCA9
IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+cGFydCgpLT54bWxEb2NJbXBsKCkt
PmNvbXBsZXRlVVJMKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSkpOwogCiAgICAg
ICBib29sIGFzeW5jID0gdHJ1ZTsKICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSAzKSB7Ci0JYXN5
bmMgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwlhc3luYyA9IGFyZ3NbMl0tPnRvQm9vbGVh
bihleGVjKTsKICAgICAgIH0KICAgICAKICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA0KSB7Ci0J
dXJsLnNldFVzZXIoYXJnc1szXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworCXVybC5zZXRV
c2VyKGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CiAgICAgICB9CiAgICAgICAK
ICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0JdXJsLnNldFBhc3MoYXJnc1s0XS50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCkpOworCXVybC5zZXRQYXNzKGFyZ3NbNF0tPnRvU3RyaW5nKGV4
ZWMpLnFzdHJpbmcoKSk7CiAgICAgICB9CiAKICAgICAgIHJlcXVlc3QtPm9wZW4obWV0aG9kLCB1
cmwsIGFzeW5jKTsKQEAgLTcyMCwxNCArNzIwLDE0IEBAIFZhbHVlIFhNTEh0dHBSZXF1ZXN0UHJv
dG9GdW5jOjpjYWxsKEV4ZWMKICAgICAgIFFTdHJpbmcgYm9keTsKIAogICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpID49IDEpIHsKLQlpZiAoYXJnc1swXS50b09iamVjdChleGVjKS5pbmhlcml0cygmRE9N
RG9jdW1lbnQ6OmluZm8pKSB7Ci0JICBEb2N1bWVudEltcGwgKmRvYyA9IHN0YXRpY19jYXN0PERv
Y3VtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxET01Eb2N1bWVudCAqPihhcmdzWzBdLnRvT2JqZWN0
KGV4ZWMpLmltcCgpKS0+aW1wbCgpKTsKKwlpZiAoYXJnc1swXS0+dG9PYmplY3QoZXhlYyktPmlu
aGVyaXRzKCZET01Eb2N1bWVudDo6aW5mbykpIHsKKwkgIERvY3VtZW50SW1wbCAqZG9jID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTURvY3VtZW50ICo+KGFyZ3Nb
MF0tPnRvT2JqZWN0KGV4ZWMpKS0+aW1wbCgpKTsKICAgICAgICAgICBib2R5ID0gZG9jLT50b1N0
cmluZygpLnN0cmluZygpOwogICAgICAgICAgIC8vIEZJWE1FOiBhbHNvIG5lZWQgdG8gc2V0IGNv
bnRlbnQgdHlwZSwgaW5jbHVkaW5nIGVuY29kaW5nIQogCX0gZWxzZSB7CiAJICAvLyBjb252ZXJ0
aW5nIGNlcnRhaW4gdmFsdWVzIChsaWtlIG51bGwpIHRvIG9iamVjdCBjYW4gc2V0IGFuIGV4Y2Vw
dGlvbgogCSAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLQkgIGJvZHkgPSBhcmdzWzBdLnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKTsKKwkgIGJvZHkgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5x
c3RyaW5nKCk7CiAJfQogICAgICAgfQogCkBAIC03NDAsNyArNzQwLDcgQEAgVmFsdWUgWE1MSHR0
cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwogICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
ICAgIH0KICAgICAKLSAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0udG9TdHJp
bmcoZXhlYykucXN0cmluZygpLCBhcmdzWzFdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Cisg
ICAgcmVxdWVzdC0+c2V0UmVxdWVzdEhlYWRlcihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3Ry
aW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CiAgICAgCiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogICB9CkBAIC03NDgsNyArNzQ4LDcgQEAgVmFsdWUgWE1MSHR0cFJl
cXVlc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwogICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7CiAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIHJlcXVlc3QtPk1JTUVUeXBlT3Zl
cnJpZGUgPSBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICByZXF1ZXN0LT5N
SU1FVHlwZU92ZXJyaWRlID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKICAgfQogICB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEv
eG1saHR0cHJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlm
ZiAtcCAtdSAtcjEuMTcgV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgKLS0tIFdl
YkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCTcgQXVnIDIwMDUgMDY6MTc6NDYgLTAw
MDAJMS4xNworKysgV2ViQ29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJOCBBdWcgMjAw
NSAwMTowMToyOCAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVu
dEltcGwgKmQpOwogICAgIH5YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKCk7CiAgICAgdmly
dHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVj
dCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0
dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJn
cyk7CiAgIHByaXZhdGU6CiAgICAga2h0bWw6OlNoYXJlZFB0cjxET006OkRvY3VtZW50SW1wbD4g
ZG9jOwogICB9OwpAQCAtNjYsOSArNjYsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBYTUxIdHRw
UmVxdWVzdChFeGVjU3RhdGUgKiwgRE9NOjpEb2N1bWVudEltcGwgKmQpOwogICAgIH5YTUxIdHRw
UmVxdWVzdCgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
ICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGludCAvKmF0dHIqLyk7CisgICAgVmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlSW1wICp2YWx1ZSwg
aW50IGF0dHIgPSBOb25lKTsKKyAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50IC8qYXR0ciovKTsKICAgICB2aXJ0
dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIApAQCAtODQsOCArODQsOCBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM7CiAgICAgZnJpZW5k
IGNsYXNzIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDsKIAotICAgIFZhbHVlIGdldFN0YXR1c1RleHQo
KSBjb25zdDsKLSAgICBWYWx1ZSBnZXRTdGF0dXMoKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0
U3RhdHVzVGV4dCgpIGNvbnN0OworICAgIFZhbHVlSW1wICpnZXRTdGF0dXMoKSBjb25zdDsKICAg
ICBib29sIHVybE1hdGNoZXNEb2N1bWVudERvbWFpbihjb25zdCBLVVJMJikgY29uc3Q7CiAKICAg
ICBYTUxIdHRwUmVxdWVzdFFPYmplY3QgKnFPYmplY3Q7CkBAIC0xMDYsOCArMTA2LDggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBzZW5kKGNvbnN0IFFTdHJpbmcmIF9ib2R5KTsKICAgICB2
b2lkIGFib3J0KCk7CiAgICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5h
bWUsIGNvbnN0IFFTdHJpbmcgJnZhbHVlKTsKLSAgICBWYWx1ZSBnZXRBbGxSZXNwb25zZUhlYWRl
cnMoKSBjb25zdDsKLSAgICBWYWx1ZSBnZXRSZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBu
YW1lKSBjb25zdDsKKyAgICBWYWx1ZUltcCAqZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgY29uc3Q7
CisgICAgVmFsdWVJbXAgKmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNv
bnN0OwogCiAgICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRl
KTsKIApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1sc2VyaWFsaXplci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IFdlYkNvcmUva2h0
bWwvZWNtYS94bWxzZXJpYWxpemVyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlh
bGl6ZXIuY3BwCTE5IEp1bCAyMDA1IDE5OjUyOjQ5IC0wMDAwCTEuNAorKysgV2ViQ29yZS9raHRt
bC9lY21hL3htbHNlcmlhbGl6ZXIuY3BwCTggQXVnIDIwMDUgMDE6MDE6MjggLTAwMDAKQEAgLTUz
LDkgKzUzLDkgQEAgYm9vbCBYTUxTZXJpYWxpemVyQ29uc3RydWN0b3JJbXA6OmltcGxlbQogICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotT2JqZWN0IFhNTFNlcmlhbGl6ZXJDb25zdHJ1Y3RvckltcDo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQorT2JqZWN0SW1wICpYTUxTZXJp
YWxpemVyQ29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExp
c3QgJikKIHsKLSAgcmV0dXJuIE9iamVjdChuZXcgWE1MU2VyaWFsaXplcihleGVjKSk7CisgIHJl
dHVybiBuZXcgWE1MU2VyaWFsaXplcihleGVjKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIFhNTFNl
cmlhbGl6ZXI6OmluZm8gPSB7ICJYTUxTZXJpYWxpemVyIiwgMCwgJlhNTFNlcmlhbGl6ZXJUYWJs
ZSwgMCB9OwpAQCAtNzAsMTAgKzcwLDEwIEBAIFhNTFNlcmlhbGl6ZXI6OlhNTFNlcmlhbGl6ZXIo
RXhlY1N0YXRlICoKICAgc2V0UHJvdG90eXBlKFhNTFNlcmlhbGl6ZXJQcm90bzo6c2VsZihleGVj
KSk7CiB9CiAKLVZhbHVlIFhNTFNlcmlhbGl6ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqWE1MU2Vy
aWFsaXplclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0
cygmWE1MU2VyaWFsaXplcjo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0
ZShleGVjLFR5cGVFcnJvcik7CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlhNTFNlcmlhbGl6
ZXI6OmluZm8pKSB7CisgICAgT2JqZWN0SW1wICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlw
ZUVycm9yKTsKICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKICAgICByZXR1cm4gZXJyOwog
ICB9CkBAIC04NSwxMSArODUsMTEgQEAgVmFsdWUgWE1MU2VyaWFsaXplclByb3RvRnVuYzo6Y2Fs
bChFeGVjUwogCXJldHVybiBVbmRlZmluZWQoKTsKICAgICAgIH0KIAotICAgICAgaWYgKCFhcmdz
WzBdLnRvT2JqZWN0KGV4ZWMpLmluaGVyaXRzKCZET01Eb2N1bWVudDo6aW5mbykpIHsKKyAgICAg
IGlmICghYXJnc1swXS0+dG9PYmplY3QoZXhlYyktPmluaGVyaXRzKCZET01Eb2N1bWVudDo6aW5m
bykpIHsKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICB9CiAKLSAgICAgIERvY3VtZW50SW1w
bCAqZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PERPTURvY3Vt
ZW50ICo+KGFyZ3NbMF0udG9PYmplY3QoZXhlYykuaW1wKCkpLT5pbXBsKCkpOworICAgICAgRG9j
dW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8
RE9NRG9jdW1lbnQgKj4oYXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwogICAgICAg
cmV0dXJuIGdldFN0cmluZ09yTnVsbChkb2MtPnRvU3RyaW5nKCkuc3RyaW5nKCkpOwogICAgIH0K
ICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgV2ViQ29yZS9raHRtbC9l
Y21hL3htbHNlcmlhbGl6ZXIuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL3htbHNlcmlhbGl6ZXIu
aAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjIKKysrIFdlYkNvcmUva2h0bWwvZWNtYS94
bWxzZXJpYWxpemVyLmgJOCBBdWcgMjAwNSAwMTowMToyOCAtMDAwMApAQCAtMzEsNyArMzEsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIFhNTFNlcmlhbGl6ZXJDb25zdHJ1Y3Rv
ckltcChFeGVjU3RhdGUgKik7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3Qo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIE9iamVjdCBjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICZhcmdzKTsKKyAgICB2aXJ0dWFsIE9iamVjdEltcCAqY29uc3RydWN0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7CiAgIH07CiAKICAgY2xhc3MgWE1MU2VyaWFs
aXplciA6IHB1YmxpYyBET01PYmplY3QgewpJbmRleDogV2ViQ29yZS9rd3EvRE9NVXRpbGl0eS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NVXRpbGl0eS5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgV2ViQ29yZS9rd3Ev
RE9NVXRpbGl0eS5tbQotLS0gV2ViQ29yZS9rd3EvRE9NVXRpbGl0eS5tbQkxMiBNYXkgMjAwNSAx
NzoxMToyMiAtMDAwMAkxLjQKKysrIFdlYkNvcmUva3dxL0RPTVV0aWxpdHkubW0JOCBBdWcgMjAw
NSAwMTowMToyOSAtMDAwMApAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBpbmxpbmUgaWQgY3Jl
YXRlT2JqQ0RPTU5vZGUoRE9NOjoKIAogbmFtZXNwYWNlIEtKUyB7CiAKLXZvaWQgKlNjcmlwdElu
dGVycHJldGVyOjpjcmVhdGVPYmpjSW5zdGFuY2VGb3JWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IE9iamVjdCAmdmFsdWUsIGNvbnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpvcmlnaW4sIGNv
bnN0IEJpbmRpbmdzOjpSb290T2JqZWN0ICpjdXJyZW50KQordm9pZCAqU2NyaXB0SW50ZXJwcmV0
ZXI6OmNyZWF0ZU9iamNJbnN0YW5jZUZvclZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp2YWx1ZSwgY29uc3QgQmluZGluZ3M6OlJvb3RPYmplY3QgKm9yaWdpbiwgY29uc3QgQmluZGlu
Z3M6OlJvb3RPYmplY3QgKmN1cnJlbnQpCiB7Ci0gICAgaWYgKHZhbHVlLmluaGVyaXRzKCZET01O
b2RlOjppbmZvKSkgewotCURPTU5vZGUgKmltcCA9IHN0YXRpY19jYXN0PERPTU5vZGUgKj4odmFs
dWUuaW1wKCkpOworICAgIGlmICh2YWx1ZS0+aW5oZXJpdHMoJkRPTU5vZGU6OmluZm8pKSB7CisJ
RE9NTm9kZSAqaW1wID0gc3RhdGljX2Nhc3Q8RE9NTm9kZSAqPih2YWx1ZSk7CiAJaWQgbmV3T2Jq
Y05vZGUgPSBjcmVhdGVPYmpDRE9NTm9kZShpbXAtPmltcGwoKSk7CiAJW25ld09iamNOb2RlIF9p
bml0aWFsaXplV2l0aE9iamVjdEltcDppbXAgb3JpZ2luRXhlY3V0aW9uQ29udGV4dDpvcmlnaW4g
ZXhlY3V0aW9uQ29udGV4dDpjdXJyZW50XTsJCiAJcmV0dXJuIG5ld09iamNOb2RlOwpJbmRleDog
V2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjU3
CmRpZmYgLXAgLXUgLXIxLjY1NyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KLS0tIFdlYkNv
cmUva3dxL0tXUUtIVE1MUGFydC5tbQkxIEF1ZyAyMDA1IDIxOjIzOjQyIC0wMDAwCTEuNjU3Cisr
KyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JOCBBdWcgMjAwNSAwMTowMTozMyAtMDAwMApA
QCAtMTQxOCw3ICsxNDE4LDcgQEAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCAqS1dRS0hUTUxQ
YXJ0OgogewogICAgIGlmICghX2JpbmRpbmdSb290KSB7CiAgICAgICAgIF9iaW5kaW5nUm9vdCA9
IG5ldyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KDApOyAgICAvLyBUaGUgcm9vdCBnZXRzIGRl
bGV0ZWQgYnkgSmF2YVNjcmlwdENvcmUuCi0gICAgICAgIEtKUzo6T2JqZWN0SW1wICp3aW4gPSBz
dGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3co
dGhpcykpOworICAgICAgICBLSlM6Ok9iamVjdEltcCAqd2luID0gS0pTOjpXaW5kb3c6OnJldHJp
ZXZlV2luZG93KHRoaXMpOwogICAgICAgICBfYmluZGluZ1Jvb3QtPnNldFJvb3RPYmplY3RJbXAg
KHdpbik7CiAgICAgICAgIF9iaW5kaW5nUm9vdC0+c2V0SW50ZXJwcmV0ZXIgKEtKU1Byb3h5Ojpw
cm94eSh0aGlzKS0+aW50ZXJwcmV0ZXIoKSk7CiAgICAgICAgIGFkZFBsdWdpblJvb3RPYmplY3Qg
KF9iaW5kaW5nUm9vdCk7CkBAIC0xNDI5LDcgKzE0MjksNyBAQCBLSlM6OkJpbmRpbmdzOjpSb290
T2JqZWN0ICpLV1FLSFRNTFBhcnQ6CiBXZWJTY3JpcHRPYmplY3QgKktXUUtIVE1MUGFydDo6d2lu
ZG93U2NyaXB0T2JqZWN0KCkKIHsKICAgICBpZiAoIV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAg
ICAgICAgS0pTOjpPYmplY3RJbXAgKndpbiA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+
KEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyh0aGlzKSk7CisgICAgICAgIEtKUzo6T2JqZWN0
SW1wICp3aW4gPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3codGhpcyk7CiAgICAgICAgIF93
aW5kb3dTY3JpcHRPYmplY3QgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW1tXZWJTY3JpcHRPYmplY3Qg
YWxsb2NdIF9pbml0V2l0aE9iamVjdEltcDp3aW4gb3JpZ2luRXhlY3V0aW9uQ29udGV4dDpiaW5k
aW5nUm9vdE9iamVjdCgpIGV4ZWN1dGlvbkNvbnRleHQ6YmluZGluZ1Jvb3RPYmplY3QoKV0pOwog
ICAgIH0KIApAQCAtMTQzOSw3ICsxNDM5LDcgQEAgV2ViU2NyaXB0T2JqZWN0ICpLV1FLSFRNTFBh
cnQ6OndpbmRvd1NjcgogTlBPYmplY3QgKktXUUtIVE1MUGFydDo6d2luZG93U2NyaXB0TlBPYmpl
Y3QoKQogewogICAgIGlmICghX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7Ci0gICAgICAgIEtKUzo6
T2JqZWN0SW1wICp3aW4gPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihLSlM6OldpbmRv
dzo6cmV0cmlldmVXaW5kb3codGhpcykpOworICAgICAgICBLSlM6Ok9iamVjdEltcCAqd2luID0g
S0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpOwogICAgICAgICBfd2luZG93U2NyaXB0
TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCAoMCwgd2luLCBiaW5kaW5nUm9vdE9i
amVjdCgpLCBiaW5kaW5nUm9vdE9iamVjdCgpKTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUva3dx
L1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDA3CmRpZmYgLXAg
LXUgLXIxLjQwNyBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBXZWJDb3JlL2t3cS9X
ZWJDb3JlQnJpZGdlLm1tCTMwIEp1bCAyMDA1IDAyOjMzOjEwIC0wMDAwCTEuNDA3CisrKyBXZWJD
b3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCTggQXVnIDIwMDUgMDE6MDE6MzQgLTAwMDAKQEAgLTIy
NjgsNyArMjI2OCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYK
IHsKICAgICBLV1FLSFRNTFBhcnQgKnBhcnQgPSBbc2VsZiBwYXJ0XTsKICAgICBSb290T2JqZWN0
ICpyb290ID0gbmV3IFJvb3RPYmplY3QoYVZpZXcpOyAgICAvLyBUaGUgcm9vdCBnZXRzIGRlbGV0
ZWQgYnkgSmF2YVNjcmlwdENvcmUuCi0gICAgcm9vdC0+c2V0Um9vdE9iamVjdEltcChzdGF0aWNf
Y2FzdDxPYmplY3RJbXAgKj4oV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KSkpOworICAgIHJv
b3QtPnNldFJvb3RPYmplY3RJbXAoV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KSk7CiAgICAg
cm9vdC0+c2V0SW50ZXJwcmV0ZXIoS0pTUHJveHk6OnByb3h5KHBhcnQpLT5pbnRlcnByZXRlcigp
KTsKICAgICBwYXJ0LT5hZGRQbHVnaW5Sb290T2JqZWN0KHJvb3QpOwogICAgIHJldHVybiByb290
OwpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIFdlYkNvcmUva3dxL1dl
YkNvcmVTY3JpcHREZWJ1Z2dlci5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZVNjcmlwdERlYnVn
Z2VyLm1tCTMwIEp1bCAyMDA1IDAzOjAwOjM0IC0wMDAwCTEuMQorKysgV2ViQ29yZS9rd3EvV2Vi
Q29yZVNjcmlwdERlYnVnZ2VyLm1tCTggQXVnIDIwMDUgMDE6MDE6MzUgLTAwMDAKQEAgLTQ4LDcg
KzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogLSAoV2ViQ29yZVNjcmlwdENhbGxGcmFt
ZSAqKV9pbml0V2l0aEdsb2JhbE9iamVjdDooV2ViU2NyaXB0T2JqZWN0ICopZ2xvYmFsT2JqIGNh
bGxlcjooV2ViQ29yZVNjcmlwdENhbGxGcmFtZSAqKWNhbGxlciBzdGF0ZTooRXhlY1N0YXRlICop
c3RhdGU7CiAtICh2b2lkKV9zZXRXcmFwcGVyOihpZCl3cmFwcGVyOwotLSAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihWYWx1ZSl2YWx1ZTsKKy0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNW
YWx1ZTooVmFsdWVJbXAgKil2YWx1ZTsKIAogQGVuZAogCkBAIC05MSw3ICs5MSw3IEBAIGNsYXNz
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgdmlydHVhbCBib29sIGNhbGxFdmVudChFeGVjU3RhdGUg
KnN0YXRlLCBpbnQgc2lkLCBpbnQgbGluZW5vLCBPYmplY3QgJmZ1bmMsIGNvbnN0IExpc3QgJmFy
Z3MpIHsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbEV2ZW50KEV4ZWNTdGF0ZSAqc3RhdGUsIGludCBz
aWQsIGludCBsaW5lbm8sIE9iamVjdEltcCAqZnVuYywgY29uc3QgTGlzdCAmYXJncykgewogICAg
ICAgICBpZiAoIV9uZXN0ZWQpIHsKICAgICAgICAgICAgIF9uZXN0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgX2N1cnJlbnQgPSBbX29iamMgX2VudGVyRnJhbWU6c3RhdGVdOwpAQCAtMTA4LDcgKzEw
OCw3IEBAIGNsYXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgdmlydHVhbCBib29sIHJldHVybkV2
ZW50KEV4ZWNTdGF0ZSAqc3RhdGUsIGludCBzaWQsIGludCBsaW5lbm8sIE9iamVjdCAmZnVuYykg
eworICAgIHZpcnR1YWwgYm9vbCByZXR1cm5FdmVudChFeGVjU3RhdGUgKnN0YXRlLCBpbnQgc2lk
LCBpbnQgbGluZW5vLCBPYmplY3RJbXAgKmZ1bmMpIHsKICAgICAgICAgaWYgKCFfbmVzdGVkKSB7
CiAgICAgICAgICAgICBfbmVzdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIFtbX29iamMgZGVsZWdh
dGVdIGxlYXZpbmdGcmFtZTpfY3VycmVudCBzb3VyY2VJZDpzaWQgbGluZTpsaW5lbm9dOwpAQCAt
MTQ4LDYgKzE0OCwxMiBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMg
CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCistICh2b2lkKWZpbmFsaXplCit7CisgICAgZGVs
ZXRlIF9kZWJ1Z2dlcjsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCiAtIChpZDxXZWJTY3Jp
cHREZWJ1Z2dlcj4pZGVsZWdhdGUKIHsKICAgICByZXR1cm4gX2RlbGVnYXRlOwpAQCAtMjAzLDEz
ICsyMDksMTMgQEAgY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2VySW1wIDogcHVibGljIAogICAg
IF93cmFwcGVyID0gd3JhcHBlcjsgICAgIC8vIChhbHJlYWR5IHJldGFpbmVkKQogfQogCi0tIChp
ZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KFZhbHVlKXZhbHVlCistIChpZClfY29udmVydFZh
bHVlVG9PYmpjVmFsdWU6KFZhbHVlSW1wICopdmFsdWUKIHsKLSAgICBpZiAodmFsdWUuaXNOdWxs
KCkpIHsKKyAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0g
ICAgaWYgKHZhbHVlLnR5cGUoKSA9PSBPYmplY3RUeXBlICYmIHZhbHVlLmltcCgpID09IFtfZ2xv
YmFsT2JqIF9pbXBdKSB7CisgICAgaWYgKHZhbHVlID09IFtfZ2xvYmFsT2JqIF9pbXBdKSB7CiAg
ICAgICAgIHJldHVybiBfZ2xvYmFsT2JqOwogICAgIH0KIApAQCAtMjU5LDggKzI2NSw3IEBAIGNs
YXNzIFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKICAgICBOU011dGFibGVBcnJh
eSAqc2NvcGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CiAKICAgICB3aGlsZSAo
IWNoYWluLmlzRW1wdHkoKSkgewotICAgICAgICBPYmplY3Qgc2NvcGUoY2hhaW4udG9wKCkpOwot
ICAgICAgICBbc2NvcGVzIGFkZE9iamVjdDpbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6
c2NvcGVdXTsKKyAgICAgICAgW3Njb3BlcyBhZGRPYmplY3Q6W3NlbGYgX2NvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlOmNoYWluLnRvcCgpXV07CiAgICAgICAgIGNoYWluLnBvcCgpOwogICAgIH0KIApA
QCAtMzA5LDE0ICszMTQsMTQgQEAgY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVnZ2VySW1wIDogcHVi
bGljIAogCiAgICAgRXhlY1N0YXRlICAgKnN0YXRlICAgPSBfc3RhdGU7CiAgICAgSW50ZXJwcmV0
ZXIgKmludGVycCAgPSBzdGF0ZS0+aW50ZXJwcmV0ZXIoKTsKLSAgICBPYmplY3QgICAgICAgZ2xv
Yk9iaiA9IGludGVycC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgT2JqZWN0SW1wICAgKmdsb2JPYmog
PSBpbnRlcnAtPmdsb2JhbE9iamVjdCgpOwogCiAgICAgLy8gZmluZCAiZXZhbCIKLSAgICBPYmpl
Y3QgZXZhbDsKKyAgICBPYmplY3RJbXAgKmV2YWwgPSBOVUxMOwogICAgIGlmIChzdGF0ZS0+Y29u
dGV4dCgpLmltcCgpKSB7ICAvLyAiZXZhbCIgd29uJ3Qgd29yayB3aXRob3V0IGNvbnRleHQgKGku
ZS4gYXQgZ2xvYmFsIHNjb3BlKQotICAgICAgICBPYmplY3QgbyA9IE9iamVjdDo6ZHluYW1pY0Nh
c3QoZ2xvYk9iai5nZXQoc3RhdGUsICJldmFsIikpOwotICAgICAgICBpZiAoIW8uaXNOdWxsKCkg
JiYgby5pbXBsZW1lbnRzQ2FsbCgpKSB7Ci0gICAgICAgICAgICBldmFsID0gbzsKKyAgICAgICAg
VmFsdWVJbXAgKnYgPSBnbG9iT2JqLT5nZXQoc3RhdGUsICJldmFsIik7CisgICAgICAgIGlmICh2
LT5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2KS0+aW1wbGVtZW50c0Nh
bGwoKSkgeworICAgICAgICAgICAgZXZhbCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPih2KTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIG5vICJldmFsIiAtIGZh
bGxiYWNrIG9wZXJhdGVzIG9uIGdsb2JhbCBleGVjIHN0YXRlCkBAIC0zMjQsMTcgKzMyOSwxNiBA
QCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBWYWx1ZSBzYXZlZEV4Y2VwdGlvbiA9IHN0YXRlLT5leGNlcHRpb24oKTsKKyAg
ICBWYWx1ZUltcCAqc2F2ZWRFeGNlcHRpb24gPSBzdGF0ZS0+ZXhjZXB0aW9uKCk7CiAgICAgc3Rh
dGUtPmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAvLyBldmFsdWF0ZQotICAgIFZhbHVlIHJlc3Vs
dDsKLSAgICBpZiAoIWV2YWwuaXNOdWxsKCkpIHsKKyAgICBWYWx1ZUltcCAqcmVzdWx0OworICAg
IGlmIChldmFsKSB7CiAgICAgICAgIEludGVycHJldGVyOjpsb2NrKCk7Ci0gICAgICAgIE9iamVj
dCBkdW1teTsKICAgICAgICAgTGlzdCBhcmdzOwogICAgICAgICBhcmdzLmFwcGVuZChTdHJpbmco
Y29kZSkpOwotICAgICAgICByZXN1bHQgPSBldmFsLmNhbGwoc3RhdGUsIGR1bW15LCBhcmdzKTsK
KyAgICAgICAgcmVzdWx0ID0gZXZhbC0+Y2FsbChzdGF0ZSwgTlVMTCwgYXJncyk7CiAgICAgICAg
IEludGVycHJldGVyOjp1bmxvY2soKTsKICAgICB9CiAgICAgZWxzZSB7Cg==
</data>
<flag name="review"
          id="329"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>